- added GCC warning -Wstrict-prototypes
[blender.git] / intern / opennl / extern / ONL_opennl.h
1 /*
2  *  $Id$
3  *
4  *  OpenNL: Numerical Library
5  *  Copyright (C) 2004 Bruno Levy
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  *  If you modify this software, you should include a notice giving the
22  *  name of the person performing the modification, the date of modification,
23  *  and the reason for such modification.
24  *
25  *  Contact: Bruno Levy
26  *
27  *     levy@loria.fr
28  *
29  *     ISA Project
30  *     LORIA, INRIA Lorraine, 
31  *     Campus Scientifique, BP 239
32  *     54506 VANDOEUVRE LES NANCY CEDEX 
33  *     FRANCE
34  *
35  *  Note that the GNU General Public License does not permit incorporating
36  *  the Software into proprietary programs. 
37  */
38
39 /*
40 #define NL_DEBUG
41 #define NL_PARANOID
42 */
43
44 #define NL_USE_SUPERLU
45
46 #ifndef nlOPENNL_H
47 #define nlOPENNL_H
48
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52
53 #define NL_VERSION_0_0 1
54
55 /* Datatypes */
56
57 typedef unsigned int    NLenum;
58 typedef unsigned char   NLboolean;
59 typedef unsigned int    NLbitfield;
60 typedef void                    NLvoid;
61 typedef signed char             NLbyte;         /* 1-byte signed */
62 typedef short                   NLshort;        /* 2-byte signed */
63 typedef int                             NLint;          /* 4-byte signed */
64 typedef unsigned char   NLubyte;        /* 1-byte unsigned */
65 typedef unsigned short  NLushort;       /* 2-byte unsigned */
66 typedef unsigned int    NLuint;         /* 4-byte unsigned */
67 typedef int                             NLsizei;        /* 4-byte signed */
68 typedef float                   NLfloat;        /* single precision float */
69 typedef double                  NLdouble;       /* double precision float */
70
71 typedef void* NLContext;
72
73 /* Constants */
74
75 #define NL_FALSE   0x0
76 #define NL_TRUE    0x1
77
78 /* Primitives */
79
80 #define NL_SYSTEM  0x0
81 #define NL_MATRIX  0x1
82
83 /* Solver Parameters */
84
85 #define NL_SOLVER              0x100
86 #define NL_NB_VARIABLES        0x101
87 #define NL_LEAST_SQUARES       0x102
88 #define NL_SYMMETRIC           0x106
89 #define NL_ERROR               0x108
90 #define NL_NB_ROWS             0x110
91 #define NL_NB_RIGHT_HAND_SIDES 0x112 /* 4 max */
92
93 /* Contexts */
94
95 NLContext nlNewContext(void);
96 void nlDeleteContext(NLContext context);
97 void nlMakeCurrent(NLContext context);
98 NLContext nlGetCurrent(void);
99
100 /* State get/set */
101
102 void nlSolverParameterf(NLenum pname, NLfloat param);
103 void nlSolverParameteri(NLenum pname, NLint param);
104
105 void nlGetBooleanv(NLenum pname, NLboolean* params);
106 void nlGetFloatv(NLenum pname, NLfloat* params);
107 void nlGetIntergerv(NLenum pname, NLint* params);
108
109 void nlEnable(NLenum pname);
110 void nlDisable(NLenum pname);
111 NLboolean nlIsEnabled(NLenum pname);
112
113 /* Variables */
114
115 void nlSetVariable(NLuint rhsindex, NLuint index, NLfloat value);
116 NLfloat nlGetVariable(NLuint rhsindex, NLuint index);
117 void nlLockVariable(NLuint index);
118 void nlUnlockVariable(NLuint index);
119 NLboolean nlVariableIsLocked(NLuint index);
120
121 /* Begin/End */
122
123 void nlBegin(NLenum primitive);
124 void nlEnd(NLenum primitive);
125
126 /* Setting elements in matrix/vector */
127
128 void nlMatrixAdd(NLuint row, NLuint col, NLfloat value);
129 void nlRightHandSideAdd(NLuint rhsindex, NLuint index, NLfloat value);
130 void nlRightHandSideSet(NLuint rhsindex, NLuint index, NLfloat value);
131
132 /* Multiply */
133
134 void nlMatrixMultiply(NLfloat *x, NLfloat *y);
135
136 /* Solve */
137
138 void nlPrintMatrix(void);
139 NLboolean nlSolve(void);
140 NLboolean nlSolveAdvanced(NLint *permutation, NLboolean solveAgain);
141
142 #ifdef __cplusplus
143 }
144 #endif
145
146 #endif
147