Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
dgl
Commits
3359c1f1
Commit
3359c1f1
authored
May 12, 2023
by
lisj
Browse files
增加GKLib
parent
f2c80b44
Changes
63
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
5715 additions
and
1 deletion
+5715
-1
third_party/METIS/.gitignore
third_party/METIS/.gitignore
+0
-1
third_party/METIS/GKlib/CMakeLists.txt
third_party/METIS/GKlib/CMakeLists.txt
+21
-0
third_party/METIS/GKlib/GKlib.h
third_party/METIS/GKlib/GKlib.h
+86
-0
third_party/METIS/GKlib/GKlibSystem.cmake
third_party/METIS/GKlib/GKlibSystem.cmake
+137
-0
third_party/METIS/GKlib/LICENSE.txt
third_party/METIS/GKlib/LICENSE.txt
+18
-0
third_party/METIS/GKlib/Makefile
third_party/METIS/GKlib/Makefile
+80
-0
third_party/METIS/GKlib/README.md
third_party/METIS/GKlib/README.md
+54
-0
third_party/METIS/GKlib/b64.c
third_party/METIS/GKlib/b64.c
+95
-0
third_party/METIS/GKlib/blas.c
third_party/METIS/GKlib/blas.c
+37
-0
third_party/METIS/GKlib/conf/check_thread_storage.c
third_party/METIS/GKlib/conf/check_thread_storage.c
+5
-0
third_party/METIS/GKlib/csr.c
third_party/METIS/GKlib/csr.c
+3378
-0
third_party/METIS/GKlib/error.c
third_party/METIS/GKlib/error.c
+214
-0
third_party/METIS/GKlib/evaluate.c
third_party/METIS/GKlib/evaluate.c
+132
-0
third_party/METIS/GKlib/fkvkselect.c
third_party/METIS/GKlib/fkvkselect.c
+142
-0
third_party/METIS/GKlib/fs.c
third_party/METIS/GKlib/fs.c
+225
-0
third_party/METIS/GKlib/getopt.c
third_party/METIS/GKlib/getopt.c
+855
-0
third_party/METIS/GKlib/gk_arch.h
third_party/METIS/GKlib/gk_arch.h
+66
-0
third_party/METIS/GKlib/gk_defs.h
third_party/METIS/GKlib/gk_defs.h
+81
-0
third_party/METIS/GKlib/gk_externs.h
third_party/METIS/GKlib/gk_externs.h
+25
-0
third_party/METIS/GKlib/gk_getopt.h
third_party/METIS/GKlib/gk_getopt.h
+64
-0
No files found.
third_party/METIS/.gitignore
View file @
3359c1f1
...
@@ -57,6 +57,5 @@ graphs/*.part.*
...
@@ -57,6 +57,5 @@ graphs/*.part.*
graphs/*.iperm
graphs/*.iperm
graphs/*.epart.*
graphs/*.epart.*
graphs/*.npart.*
graphs/*.npart.*
GKlib
.svn/
.svn/
third_party/METIS/GKlib/CMakeLists.txt
0 → 100644
View file @
3359c1f1
cmake_minimum_required
(
VERSION 2.8
)
project
(
GKlib C
)
get_filename_component
(
abs
"."
ABSOLUTE
)
set
(
GKLIB_PATH
${
abs
}
)
unset
(
abs
)
include
(
GKlibSystem.cmake
)
include_directories
(
"."
)
add_library
(
GKlib STATIC
${
GKlib_sources
}
)
if
(
UNIX
)
target_link_libraries
(
GKlib m
)
endif
(
UNIX
)
include_directories
(
"test"
)
add_subdirectory
(
"test"
)
install
(
TARGETS GKlib
ARCHIVE DESTINATION lib/
${
LINSTALL_PATH
}
LIBRARY DESTINATION lib/
${
LINSTALL_PATH
}
)
install
(
FILES
${
GKlib_includes
}
DESTINATION include/
${
HINSTALL_PATH
}
)
third_party/METIS/GKlib/GKlib.h
0 → 100644
View file @
3359c1f1
/*
* GKlib.h
*
* George's library of most frequently used routines
*
* $Id: GKlib.h 14866 2013-08-03 16:40:04Z karypis $
*
*/
#ifndef _GKLIB_H_
#define _GKLIB_H_ 1
#define GKMSPACE
#if defined(_MSC_VER)
#define __MSC__
#endif
#if defined(__ICC)
#define __ICC__
#endif
#include "gk_arch.h"
/*!< This should be here, prior to the includes */
/*************************************************************************
* Header file inclusion section
**************************************************************************/
#include <stddef.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <memory.h>
#include <errno.h>
#include <ctype.h>
#include <math.h>
#include <float.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <signal.h>
#include <setjmp.h>
#include <assert.h>
#include <sys/stat.h>
#if defined(__WITHPCRE__)
#include <pcreposix.h>
#else
#if defined(USE_GKREGEX)
#include "gkregex.h"
#else
#include <regex.h>
#endif
/* defined(USE_GKREGEX) */
#endif
/* defined(__WITHPCRE__) */
#if defined(__OPENMP__)
#include <omp.h>
#endif
#include <gk_types.h>
#include <gk_struct.h>
#include <gk_externs.h>
#include <gk_defs.h>
#include <gk_macros.h>
#include <gk_getopt.h>
#include <gk_mksort.h>
#include <gk_mkblas.h>
#include <gk_mkmemory.h>
#include <gk_mkpqueue.h>
#include <gk_mkpqueue2.h>
#include <gk_mkrandom.h>
#include <gk_mkutils.h>
#include <gk_proto.h>
#endif
/* GKlib.h */
third_party/METIS/GKlib/GKlibSystem.cmake
0 → 100644
View file @
3359c1f1
# Helper modules.
include
(
CheckFunctionExists
)
include
(
CheckIncludeFile
)
# Setup options.
option
(
GDB
"enable use of GDB"
OFF
)
option
(
ASSERT
"turn asserts on"
OFF
)
option
(
ASSERT2
"additional assertions"
OFF
)
option
(
DEBUG
"add debugging support"
OFF
)
option
(
GPROF
"add gprof support"
OFF
)
option
(
OPENMP
"enable OpenMP support"
OFF
)
option
(
PCRE
"enable PCRE support"
OFF
)
option
(
GKREGEX
"enable GKREGEX support"
OFF
)
option
(
GKRAND
"enable GKRAND support"
OFF
)
# Add compiler flags.
if
(
MSVC
)
set
(
GKlib_COPTS
"/Ox"
)
set
(
GKlib_COPTIONS
"-DWIN32 -DMSC -D_CRT_SECURE_NO_DEPRECATE -DUSE_GKREGEX"
)
elseif
(
MINGW
)
set
(
GKlib_COPTS
"-DUSE_GKREGEX"
)
else
()
set
(
GKlib_COPTIONS
"-DLINUX -D_FILE_OFFSET_BITS=64"
)
endif
(
MSVC
)
if
(
CYGWIN
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DCYGWIN"
)
endif
(
CYGWIN
)
if
(
CMAKE_COMPILER_IS_GNUCC
)
# GCC opts.
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-std=c99 -fno-strict-aliasing"
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-march=native"
)
if
(
NOT MINGW
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-fPIC"
)
endif
(
NOT MINGW
)
# GCC warnings.
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-Werror -Wall -pedantic -Wno-unused-function -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unknown-pragmas"
)
elseif
(
${
CMAKE_C_COMPILER_ID
}
MATCHES
"Sun"
)
# Sun insists on -xc99.
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-xc99"
)
endif
(
CMAKE_COMPILER_IS_GNUCC
)
# Intel compiler
if
(
${
CMAKE_C_COMPILER_ID
}
MATCHES
"Intel"
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-xHost -std=c99"
)
endif
()
# Find OpenMP if it is requested.
if
(
OPENMP
)
include
(
FindOpenMP
)
if
(
OPENMP_FOUND
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-D__OPENMP__
${
OpenMP_C_FLAGS
}
"
)
else
()
message
(
WARNING
"OpenMP was requested but support was not found"
)
endif
(
OPENMP_FOUND
)
endif
(
OPENMP
)
# Add various definitions.
if
(
GDB
)
set
(
GKlib_COPTS
"
${
GKlib_COPTS
}
-g"
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-Werror"
)
else
()
set
(
GKlib_COPTS
"-O3"
)
endif
(
GDB
)
if
(
DEBUG
)
set
(
GKlib_COPTS
"-g"
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DDEBUG"
)
endif
(
DEBUG
)
if
(
GPROF
)
set
(
GKlib_COPTS
"-pg"
)
endif
(
GPROF
)
if
(
NOT ASSERT
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DNDEBUG"
)
endif
(
NOT ASSERT
)
if
(
NOT ASSERT2
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DNDEBUG2"
)
endif
(
NOT ASSERT2
)
# Add various options
if
(
PCRE
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-D__WITHPCRE__"
)
endif
(
PCRE
)
if
(
GKREGEX
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DUSE_GKREGEX"
)
endif
(
GKREGEX
)
if
(
GKRAND
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DUSE_GKRAND"
)
endif
(
GKRAND
)
# Check for features.
check_include_file
(
execinfo.h HAVE_EXECINFO_H
)
if
(
HAVE_EXECINFO_H
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DHAVE_EXECINFO_H"
)
endif
(
HAVE_EXECINFO_H
)
check_function_exists
(
getline HAVE_GETLINE
)
if
(
HAVE_GETLINE
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-DHAVE_GETLINE"
)
endif
(
HAVE_GETLINE
)
# Custom check for TLS.
if
(
MSVC
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-D__thread=__declspec(thread)"
)
# This if checks if that value is cached or not.
if
(
"
${
HAVE_THREADLOCALSTORAGE
}
"
MATCHES
"^
${
HAVE_THREADLOCALSTORAGE
}
$"
)
try_compile
(
HAVE_THREADLOCALSTORAGE
${
CMAKE_BINARY_DIR
}
${
GKLIB_PATH
}
/conf/check_thread_storage.c
)
if
(
HAVE_THREADLOCALSTORAGE
)
message
(
STATUS
"checking for thread-local storage - found"
)
else
()
message
(
STATUS
"checking for thread-local storage - not found"
)
endif
()
endif
()
if
(
NOT HAVE_THREADLOCALSTORAGE
)
set
(
GKlib_COPTIONS
"
${
GKlib_COPTIONS
}
-D__thread="
)
endif
()
endif
()
# Finally set the official C flags.
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
${
GKlib_COPTIONS
}
${
GKlib_COPTS
}
"
)
# Find GKlib sources.
file
(
GLOB GKlib_sources
${
GKLIB_PATH
}
/*.c
)
file
(
GLOB GKlib_includes
${
GKLIB_PATH
}
/*.h
)
third_party/METIS/GKlib/LICENSE.txt
0 → 100644
View file @
3359c1f1
Copyright & License Notice
---------------------------
Copyright 1995-2018, Regents of the University of Minnesota
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language governing
permissions and limitations under the License.
third_party/METIS/GKlib/Makefile
0 → 100644
View file @
3359c1f1
# Configuration options.
cc
=
gcc
prefix
=
~/local
openmp
=
not-set
gdb
=
not-set
assert
=
not-set
assert2
=
not-set
debug
=
not-set
gprof
=
not-set
pcre
=
not-set
gkregex
=
not-set
gkrand
=
not-set
# Basically proxies everything to the builddir cmake.
cputype
=
$(
shell
uname
-m
|
sed
"s/
\\
/_/g"
)
systype
=
$(
shell
uname
-s
)
BUILDDIR
=
build/
$(systype)
-
$(cputype)
# Process configuration options.
CONFIG_FLAGS
=
-DCMAKE_VERBOSE_MAKEFILE
=
1
ifneq
($(gdb), not-set)
CONFIG_FLAGS
+=
-DGDB
=
$(gdb)
endif
ifneq
($(assert), not-set)
CONFIG_FLAGS
+=
-DASSERT
=
$(assert)
endif
ifneq
($(assert2), not-set)
CONFIG_FLAGS
+=
-DASSERT2
=
$(assert2)
endif
ifneq
($(debug), not-set)
CONFIG_FLAGS
+=
-DDEBUG
=
$(debug)
endif
ifneq
($(gprof), not-set)
CONFIG_FLAGS
+=
-DGPROF
=
$(gprof)
endif
ifneq
($(openmp), not-set)
CONFIG_FLAGS
+=
-DOPENMP
=
$(openmp)
endif
ifneq
($(pcre), not-set)
CONFIG_FLAGS
+=
-DPCRE
=
$(pcre)
endif
ifneq
($(gkregex), not-set)
CONFIG_FLAGS
+=
-DGKREGEX
=
$(pcre)
endif
ifneq
($(gkrand), not-set)
CONFIG_FLAGS
+=
-DGKRAND
=
$(pcre)
endif
ifneq
($(prefix), not-set)
CONFIG_FLAGS
+=
-DCMAKE_INSTALL_PREFIX
=
$(prefix)
endif
ifneq
($(cc), not-set)
CONFIG_FLAGS
+=
-DCMAKE_C_COMPILER
=
$(cc)
endif
define
run-config
mkdir
-p
$(BUILDDIR)
cd
$(BUILDDIR)
&&
cmake
$(CURDIR)
$(CONFIG_FLAGS)
endef
all clean install
:
$(BUILDDIR)
make
-C
$(BUILDDIR)
$@
uninstall
:
xargs
rm
<
$(BUILDDIR)
/install_manifest.txt
$(BUILDDIR)
:
$
(
run-config
)
config
:
distclean
$
(
run-config
)
distclean
:
rm
-rf
$(BUILDDIR)
remake
:
find
.
-name
CMakeLists.txt
-exec
touch
{}
';'
.PHONY
:
config distclean all clean install uninstall remake
third_party/METIS/GKlib/README.md
0 → 100644
View file @
3359c1f1
# GKlib
A library of various helper routines and frameworks used by many of the lab's software
## Build requirements
-
CMake 2.8, found at http://www.cmake.org/, as well as GNU make.
Assuming that the above are available, two commands should suffice to
build the software:
```
make config
make
```
## Configuring the build
It is primarily configured by passing options to make config. For example:
```
make config cc=icc
```
would configure it to be built using icc.
Configuration options are:
```
cc=[compiler] - The C compiler to use [default: gcc]
prefix=[PATH] - Set the installation prefix [default: ~/local]
openmp=set - To build a version with OpenMP support
```
## Building and installing
To build and install, run the following
```
make
make install
```
By default, the library file, header file, and binaries will be installed in
```
~/local/lib
~/local/include
~/local/bin
```
## Other make commands
make uninstall
Removes all files installed by 'make install'.
make clean
Removes all object files but retains the configuration options.
make distclean
Performs clean and completely removes the build directory.
third_party/METIS/GKlib/b64.c
0 → 100644
View file @
3359c1f1
/*!
\file b64.c
\brief This file contains some simple 8bit-to-6bit encoding/deconding routines
Most of these routines are outdated and should be converted using glibc's equivalent
routines.
\date Started 2/22/05
\author George
\version\verbatim $Id: b64.c 10711 2011-08-31 22:23:04Z karypis $ \endverbatim
\verbatim
$Copyright$
$License$
\endverbatim
*/
#include "GKlib.h"
#define B64OFFSET 48
/* This is the '0' number */
/******************************************************************************
* Encode 3 '8-bit' binary bytes as 4 '6-bit' characters
*******************************************************************************/
void
encodeblock
(
unsigned
char
*
in
,
unsigned
char
*
out
)
{
out
[
0
]
=
(
in
[
0
]
>>
2
);
out
[
1
]
=
(((
in
[
0
]
&
0x03
)
<<
4
)
|
(
in
[
1
]
>>
4
));
out
[
2
]
=
(((
in
[
1
]
&
0x0f
)
<<
2
)
|
(
in
[
2
]
>>
6
));
out
[
3
]
=
(
in
[
2
]
&
0x3f
);
out
[
0
]
+=
B64OFFSET
;
out
[
1
]
+=
B64OFFSET
;
out
[
2
]
+=
B64OFFSET
;
out
[
3
]
+=
B64OFFSET
;
// printf("%c %c %c %c %2x %2x %2x %2x %2x %2x %2x\n", out[0], out[1], out[2], out[3], out[0], out[1], out[2], out[3], in[0], in[1], in[2]);
}
/******************************************************************************
* Decode 4 '6-bit' characters into 3 '8-bit' binary bytes
*******************************************************************************/
void
decodeblock
(
unsigned
char
*
in
,
unsigned
char
*
out
)
{
in
[
0
]
-=
B64OFFSET
;
in
[
1
]
-=
B64OFFSET
;
in
[
2
]
-=
B64OFFSET
;
in
[
3
]
-=
B64OFFSET
;
out
[
0
]
=
(
in
[
0
]
<<
2
|
in
[
1
]
>>
4
);
out
[
1
]
=
(
in
[
1
]
<<
4
|
in
[
2
]
>>
2
);
out
[
2
]
=
(
in
[
2
]
<<
6
|
in
[
3
]);
}
/******************************************************************************
* This function encodes an input array of bytes into a base64 encoding. Memory
* for the output array is assumed to have been allocated by the calling program
* and be sufficiently large. The output string is NULL terminated.
*******************************************************************************/
void
GKEncodeBase64
(
int
nbytes
,
unsigned
char
*
inbuffer
,
unsigned
char
*
outbuffer
)
{
int
i
,
j
;
if
(
nbytes
%
3
!=
0
)
gk_errexit
(
SIGERR
,
"GKEncodeBase64: Input buffer size should be a multiple of 3! (%d)
\n
"
,
nbytes
);
for
(
j
=
0
,
i
=
0
;
i
<
nbytes
;
i
+=
3
,
j
+=
4
)
encodeblock
(
inbuffer
+
i
,
outbuffer
+
j
);
//printf("%d %d\n", nbytes, j);
outbuffer
[
j
]
=
'\0'
;
}
/******************************************************************************
* This function decodes an input array of base64 characters into their actual
* 8-bit codes. Memory * for the output array is assumed to have been allocated
* by the calling program and be sufficiently large. The padding is discarded.
*******************************************************************************/
void
GKDecodeBase64
(
int
nbytes
,
unsigned
char
*
inbuffer
,
unsigned
char
*
outbuffer
)
{
int
i
,
j
;
if
(
nbytes
%
4
!=
0
)
gk_errexit
(
SIGERR
,
"GKDecodeBase64: Input buffer size should be a multiple of 4! (%d)
\n
"
,
nbytes
);
for
(
j
=
0
,
i
=
0
;
i
<
nbytes
;
i
+=
4
,
j
+=
3
)
decodeblock
(
inbuffer
+
i
,
outbuffer
+
j
);
}
third_party/METIS/GKlib/blas.c
0 → 100644
View file @
3359c1f1
/*!
\file blas.c
\brief This file contains GKlib's implementation of BLAS-like routines
The BLAS routines that are currently implemented are mostly level-one.
They follow a naming convention of the type gk_[type][name], where
[type] is one of c, i, f, and d, based on C's four standard scalar
datatypes of characters, integers, floats, and doubles.
These routines are implemented using a generic macro template,
which is used for code generation.
\date Started 9/28/95
\author George
\version\verbatim $Id: blas.c 14330 2013-05-18 12:15:15Z karypis $ \endverbatim
*/
#include <GKlib.h>
/*************************************************************************/
/*! Use the templates to generate BLAS routines for the scalar data types */
/*************************************************************************/
GK_MKBLAS
(
gk_c
,
char
,
int
)
GK_MKBLAS
(
gk_i
,
int
,
int
)
GK_MKBLAS
(
gk_i32
,
int32_t
,
int32_t
)
GK_MKBLAS
(
gk_i64
,
int64_t
,
int64_t
)
GK_MKBLAS
(
gk_z
,
ssize_t
,
ssize_t
)
GK_MKBLAS
(
gk_zu
,
size_t
,
size_t
)
GK_MKBLAS
(
gk_f
,
float
,
float
)
GK_MKBLAS
(
gk_d
,
double
,
double
)
GK_MKBLAS
(
gk_idx
,
gk_idx_t
,
gk_idx_t
)
third_party/METIS/GKlib/conf/check_thread_storage.c
0 → 100644
View file @
3359c1f1
extern
__thread
int
x
;
int
main
(
int
argc
,
char
**
argv
)
{
return
0
;
}
third_party/METIS/GKlib/csr.c
0 → 100644
View file @
3359c1f1
This diff is collapsed.
Click to expand it.
third_party/METIS/GKlib/error.c
0 → 100644
View file @
3359c1f1
/*!
\file error.c
\brief Various error-handling functions
This file contains functions dealing with error reporting and termination
\author George
\date 1/1/2007
\version\verbatim $Id: error.c 10711 2011-08-31 22:23:04Z karypis $ \endverbatim
*/
#define _GK_ERROR_C_
/* this is needed to properly declare the gk_jub* variables
as an extern function in GKlib.h */
#include <GKlib.h>
/* These are the jmp_buf for the graceful exit in case of severe errors.
Multiple buffers are defined to allow for recursive invokation. */
#define MAX_JBUFS 128
__thread
int
gk_cur_jbufs
=-
1
;
__thread
jmp_buf
gk_jbufs
[
MAX_JBUFS
];
__thread
jmp_buf
gk_jbuf
;
typedef
void
(
*
gksighandler_t
)(
int
);
/* These are the holders of the old singal handlers for the trapped signals */
static
__thread
gksighandler_t
old_SIGMEM_handler
;
/* Custom signal */
static
__thread
gksighandler_t
old_SIGERR_handler
;
/* Custom signal */
static
__thread
gksighandler_t
old_SIGMEM_handlers
[
MAX_JBUFS
];
/* Custom signal */
static
__thread
gksighandler_t
old_SIGERR_handlers
[
MAX_JBUFS
];
/* Custom signal */
/* The following is used to control if the gk_errexit() will actually abort or not.
There is always a single copy of this variable */
static
int
gk_exit_on_error
=
1
;
/*************************************************************************/
/*! This function sets the gk_exit_on_error variable
*/
/*************************************************************************/
void
gk_set_exit_on_error
(
int
value
)
{
gk_exit_on_error
=
value
;
}
/*************************************************************************/
/*! This function prints an error message and exits
*/
/*************************************************************************/
void
errexit
(
char
*
f_str
,...)
{
va_list
argp
;
va_start
(
argp
,
f_str
);
vfprintf
(
stderr
,
f_str
,
argp
);
va_end
(
argp
);
if
(
strlen
(
f_str
)
==
0
||
f_str
[
strlen
(
f_str
)
-
1
]
!=
'\n'
)
fprintf
(
stderr
,
"
\n
"
);
fflush
(
stderr
);
if
(
gk_exit_on_error
)
exit
(
-
2
);
/* abort(); */
}
/*************************************************************************/
/*! This function prints an error message and raises a signum signal
*/
/*************************************************************************/
void
gk_errexit
(
int
signum
,
char
*
f_str
,...)
{
va_list
argp
;
va_start
(
argp
,
f_str
);
vfprintf
(
stderr
,
f_str
,
argp
);
va_end
(
argp
);
fprintf
(
stderr
,
"
\n
"
);
fflush
(
stderr
);
if
(
gk_exit_on_error
)
raise
(
signum
);
}
/***************************************************************************/
/*! This function sets a number of signal handlers and sets the return point
of a longjmp
*/
/***************************************************************************/
int
gk_sigtrap
()
{
if
(
gk_cur_jbufs
+
1
>=
MAX_JBUFS
)
return
0
;
gk_cur_jbufs
++
;
old_SIGMEM_handlers
[
gk_cur_jbufs
]
=
signal
(
SIGMEM
,
gk_sigthrow
);
old_SIGERR_handlers
[
gk_cur_jbufs
]
=
signal
(
SIGERR
,
gk_sigthrow
);
return
1
;
}
/***************************************************************************/
/*! This function sets the handlers for the signals to their default handlers
*/
/***************************************************************************/
int
gk_siguntrap
()
{
if
(
gk_cur_jbufs
==
-
1
)
return
0
;
signal
(
SIGMEM
,
old_SIGMEM_handlers
[
gk_cur_jbufs
]);
signal
(
SIGERR
,
old_SIGERR_handlers
[
gk_cur_jbufs
]);
gk_cur_jbufs
--
;
return
1
;
}
/*************************************************************************/
/*! This function is the custome signal handler, which all it does is to
perform a longjump to the most recent saved environment
*/
/*************************************************************************/
void
gk_sigthrow
(
int
signum
)
{
longjmp
(
gk_jbufs
[
gk_cur_jbufs
],
signum
);
}
/***************************************************************************
* This function sets a number of signal handlers and sets the return point
* of a longjmp
****************************************************************************/
void
gk_SetSignalHandlers
()
{
old_SIGMEM_handler
=
signal
(
SIGMEM
,
gk_NonLocalExit_Handler
);
old_SIGERR_handler
=
signal
(
SIGERR
,
gk_NonLocalExit_Handler
);
}
/***************************************************************************
* This function sets the handlers for the signals to their default handlers
****************************************************************************/
void
gk_UnsetSignalHandlers
()
{
signal
(
SIGMEM
,
old_SIGMEM_handler
);
signal
(
SIGERR
,
old_SIGERR_handler
);
}
/*************************************************************************
* This function is the handler for SIGUSR1 that implements the cleaning up
* process prior to a non-local exit.
**************************************************************************/
void
gk_NonLocalExit_Handler
(
int
signum
)
{
longjmp
(
gk_jbuf
,
signum
);
}
/*************************************************************************/
/*! \brief Thread-safe implementation of strerror() */
/**************************************************************************/
char
*
gk_strerror
(
int
errnum
)
{
#if defined(WIN32) || defined(__MINGW32__)
return
strerror
(
errnum
);
#else
#ifndef SUNOS
static
__thread
char
buf
[
1024
];
strerror_r
(
errnum
,
buf
,
1024
);
buf
[
1023
]
=
'\0'
;
return
buf
;
#else
return
strerror
(
errnum
);
#endif
#endif
}
/*************************************************************************
* This function prints a backtrace of calling functions
**************************************************************************/
void
PrintBackTrace
()
{
#ifdef HAVE_EXECINFO_H
void
*
array
[
10
];
int
i
,
size
;
char
**
strings
;
size
=
backtrace
(
array
,
10
);
strings
=
backtrace_symbols
(
array
,
size
);
printf
(
"Obtained %d stack frames.
\n
"
,
size
);
for
(
i
=
0
;
i
<
size
;
i
++
)
{
printf
(
"%s
\n
"
,
strings
[
i
]);
}
free
(
strings
);
#endif
}
third_party/METIS/GKlib/evaluate.c
0 → 100644
View file @
3359c1f1
/*!
\file evaluate.c
\brief Various routines to evaluate classification performance
\author George
\date 9/23/2008
\version\verbatim $Id: evaluate.c 13328 2012-12-31 14:57:40Z karypis $ \endverbatim
*/
#include <GKlib.h>
/**********************************************************************
* This function computes the max accuracy score of a ranked list,
* given +1/-1 class list
**********************************************************************/
float
ComputeAccuracy
(
int
n
,
gk_fkv_t
*
list
)
{
int
i
,
P
,
N
,
TP
,
FN
=
0
;
float
bAccuracy
=
0
.
0
;
float
acc
;
for
(
P
=
0
,
i
=
0
;
i
<
n
;
i
++
)
P
+=
(
list
[
i
].
val
==
1
?
1
:
0
);
N
=
n
-
P
;
TP
=
FN
=
0
;
for
(
i
=
0
;
i
<
n
;
i
++
){
if
(
list
[
i
].
val
==
1
)
TP
++
;
else
FN
++
;
acc
=
(
TP
+
N
-
FN
)
*
100
.
0
/
(
P
+
N
)
;
if
(
acc
>
bAccuracy
)
bAccuracy
=
acc
;
}
return
bAccuracy
;
}
/*****************************************************************************
* This function computes the ROC score of a ranked list, given a +1/-1 class
* list.
******************************************************************************/
float
ComputeROCn
(
int
n
,
int
maxN
,
gk_fkv_t
*
list
)
{
int
i
,
P
,
TP
,
FP
,
TPprev
,
FPprev
,
AUC
;
float
prev
;
FP
=
TP
=
FPprev
=
TPprev
=
AUC
=
0
;
prev
=
list
[
0
].
key
-
1
;
for
(
P
=
0
,
i
=
0
;
i
<
n
;
i
++
)
P
+=
(
list
[
i
].
val
==
1
?
1
:
0
);
for
(
i
=
0
;
i
<
n
&&
FP
<
maxN
;
i
++
)
{
if
(
list
[
i
].
key
!=
prev
)
{
AUC
+=
(
TP
+
TPprev
)
*
(
FP
-
FPprev
)
/
2
;
prev
=
list
[
i
].
key
;
FPprev
=
FP
;
TPprev
=
TP
;
}
if
(
list
[
i
].
val
==
1
)
TP
++
;
else
{
FP
++
;
}
}
AUC
+=
(
TP
+
TPprev
)
*
(
FP
-
FPprev
)
/
2
;
return
(
TP
*
FP
>
0
?
(
float
)(
1
.
0
*
AUC
/
(
P
*
FP
))
:
0
.
0
);
}
/*****************************************************************************
* This function computes the median rate of false positive for each positive
* instance.
******************************************************************************/
float
ComputeMedianRFP
(
int
n
,
gk_fkv_t
*
list
)
{
int
i
,
P
,
N
,
TP
,
FP
;
P
=
N
=
0
;
for
(
i
=
0
;
i
<
n
;
i
++
)
{
if
(
list
[
i
].
val
==
1
)
P
++
;
else
N
++
;
}
FP
=
TP
=
0
;
for
(
i
=
0
;
i
<
n
&&
TP
<
(
P
+
1
)
/
2
;
i
++
)
{
if
(
list
[
i
].
val
==
1
)
TP
++
;
else
FP
++
;
}
return
1
.
0
*
FP
/
N
;
}
/*********************************************************
* Compute the mean
********************************************************/
float
ComputeMean
(
int
n
,
float
*
values
)
{
int
i
;
float
mean
=
0
.
0
;
for
(
i
=
0
;
i
<
n
;
i
++
)
mean
+=
values
[
i
];
return
1
.
0
*
mean
/
n
;
}
/********************************************************
* Compute the standard deviation
********************************************************/
float
ComputeStdDev
(
int
n
,
float
*
values
)
{
int
i
;
float
mean
=
ComputeMean
(
n
,
values
);
float
stdDev
=
0
;
for
(
i
=
0
;
i
<
n
;
i
++
){
stdDev
+=
(
values
[
i
]
-
mean
)
*
(
values
[
i
]
-
mean
);
}
return
sqrt
(
1
.
0
*
stdDev
/
n
);
}
third_party/METIS/GKlib/fkvkselect.c
0 → 100644
View file @
3359c1f1
/*!
\file dfkvkselect.c
\brief Sorts only the largest k values
\date Started 7/14/00
\author George
\version\verbatim $Id: fkvkselect.c 10711 2011-08-31 22:23:04Z karypis $\endverbatim
*/
#include <GKlib.h>
/* Byte-wise swap two items of size SIZE. */
#define QSSWAP(a, b, stmp) do { stmp = (a); (a) = (b); (b) = stmp; } while (0)
/******************************************************************************/
/*! This function puts the 'topk' largest values in the beginning of the array */
/*******************************************************************************/
int
gk_dfkvkselect
(
size_t
n
,
int
topk
,
gk_fkv_t
*
cand
)
{
int
i
,
j
,
lo
,
hi
,
mid
;
gk_fkv_t
stmp
;
float
pivot
;
if
(
n
<=
topk
)
return
n
;
/* return if the array has fewer elements than we want */
for
(
lo
=
0
,
hi
=
n
-
1
;
lo
<
hi
;)
{
mid
=
lo
+
((
hi
-
lo
)
>>
1
);
/* select the median */
if
(
cand
[
lo
].
key
<
cand
[
mid
].
key
)
mid
=
lo
;
if
(
cand
[
hi
].
key
>
cand
[
mid
].
key
)
mid
=
hi
;
else
goto
jump_over
;
if
(
cand
[
lo
].
key
<
cand
[
mid
].
key
)
mid
=
lo
;
jump_over:
QSSWAP
(
cand
[
mid
],
cand
[
hi
],
stmp
);
pivot
=
cand
[
hi
].
key
;
/* the partitioning algorithm */
for
(
i
=
lo
-
1
,
j
=
lo
;
j
<
hi
;
j
++
)
{
if
(
cand
[
j
].
key
>=
pivot
)
{
i
++
;
QSSWAP
(
cand
[
i
],
cand
[
j
],
stmp
);
}
}
i
++
;
QSSWAP
(
cand
[
i
],
cand
[
hi
],
stmp
);
if
(
i
>
topk
)
hi
=
i
-
1
;
else
if
(
i
<
topk
)
lo
=
i
+
1
;
else
break
;
}
/*
if (cand[lo].key < cand[hi].key)
printf("Hmm Error: %d %d %d %f %f\n", i, lo, hi, cand[lo].key, cand[hi].key);
for (i=topk; i<n; i++) {
for (j=0; j<topk; j++)
if (cand[i].key > cand[j].key)
printf("Hmm Error: %d %d %f %f %d %d\n", i, j, cand[i].key, cand[j].key, lo, hi);
}
*/
return
topk
;
}
/******************************************************************************/
/*! This function puts the 'topk' smallest values in the beginning of the array */
/*******************************************************************************/
int
gk_ifkvkselect
(
size_t
n
,
int
topk
,
gk_fkv_t
*
cand
)
{
int
i
,
j
,
lo
,
hi
,
mid
;
gk_fkv_t
stmp
;
float
pivot
;
if
(
n
<=
topk
)
return
n
;
/* return if the array has fewer elements than we want */
for
(
lo
=
0
,
hi
=
n
-
1
;
lo
<
hi
;)
{
mid
=
lo
+
((
hi
-
lo
)
>>
1
);
/* select the median */
if
(
cand
[
lo
].
key
>
cand
[
mid
].
key
)
mid
=
lo
;
if
(
cand
[
hi
].
key
<
cand
[
mid
].
key
)
mid
=
hi
;
else
goto
jump_over
;
if
(
cand
[
lo
].
key
>
cand
[
mid
].
key
)
mid
=
lo
;
jump_over:
QSSWAP
(
cand
[
mid
],
cand
[
hi
],
stmp
);
pivot
=
cand
[
hi
].
key
;
/* the partitioning algorithm */
for
(
i
=
lo
-
1
,
j
=
lo
;
j
<
hi
;
j
++
)
{
if
(
cand
[
j
].
key
<=
pivot
)
{
i
++
;
QSSWAP
(
cand
[
i
],
cand
[
j
],
stmp
);
}
}
i
++
;
QSSWAP
(
cand
[
i
],
cand
[
hi
],
stmp
);
if
(
i
>
topk
)
hi
=
i
-
1
;
else
if
(
i
<
topk
)
lo
=
i
+
1
;
else
break
;
}
/*
if (cand[lo].key > cand[hi].key)
printf("Hmm Error: %d %d %d %f %f\n", i, lo, hi, cand[lo].key, cand[hi].key);
for (i=topk; i<n; i++) {
for (j=0; j<topk; j++)
if (cand[i].key < cand[j].key)
printf("Hmm Error: %d %d %f %f %d %d\n", i, j, cand[i].key, cand[j].key, lo, hi);
}
*/
return
topk
;
}
third_party/METIS/GKlib/fs.c
0 → 100644
View file @
3359c1f1
/*!
\file fs.c
\brief Various file-system functions.
This file contains various functions that deal with interfacing with
the filesystem in a portable way.
\date Started 4/10/95
\author George
\version\verbatim $Id: fs.c 14332 2013-05-18 12:22:57Z karypis $ \endverbatim
*/
#include <GKlib.h>
/*************************************************************************
* This function checks if a file exists
**************************************************************************/
int
gk_fexists
(
char
*
fname
)
{
struct
stat
status
;
if
(
stat
(
fname
,
&
status
)
==
-
1
)
return
0
;
return
S_ISREG
(
status
.
st_mode
);
}
/*************************************************************************
* This function checks if a directory exists
**************************************************************************/
int
gk_dexists
(
char
*
dirname
)
{
struct
stat
status
;
if
(
stat
(
dirname
,
&
status
)
==
-
1
)
return
0
;
return
S_ISDIR
(
status
.
st_mode
);
}
/*************************************************************************/
/*! \brief Returns the size of the file in bytes
This function returns the size of a file as a 64 bit integer. If there
were any errors in stat'ing the file, -1 is returned.
\note That due to the -1 return code, the maximum file size is limited to
63 bits (which I guess is okay for now).
*/
/**************************************************************************/
ssize_t
gk_getfsize
(
char
*
filename
)
{
struct
stat
status
;
if
(
stat
(
filename
,
&
status
)
==
-
1
)
return
-
1
;
return
(
size_t
)(
status
.
st_size
);
}
/*************************************************************************/
/*! This function gets some basic statistics about the file.
\param fname is the name of the file
\param r_nlines is the number of lines in the file. If it is NULL,
this information is not returned.
\param r_ntokens is the number of tokens in the file. If it is NULL,
this information is not returned.
\param r_max_nlntokens is the maximum number of tokens in any line
in the file. If it is NULL this information is not returned.
\param r_nbytes is the number of bytes in the file. If it is NULL,
this information is not returned.
*/
/*************************************************************************/
void
gk_getfilestats
(
char
*
fname
,
size_t
*
r_nlines
,
size_t
*
r_ntokens
,
size_t
*
r_max_nlntokens
,
size_t
*
r_nbytes
)
{
size_t
nlines
=
0
,
ntokens
=
0
,
max_nlntokens
=
0
,
nbytes
=
0
,
oldntokens
=
0
,
nread
;
int
intoken
=
0
;
char
buffer
[
2049
],
*
cptr
;
FILE
*
fpin
;
fpin
=
gk_fopen
(
fname
,
"r"
,
"gk_GetFileStats"
);
while
(
!
feof
(
fpin
))
{
nread
=
fread
(
buffer
,
sizeof
(
char
),
2048
,
fpin
);
nbytes
+=
nread
;
buffer
[
nread
]
=
'\0'
;
/* There is space for this one */
for
(
cptr
=
buffer
;
*
cptr
!=
'\0'
;
cptr
++
)
{
if
(
*
cptr
==
'\n'
)
{
nlines
++
;
ntokens
+=
intoken
;
intoken
=
0
;
if
(
max_nlntokens
<
ntokens
-
oldntokens
)
max_nlntokens
=
ntokens
-
oldntokens
;
oldntokens
=
ntokens
;
}
else
if
(
*
cptr
==
' '
||
*
cptr
==
'\t'
)
{
ntokens
+=
intoken
;
intoken
=
0
;
}
else
{
intoken
=
1
;
}
}
}
ntokens
+=
intoken
;
if
(
max_nlntokens
<
ntokens
-
oldntokens
)
max_nlntokens
=
ntokens
-
oldntokens
;
gk_fclose
(
fpin
);
if
(
r_nlines
!=
NULL
)
*
r_nlines
=
nlines
;
if
(
r_ntokens
!=
NULL
)
*
r_ntokens
=
ntokens
;
if
(
r_max_nlntokens
!=
NULL
)
*
r_max_nlntokens
=
max_nlntokens
;
if
(
r_nbytes
!=
NULL
)
*
r_nbytes
=
nbytes
;
}
/*************************************************************************
* This function takes in a potentially full path specification of a file
* and just returns a string containing just the basename of the file.
* The basename is derived from the actual filename by stripping the last
* .ext part.
**************************************************************************/
char
*
gk_getbasename
(
char
*
path
)
{
char
*
startptr
,
*
endptr
;
char
*
basename
;
if
((
startptr
=
strrchr
(
path
,
'/'
))
==
NULL
)
startptr
=
path
;
else
startptr
=
startptr
+
1
;
basename
=
gk_strdup
(
startptr
);
if
((
endptr
=
strrchr
(
basename
,
'.'
))
!=
NULL
)
*
endptr
=
'\0'
;
return
basename
;
}
/*************************************************************************
* This function takes in a potentially full path specification of a file
* and just returns a string corresponding to its file extension. The
* extension of a file is considered to be the string right after the
* last '.' character.
**************************************************************************/
char
*
gk_getextname
(
char
*
path
)
{
char
*
startptr
;
if
((
startptr
=
strrchr
(
path
,
'.'
))
==
NULL
)
return
gk_strdup
(
path
);
else
return
gk_strdup
(
startptr
+
1
);
}
/*************************************************************************
* This function takes in a potentially full path specification of a file
* and just returns a string containing just the filename.
**************************************************************************/
char
*
gk_getfilename
(
char
*
path
)
{
char
*
startptr
;
if
((
startptr
=
strrchr
(
path
,
'/'
))
==
NULL
)
return
gk_strdup
(
path
);
else
return
gk_strdup
(
startptr
+
1
);
}
/*************************************************************************
* This function takes in a potentially full path specification of a file
* and extracts the directory path component if it exists, otherwise it
* returns "./" as the path. The memory for it is dynamically allocated.
**************************************************************************/
char
*
getpathname
(
char
*
path
)
{
char
*
endptr
,
*
tmp
;
if
((
endptr
=
strrchr
(
path
,
'/'
))
==
NULL
)
{
return
gk_strdup
(
"."
);
}
else
{
tmp
=
gk_strdup
(
path
);
*
(
strrchr
(
tmp
,
'/'
))
=
'\0'
;
return
tmp
;
}
}
/*************************************************************************
* This function creates a path
**************************************************************************/
int
gk_mkpath
(
char
*
pathname
)
{
char
tmp
[
2048
];
sprintf
(
tmp
,
"mkdir -p %s"
,
pathname
);
return
system
(
tmp
);
}
/*************************************************************************
* This function deletes a directory tree and all of its contents
**************************************************************************/
int
gk_rmpath
(
char
*
pathname
)
{
char
tmp
[
2048
];
sprintf
(
tmp
,
"rm -r %s"
,
pathname
);
return
system
(
tmp
);
}
third_party/METIS/GKlib/getopt.c
0 → 100644
View file @
3359c1f1
This diff is collapsed.
Click to expand it.
third_party/METIS/GKlib/gk_arch.h
0 → 100644
View file @
3359c1f1
/*!
\file gk_arch.h
\brief This file contains various architecture-specific declerations
\date Started 3/27/2007
\author George
\version\verbatim $Id: gk_arch.h 21637 2018-01-03 22:37:24Z karypis $ \endverbatim
*/
#ifndef _GK_ARCH_H_
#define _GK_ARCH_H_
/*************************************************************************
* Architecture-specific differences in header files
**************************************************************************/
#ifdef LINUX
#if !defined(__USE_XOPEN)
#define __USE_XOPEN
#endif
#if !defined(_XOPEN_SOURCE)
#define _XOPEN_SOURCE 600
#endif
#if !defined(__USE_XOPEN2K)
#define __USE_XOPEN2K
#endif
#endif
#ifdef HAVE_EXECINFO_H
#include <execinfo.h>
#endif
#ifdef __MSC__
#include "ms_stdint.h"
#include "ms_inttypes.h"
#include "ms_stat.h"
#else
#ifndef SUNOS
#include <stdint.h>
#endif
#include <inttypes.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/time.h>
#endif
/*************************************************************************
* Architecture-specific modifications
**************************************************************************/
#ifdef WIN32
typedef
ptrdiff_t
ssize_t
;
#endif
#ifdef SUNOS
#define PTRDIFF_MAX INT64_MAX
#endif
/* MSC does not have INFINITY defined */
#ifndef INFINITY
#define INFINITY FLT_MAX
#endif
#endif
third_party/METIS/GKlib/gk_defs.h
0 → 100644
View file @
3359c1f1
/*!
\file gk_defs.h
\brief This file contains various constants definitions
\date Started 3/27/2007
\author George
\version\verbatim $Id: gk_defs.h 21012 2017-05-19 03:05:23Z karypis $ \endverbatim
*/
#ifndef _GK_DEFS_H_
#define _GK_DEFS_H_
#define LTERM (void **) 0
/* List terminator for GKfree() */
/* mopt_t types */
#define GK_MOPT_MARK 1
#define GK_MOPT_CORE 2
#define GK_MOPT_HEAP 3
#define HTABLE_EMPTY -1
#define HTABLE_DELETED -2
#define HTABLE_FIRST 1
#define HTABLE_NEXT 2
/* pdb corruption bit switches */
#define CRP_ALTLOCS 1
#define CRP_MISSINGCA 2
#define CRP_MISSINGBB 4
#define CRP_MULTICHAIN 8
#define CRP_MULTICA 16
#define CRP_MULTIBB 32
#define MAXLINELEN 300000
/* GKlib signals to standard signal mapping */
#define SIGMEM SIGABRT
#define SIGERR SIGTERM
/* CSR-related defines */
#define GK_CSR_ROW 1
#define GK_CSR_COL 2
#define GK_CSR_ROWCOL 3
#define GK_CSR_MAXTF 1
#define GK_CSR_SQRT 2
#define GK_CSR_POW25 3
#define GK_CSR_POW65 4
#define GK_CSR_POW75 5
#define GK_CSR_POW85 6
#define GK_CSR_LOG 7
#define GK_CSR_IDF 8
#define GK_CSR_IDF2 9
#define GK_CSR_MAXTF2 10
#define GK_CSR_DOTP 1
#define GK_CSR_COS 2
#define GK_CSR_JAC 3
#define GK_CSR_MIN 4
#define GK_CSR_AMIN 5
#define GK_CSR_FMT_AUTO 2
#define GK_CSR_FMT_CLUTO 1
#define GK_CSR_FMT_CSR 2
#define GK_CSR_FMT_METIS 3
#define GK_CSR_FMT_BINROW 4
#define GK_CSR_FMT_BINCOL 5
#define GK_CSR_FMT_IJV 6
#define GK_CSR_FMT_BIJV 7
#define GK_CSR_SYM_SUM 1
#define GK_CSR_SYM_MIN 2
#define GK_CSR_SYM_MAX 3
#define GK_CSR_SYM_AVG 4
#define GK_GRAPH_FMT_METIS 1
#define GK_GRAPH_FMT_IJV 2
#endif
third_party/METIS/GKlib/gk_externs.h
0 → 100644
View file @
3359c1f1
/*!
\file gk_externs.h
\brief This file contains definitions of external variables created by GKlib
\date Started 3/27/2007
\author George
\version\verbatim $Id: gk_externs.h 10711 2011-08-31 22:23:04Z karypis $ \endverbatim
*/
#ifndef _GK_EXTERNS_H_
#define _GK_EXTERNS_H_
/*************************************************************************
* Extern variable definition. Hopefully, the __thread makes them thread-safe.
**************************************************************************/
#ifndef _GK_ERROR_C_
/* declared in error.c */
extern
__thread
int
gk_cur_jbufs
;
extern
__thread
jmp_buf
gk_jbufs
[];
extern
__thread
jmp_buf
gk_jbuf
;
#endif
#endif
third_party/METIS/GKlib/gk_getopt.h
0 → 100644
View file @
3359c1f1
/*!
\file gk_getopt.h
\brief This file contains GNU's externs/structs/prototypes
\date Started 3/27/2007
\author George
\version\verbatim $Id: gk_getopt.h 10711 2011-08-31 22:23:04Z karypis $ \endverbatim
*/
#ifndef _GK_GETOPT_H_
#define _GK_GETOPT_H_
/* Externals from getopt.c */
extern
char
*
gk_optarg
;
extern
int
gk_optind
;
extern
int
gk_opterr
;
extern
int
gk_optopt
;
/*! \brief The structure that stores the information about the command-line options
This structure describes a single long option name for the sake of
gk_getopt_long(). The argument <tt>long_options</tt> must be an array
of these structures, one for each long option. Terminate the array with
an element containing all zeros.
*/
struct
gk_option
{
char
*
name
;
/*!< This field is the name of the option. */
int
has_arg
;
/*!< This field says whether the option takes an argument.
It is an integer, and there are three legitimate values:
no_argument, required_argument and optional_argument.
*/
int
*
flag
;
/*!< See the discussion on ::gk_option#val */
int
val
;
/*!< These fields control how to report or act on the option
when it occurs.
If flag is a null pointer, then the val is a value which
identifies this option. Often these values are chosen
to uniquely identify particular long options.
If flag is not a null pointer, it should be the address
of an int variable which is the flag for this option.
The value in val is the value to store in the flag to
indicate that the option was seen. */
};
/* Names for the values of the `has_arg' field of `struct gk_option'. */
#define no_argument 0
#define required_argument 1
#define optional_argument 2
/* Function prototypes */
extern
int
gk_getopt
(
int
__argc
,
char
**
__argv
,
char
*
__shortopts
);
extern
int
gk_getopt_long
(
int
__argc
,
char
**
__argv
,
char
*
__shortopts
,
struct
gk_option
*
__longopts
,
int
*
__longind
);
extern
int
gk_getopt_long_only
(
int
__argc
,
char
**
__argv
,
char
*
__shortopts
,
struct
gk_option
*
__longopts
,
int
*
__longind
);
#endif
Prev
1
2
3
4
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment