This repository has been archived by the owner on Apr 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 10
/
SuiteSparse_config.h
202 lines (172 loc) · 6.99 KB
/
SuiteSparse_config.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/* ========================================================================== */
/* === SuiteSparse_config =================================================== */
/* ========================================================================== */
/* Configuration file for SuiteSparse: a Suite of Sparse matrix packages
* (AMD, COLAMD, CCOLAMD, CAMD, CHOLMOD, UMFPACK, CXSparse, and others).
*
* SuiteSparse_config.h provides the definition of the long integer. On most
* systems, a C program can be compiled in LP64 mode, in which long's and
* pointers are both 64-bits, and int's are 32-bits. Windows 64, however, uses
* the LLP64 model, in which int's and long's are 32-bits, and long long's and
* pointers are 64-bits.
*
* SuiteSparse packages that include long integer versions are
* intended for the LP64 mode. However, as a workaround for Windows 64
* (and perhaps other systems), the long integer can be redefined.
*
* If _WIN64 is defined, then the __int64 type is used instead of long.
*
* The long integer can also be defined at compile time. For example, this
* could be added to SuiteSparse_config.mk:
*
* CFLAGS = -O -D'SuiteSparse_long=long long' \
* -D'SuiteSparse_long_max=9223372036854775801' -D'SuiteSparse_long_idd="lld"'
*
* This file defines SuiteSparse_long as either long (on all but _WIN64) or
* __int64 on Windows 64. The intent is that a SuiteSparse_long is always a
* 64-bit integer in a 64-bit code. ptrdiff_t might be a better choice than
* long; it is always the same size as a pointer.
*
* This file also defines the SUITESPARSE_VERSION and related definitions.
*
* Copyright (c) 2012, Timothy A. Davis. No licensing restrictions apply
* to this file or to the SuiteSparse_config directory.
* Author: Timothy A. Davis.
*/
#ifndef _SUITESPARSECONFIG_H
#define _SUITESPARSECONFIG_H
#ifdef __cplusplus
extern "C" {
#endif
#include <limits.h>
#include <stdlib.h>
/* ========================================================================== */
/* === SuiteSparse_long ===================================================== */
/* ========================================================================== */
#ifndef SuiteSparse_long
#ifdef _WIN64
#define SuiteSparse_long __int64
#define SuiteSparse_long_max _I64_MAX
#define SuiteSparse_long_idd "I64d"
#else
#define SuiteSparse_long long
#define SuiteSparse_long_max LONG_MAX
#define SuiteSparse_long_idd "ld"
#endif
#define SuiteSparse_long_id "%" SuiteSparse_long_idd
#endif
/* For backward compatibility with prior versions of SuiteSparse. The UF_*
* macros are deprecated and will be removed in a future version. */
#ifndef UF_long
#define UF_long SuiteSparse_long
#define UF_long_max SuiteSparse_long_max
#define UF_long_idd SuiteSparse_long_idd
#define UF_long_id SuiteSparse_long_id
#endif
/* ========================================================================== */
/* === SuiteSparse_config parameters and functions ========================== */
/* ========================================================================== */
/* SuiteSparse-wide parameters will be placed in this struct. */
typedef struct SuiteSparse_config_struct
{
void *(*malloc_memory) (size_t) ; /* pointer to malloc */
void *(*realloc_memory) (void *, size_t) ; /* pointer to realloc */
void (*free_memory) (void *) ; /* pointer to free */
void *(*calloc_memory) (size_t, size_t) ; /* pointer to calloc */
} SuiteSparse_config ;
void *SuiteSparse_malloc /* pointer to allocated block of memory */
(
size_t nitems, /* number of items to malloc (>=1 is enforced) */
size_t size_of_item, /* sizeof each item */
int *ok, /* TRUE if successful, FALSE otherwise */
SuiteSparse_config *config /* SuiteSparse-wide configuration */
) ;
void *SuiteSparse_free /* always returns NULL */
(
void *p, /* block to free */
SuiteSparse_config *config /* SuiteSparse-wide configuration */
) ;
void SuiteSparse_tic /* start the timer */
(
double tic [2] /* output, contents undefined on input */
) ;
double SuiteSparse_toc /* return time in seconds since last tic */
(
double tic [2] /* input: from last call to SuiteSparse_tic */
) ;
double SuiteSparse_time /* returns current wall clock time in seconds */
(
void
) ;
/* determine which timer to use, if any */
#ifndef NTIMER
#ifdef _POSIX_C_SOURCE
#if _POSIX_C_SOURCE >= 199309L
#define SUITESPARSE_TIMER_ENABLED
#endif
#endif
#endif
/* ========================================================================== */
/* === SuiteSparse version ================================================== */
/* ========================================================================== */
/* SuiteSparse is not a package itself, but a collection of packages, some of
* which must be used together (UMFPACK requires AMD, CHOLMOD requires AMD,
* COLAMD, CAMD, and CCOLAMD, etc). A version number is provided here for the
* collection itself. The versions of packages within each version of
* SuiteSparse are meant to work together. Combining one packge from one
* version of SuiteSparse, with another package from another version of
* SuiteSparse, may or may not work.
*
* SuiteSparse contains the following packages:
*
* SuiteSparse_config version 4.2.1 (version always the same as SuiteSparse)
* AMD version 2.3.1
* BTF version 1.2.0
* CAMD version 2.3.1
* CCOLAMD version 2.8.0
* CHOLMOD version 2.1.2
* COLAMD version 2.8.0
* CSparse version 3.1.2
* CXSparse version 3.1.2
* KLU version 1.2.1
* LDL version 2.1.0
* RBio version 2.1.1
* SPQR version 1.3.1 (full name is SuiteSparseQR)
* UMFPACK version 5.6.2
* MATLAB_Tools various packages & M-files
*
* Other package dependencies:
* BLAS required by CHOLMOD and UMFPACK
* LAPACK required by CHOLMOD
* METIS 4.0.1 required by CHOLMOD (optional) and KLU (optional)
*/
int SuiteSparse_version /* returns SUITESPARSE_VERSION */
(
/* output, not defined on input. Not used if NULL. Returns
the three version codes in version [0..2]:
version [0] is SUITESPARSE_MAIN_VERSION
version [1] is SUITESPARSE_SUB_VERSION
version [2] is SUITESPARSE_SUBSUB_VERSION
*/
int version [3]
) ;
/* Versions prior to 4.2.0 do not have the above function. The following
code fragment will work with any version of SuiteSparse:
#ifdef SUITESPARSE_HAS_VERSION_FUNCTION
v = SuiteSparse_version (NULL) ;
#else
v = SUITESPARSE_VERSION ;
#endif
*/
#define SUITESPARSE_HAS_VERSION_FUNCTION
#define SUITESPARSE_DATE "April 25, 2013"
#define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub))
#define SUITESPARSE_MAIN_VERSION 4
#define SUITESPARSE_SUB_VERSION 2
#define SUITESPARSE_SUBSUB_VERSION 1
#define SUITESPARSE_VERSION \
SUITESPARSE_VER_CODE(SUITESPARSE_MAIN_VERSION,SUITESPARSE_SUB_VERSION)
#ifdef __cplusplus
}
#endif
#endif