<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/821857f6403634865d3e0ce11cb2fe9074d9ecc6">https://github.com/macports/macports-ports/commit/821857f6403634865d3e0ce11cb2fe9074d9ecc6</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 821857f6403634865d3e0ce11cb2fe9074d9ecc6
</span>Author: Kirill A. Korinsky <kirill@korins.ky>
AuthorDate: Wed Nov 30 03:42:34 2022 +0100

<span style='display:block; white-space:pre;color:#404040;'>    parmetis: update to 20220110
</span>---
 math/parmetis/Portfile                         |   56 +-
 math/parmetis/files/add_math_flag.patch        |   23 -
 math/parmetis/files/break_code_copying.patch   |  106 -
 math/parmetis/files/cmake_system_include.patch |   18 -
 math/parmetis/files/default_path.patch         |   24 -
 math/parmetis/files/headers.patch              | 3488 ------------------------
 math/parmetis/files/less_than_equal.patch      |   37 -
 math/parmetis/files/patch-shared-metis.diff    |   17 +
 math/parmetis/files/sharedprefix.patch         |   23 -
 math/parmetis/files/static.patch               |   23 -
 math/parmetis/files/tls.patch                  |   34 -
 11 files changed, 32 insertions(+), 3817 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/Portfile b/math/parmetis/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index adaa3fbc56b..485c7b367f2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/math/parmetis/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,63 +1,37 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
 
 PortSystem          1.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup           cmake 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           cmake 1.1
</span> PortGroup           mpi 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           active_variants 1.1
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        KarypisLab ParMETIS 44fadbf58c71a74b39abb110a7691355d2a760ca
</span> name                parmetis
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version             4.0.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             20220110
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span> categories          math
 platforms           darwin
<span style='display:block; white-space:pre;background:#ffe0e0;'>-maintainers         nomaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         {@catap korins.ky:kirill} openmaintainer
</span> # Included license is for "evaluation purposes" only (whatever that means) if
 # you're not a non-profit or US government agency.
 license             Restrictive
 
 description         ParMETIS - parallel graph partitioning
<span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    {*}${description}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-long_description    ParMETIS - Parallel Graph Partitioning and Fill-reducing Matrix Ordering
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  c8d35f96a20c9676773d2cadf5c011f6e36637ac \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  1b11e6d3ef2dd614ff04ccf1479e75012dd92f3e5f7493a893ee9154212acff7 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    5312122
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-homepage            http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-master_sites        http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           rmd160  1e81baf2bafe79b7abed656bff2fa3745966a196 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  f2d9a231b7cf97f1fee6e8c9663113ebf6c240d407d3c118c55b3633d6be6e5f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          patch-shared-metis.diff
</span> 
 compilers.choose    cc cxx
 mpi.setup           require
 
 depends_lib         port:metis
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patch.pre_args      -p1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append   sharedprefix.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    break_code_copying.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    headers.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    add_math_flag.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    tls.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    less_than_equal.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    default_path.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    static.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    cmake_system_include.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> configure.args-append \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DSHARED=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[variant_isset debug]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # just to be safe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.cflags-delete    -O1 -O2 -O3 -Os -DNDEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.cxxflags-delete  -O1 -O2 -O3 -Os -DNDEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.optflags-delete  -O1 -O2 -O3 -Os -DNDEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.optflags-append  -O0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.cflags-append    -g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.cxxflags-append  -g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-post-extract {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    delete ${worksrcpath}/metis/include/metis.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-livecheck.type      regex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-livecheck.url       http://glaros.dtc.umn.edu/gkhome/metis/parmetis/download
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-livecheck.regex     /${name}-(\[0-9.\]+)${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DGKLIB_PATH=${prefix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMETIS_PATH=${prefix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DSHARED=ON
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/add_math_flag.patch b/math/parmetis/files/add_math_flag.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 85fe8815a03..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/add_math_flag.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,23 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332262784 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Tue Mar 20 11:59:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID 9328e5d72eb288f306a95050929426ad9a6724d2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  5e0bb4f071fc7edcdd26a2326e61301833f12177
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cmake: add math library -lm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 5e0bb4f071fc -r 9328e5d72eb2 programs/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/programs/CMakeLists.txt      Tue Mar 20 11:59:43 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/programs/CMakeLists.txt      Tue Mar 20 11:59:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5,10 +5,10 @@ add_executable(mtest mtest.c io.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_executable(parmetis_prog parmetis.c io.c adaptgraph.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set_target_properties(parmetis_prog PROPERTIES OUTPUT_NAME parmetis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_executable(pometis pometis.c io.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Link to libparmetis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach(prog ptest mtest parmetis_prog pometis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  target_link_libraries(${prog} parmetis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  target_link_libraries(${prog} parmetis m)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endforeach(prog)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- install(TARGETS ptest mtest parmetis_prog pometis
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RUNTIME DESTINATION bin)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/break_code_copying.patch b/math/parmetis/files/break_code_copying.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index de03bd4f2c7..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/break_code_copying.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,106 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332116384 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID b51a142f9789feb5bda1d1546b8ec8525f356f74
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  91baffc7e83cf901cb335d75fdd8357d58548098
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-metis: rip out code copying of metis and use linker / header flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 91baffc7e83c -r b51a142f9789 CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/CMakeLists.txt       Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/CMakeLists.txt       Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2,14 +2,10 @@ cmake_minimum_required(VERSION 2.8)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- project(ParMETIS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set(GKLIB_PATH METIS/GKlib CACHE PATH "path to GKlib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set(METIS_PATH METIS CACHE PATH "path to METIS")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# Symlink ./metis to wherever metis is. This allows files to be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# included from metis/libmetis/.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${METIS_PATH} metis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Search for MPI.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # GK commented this out as it seems to be creating problems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include(FindMPI)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # if(NOT MPI_FOUND)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #   message(FATAL_ERROR "mpi is not found")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -22,21 +18,24 @@ if(SHARED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set(ParMETIS_LIBRARY_TYPE STATIC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endif()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--include(${GKLIB_PATH}/GKlibSystem.cmake)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # List of paths that the compiler will search for header files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # i.e., the -I equivalent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(${MPI_INCLUDE_PATH})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(${GKLIB_PATH})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(${METIS_PATH}/include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+include_directories(${CMAKE_INSTALL_PREFIX}/include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# List of paths that the compiler will search for library files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# i.e., the -L equivalent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+link_directories(${METIS_PATH}/lib)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+link_directories(${CMAKE_INSTALL_PREFIX}/lib)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # List of directories that cmake will look for CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--add_subdirectory(${METIS_PATH}/libmetis ${CMAKE_BINARY_DIR}/libmetis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_subdirectory(include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_subdirectory(libparmetis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_subdirectory(programs)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # This is for testing during development and is not being distributed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 91baffc7e83c -r b51a142f9789 Makefile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/Makefile     Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/Makefile     Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -22,11 +22,11 @@ systype = $(shell uname -s)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BUILDDIR = build/$(systype)-$(cputype)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Process configuration options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- CONFIG_FLAGS = -DCMAKE_VERBOSE_MAKEFILE=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ifeq ($(gklib_path), not-set)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    gklib_path = metis/GKlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    gklib_path = headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ifeq ($(metis_path), not-set)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     metis_path = metis
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- CONFIG_FLAGS += -DGKLIB_PATH=$(abspath $(gklib_path)) -DMETIS_PATH=$(abspath $(metis_path))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 91baffc7e83c -r b51a142f9789 libparmetis/parmetislib.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/libparmetis/parmetislib.h    Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/libparmetis/parmetislib.h    Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -18,13 +18,13 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <GKlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <parmetis.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "../metis/libmetis/gklib_defs.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gklib_defs.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <mpi.h> 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <mpi.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <rename.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <defs.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <struct.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <macros.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 91baffc7e83c -r b51a142f9789 programs/parmetisbin.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/programs/parmetisbin.h       Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/programs/parmetisbin.h       Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -16,12 +16,12 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define DMALLOC                   1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <GKlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <parmetis.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gklib_defs.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "../metis/libmetis/gklib_defs.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../libparmetis/rename.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../libparmetis/defs.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../libparmetis/struct.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../libparmetis/macros.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../libparmetis/proto.h"
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/cmake_system_include.patch b/math/parmetis/files/cmake_system_include.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 84c71b97ac5..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/cmake_system_include.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,18 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r e2c25776392e CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/CMakeLists.txt       Mon Mar 26 13:48:59 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/CMakeLists.txt       Sun Jan 12 22:23:06 2014 -0600
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,12 +23,12 @@ endif()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # List of paths that the compiler will search for header files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # i.e., the -I equivalent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(${MPI_INCLUDE_PATH})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include_directories(${GKLIB_PATH})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--include_directories(${METIS_PATH}/include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--include_directories(${CMAKE_INSTALL_PREFIX}/include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+include_directories(SYSTEM ${METIS_PATH}/include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+include_directories(SYSTEM ${CMAKE_INSTALL_PREFIX}/include)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # List of paths that the compiler will search for library files.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # i.e., the -L equivalent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- link_directories(${METIS_PATH}/lib)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- link_directories(${CMAKE_INSTALL_PREFIX}/lib)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/default_path.patch b/math/parmetis/files/default_path.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 2e6f8f72dff..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/default_path.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,24 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332787692 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Mon Mar 26 13:48:12 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID f537eb145f63cab8a201227ea98ad20877641d8f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  18830790deb4dd8857f93427ba7794f81709665d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cmake: set defeault gklib and metis paths to the current source directory to comply with new cmake policy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 18830790deb4 -r f537eb145f63 CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/CMakeLists.txt       Tue Mar 20 11:59:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/CMakeLists.txt       Mon Mar 26 13:48:12 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,10 +1,10 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmake_minimum_required(VERSION 2.8)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- project(ParMETIS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--set(GKLIB_PATH METIS/GKlib CACHE PATH "path to GKlib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--set(METIS_PATH METIS CACHE PATH "path to METIS")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+set(GKLIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/metis/GKlib CACHE PATH "path to GKlib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+set(METIS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/metis CACHE PATH "path to METIS")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Search for MPI.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # GK commented this out as it seems to be creating problems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include(FindMPI)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # if(NOT MPI_FOUND)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/headers.patch b/math/parmetis/files/headers.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 7ba1d165887..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/headers.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,3488 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332262777 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID 26bf6bd351436e6d2c3cf8f89485dc72a926cf55
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  b51a142f9789feb5bda1d1546b8ec8525f356f74
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gklib: copy headers from gklib repo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/GKlib.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/GKlib.h      Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,83 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * GKlib.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * George's library of most frequently used routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * $Id$
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GKLIB_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GKLIB_H_ 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GKMSPACE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(_MSC_VER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define __MSC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__ICC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define __ICC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "gk_arch.h" /*!< This should be here, prior to the includes */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* Header file inclusion section
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+**************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <stddef.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <stdarg.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <ctype.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <math.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <float.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <signal.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <setjmp.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__WITHPCRE__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include <pcreposix.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #if defined(USE_GKREGEX)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    #include "gkregex.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    #include <regex.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #endif /* defined(USE_GKREGEX) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* defined(__WITHPCRE__) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__OPENMP__) 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <omp.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_struct.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_externs.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_defs.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_macros.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_getopt.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_mksort.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_mkblas.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_mkmemory.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_mkpqueue.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_mkrandom.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_mkutils.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gk_proto.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  /* GKlib.h */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_arch.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_arch.h    Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,71 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_arch.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains various architecture-specific declerations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_ARCH_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_ARCH_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* Architecture-specific differences in header files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+**************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef LINUX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(__USE_XOPEN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define __USE_XOPEN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(_XOPEN_SOURCE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _XOPEN_SOURCE 600
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(__USE_XOPEN2K)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define __USE_XOPEN2K
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef HAVE_EXECINFO_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <execinfo.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __MSC__ 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include "ms_stdint.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include "ms_inttypes.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include "ms_stat.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef SUNOS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include <stdint.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include <inttypes.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include <sys/resource.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  #include <sys/time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* Architecture-specific modifications
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+**************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef WIN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef ptrdiff_t ssize_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef SUNOS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PTRDIFF_MAX  INT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __MSC__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* MSC does not have rint() function */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define rint(x) ((int)((x)+0.5))  
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* MSC does not have INFINITY defined */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef INFINITY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INFINITY FLT_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_defs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_defs.h    Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,63 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_defs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains various constants definitions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_DEFS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_DEFS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define LTERM                   (void **) 0     /* List terminator for GKfree() */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* mopt_t types */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MOPT_MARK            1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MOPT_CORE            2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MOPT_HEAP            3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define HTABLE_EMPTY            -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define HTABLE_DELETED          -2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define HTABLE_FIRST             1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define HTABLE_NEXT              2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* pdb corruption bit switches */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define CRP_ALTLOCS    1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define CRP_MISSINGCA  2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define CRP_MISSINGBB  4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define CRP_MULTICHAIN 8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define CRP_MULTICA    16
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define CRP_MULTIBB    32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define MAXLINELEN 300000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* GKlib signals to standard signal mapping */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SIGMEM  SIGABRT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SIGERR  SIGTERM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* CSR-related defines */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_ROW      1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_COL      2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_MAXTF    1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_SQRT     2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_POW25    3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_POW65    4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_POW75    5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_POW85    6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_LOG      7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_IDF      8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_IDF2     9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_COS      1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_JAC      2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_MIN      3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_FMT_CLUTO        1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_FMT_CSR          2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_CSR_FMT_METIS        3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_externs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_externs.h Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,25 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_externs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains definitions of external variables created by GKlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_EXTERNS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_EXTERNS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* Extern variable definition. Hopefully, the __thread makes them thread-safe.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+**************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_ERROR_C_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* declared in error.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern __thread int gk_cur_jbufs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern __thread jmp_buf gk_jbufs[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern __thread jmp_buf gk_jbuf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_getopt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_getopt.h  Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,64 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_getopt.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains GNU's externs/structs/prototypes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_GETOPT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_GETOPT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Externals from getopt.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern char *gk_optarg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int gk_optind;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int gk_opterr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int gk_optopt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! \brief The structure that stores the information about the command-line options 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+This structure describes a single long option name for the sake of 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_getopt_long(). The argument <tt>long_options</tt> must be an array 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+of these structures, one for each long option. Terminate the array with 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+an element containing all zeros.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+struct gk_option {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char *name;       /*!< This field is the name of the option. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int has_arg;      /*!< This field says whether the option takes an argument. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         It is an integer, and there are three legitimate values: 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         no_argument, required_argument and optional_argument. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int *flag;        /*!< See the discussion on ::gk_option#val */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int val;          /*!< These fields control how to report or act on the option 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         when it occurs. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         If flag is a null pointer, then the val is a value which 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         identifies this option. Often these values are chosen 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         to uniquely identify particular long options.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         If flag is not a null pointer, it should be the address 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         of an int variable which is the flag for this option. 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         The value in val is the value to store in the flag to 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                         indicate that the option was seen. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Names for the values of the `has_arg' field of `struct gk_option'.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define no_argument               0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define required_argument 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define optional_argument 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Function prototypes */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int gk_getopt(int __argc, char **__argv, char *__shortopts);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int gk_getopt_long(int __argc, char **__argv, char *__shortopts,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              struct gk_option *__longopts, int *__longind);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int gk_getopt_long_only (int __argc, char **__argv,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              char *__shortopts, struct gk_option *__longopts, int *__longind);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_macros.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_macros.h  Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,153 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_macros.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains various macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MACROS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MACROS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Usefull commands 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_max(a, b) ((a) >= (b) ? (a) : (b))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_min(a, b) ((a) >= (b) ? (b) : (a))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_max3(a, b, c) ((a) >= (b) && (a) >= (c) ? (a) : ((b) >= (a) && (b) >= (c) ? (b) : (c)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_SWAP(a, b, tmp) do {(tmp) = (a); (a) = (b); (b) = (tmp);} while(0) 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INC_DEC(a, b, val) do {(a) += (val); (b) -= (val);} while(0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define sign(a, b) ((a >= 0 ? b : -b))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define ONEOVERRANDMAX (1.0/(RAND_MAX+1.0))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RandomInRange(u) ((int) (ONEOVERRANDMAX*(u)*rand()))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_abs(x) ((x) >= 0 ? (x) : -(x))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Timing macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_clearcputimer(tmr) (tmr = 0.0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_startcputimer(tmr) (tmr -= gk_CPUSeconds())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_stopcputimer(tmr)  (tmr += gk_CPUSeconds())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_getcputimer(tmr)   (tmr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_clearwctimer(tmr) (tmr = 0.0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_startwctimer(tmr) (tmr -= gk_WClockSeconds())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_stopwctimer(tmr)  (tmr += gk_WClockSeconds())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_getwctimer(tmr)   (tmr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * dbglvl handling macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define IFSET(a, flag, cmd) if ((a)&(flag)) (cmd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * gracefull library exit macro
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GKSETJMP() (setjmp(gk_return_to_entry))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define gk_sigcatch() (setjmp(gk_jbufs[gk_cur_jbufs]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Debuging memory leaks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef DMALLOC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define MALLOC_CHECK(ptr)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (malloc_verify((ptr)) == DMALLOC_VERIFY_ERROR) {  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***MALLOC_CHECK failed on line %d of file %s: " #ptr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        abort();                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define MALLOC_CHECK(ptr) ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * CSR conversion macros
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define MAKECSR(i, n, a) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   do { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     for (i=1; i<n; i++) a[i] += a[i-1]; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     for (i=n; i>0; i--) a[i] = a[i-1]; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     a[0] = 0; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   } while(0) 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SHIFTCSR(i, n, a) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   do { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     for (i=n; i>0; i--) a[i] = a[i-1]; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     a[0] = 0; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   } while(0) 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * ASSERTS that cannot be turned off!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GKASSERT(expr)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (!(expr)) {                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        abort();                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GKASSERTP(expr,msg)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (!(expr)) {                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf msg ; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("\n"); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        abort();                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GKCUASSERT(expr)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (!(expr)) {                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GKCUASSERTP(expr,msg)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (!(expr)) {                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf msg ; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("\n"); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Program Assertions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef NDEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERT(expr)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (!(expr)) {                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        assert(expr);                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERTP(expr,msg)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (!(expr)) {                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              __LINE__, __FILE__);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf msg ; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        printf("\n"); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        assert(expr);                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERT(expr) ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERTP(expr,msg) ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef NDEBUG2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERT2 ASSERT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERTP2 ASSERTP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERT2(expr) ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define ASSERTP2(expr,msg) ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_mkblas.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_mkblas.h  Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,201 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  gk_mkblas.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief Templates for BLAS-like routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/28/07
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MKBLAS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MKBLAS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKBLAS(PRFX, TYPE, OUTTYPE) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?incset()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## incset(size_t n, TYPE baseval, TYPE *x)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    x[i] = baseval+i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return x;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?max()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE PRFX ## max(size_t n, TYPE *x)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i, max=0; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (n <= 0) return (TYPE) 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=1; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    max = (x[i] > x[max] ? i : max);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return x[max];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?min()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE PRFX ## min(size_t n, TYPE *x)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i, min=0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (n <= 0) return (TYPE) 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=1; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    min = (x[i] < x[min] ? i : min);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return x[min];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?argmax()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+size_t PRFX ## argmax(size_t n, TYPE *x)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i, max=0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=1; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    max = (x[i] > x[max] ? i : max);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return max;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?argmin()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+size_t PRFX ## argmin(size_t n, TYPE *x)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i, min=0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=1; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    min = (x[i] < x[min] ? i : min);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return min;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?argmax_n()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+size_t PRFX ## argmax_n(size_t n, TYPE *x, size_t k)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i, max_n;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  PRFX ## kv_t *cand;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cand = PRFX ## kvmalloc(n, "GK_ARGMAX_N: cand");\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    cand[i].val = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    cand[i].key = x[i];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  PRFX ## kvsortd(n, cand);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  max_n = cand[k-1].val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_free((void *)&cand, LTERM);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return max_n;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?sum()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+OUTTYPE PRFX ## sum(size_t n, TYPE *x, size_t incx)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  OUTTYPE sum = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++, x+=incx)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    sum += (*x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return sum;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?scale()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## scale(size_t n, TYPE alpha, TYPE *x, size_t incx)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++, x+=incx)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    (*x) *= alpha;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return x;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?norm2()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+OUTTYPE PRFX ## norm2(size_t n, TYPE *x, size_t incx)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  OUTTYPE partial = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++, x+=incx)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    partial += (*x) * (*x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (partial > 0 ? (OUTTYPE)sqrt((double)partial) : (OUTTYPE)0);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?dot()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+OUTTYPE PRFX ## dot(size_t n, TYPE *x, size_t incx, TYPE *y, size_t incy)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  OUTTYPE partial = 0.0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++, x+=incx, y+=incy)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    partial += (*x) * (*y);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return partial;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?axpy()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## axpy(size_t n, TYPE alpha, TYPE *x, size_t incx, TYPE *y, size_t incy)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE *y_in = y;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++, x+=incx, y+=incy)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    *y += alpha*(*x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return y_in;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKBLAS_PROTO(PRFX, TYPE, OUTTYPE) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE    *PRFX ## incset(size_t n, TYPE baseval, TYPE *x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE     PRFX ## max(size_t n, TYPE *x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE     PRFX ## min(size_t n, TYPE *x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t   PRFX ## argmax(size_t n, TYPE *x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t   PRFX ## argmin(size_t n, TYPE *x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t   PRFX ## argmax_n(size_t n, TYPE *x, size_t k);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  OUTTYPE  PRFX ## sum(size_t n, TYPE *x, size_t incx);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE    *PRFX ## scale(size_t n, TYPE alpha, TYPE *x, size_t incx);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  OUTTYPE  PRFX ## norm2(size_t n, TYPE *x, size_t incx);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  OUTTYPE  PRFX ## dot(size_t n, TYPE *x, size_t incx, TYPE *y, size_t incy);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE    *PRFX ## axpy(size_t n, TYPE alpha, TYPE *x, size_t incx, TYPE *y, size_t incy);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_mkmemory.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_mkmemory.h        Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,142 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  gk_mkmemory.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief Templates for memory allocation routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/29/07
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MKMEMORY_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MKMEMORY_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKALLOC(PRFX, TYPE)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?malloc()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## malloc(size_t n, char *msg)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (TYPE *)gk_malloc(sizeof(TYPE)*n, msg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?realloc()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## realloc(TYPE *ptr, size_t n, char *msg)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (TYPE *)gk_realloc((void *)ptr, sizeof(TYPE)*n, msg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?smalloc()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## smalloc(size_t n, TYPE ival, char *msg)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE *ptr;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ptr = (TYPE *)gk_malloc(sizeof(TYPE)*n, msg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (ptr == NULL) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return NULL; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return PRFX ## set(n, ival, ptr); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?set()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## set(size_t n, TYPE val, TYPE *x)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    x[i] = val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return x;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?set()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE *PRFX ## copy(size_t n, TYPE *a, TYPE *b)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (TYPE *)memmove((void *)b, (void *)a, sizeof(TYPE)*n);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?AllocMatrix()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+TYPE **PRFX ## AllocMatrix(size_t ndim1, size_t ndim2, TYPE value, char *errmsg)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE **matrix;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  matrix = (TYPE **)gk_malloc(ndim1*sizeof(TYPE *), errmsg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (matrix == NULL) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return NULL;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<ndim1; i++) { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    matrix[i] = PRFX ## smalloc(ndim2, value, errmsg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (matrix[i] == NULL) { \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      for (j=0; j<i; j++) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        gk_free((void **)&matrix[j], LTERM); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      return NULL; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    } \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return matrix;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?AllocMatrix()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void PRFX ## FreeMatrix(TYPE ***r_matrix, size_t ndim1, size_t ndim2)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE **matrix;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (*r_matrix == NULL) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  matrix = *r_matrix;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<ndim1; i++) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    gk_free((void **)&(matrix[i]), LTERM);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_free((void **)r_matrix, LTERM);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?SetMatrix()-class of routines */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void PRFX ## SetMatrix(TYPE **matrix, size_t ndim1, size_t ndim2, TYPE value)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<ndim1; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (j=0; j<ndim2; j++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      matrix[i][j] = value;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKALLOC_PROTO(PRFX, TYPE)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE  *PRFX ## malloc(size_t n, char *msg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE  *PRFX ## realloc(TYPE *ptr, size_t n, char *msg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE  *PRFX ## smalloc(size_t n, TYPE ival, char *msg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE  *PRFX ## set(size_t n, TYPE val, TYPE *x);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE  *PRFX ## copy(size_t n, TYPE *a, TYPE *b);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE **PRFX ## AllocMatrix(size_t ndim1, size_t ndim2, TYPE value, char *errmsg);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   PRFX ## FreeMatrix(TYPE ***r_matrix, size_t ndim1, size_t ndim2);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   PRFX ## SetMatrix(TYPE **matrix, size_t ndim1, size_t ndim2, TYPE value);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_mkpqueue.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_mkpqueue.h        Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,435 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  gk_mkpqueue.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief Templates for priority queues
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 4/09/07
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MKPQUEUE_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MKPQUEUE_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKPQUEUE(FPRFX, PQT, KVT, KT, VT, KVMALLOC, KMAX, KEY_LT)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function creates and initializes a priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+PQT *FPRFX ## Create(size_t maxnodes)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  PQT *queue; \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue = (PQT *)gk_malloc(sizeof(PQT), "gk_pqCreate: queue");\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  FPRFX ## Init(queue, maxnodes);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return queue;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function initializes the data structures of the priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## Init(PQT *queue, size_t maxnodes)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->nnodes = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->maxnodes = maxnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->heap    = KVMALLOC(maxnodes, "gk_PQInit: heap");\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->locator = gk_idxsmalloc(maxnodes, -1, "gk_PQInit: locator");\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function resets the priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## Reset(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator=queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap=queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=queue->nnodes-1; i>=0; i--)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    locator[heap[i].val] = -1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->nnodes = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function frees the internal datastructures of the priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## Free(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_free((void **)&queue->heap, &queue->locator, LTERM);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->maxnodes = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function frees the internal datastructures of the priority queue \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    and the queue itself */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## Destroy(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  FPRFX ## Free(queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_free((void **)&queue, LTERM);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function returns the length of the queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+size_t FPRFX ## Length(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return queue->nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function adds an item in the priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int FPRFX ## Insert(PQT *queue, VT node, KT key)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator=queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap=queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(locator[node] == -1);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  i = queue->nnodes++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  while (i > 0) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    j = (i-1)>>1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (KEY_LT(key, heap[j].key)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    else\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(i >= 0);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap[i].key   = key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap[i].val   = node;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator[node] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function deletes an item from the priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int FPRFX ## Delete(PQT *queue, VT node)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j, nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KT newkey, oldkey;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator=queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap=queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(locator[node] != -1);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(heap[locator[node]].val == node);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  i = locator[node];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator[node] = -1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (--queue->nnodes > 0 && heap[queue->nnodes].val != node) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    node   = heap[queue->nnodes].val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    newkey = heap[queue->nnodes].key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    oldkey = heap[i].key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (KEY_LT(newkey, oldkey)) { /* Filter-up */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      while (i > 0) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        j = (i-1)>>1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (KEY_LT(newkey, heap[j].key)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        else\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    else { /* Filter down */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      nnodes = queue->nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      while ((j=(i<<1)+1) < nnodes) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (KEY_LT(heap[j].key, newkey)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (j+1 < nnodes && KEY_LT(heap[j+1].key, heap[j].key))\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            j++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        else if (j+1 < nnodes && KEY_LT(heap[j+1].key, newkey)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          j++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        else\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    heap[i].key   = newkey;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    heap[i].val   = node;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    locator[node] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function updates the key values associated for a particular item */ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## Update(PQT *queue, VT node, KT newkey)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j, nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KT oldkey;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator=queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap=queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  oldkey = heap[locator[node]].key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(locator[node] != -1);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(heap[locator[node]].val == node);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  i = locator[node];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (KEY_LT(newkey, oldkey)) { /* Filter-up */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    while (i > 0) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      j = (i-1)>>1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (KEY_LT(newkey, heap[j].key)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  else { /* Filter down */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    nnodes = queue->nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    while ((j=(i<<1)+1) < nnodes) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (KEY_LT(heap[j].key, newkey)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (j+1 < nnodes && KEY_LT(heap[j+1].key, heap[j].key))\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          j++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else if (j+1 < nnodes && KEY_LT(heap[j+1].key, newkey)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        j++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap[i].key   = newkey;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap[i].val   = node;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator[node] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function returns the item at the top of the queue and removes\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    it from the priority queue */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VT FPRFX ## GetTop(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VT vtx, node;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KT key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (queue->nnodes == 0)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return -1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  queue->nnodes--;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap    = queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator = queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  vtx = heap[0].val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator[vtx] = -1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if ((i = queue->nnodes) > 0) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    key  = heap[i].key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    node = heap[i].val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    i = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    while ((j=2*i+1) < queue->nnodes) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (KEY_LT(heap[j].key, key)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (j+1 < queue->nnodes && KEY_LT(heap[j+1].key, heap[j].key))\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          j = j+1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else if (j+1 < queue->nnodes && KEY_LT(heap[j+1].key, key)) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        j = j+1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        heap[i] = heap[j];\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        locator[heap[i].val] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        i = j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    heap[i].key   = key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    heap[i].val   = node;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    locator[node] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT2(FPRFX ## CheckHeap(queue));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return vtx;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function returns the item at the top of the queue. The item is not\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    deleted from the queue. */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VT FPRFX ## SeeTopVal(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (queue->nnodes == 0 ? -1 : queue->heap[0].val);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function returns the key of the top item. The item is not\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    deleted from the queue. */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+KT FPRFX ## SeeTopKey(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (queue->nnodes == 0 ? KMAX : queue->heap[0].key);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function returns the key of a specific item */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+KT FPRFX ## SeeKey(PQT *queue, VT node)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap    = queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator = queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return heap[locator[node]].key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This function returns the first item in a breadth-first traversal of\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    the heap whose key is less than maxwgt. This function is here due to\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    hMETIS and is not general!*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VT FPRFX ## SeeConstraintTop(PQT *queue, KT maxwgt, KT *wgts)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (queue->nnodes == 0)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return -1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (maxwgt <= 1000)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return FPRFX ## SeeTopVal(queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<queue->nnodes; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (queue->heap[i].key > 0) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (wgts[queue->heap[i].val] <= maxwgt)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        return queue->heap[i].val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    else {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (queue->heap[i/2].key <= 0)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        break;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return queue->heap[0].val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! This functions checks the consistency of the heap */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int FPRFX ## CheckHeap(PQT *queue)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t i, j;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVT *heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  heap    = queue->heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  locator = queue->locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  nnodes  = queue->nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (nnodes == 0)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return 1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERT(locator[heap[0].val] == 0);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=1; i<nnodes; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ASSERT(locator[heap[i].val] == i);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ASSERT(!KEY_LT(heap[i].key, heap[(i-1)/2].key));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=1; i<nnodes; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ASSERT(!KEY_LT(heap[i].key, heap[0].key));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (j=i=0; i<queue->maxnodes; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (locator[i] != -1)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      j++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ASSERTP(j == nnodes, ("%jd %jd\n", (intmax_t)j, (intmax_t)nnodes));\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return 1;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKPQUEUE_PROTO(FPRFX, PQT, KT, VT)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  PQT *  FPRFX ## Create(size_t maxnodes);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   FPRFX ## Init(PQT *queue, size_t maxnodes);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   FPRFX ## Reset(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   FPRFX ## Free(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   FPRFX ## Destroy(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t FPRFX ## Length(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int    FPRFX ## Insert(PQT *queue, VT node, KT key);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int    FPRFX ## Delete(PQT *queue, VT node);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void   FPRFX ## Update(PQT *queue, VT node, KT newkey);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VT     FPRFX ## GetTop(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VT     FPRFX ## SeeTopVal(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KT     FPRFX ## SeeTopKey(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KT     FPRFX ## SeeKey(PQT *queue, VT node);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VT     FPRFX ## SeeConstraintTop(PQT *queue, KT maxwgt, KT *wgts);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int    FPRFX ## CheckHeap(PQT *queue);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* This is how these macros are used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE(gk_dkvPQ, gk_dkvPQ_t, double, gk_idx_t, gk_dkvmalloc, DBL_MAX)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_dkvPQ, gk_dkvPQ_t, double, gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_mkrandom.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_mkrandom.h        Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,123 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief Templates for portable random number generation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 5/17/07
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MKRANDOM_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MKRANDOM_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The generator for the rand() related routines.  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   \params RNGT  the datatype that defines the range of values over which\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                 random numbers will be generated\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   \params VALT  the datatype that defines the contents of the array to \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                 be permuted by randArrayPermute() \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   \params FPRFX the function prefix \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKRANDOM(FPRFX, RNGT, VALT)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Initializes the generator */ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## srand(RNGT seed) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_randinit((uint64_t) seed);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Returns a random number */ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RNGT FPRFX ## rand() \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (sizeof(RNGT) <= sizeof(int32_t)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return (RNGT)gk_randint32(); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  else \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return (RNGT)gk_randint64(); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Returns a random number between [0, max) */ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RNGT FPRFX ## randInRange(RNGT max) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (RNGT)((FPRFX ## rand())%max); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Randomly permutes the elements of an array p[]. \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    flag == 1, p[i] = i prior to permutation, \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    flag == 0, p[] is not initialized. */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## randArrayPermute(RNGT n, VALT *p, RNGT nshuffles, int flag)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  RNGT i, u, v;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VALT tmp;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (flag == 1) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (i=0; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      p[i] = (VALT)i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (n < 10) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (i=0; i<n; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      v = FPRFX ## randInRange(n);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      u = FPRFX ## randInRange(n);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      gk_SWAP(p[v], p[u], tmp);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  else {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (i=0; i<nshuffles; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      v = FPRFX ## randInRange(n-3);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      u = FPRFX ## randInRange(n-3);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      /*gk_SWAP(p[v+0], p[u+0], tmp);*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      /*gk_SWAP(p[v+1], p[u+1], tmp);*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      /*gk_SWAP(p[v+2], p[u+2], tmp);*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      /*gk_SWAP(p[v+3], p[u+3], tmp);*/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      gk_SWAP(p[v+0], p[u+2], tmp);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      gk_SWAP(p[v+1], p[u+3], tmp);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      gk_SWAP(p[v+2], p[u+0], tmp);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      gk_SWAP(p[v+3], p[u+1], tmp);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Randomly permutes the elements of an array p[]. \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    flag == 1, p[i] = i prior to permutation, \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    flag == 0, p[] is not initialized. */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void FPRFX ## randArrayPermuteFine(RNGT n, VALT *p, int flag)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  RNGT i, v;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VALT tmp;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (flag == 1) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (i=0; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      p[i] = (VALT)i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++) {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    v = FPRFX ## randInRange(n);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    gk_SWAP(p[i], p[v], tmp);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKRANDOM_PROTO(FPRFX, RNGT, VALT)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void FPRFX ## srand(RNGT seed); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  RNGT FPRFX ## rand(); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  RNGT FPRFX ## randInRange(RNGT max); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void FPRFX ## randArrayPermute(RNGT n, VALT *p, RNGT nshuffles, int flag);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void FPRFX ## randArrayPermuteFine(RNGT n, VALT *p, int flag);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_mksort.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_mksort.h  Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,273 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  gk_mksort.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief Templates for the qsort routine
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/28/07
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MKSORT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MKSORT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* $Id$
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Adopted from GNU glibc by Mjt.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * See stdlib/qsort.c in glibc */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Copyright (C) 1991, 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   This file is part of the GNU C Library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Written by Douglas C. Schmidt (schmidt@ics.uci.edu).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   The GNU C Library is free software; you can redistribute it and/or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   modify it under the terms of the GNU Lesser General Public
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   License as published by the Free Software Foundation; either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   version 2.1 of the License, or (at your option) any later version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   The GNU C Library is distributed in the hope that it will be useful,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Lesser General Public License for more details.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   You should have received a copy of the GNU Lesser General Public
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   License along with the GNU C Library; if not, write to the Free
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   02111-1307 USA.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* in-line qsort implementation.  Differs from traditional qsort() routine
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * in that it is a macro, not a function, and instead of passing an address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * of a comparision routine to the function, it is possible to inline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * comparision routine, thus speed up sorting alot.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Usage:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  #include "iqsort.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  #define islt(a,b) (strcmp((*a),(*b))<0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  char *arr[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  int n;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  GKQSORT(char*, arr, n, islt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * The "prototype" and 4 arguments are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  GKQSORT(TYPE,BASE,NELT,ISLT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  1) type of each element, TYPE,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  2) address of the beginning of the array, of type TYPE*,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  3) number of elements in the array, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  4) comparision routine.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Array pointer and number of elements are referenced only once.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * This is similar to a call
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  qsort(BASE,NELT,sizeof(TYPE),ISLT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * with the difference in last parameter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Note the islt macro/routine (it receives pointers to two elements):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * the only condition of interest is whenever one element is less than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * another, no other conditions (greather than, equal to etc) are tested.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * So, for example, to define integer sort, use:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  #define islt(a,b) ((*a)<(*b))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  GKQSORT(int, arr, n, islt)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * The macro could be used to implement a sorting function (see examples
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * below), or to implement the sorting algorithm inline.  That is, either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * create a sorting function and use it whenever you want to sort something,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * or use GKQSORT() macro directly instead a call to such routine.  Note that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * the macro expands to quite some code (compiled size of int qsort on x86
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * is about 700..800 bytes).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Using this macro directly it isn't possible to implement traditional
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * qsort() routine, because the macro assumes sizeof(element) == sizeof(TYPE),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * while qsort() allows element size to be different.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Several ready-to-use examples:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Sorting array of integers:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * void int_qsort(int *arr, unsigned n) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * #define int_lt(a,b) ((*a)<(*b))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *   GKQSORT(int, arr, n, int_lt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Sorting array of string pointers:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * void str_qsort(char *arr[], unsigned n) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * #define str_lt(a,b) (strcmp((*a),(*b)) < 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *   GKQSORT(char*, arr, n, str_lt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Sorting array of structures:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * struct elt {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *   int key;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *   ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * void elt_qsort(struct elt *arr, unsigned n) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * #define elt_lt(a,b) ((a)->key < (b)->key)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *  GKQSORT(struct elt, arr, n, elt_lt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * And so on.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Swap two items pointed to by A and B using temporary buffer t. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GKQSORT_SWAP(a, b, t) ((void)((t = *a), (*a = *b), (*b = t)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Discontinue quicksort algorithm when partition gets below this size.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   This particular magic number was chosen to work best on a Sun 4/260. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GKQSORT_MAX_THRESH 4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* The next 4 #defines implement a very fast in-line stack abstraction. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GKQSORT_STACK_SIZE           (8 * sizeof(size_t))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GKQSORT_PUSH(top, low, high) (((top->_lo = (low)), (top->_hi = (high)), ++top))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define   _GKQSORT_POP(low, high, top)  ((--top, (low = top->_lo), (high = top->_hi)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define   _GKQSORT_STACK_NOT_EMPTY            (_stack < _top)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* The main code starts here... */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKQSORT(GKQSORT_TYPE,GKQSORT_BASE,GKQSORT_NELT,GKQSORT_LT)   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{                                                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  GKQSORT_TYPE *const _base = (GKQSORT_BASE);                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  const size_t _elems = (GKQSORT_NELT);                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  GKQSORT_TYPE _hold;                                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (_elems == 0)                                                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    return;                                                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Don't declare two variables of type GKQSORT_TYPE in a single \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   * statement: eg `TYPE a, b;', in case if TYPE is a pointer,            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   * expands to `type* a, b;' wich isn't what we want.                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   */                                                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (_elems > _GKQSORT_MAX_THRESH) {                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    GKQSORT_TYPE *_lo = _base;                                            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    GKQSORT_TYPE *_hi = _lo + _elems - 1;                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    struct {                                                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      GKQSORT_TYPE *_hi; GKQSORT_TYPE *_lo;                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    } _stack[_GKQSORT_STACK_SIZE], *_top = _stack + 1;                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    while (_GKQSORT_STACK_NOT_EMPTY) {                                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      GKQSORT_TYPE *_left_ptr; GKQSORT_TYPE *_right_ptr;          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      /* Select median value from among LO, MID, and HI. Rearrange        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         LO and HI so the three values are sorted. This lowers the        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         probability of picking a pathological pivot value and            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         skips a comparison for both the LEFT_PTR and RIGHT_PTR in        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         the while loops. */                                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      GKQSORT_TYPE *_mid = _lo + ((_hi - _lo) >> 1);                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (GKQSORT_LT (_mid, _lo))                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _GKQSORT_SWAP (_mid, _lo, _hold);                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (GKQSORT_LT (_hi, _mid))                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _GKQSORT_SWAP (_mid, _hi, _hold);                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else                                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        goto _jump_over;                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (GKQSORT_LT (_mid, _lo))                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _GKQSORT_SWAP (_mid, _lo, _hold);                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  _jump_over:;                                                            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      _left_ptr  = _lo + 1;                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      _right_ptr = _hi - 1;                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      /* Here's the famous ``collapse the walls'' section of quicksort.   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         Gotta like those tight inner loops!  They are the main reason    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         that this algorithm runs much faster than others. */             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      do {                                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        while (GKQSORT_LT (_left_ptr, _mid))                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+         ++_left_ptr;                                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        while (GKQSORT_LT (_mid, _right_ptr))                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          --_right_ptr;                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (_left_ptr < _right_ptr) {                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          _GKQSORT_SWAP (_left_ptr, _right_ptr, _hold);                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (_mid == _left_ptr)                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            _mid = _right_ptr;                                            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          else if (_mid == _right_ptr)                                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            _mid = _left_ptr;                                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          ++_left_ptr;                                                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          --_right_ptr;                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }                                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        else if (_left_ptr == _right_ptr) {                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          ++_left_ptr;                                                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          --_right_ptr;                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          break;                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }                                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      } while (_left_ptr <= _right_ptr);                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     /* Set up pointers for next iteration.  First determine whether      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        left and right partitions are below the threshold size.  If so,   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        ignore one or both.  Otherwise, push the larger partition's       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        bounds on the stack and continue sorting the smaller one. */      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (_right_ptr - _lo <= _GKQSORT_MAX_THRESH) {                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (_hi - _left_ptr <= _GKQSORT_MAX_THRESH)                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          /* Ignore both small partitions. */                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          _GKQSORT_POP (_lo, _hi, _top);                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        else                                                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          /* Ignore small left partition. */                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          _lo = _left_ptr;                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }                                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else if (_hi - _left_ptr <= _GKQSORT_MAX_THRESH)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        /* Ignore small right partition. */                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _hi = _right_ptr;                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else if (_right_ptr - _lo > _hi - _left_ptr) {                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        /* Push larger left partition indices. */                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _GKQSORT_PUSH (_top, _lo, _right_ptr);                            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _lo = _left_ptr;                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }                                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      else {                                                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        /* Push larger right partition indices. */                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _GKQSORT_PUSH (_top, _left_ptr, _hi);                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _hi = _right_ptr;                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }                                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }                                                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }                                                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Once the BASE array is partially sorted by quicksort the rest        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     is completely sorted using insertion sort, since this is efficient   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     for partitions below MAX_THRESH size. BASE points to the             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     beginning of the array to sort, and END_PTR points at the very       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     last element in the array (*not* one beyond it!). */         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  {                                                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    GKQSORT_TYPE *const _end_ptr = _base + _elems - 1;                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    GKQSORT_TYPE *_tmp_ptr = _base;                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    register GKQSORT_TYPE *_run_ptr;                                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    GKQSORT_TYPE *_thresh;                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    _thresh = _base + _GKQSORT_MAX_THRESH;                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (_thresh > _end_ptr)                                            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      _thresh = _end_ptr;                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    /* Find smallest element in first threshold and place it at the       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+       array's beginning.  This is the smallest array element,            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+       and the operation speeds up insertion sort's inner loop. */        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    for (_run_ptr = _tmp_ptr + 1; _run_ptr <= _thresh; ++_run_ptr)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (GKQSORT_LT (_run_ptr, _tmp_ptr))                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        _tmp_ptr = _run_ptr;                                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    if (_tmp_ptr != _base)                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      _GKQSORT_SWAP (_tmp_ptr, _base, _hold);                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    /* Insertion sort, running from left-hand-side                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     * up to right-hand-side.  */                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    _run_ptr = _base + 1;                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    while (++_run_ptr <= _end_ptr) {                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      _tmp_ptr = _run_ptr - 1;                                            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      while (GKQSORT_LT (_run_ptr, _tmp_ptr))                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        --_tmp_ptr;                                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      ++_tmp_ptr;                                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (_tmp_ptr != _run_ptr) {                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        GKQSORT_TYPE *_trav = _run_ptr + 1;                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        while (--_trav >= _run_ptr) {                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          GKQSORT_TYPE *_hi; GKQSORT_TYPE *_lo;                           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          _hold = *_trav;                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          for (_hi = _lo = _trav; --_lo >= _tmp_ptr; _hi = _lo)                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            *_hi = *_lo;                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          *_hi = _hold;                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        }                                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      }                                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    }                                                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }                                                                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_mkutils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_mkutils.h Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,40 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief Templates for various utility routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 5/28/07
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_MKUTILS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_MKUTILS_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKARRAY2CSR(PRFX, TYPE)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The macro for gk_?array2csr() routine */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**************************************************************************/\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void PRFX ## array2csr(TYPE n, TYPE range, TYPE *array, TYPE *ptr, TYPE *ind)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  TYPE i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<=range; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ptr[i] = 0;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ptr[array[i]]++;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Compute the ptr, ind structure */\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  MAKECSR(i, range, ptr);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  for (i=0; i<n; i++)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ind[ptr[array[i]]++] = i;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  SHIFTCSR(i, range, ptr);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKARRAY2CSR_PROTO(PRFX, TYPE)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void PRFX ## array2csr(TYPE n, TYPE range, TYPE *array, TYPE *ptr, TYPE *ind);\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_proto.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_proto.h   Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,352 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_proto.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains function prototypes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_PROTO_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_PROTO_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern "C" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * blas.c 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_c,   char,     intmax_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_i,   int,      intmax_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_i32, int32_t,  intmax_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_i64, int64_t,  intmax_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_z,   ssize_t,  ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_f,   float,    float)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_d,   double,   double)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKBLAS_PROTO(gk_idx, gk_idx_t, intmax_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * io.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+FILE *gk_fopen(char *, char *, const char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_fclose(FILE *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_idx_t gk_getline(char **lineptr, size_t *n, FILE *stream);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char **gk_readfile(char *fname, gk_idx_t *r_nlines);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int32_t *gk_i32readfile(char *fname, gk_idx_t *r_nlines);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int64_t *gk_i64readfile(char *fname, gk_idx_t *r_nlines);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * fs.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_fexists(char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_dexists(char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+intmax_t gk_getfsize(char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_getfilestats(char *fname, size_t *r_nlines, size_t *r_ntokens, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          size_t *r_max_nlntokens, size_t *r_nbytes);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char *gk_getbasename(char *path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char *gk_getextname(char *path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char *gk_getfilename(char *path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char *gk_getpathname(char *path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_mkpath(char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_rmpath(char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * memory.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_c,   char)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_i,   int)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_i32, int32_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_i64, int64_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_z,   ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_f,   float)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_d,   double)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_idx, gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_ckv,   gk_ckv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_ikv,   gk_ikv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_i32kv, gk_i32kv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_i64kv, gk_i64kv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_zkv,   gk_zkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_fkv,   gk_fkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_dkv,   gk_dkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_skv,   gk_skv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKALLOC_PROTO(gk_idxkv, gk_idxkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void   gk_AllocMatrix(void ***, size_t, size_t , size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void   gk_FreeMatrix(void ***, size_t, size_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int    gk_malloc_init();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void   gk_malloc_cleanup(int showstats);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void  *gk_malloc(size_t nbytes, char *msg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void  *gk_realloc(void *oldptr, size_t nbytes, char *msg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void   gk_free(void **ptr1,...);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+size_t gk_GetCurMemoryUsed();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+size_t gk_GetMaxMemoryUsed();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * seq.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_seq_t *gk_seq_ReadGKMODPSSM(char *file_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_i2cc2i_t *gk_i2cc2i_create_common(char *alphabet);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_seq_init(gk_seq_t *seq);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * pdb.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char gk_threetoone(char *res);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_freepdbf(pdbf *p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+pdbf *gk_readpdbfile(char *fname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_writefullatom(pdbf *p, char *fname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_writebackbone(pdbf *p, char *fname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_writealphacarbons(pdbf *p, char *fname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_showcorruption(pdbf *p);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * error.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_set_exit_on_error(int value);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void errexit(char *,...);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_errexit(int signum, char *,...);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_sigtrap();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_siguntrap();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_sigthrow(int signum);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_SetSignalHandlers();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_UnsetSignalHandlers();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_NonLocalExit_Handler(int signum);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char *gk_strerror(int errnum);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void PrintBackTrace();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * util.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void  gk_RandomPermute(size_t, int *, int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void  gk_array2csr(size_t n, size_t range, int *array, int *ptr, int *ind);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int   gk_log2(int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int   gk_ispow2(int);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float gk_flog2(float);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * time.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_wclock_t gk_WClockSeconds(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+double gk_CPUSeconds(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * string.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_strchr_replace(char *str, char *fromlist, char *tolist);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int     gk_strstr_replace(char *str, char *pattern, char *replacement, char *options, char **new_str);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_strtprune(char *, char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_strhprune(char *, char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_strtoupper(char *); 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_strtolower(char *); 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_strdup(char *orgstr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int     gk_strcasecmp(char *s1, char *s2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int     gk_strrcmp(char *s1, char *s2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+char   *gk_time2str(time_t time);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+time_t  gk_str2time(char *str);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int     gk_GetStringID(gk_StringMap_t *strmap, char *key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * sort.c 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csorti(size_t, char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csortd(size_t, char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_isorti(size_t, int *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_isortd(size_t, int *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_fsorti(size_t, float *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_fsortd(size_t, float *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_dsorti(size_t, double *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_dsortd(size_t, double *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_idxsorti(size_t, gk_idx_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_idxsortd(size_t, gk_idx_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_ckvsorti(size_t, gk_ckv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_ckvsortd(size_t, gk_ckv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_ikvsorti(size_t, gk_ikv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_ikvsortd(size_t, gk_ikv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_i32kvsorti(size_t, gk_i32kv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_i32kvsortd(size_t, gk_i32kv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_i64kvsorti(size_t, gk_i64kv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_i64kvsortd(size_t, gk_i64kv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_zkvsorti(size_t, gk_zkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_zkvsortd(size_t, gk_zkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_fkvsorti(size_t, gk_fkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_fkvsortd(size_t, gk_fkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_dkvsorti(size_t, gk_dkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_dkvsortd(size_t, gk_dkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_skvsorti(size_t, gk_skv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_skvsortd(size_t, gk_skv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_idxkvsorti(size_t, gk_idxkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_idxkvsortd(size_t, gk_idxkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Selection routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int  gk_dfkvkselect(size_t, int, gk_fkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int  gk_ifkvkselect(size_t, int, gk_fkv_t *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Priority queue 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_ipq,   gk_ipq_t,   int,      gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_i32pq, gk_i32pq_t, int32_t,  gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_i64pq, gk_i64pq_t, int64_t,  gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_fpq,   gk_fpq_t,   float,    gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_dpq,   gk_dpq_t,   double,   gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_PROTO(gk_idxpq, gk_idxpq_t, gk_idx_t, gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * HTable routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_HTable_t *HTable_Create(int nelements);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void         HTable_Reset(gk_HTable_t *htable);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void         HTable_Resize(gk_HTable_t *htable, int nelements);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void         HTable_Insert(gk_HTable_t *htable, int key, int val);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void         HTable_Delete(gk_HTable_t *htable, int key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int          HTable_Search(gk_HTable_t *htable, int key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int          HTable_GetNext(gk_HTable_t *htable, int key, int *val, int type);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int          HTable_SearchAndDelete(gk_HTable_t *htable, int key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void         HTable_Destroy(gk_HTable_t *htable);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int          HTable_HFunction(int nelements, int key);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Tokenizer routines
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_strtokenize(char *line, char *delim, gk_Tokens_t *tokens);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_freetokenslist(gk_Tokens_t *tokens);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Encoder/Decoder
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void encodeblock(unsigned char *in, unsigned char *out);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void decodeblock(unsigned char *in, unsigned char *out);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void GKEncodeBase64(int nbytes, unsigned char *inbuffer, unsigned char *outbuffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void GKDecodeBase64(int nbytes, unsigned char *inbuffer, unsigned char *outbuffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * random.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKRANDOM_PROTO(gk_c,   size_t, char)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKRANDOM_PROTO(gk_i,   size_t, int)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKRANDOM_PROTO(gk_f,   size_t, float)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKRANDOM_PROTO(gk_d,   size_t, double)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKRANDOM_PROTO(gk_idx, size_t, gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_randinit(uint64_t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+uint64_t gk_randint64(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+uint32_t gk_randint32(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * OpenMP fake functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(__OPENMP__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void omp_set_num_threads(int num_threads);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_get_num_threads(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_get_max_threads(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_get_thread_num(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_get_num_procs(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_in_parallel(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void omp_set_dynamic(int num_threads);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_get_dynamic(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void omp_set_nested(int nested);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int omp_get_nested(void);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* __OPENMP__ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * CSR-related functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_Create();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_Init(gk_csr_t *mat);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_Free(gk_csr_t **mat);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_FreeContents(gk_csr_t *mat);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_Dup(gk_csr_t *mat);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_ExtractSubmatrix(gk_csr_t *mat, int rstart, int nrows);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_ExtractRows(gk_csr_t *mat, int nrows, int *rind);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_ExtractPartition(gk_csr_t *mat, int *part, int pid);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t **gk_csr_Split(gk_csr_t *mat, int *color);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_Read(char *filename, int format, int readvals, int numbering);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_Write(gk_csr_t *mat, char *filename, int format, int writevals, int numbering);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_Prune(gk_csr_t *mat, int what, int minf, int maxf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_LowFilter(gk_csr_t *mat, int what, int norm, float fraction);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_TopKPlusFilter(gk_csr_t *mat, int what, int topk, float keepval);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_csr_t *gk_csr_ZScoreFilter(gk_csr_t *mat, int what, float zscore);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_CompactColumns(gk_csr_t *mat);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_SortIndices(gk_csr_t *mat, int what);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_CreateIndex(gk_csr_t *mat, int what);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_Normalize(gk_csr_t *mat, int what, int norm);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_Scale(gk_csr_t *mat, int type);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_ComputeSums(gk_csr_t *mat, int what);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_csr_ComputeSquaredNorms(gk_csr_t *mat, int what);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float gk_csr_ComputeSimilarity(gk_csr_t *mat, int i1, int i2, int what, int simtype);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_csr_GetSimilarRows(gk_csr_t *mat, int nqterms, int *qind, float *qval,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        int simtype, int nsim, float minsim, gk_fkv_t *hits, int *_imarker,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        gk_fkv_t *i_cand);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* itemsets.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_find_frequent_itemsets(int ntrans, ssize_t *tranptr, int *tranind,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        int minfreq, int maxfreq, int minlen, int maxlen,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        void (*process_itemset)(void *stateptr, int nitems, int *itemind,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                int ntrans, int *tranind),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        void *stateptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* evaluate.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float ComputeAccuracy(int n, gk_fkv_t *list);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float ComputeROCn(int n, int maxN, gk_fkv_t *list);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float ComputeMedianRFP(int n, gk_fkv_t *list);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float ComputeMean (int n, float *values);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+float ComputeStdDev(int  n, float *values);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* mcore.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_mcore_t *gk_mcoreCreate(size_t coresize);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gk_mcore_t *gk_gkmcoreCreate();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_mcoreDestroy(gk_mcore_t **r_mcore, int showstats);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_gkmcoreDestroy(gk_mcore_t **r_mcore, int showstats);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void *gk_mcoreMalloc(gk_mcore_t *mcore, size_t nbytes);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_mcorePush(gk_mcore_t *mcore);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_gkmcorePush(gk_mcore_t *mcore);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_mcorePop(gk_mcore_t *mcore);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_gkmcorePop(gk_mcore_t *mcore);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_mcoreAdd(gk_mcore_t *mcore, int type, size_t nbytes, void *ptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_gkmcoreAdd(gk_mcore_t *mcore, int type, size_t nbytes, void *ptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_mcoreDel(gk_mcore_t *mcore, void *ptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+void gk_gkmcoreDel(gk_mcore_t *mcore, void *ptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* rw.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+int gk_rw_PageRank(gk_csr_t *mat, float lamda, float eps, int max_niter, float *pr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_struct.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_struct.h  Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,240 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file gk_struct.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains various datastructures used/provided by GKlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_STRUCT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_STRUCT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/********************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Generator for gk_??KeyVal_t data structure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/********************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKKEYVALUE_T(NAME, KEYTYPE, VALTYPE) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KEYTYPE key;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  VALTYPE val;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} NAME;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* The actual KeyVal data structures */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_ckv_t,   char,     ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_ikv_t,   int,      ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_i32kv_t, int32_t,  ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_i64kv_t, int64_t,  ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_zkv_t,   ssize_t,  ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_fkv_t,   float,    ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_dkv_t,   double,   ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_skv_t,   char *,   ssize_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKKEYVALUE_T(gk_idxkv_t, gk_idx_t, gk_idx_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/********************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! Generator for gk_?pq_t data structure */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/********************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_MKPQUEUE_T(NAME, KVTYPE)\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct {\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t nnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t maxnodes;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Heap version of the data structure */ \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  KVTYPE   *heap;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_idx_t *locator;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} NAME;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_T(gk_ipq_t,    gk_ikv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_T(gk_i32pq_t,  gk_i32kv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_T(gk_i64pq_t,  gk_i64kv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_T(gk_fpq_t,    gk_fkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_T(gk_dpq_t,    gk_dkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+GK_MKPQUEUE_T(gk_idxpq_t,  gk_idxkv_t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * The following data structure stores a sparse CSR format
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_csr_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int32_t nrows, ncols;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ssize_t *rowptr, *colptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int32_t *rowind, *colind;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int32_t *rowids, *colids;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  float *rowval, *colval;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  float *rnorms, *cnorms;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  float *rsums, *csums;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  float *rsizes, *csizes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  float *rvols, *cvols;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  float *rwgts, *cwgts;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_csr_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * The following data structure stores stores a string as a 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * pair of its allocated buffer and the buffer itself.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_str_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t len;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char *buf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_str_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*-------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* The following data structure implements a string-2-int mapping
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* table used for parsing command-line options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*-------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_StringMap_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char *name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int id;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_StringMap_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * This structure implements a simple hash table
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_HTable_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int nelements;          /* The overall size of the hash-table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int htsize;             /* The current size of the hash-table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_ikv_t *harray;       /* The actual hash-table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_HTable_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * This structure implements a gk_Tokens_t list returned by the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * string tokenizer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_Tokens_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int ntoks;        /* The number of tokens in the input string */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char *strbuf;     /* The memory that stores all the entries */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char **list;      /* Pointers to the strbuf for each element */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_Tokens_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * This structure implements storage for an atom in a pdb file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct atom {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int       serial;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char      *name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char        altLoc;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char      *resname;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char      chainid;      
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int       rserial;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char        icode;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char      element;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double    x;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double    y;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double    z;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double    opcy;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double    tmpt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} atom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * This structure implements storage for a center of mass for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * a single residue.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct center_of_mass {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double x;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double y;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  double z;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} center_of_mass;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * This structure implements storage for a pdb protein 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *------------------------------------------------------------*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct pdbf {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int natoms;                     /* Number of atoms */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int nresidues;  /* Number of residues based on coordinates */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int ncas;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int nbbs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int corruption;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char *resSeq;         /* Residue sequence based on coordinates    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char **threeresSeq; /* three-letter residue sequence */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  atom *atoms;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  atom **bbs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  atom **cas;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  center_of_mass *cm;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} pdbf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* Localization Structures for converting characters to integers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+**************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_i2cc2i_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int n;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    char *i2c;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int *c2i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_i2cc2i_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*******************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *This structure implements storage of a protein sequence
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * *****************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_seq_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int len; /*Number of Residues */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int *sequence; /* Stores the sequence*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int **pssm; /* Stores the pssm matrix */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int **psfm; /* Stores the psfm matrix */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    char *name; /* Stores the name of the sequence */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    int nsymbols;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_seq_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The following data structure stores information about a memory 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    allocation operation that can either be served from gk_mcore_t or by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    a gk_malloc if not sufficient workspace memory is available. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_mop_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int type;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ssize_t nbytes;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void *ptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_mop_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*! The following structure stores information used by Metis */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct gk_mcore_t {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Workspace information */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t coresize;     /*!< The amount of core memory that has been allocated */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t corecpos;     /*!< Index of the first free location in core */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void *core;            /*!< Pointer to the core itself */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* These are for implementing a stack-based allocation scheme using both
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     core and also dynamically allocated memory */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t nmops;         /*!< The number of maop_t entries that have been allocated */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t cmop;          /*!< Index of the first free location in maops */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  gk_mop_t *mops;       /*!< The array recording the maop_t operations */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* These are for keeping various statistics for wspacemalloc */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t num_callocs;   /*!< The number of core mallocs */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t num_hallocs;   /*!< The number of heap mallocs */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t size_callocs;  /*!< The total # of bytes in core mallocs */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t size_hallocs;  /*!< The total # of bytes in heap mallocs */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t cur_callocs;   /*!< The current # of bytes in core mallocs */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t cur_hallocs;   /*!< The current # of bytes in heap mallocs */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t max_callocs;   /*!< The maximum # of bytes in core mallocs at any given time */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t max_hallocs;   /*!< The maximum # of bytes in heap mallocs at any given time */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} gk_mcore_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gk_types.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_types.h   Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,38 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*!
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\file  gk_types.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\brief This file contains basic scalar datatype used in GKlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\date   Started 3/27/2007
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\author George
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+\version\verbatim $Id$ \endverbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _GK_TYPES_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _GK_TYPES_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*************************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* Basic data type definitions. These definitions allow GKlib to separate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* the following elemental types:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* - loop iterator variables, which are set to size_t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* - signed and unsigned int variables that can be set to any # of bits
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* - signed and unsigned long variables that can be set to any # of bits
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+* - real variables, which can be set to single or double precision.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+**************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*typedef ptrdiff_t       gk_idx_t;       */  /* index variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef ssize_t         gk_idx_t;         /* index variable */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int32_t         gk_int_t;         /* integer values */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint32_t        gk_uint_t;        /* unsigned integer values */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int64_t         gk_long_t;        /* long integer values */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint64_t        gk_ulong_t;       /* unsigned long integer values */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef float           gk_real_t;        /* real type */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef double          gk_dreal_t;       /* double precission real type */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef double          gk_wclock_t;        /* wall-clock time */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/*#define GK_IDX_MAX PTRDIFF_MAX*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define GK_IDX_MAX ((SIZE_MAX>>1)-2)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIGKIDX "zd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNGKIDX "zd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/gkregex.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gkregex.h    Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,556 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Definitions for data structures and routines for the regular
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   expression library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   This file is part of the GNU C Library.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   The GNU C Library is free software; you can redistribute it and/or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   modify it under the terms of the GNU Lesser General Public
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   License as published by the Free Software Foundation; either
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   version 2.1 of the License, or (at your option) any later version.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   The GNU C Library is distributed in the hope that it will be useful,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Lesser General Public License for more details.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   You should have received a copy of the GNU Lesser General Public
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   License along with the GNU C Library; if not, write to the Free
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   02111-1307 USA.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _REGEX_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _REGEX_H 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Allow the use in C++ code.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern "C" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* The following two types have to be signed and unsigned integer type
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   wide enough to hold a value of a pointer.  For most ANSI compilers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   ptrdiff_t and size_t should be likely OK.  Still size of these two
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   types is 2 for Microsoft C.  Ugh... */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef long int s_reg_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef unsigned long int active_reg_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* The following bits are used to determine the regexp syntax we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   remains the value 0.  The bits are given in alphabetical order, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   the definitions shifted by one from the previous bit; thus, when we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   add or remove a bit, only one other definition need change.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef unsigned long int reg_syntax_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is not set, then \ inside a bracket expression is literal.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If set, then such a \ quotes the following character.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is not set, then + and ? are operators, and \+ and \? are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     literals.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If set, then \+ and \? are operators and + and ? are literals.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then character classes are supported.  They are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then character classes are not supported.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then ^ and $ are always anchors (outside bracket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     expressions, of course).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If this bit is not set, then it depends:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        ^  is an anchor if it is at the beginning of a regular
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           expression or after an open-group or an alternation operator;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        $  is an anchor if it is at the end of a regular expression, or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           before a close-group or an alternation operator.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   We already implemented a previous draft which made those constructs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   invalid, though, so we haven't changed the code back.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then special characters are always special
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     regardless of where they are in the pattern.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If this bit is not set, then special characters are special only in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     some contexts; otherwise they are ordinary.  Specifically,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     * + ? and intervals are only special when not after the beginning,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     open-group, or alternation operator.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     immediately after an alternation or begin-group operator.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then . matches newline.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then it doesn't.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then . doesn't match NUL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then it does.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, nonmatching lists [^...] do not match newline.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, they do.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, either \{...\} or {...} defines an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     interval, depending on RE_NO_BK_BRACES.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, \{, \}, {, and } are literals.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, +, ? and | aren't recognized as operators.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, they are.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_LIMITED_OPS (RE_INTERVALS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, newline is an alternation operator.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, newline is literal.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     are literals.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  If not set, then `\{...\}' defines an interval.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, (...) defines a group, and \( and \) are literals.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, \(...\) defines a group, and ( and ) are literals.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then \<digit> matches <digit>.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then \<digit> is a back-reference.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then | is an alternation operator, and \| is literal.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then \| is an alternation operator, and | is literal.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then an ending range point collating higher
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     than the starting range point, as in [z-a], is invalid.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then when ending range point collates higher than the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     starting range point, the range is ignored.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then an unmatched ) is ordinary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then an unmatched ) is invalid.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, succeed as soon as we match the whole pattern,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   without further backtracking.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, do not process the GNU regex operators.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then the GNU regex operators are recognized. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, turn on internal regex debugging.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, and debugging was on, turn it off.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   This only works if regex.c is compiled -DDEBUG.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   We define this bit always, so that all that's needed to turn on
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   debugging is to recompile regex.c; the calling code can always have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   this bit set, and it won't affect anything in the normal case. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_DEBUG (RE_NO_GNU_OPS << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, a syntactically invalid interval is treated as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   a string of ordinary characters.  For example, the ERE 'a{1' is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   treated as 'a\{1'.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then ignore case when matching.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then case is significant.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   for ^, because it is difficult to scan the regex backwards to find
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   whether ^ should be special.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then \{ cannot be first in an bre or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   immediately after an alternation or begin-group operator.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then no_sub will be set to 1 during
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   re_compile_pattern.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* This global variable defines the particular regexp syntax to use (for
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   some interfaces).  When a regexp is compiled, the syntax used is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   stored in the pattern buffer, so changing this does not affect
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   already-compiled regexps.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern reg_syntax_t re_syntax_options;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Define combinations of the above bits for the standard possibilities.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   (The [[[ comments delimit what gets put into the Texinfo file, so
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   don't delete them!)  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* [[[begin syntaxes]]] */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_EMACS 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_AWK                                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_DOT_NEWLINE                 | RE_CONTEXT_INDEP_ANCHORS            \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_GNU_AWK                                         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+       | RE_CONTEXT_INVALID_OPS ))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_POSIX_AWK                                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_INTERVALS     | RE_NO_GNU_OPS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_GREP                                                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NEWLINE_ALT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_EGREP                                                   \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NO_BK_VBAR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_POSIX_EGREP                                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES                       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_INVALID_INTERVAL_ORD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _RE_SYNTAX_POSIX_COMMON                                           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_POSIX_BASIC                                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   isn't minimal, since other operators, such as \`, aren't disabled.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_POSIX_EXTENDED                                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   removed and RE_NO_BK_REFS is added.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   | RE_NO_BK_VBAR            | RE_UNMATCHED_RIGHT_PAREN_ORD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* [[[end syntaxes]]] */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Maximum number of duplicates an interval can allow.  Some systems
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   (erroneously) define this in other header files, but we want our
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   value, so remove any previous define.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef RE_DUP_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# undef RE_DUP_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define RE_DUP_MAX (0x7fff)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then use extended regular expression syntax.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then use basic regular expression syntax.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_EXTENDED 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then ignore case when matching.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then case is significant.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_ICASE (REG_EXTENDED << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then anchors do not match at newline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     characters in the string.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then anchors do match at newlines.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_NEWLINE (REG_ICASE << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then report only success or fail in regexec.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then returns differ between not matching and errors.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_NOSUB (REG_NEWLINE << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* POSIX `eflags' bits (i.e., information for regexec).  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If this bit is set, then the beginning-of-line operator doesn't match
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     the beginning of the string (presumably because it's not the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     beginning of a line).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If not set, then the beginning-of-line operator does match the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     beginning of the string.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_NOTBOL 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Like REG_NOTBOL, except for the end-of-line.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_NOTEOL (1 << 1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Use PMATCH[0] to delimit the start and end of the search in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   buffer.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REG_STARTEND (1 << 2)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If any error codes are removed, changed, or added, update the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   `re_error_msg' table in regex.c.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef enum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef _XOPEN_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ENOSYS = -1,        /* This will never happen for this implementation.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_NOERROR = 0,        /* Success.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_NOMATCH,            /* Didn't find a match (for regexec).  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* POSIX regcomp return error codes.  (In the order listed in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     standard.)  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_BADPAT,             /* Invalid pattern.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ECOLLATE,           /* Inalid collating element.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ECTYPE,             /* Invalid character class name.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_EESCAPE,            /* Trailing backslash.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ESUBREG,            /* Invalid back reference.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_EBRACK,             /* Unmatched left bracket.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_EPAREN,             /* Parenthesis imbalance.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_EBRACE,             /* Unmatched \{.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_BADBR,              /* Invalid contents of \{\}.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ERANGE,             /* Invalid range end.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ESPACE,             /* Ran out of memory.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_BADRPT,             /* No preceding re for repetition op.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Error codes we've added.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_EEND,               /* Premature end.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ESIZE,              /* Compiled pattern bigger than 2^16 bytes.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  REG_ERPAREN             /* Unmatched ) or \); not returned from regcomp.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} reg_errcode_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* This data structure represents a compiled pattern.  Before calling
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   `translate', and `no_sub' can be set.  After the pattern has been
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   compiled, the `re_nsub' field is available.  All other fields are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   private to the regex routines.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef RE_TRANSLATE_TYPE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# define RE_TRANSLATE_TYPE unsigned char *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+struct re_pattern_buffer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Space that holds the compiled pattern.  It is declared as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     `unsigned char *' because its elements are sometimes used as
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     array indexes.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned char *buffer;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Number of bytes to which `buffer' points.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned long int allocated;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Number of bytes actually used in `buffer'.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned long int used;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Syntax setting with which the pattern was compiled.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  reg_syntax_t syntax;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Pointer to a fastmap, if any, otherwise zero.  re_search uses the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     fastmap, if there is one, to skip over impossible starting points
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     for matches.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  char *fastmap;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Either a translate table to apply to all characters before
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     comparing them, or zero for no translation.  The translation is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     applied to a pattern when it is compiled and to a string when it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     is matched.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  RE_TRANSLATE_TYPE translate;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Number of subexpressions found by the compiler.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  size_t re_nsub;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Zero if this pattern cannot match the empty string, one else.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     Well, in truth it's used only in `re_search_2', to see whether or
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     not we should use the fastmap, so we don't set this absolutely
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     perfectly; see `re_compile_fastmap' (the `duplicate' case).  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned can_be_null : 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* If REGS_UNALLOCATED, allocate space in the `regs' structure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     for `max (RE_NREGS, re_nsub + 1)' groups.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     If REGS_REALLOCATE, reallocate space if necessary.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     If REGS_FIXED, use what's there.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REGS_UNALLOCATED 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REGS_REALLOCATE 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define REGS_FIXED 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned regs_allocated : 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Set to zero when `regex_compile' compiles a pattern; set to one
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     by `re_compile_fastmap' if it updates the fastmap.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned fastmap_accurate : 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* If set, `re_match_2' does not return information about
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     subexpressions.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned no_sub : 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* If set, a beginning-of-line anchor doesn't match at the beginning
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     of the string.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned not_bol : 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* Similarly for an end-of-line anchor.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned not_eol : 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /* If true, an anchor at a newline matches.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned newline_anchor : 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct re_pattern_buffer regex_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Type for byte offsets within the string.  POSIX mandates this.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int regoff_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* This is the structure we store register match data in.  See
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   regex.texinfo for a full description of what registers match.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+struct re_registers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  unsigned num_regs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  regoff_t *start;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  regoff_t *end;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   `re_match_2' returns information about at least this many registers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   the first time a `regs' structure is passed.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef RE_NREGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# define RE_NREGS 30
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* POSIX specification for registers.  Aside from the different names than
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   `re_registers', POSIX uses an array of structures, instead of a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   structure of arrays.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} regmatch_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Declarations for routines.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Sets the current default syntax to SYNTAX, and return the old syntax.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   You can also simply assign to the `re_syntax_options' variable.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Compile the regular expression PATTERN, with length LENGTH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   and syntax given by the global `re_syntax_options', into the buffer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   BUFFER.  Return NULL if successful, and an error string if not.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern const char *re_compile_pattern (const char *__pattern, size_t __length,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                 struct re_pattern_buffer *__buffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Compile a fastmap for the compiled pattern in BUFFER; used to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   accelerate searches.  Return 0 if successful and -2 if was an
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   internal error.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Search in the string STRING (with length LENGTH) for the pattern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   compiled into BUFFER.  Start searching at position START, for RANGE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   characters.  Return the starting position of the match, -1 for no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   match, or -2 for an internal error.  Also return register
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int re_search (struct re_pattern_buffer *__buffer, const char *__string,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                int __length, int __start, int __range,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                struct re_registers *__regs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Like `re_search', but search in the concatenation of STRING1 and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   STRING2.  Also, stop searching at index START + STOP.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int re_search_2 (struct re_pattern_buffer *__buffer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  const char *__string1, int __length1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  const char *__string2, int __length2, int __start,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  int __range, struct re_registers *__regs, int __stop);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Like `re_search', but return how many characters in STRING the regexp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   in BUFFER matched, starting at position START.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int re_match (struct re_pattern_buffer *__buffer, const char *__string,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+               int __length, int __start, struct re_registers *__regs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int re_match_2 (struct re_pattern_buffer *__buffer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                 const char *__string1, int __length1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                 const char *__string2, int __length2, int __start,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                 struct re_registers *__regs, int __stop);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   for recording register information.  STARTS and ENDS must be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   (regoff_t)' bytes long.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   If NUM_REGS == 0, then subsequent matches should allocate their own
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   register data.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   Unless this function is called, the first search or match using
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   PATTERN_BUFFER will allocate its own register data, without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   freeing the old data.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern void re_set_registers (struct re_pattern_buffer *__buffer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                        struct re_registers *__regs,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                        unsigned int __num_regs,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                        regoff_t *__starts, regoff_t *__ends);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined _REGEX_RE_COMP || defined _LIBC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# ifndef _CRAY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* 4.2 bsd compatibility.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern char *re_comp (const char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int re_exec (const char *);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* GCC 2.95 and later have "__restrict"; C99 compilers have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   "restrict", and "configure" may have defined "restrict".  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef __restrict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  if defined restrict || 199901L <= __STDC_VERSION__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define __restrict restrict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#   define __restrict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* gcc 3.1 and up support the [restrict] syntax.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef __restrict_arr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+     && !defined __GNUG__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define __restrict_arr __restrict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define __restrict_arr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* POSIX compatibility.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int regcomp (regex_t *__restrict __preg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              const char *__restrict __pattern,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              int __cflags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int regexec (const regex_t *__restrict __preg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              const char *__restrict __string, size_t __nmatch,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              regmatch_t __pmatch[__restrict_arr],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              int __eflags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern size_t regerror (int __errcode, const regex_t *__restrict __preg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  char *__restrict __errbuf, size_t __errbuf_size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern void regfree (regex_t *__preg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif    /* C++ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif /* regex.h */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/ms_inttypes.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/ms_inttypes.h        Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,301 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// ISO C9x  compliant inttypes.h for Microsoft Visual Studio
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//  Copyright (c) 2006 Alexander Chemeris
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// modification, are permitted provided that the following conditions are met:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   1. Redistributions of source code must retain the above copyright notice,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   3. The name of the author may be used to endorse or promote products
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      derived from this software without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+///////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _MSC_VER // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#error "Use this header only with Microsoft Visual C++ compilers!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _MSC_VER ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _MSC_INTTYPES_H_ // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _MSC_INTTYPES_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if _MSC_VER > 1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#pragma once
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "ms_stdint.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8 Format conversion of integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef struct {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   intmax_t quot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   intmax_t rem;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} imaxdiv_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8.1 Macros for format specifiers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// The fprintf macros for signed integers are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRId8       "d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIi8       "i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdLEAST8  "d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiLEAST8  "i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdFAST8   "d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiFAST8   "i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRId16       "hd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIi16       "hi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdLEAST16  "hd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiLEAST16  "hi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdFAST16   "hd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiFAST16   "hi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRId32       "I32d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIi32       "I32i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdLEAST32  "I32d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiLEAST32  "I32i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdFAST32   "I32d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiFAST32   "I32i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRId64       "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIi64       "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdLEAST64  "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiLEAST64  "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdFAST64   "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiFAST64   "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdMAX     "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiMAX     "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIdPTR     "Id"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIiPTR     "Ii"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// The fprintf macros for unsigned integers are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIo8       "o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIu8       "u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIx8       "x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIX8       "X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoLEAST8  "o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuLEAST8  "u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxLEAST8  "x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXLEAST8  "X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoFAST8   "o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuFAST8   "u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxFAST8   "x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXFAST8   "X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIo16       "ho"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIu16       "hu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIx16       "hx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIX16       "hX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoLEAST16  "ho"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuLEAST16  "hu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxLEAST16  "hx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXLEAST16  "hX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoFAST16   "ho"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuFAST16   "hu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxFAST16   "hx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXFAST16   "hX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIo32       "I32o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIu32       "I32u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIx32       "I32x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIX32       "I32X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoLEAST32  "I32o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuLEAST32  "I32u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxLEAST32  "I32x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXLEAST32  "I32X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoFAST32   "I32o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuFAST32   "I32u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxFAST32   "I32x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXFAST32   "I32X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIo64       "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIu64       "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIx64       "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIX64       "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoLEAST64  "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuLEAST64  "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxLEAST64  "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXLEAST64  "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoFAST64   "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuFAST64   "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxFAST64   "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXFAST64   "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoMAX     "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuMAX     "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxMAX     "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXMAX     "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIoPTR     "Io"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIuPTR     "Iu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIxPTR     "Ix"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define PRIXPTR     "IX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// The fscanf macros for signed integers are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNd8       "d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNi8       "i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdLEAST8  "d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiLEAST8  "i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdFAST8   "d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiFAST8   "i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNd16       "hd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNi16       "hi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdLEAST16  "hd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiLEAST16  "hi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdFAST16   "hd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiFAST16   "hi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNd32       "ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNi32       "li"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdLEAST32  "ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiLEAST32  "li"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdFAST32   "ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiFAST32   "li"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNd64       "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNi64       "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdLEAST64  "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiLEAST64  "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdFAST64   "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiFAST64   "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNdMAX     "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNiMAX     "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef _WIN64 // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNdPTR     "I64d"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNiPTR     "I64i"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else  // _WIN64 ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNdPTR     "ld"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNiPTR     "li"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // _WIN64 ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// The fscanf macros for unsigned integers are:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNo8       "o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNu8       "u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNx8       "x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNX8       "X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoLEAST8  "o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuLEAST8  "u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxLEAST8  "x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXLEAST8  "X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoFAST8   "o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuFAST8   "u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxFAST8   "x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXFAST8   "X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNo16       "ho"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNu16       "hu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNx16       "hx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNX16       "hX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoLEAST16  "ho"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuLEAST16  "hu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxLEAST16  "hx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXLEAST16  "hX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoFAST16   "ho"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuFAST16   "hu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxFAST16   "hx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXFAST16   "hX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNo32       "lo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNu32       "lu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNx32       "lx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNX32       "lX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoLEAST32  "lo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuLEAST32  "lu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxLEAST32  "lx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXLEAST32  "lX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoFAST32   "lo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuFAST32   "lu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxFAST32   "lx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXFAST32   "lX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNo64       "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNu64       "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNx64       "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNX64       "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoLEAST64  "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuLEAST64  "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxLEAST64  "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXLEAST64  "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoFAST64   "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuFAST64   "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxFAST64   "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXFAST64   "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNoMAX     "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNuMAX     "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNxMAX     "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SCNXMAX     "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef _WIN64 // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNoPTR     "I64o"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNuPTR     "I64u"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNxPTR     "I64x"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNXPTR     "I64X"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else  // _WIN64 ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNoPTR     "lo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNuPTR     "lu"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNxPTR     "lx"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define SCNXPTR     "lX"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // _WIN64 ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8.2 Functions for greatest-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8.2.1 The imaxabs function
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define imaxabs _abs64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8.2.2 The imaxdiv function
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// This is modified version of div() function from Microsoft's div.c found
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// in %MSVC.NET%\crt\src\div.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef STATIC_IMAXDIV // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else // STATIC_IMAXDIV ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+_inline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // STATIC_IMAXDIV ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   imaxdiv_t result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   result.quot = numer / denom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   result.rem = numer % denom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   if (numer < 0 && result.rem > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      // did division wrong; must fix up
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      ++result.quot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      result.rem -= denom;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   return result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8.2.3 The strtoimax and strtoumax functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define strtoimax _strtoi64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define strtoumax _strtoui64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.8.2.4 The wcstoimax and wcstoumax functions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define wcstoimax _wcstoi64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define wcstoumax _wcstoui64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _MSC_INTTYPES_H_ ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/ms_stat.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/ms_stat.h    Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,22 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _MSC_VER // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#error "Use this header only with Microsoft Visual C++ compilers!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _MSC_VER ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _MS_STAT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _MS_STAT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if _MSC_VER > 1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#pragma once
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* Test macros for file types.  */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define __S_ISTYPE(mode, mask)  (((mode) & S_IFMT) == (mask))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define S_ISDIR(mode)    __S_ISTYPE((mode), S_IFDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define S_ISCHR(mode)    __S_ISTYPE((mode), S_IFCHR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define S_ISBLK(mode)    __S_ISTYPE((mode), S_IFBLK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define S_ISREG(mode)    __S_ISTYPE((mode), S_IFREG)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r b51a142f9789 -r 26bf6bd35143 headers/ms_stdint.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null      Thu Jan 01 00:00:00 1970 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/ms_stdint.h  Tue Mar 20 11:59:37 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,222 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// ISO C9x  compliant stdint.h for Microsoft Visual Studio
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//  Copyright (c) 2006 Alexander Chemeris
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// modification, are permitted provided that the following conditions are met:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   1. Redistributions of source code must retain the above copyright notice,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   3. The name of the author may be used to endorse or promote products
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//      derived from this software without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+///////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _MSC_VER // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#error "Use this header only with Microsoft Visual C++ compilers!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _MSC_VER ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef _MSC_STDINT_H_ // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define _MSC_STDINT_H_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if _MSC_VER > 1000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#pragma once
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <limits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// or compiler give many errors like this:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if (_MSC_VER < 1300) && defined(__cplusplus)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   extern "C++" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#     include <wchar.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if (_MSC_VER < 1300) && defined(__cplusplus)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.1 Integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.1.1 Exact-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef __int8            int8_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef __int16           int16_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef __int32           int32_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef __int64           int64_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef unsigned __int8   uint8_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef unsigned __int16  uint16_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef unsigned __int32  uint32_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef unsigned __int64  uint64_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.1.2 Minimum-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int8_t    int_least8_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int16_t   int_least16_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int32_t   int_least32_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int64_t   int_least64_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint8_t   uint_least8_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint16_t  uint_least16_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint32_t  uint_least32_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint64_t  uint_least64_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.1.3 Fastest minimum-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int8_t    int_fast8_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int16_t   int_fast16_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int32_t   int_fast32_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int64_t   int_fast64_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint8_t   uint_fast8_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint16_t  uint_fast16_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint32_t  uint_fast32_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint64_t  uint_fast64_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.1.4 Integer types capable of holding object pointers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef _WIN64 // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   typedef __int64           intptr_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   typedef unsigned __int64  uintptr_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else // _WIN64 ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   typedef int               intptr_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   typedef unsigned int      uintptr_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _WIN64 ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.1.5 Greatest-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef int64_t   intmax_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+typedef uint64_t  uintmax_t;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.2 Limits of specified-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.2.1 Limits of exact-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT8_MIN     ((int8_t)_I8_MIN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT8_MAX     _I8_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT16_MIN    ((int16_t)_I16_MIN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT16_MAX    _I16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT32_MIN    ((int32_t)_I32_MIN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT32_MAX    _I32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT64_MIN    ((int64_t)_I64_MIN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT64_MAX    _I64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT8_MAX    _UI8_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT16_MAX   _UI16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT32_MAX   _UI32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT64_MAX   _UI64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.2.2 Limits of minimum-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST8_MIN    INT8_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST8_MAX    INT8_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST16_MIN   INT16_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST16_MAX   INT16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST32_MIN   INT32_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST32_MAX   INT32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST64_MIN   INT64_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_LEAST64_MAX   INT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_LEAST8_MAX   UINT8_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_LEAST16_MAX  UINT16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_LEAST32_MAX  UINT32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_LEAST64_MAX  UINT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.2.3 Limits of fastest minimum-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST8_MIN    INT8_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST8_MAX    INT8_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST16_MIN   INT16_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST16_MAX   INT16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST32_MIN   INT32_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST32_MAX   INT32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST64_MIN   INT64_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT_FAST64_MAX   INT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_FAST8_MAX   UINT8_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_FAST16_MAX  UINT16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_FAST32_MAX  UINT32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT_FAST64_MAX  UINT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.2.4 Limits of integer types capable of holding object pointers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef _WIN64 // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define INTPTR_MIN   INT64_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define INTPTR_MAX   INT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define UINTPTR_MAX  UINT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else // _WIN64 ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define INTPTR_MIN   INT32_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define INTPTR_MAX   INT32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define UINTPTR_MAX  UINT32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _WIN64 ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.2.5 Limits of greatest-width integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INTMAX_MIN   INT64_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INTMAX_MAX   INT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINTMAX_MAX  UINT64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.3 Limits of other integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef _WIN64 // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define PTRDIFF_MIN  _I64_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define PTRDIFF_MAX  _I64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else  // _WIN64 ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define PTRDIFF_MIN  _I32_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define PTRDIFF_MAX  _I32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // _WIN64 ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SIG_ATOMIC_MIN  INT_MIN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define SIG_ATOMIC_MAX  INT_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef SIZE_MAX // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  ifdef _WIN64 // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#     define SIZE_MAX  _UI64_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  else // _WIN64 ][
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#     define SIZE_MAX  _UI32_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  endif // _WIN64 ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // SIZE_MAX ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef WCHAR_MIN // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define WCHAR_MIN  0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // WCHAR_MIN ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef WCHAR_MAX // [
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#  define WCHAR_MAX  _UI16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // WCHAR_MAX ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define WINT_MIN  0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define WINT_MAX  _UI16_MAX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // __STDC_LIMIT_MACROS ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.4 Limits of other integer types
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.4.1 Macros for minimum-width integer constants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT8_C(val)  val##i8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT16_C(val) val##i16
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT32_C(val) val##i32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INT64_C(val) val##i64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT8_C(val)  val##ui8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT16_C(val) val##ui16
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT32_C(val) val##ui32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINT64_C(val) val##ui64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// 7.18.4.2 Macros for greatest-width integer constants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INTMAX_C   INT64_C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define UINTMAX_C  UINT64_C
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // __STDC_CONSTANT_MACROS ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // _MSC_STDINT_H_ ]
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/less_than_equal.patch b/math/parmetis/files/less_than_equal.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index f2f72efe6ed..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/less_than_equal.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,37 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332262784 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Tue Mar 20 11:59:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID 18830790deb4dd8857f93427ba7794f81709665d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  8220d6713ea21d8a119911ceed844e89f9fbcca4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-parmetis: fix bug reported by jfettig; '<' to '<=' in xyzpart
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 8220d6713ea2 -r 18830790deb4 libparmetis/xyzpart.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/libparmetis/xyzpart.c        Wed Mar 21 11:00:11 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/libparmetis/xyzpart.c        Tue Mar 20 11:59:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -109,11 +109,11 @@ void IRBinCoordinates(ctrl_t *ctrl, grap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /* get into a iterative backet boundary refinement */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     for (l=0; l<5; l++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       /* determine bucket counts */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       iset(nbins, 0, lcounts);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       for (j=0, i=0; i<nvtxs;) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if (cand[i].key < emarkers[j+1]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if (cand[i].key <= emarkers[j+1]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           lcounts[j]++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           i++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           j++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -156,11 +156,11 @@ void IRBinCoordinates(ctrl_t *ctrl, grap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       rcopy(nbins+1, nemarkers, emarkers);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     /* assign the coordinate to the appropriate bin */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     for (j=0, i=0; i<nvtxs;) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--      if (cand[i].key < emarkers[j+1]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+      if (cand[i].key <= emarkers[j+1]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         bxyz[cand[i].val*ndims+k] = j;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         i++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         j++;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/patch-shared-metis.diff b/math/parmetis/files/patch-shared-metis.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..e383afba421
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/math/parmetis/files/patch-shared-metis.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/KarypisLab/ParMETIS/pull/23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libparmetis/CMakeLists.txt libparmetis/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e8c3213..6fa6588 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libparmetis/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libparmetis/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7,6 +7,10 @@ file(GLOB parmetis_sources *.c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Create libparmetis
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_library(parmetis ${ParMETIS_LIBRARY_TYPE} ${parmetis_sources})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(SHARED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  target_link_libraries(parmetis metis GKlib)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install(TARGETS parmetis
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   LIBRARY DESTINATION lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   RUNTIME DESTINATION lib
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/sharedprefix.patch b/math/parmetis/files/sharedprefix.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 7942540c0c5..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/sharedprefix.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,23 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332116384 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID 91baffc7e83cf901cb335d75fdd8357d58548098
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  4d9a75647d775ec4146b3847f2ba66073a09b62d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cmake: add install_name for shared prefix builds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 4d9a75647d77 -r 91baffc7e83c CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/CMakeLists.txt       Sat Mar 30 16:08:12 2013 +0000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/CMakeLists.txt       Sun Mar 18 19:19:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -17,10 +17,11 @@ execute_process(COMMAND ${CMAKE_COMMAND}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_COMPILE_FLAGS}")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Prepare libraries.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if(SHARED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set(ParMETIS_LIBRARY_TYPE SHARED)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   set(ParMETIS_LIBRARY_TYPE STATIC)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endif()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- include(${GKLIB_PATH}/GKlibSystem.cmake)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/static.patch b/math/parmetis/files/static.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 502c84f4f5b..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/static.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,23 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332787739 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Mon Mar 26 13:48:59 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID e2c25776392e3f51975cb39dc656dc478d4272f1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  f537eb145f63cab8a201227ea98ad20877641d8f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-cmake: add metis library for linking to fix bug that appeared for static libraries not linking in the right order
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r f537eb145f63 -r e2c25776392e programs/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/programs/CMakeLists.txt      Mon Mar 26 13:48:12 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/programs/CMakeLists.txt      Mon Mar 26 13:48:59 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5,10 +5,10 @@ add_executable(mtest mtest.c io.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_executable(parmetis_prog parmetis.c io.c adaptgraph.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set_target_properties(parmetis_prog PROPERTIES OUTPUT_NAME parmetis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_executable(pometis pometis.c io.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Link to libparmetis.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach(prog ptest mtest parmetis_prog pometis)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  target_link_libraries(${prog} parmetis m)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  target_link_libraries(${prog} parmetis metis m)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endforeach(prog)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- install(TARGETS ptest mtest parmetis_prog pometis
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   RUNTIME DESTINATION bin)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/parmetis/files/tls.patch b/math/parmetis/files/tls.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index b841f998164..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/parmetis/files/tls.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,34 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# HG changeset patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# User Sean Farley <sean@mcs.anl.gov>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Date 1332345611 18000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#      Wed Mar 21 11:00:11 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Node ID 8220d6713ea21d8a119911ceed844e89f9fbcca4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Parent  9328e5d72eb288f306a95050929426ad9a6724d2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gklib: update header for __thread fix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -r 9328e5d72eb2 -r 8220d6713ea2 headers/gk_externs.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/headers/gk_externs.h Tue Mar 20 11:59:44 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/headers/gk_externs.h Wed Mar 21 11:00:11 2012 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -12,14 +12,19 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /*************************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Extern variable definition. Hopefully, the __thread makes them thread-safe.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- **************************************************************************/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* include the definition of metis__thread; it is assumed that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   gklib_tls.h will be installed 'globally' i.e. into $PREFIX */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <gklib_tls.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifndef _GK_ERROR_C_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* declared in error.c */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--extern __thread int gk_cur_jbufs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--extern __thread jmp_buf gk_jbufs[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--extern __thread jmp_buf gk_jbuf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern metis__thread int gk_cur_jbufs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern metis__thread jmp_buf gk_jbufs[];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern metis__thread jmp_buf gk_jbuf;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span></pre><pre style='margin:0'>

</pre>