Build internal muparser more simply
[alexxy/gromacs.git] / src / external / muparser / include / muParserDLL.h
1 /*
2
3          _____  __ _____________ _______  ______ ___________
4         /     \|  |  \____ \__  \\_  __ \/  ___// __ \_  __ \
5    |  Y Y  \  |  /  |_> > __ \|  | \/\___ \\  ___/|  | \/
6    |__|_|  /____/|   __(____  /__|  /____  >\___  >__|
7                  \/      |__|       \/           \/     \/
8    Copyright (C) 2004 - 2020 Ingo Berg
9
10         Redistribution and use in source and binary forms, with or without modification, are permitted
11         provided that the following conditions are met:
12
13           * Redistributions of source code must retain the above copyright notice, this list of
14                 conditions and the following disclaimer.
15           * Redistributions in binary form must reproduce the above copyright notice, this list of
16                 conditions and the following disclaimer in the documentation and/or other materials provided
17                 with the distribution.
18
19         THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
20         IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21         FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22         CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23         DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24         DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25         IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26         OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #ifndef MU_PARSER_DLL_H
30 #define MU_PARSER_DLL_H
31
32 #include "muParserFixes.h"
33
34 #ifdef __cplusplus
35 extern "C"
36 {
37 #endif
38
39         /** \file
40                 \brief This file contains the DLL interface of muparser.
41         */
42
43         // Basic types
44         typedef void* muParserHandle_t;    // parser handle
45
46 #ifndef _UNICODE
47         typedef char   muChar_t;            // character type
48 #else
49         typedef wchar_t   muChar_t;            // character type
50 #endif
51
52         typedef int    muBool_t;            // boolean type
53         typedef int    muInt_t;             // integer type 
54         typedef double muFloat_t;           // floating point type
55
56         // function types for calculation
57         typedef muFloat_t(*muFun0_t)(void);
58         typedef muFloat_t(*muFun1_t)(muFloat_t);
59         typedef muFloat_t(*muFun2_t)(muFloat_t, muFloat_t);
60         typedef muFloat_t(*muFun3_t)(muFloat_t, muFloat_t, muFloat_t);
61         typedef muFloat_t(*muFun4_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t);
62         typedef muFloat_t(*muFun5_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
63         typedef muFloat_t(*muFun6_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
64         typedef muFloat_t(*muFun7_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
65         typedef muFloat_t(*muFun8_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
66         typedef muFloat_t(*muFun9_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
67         typedef muFloat_t(*muFun10_t)(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
68
69         // Function prototypes for bulkmode functions
70         typedef muFloat_t(*muBulkFun0_t)(int, int);
71         typedef muFloat_t(*muBulkFun1_t)(int, int, muFloat_t);
72         typedef muFloat_t(*muBulkFun2_t)(int, int, muFloat_t, muFloat_t);
73         typedef muFloat_t(*muBulkFun3_t)(int, int, muFloat_t, muFloat_t, muFloat_t);
74         typedef muFloat_t(*muBulkFun4_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
75         typedef muFloat_t(*muBulkFun5_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
76         typedef muFloat_t(*muBulkFun6_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
77         typedef muFloat_t(*muBulkFun7_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
78         typedef muFloat_t(*muBulkFun8_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
79         typedef muFloat_t(*muBulkFun9_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
80         typedef muFloat_t(*muBulkFun10_t)(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
81
82         typedef muFloat_t(*muMultFun_t)(const muFloat_t*, muInt_t);
83         typedef muFloat_t(*muStrFun1_t)(const muChar_t*);
84         typedef muFloat_t(*muStrFun2_t)(const muChar_t*, muFloat_t);
85         typedef muFloat_t(*muStrFun3_t)(const muChar_t*, muFloat_t, muFloat_t);
86
87         // Functions for parser management
88         typedef void (*muErrorHandler_t)(muParserHandle_t a_hParser);           // [optional] callback to an error handler
89         typedef muFloat_t* (*muFacFun_t)(const muChar_t*, void*);               // [optional] callback for creating new variables
90         typedef muInt_t(*muIdentFun_t)(const muChar_t*, muInt_t*, muFloat_t*); // [optional] value identification callbacks
91
92         //-----------------------------------------------------------------------------------------------------
93         // Constants
94         static const int muOPRT_ASCT_LEFT = 0;
95         static const int muOPRT_ASCT_RIGHT = 1;
96
97         static const int muBASETYPE_FLOAT = 0;
98         static const int muBASETYPE_INT = 1;
99
100         //-----------------------------------------------------------------------------------------------------
101         //
102         //
103         // muParser C compatible bindings
104         //
105         //
106         //-----------------------------------------------------------------------------------------------------
107
108
109         // Basic operations / initialization  
110         API_EXPORT(muParserHandle_t) mupCreate(int nBaseType);
111         API_EXPORT(void) mupRelease(muParserHandle_t a_hParser);
112         API_EXPORT(const muChar_t*) mupGetExpr(muParserHandle_t a_hParser);
113         API_EXPORT(void) mupSetExpr(muParserHandle_t a_hParser, const muChar_t* a_szExpr);
114         API_EXPORT(void) mupSetVarFactory(muParserHandle_t a_hParser, muFacFun_t a_pFactory, void* pUserData);
115         API_EXPORT(const muChar_t*) mupGetVersion(muParserHandle_t a_hParser);
116         API_EXPORT(muFloat_t) mupEval(muParserHandle_t a_hParser);
117         API_EXPORT(muFloat_t*) mupEvalMulti(muParserHandle_t a_hParser, int* nNum);
118         API_EXPORT(void) mupEvalBulk(muParserHandle_t a_hParser, muFloat_t* a_fResult, int nSize);
119
120         // Defining callbacks / variables / constants
121         API_EXPORT(void) mupDefineFun0(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun0_t a_pFun, muBool_t a_bOptimize);
122         API_EXPORT(void) mupDefineFun1(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun1_t a_pFun, muBool_t a_bOptimize);
123         API_EXPORT(void) mupDefineFun2(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun2_t a_pFun, muBool_t a_bOptimize);
124         API_EXPORT(void) mupDefineFun3(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun3_t a_pFun, muBool_t a_bOptimize);
125         API_EXPORT(void) mupDefineFun4(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun4_t a_pFun, muBool_t a_bOptimize);
126         API_EXPORT(void) mupDefineFun5(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun5_t a_pFun, muBool_t a_bOptimize);
127         API_EXPORT(void) mupDefineFun6(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun6_t a_pFun, muBool_t a_bOptimize);
128         API_EXPORT(void) mupDefineFun7(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun7_t a_pFun, muBool_t a_bOptimize);
129         API_EXPORT(void) mupDefineFun8(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun8_t a_pFun, muBool_t a_bOptimize);
130         API_EXPORT(void) mupDefineFun9(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun9_t a_pFun, muBool_t a_bOptimize);
131         API_EXPORT(void) mupDefineFun10(muParserHandle_t a_hParser, const muChar_t* a_szName, muFun10_t a_pFun, muBool_t a_bOptimize);
132
133         // Defining bulkmode functions
134         API_EXPORT(void) mupDefineBulkFun0(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun0_t a_pFun);
135         API_EXPORT(void) mupDefineBulkFun1(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun1_t a_pFun);
136         API_EXPORT(void) mupDefineBulkFun2(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun2_t a_pFun);
137         API_EXPORT(void) mupDefineBulkFun3(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun3_t a_pFun);
138         API_EXPORT(void) mupDefineBulkFun4(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun4_t a_pFun);
139         API_EXPORT(void) mupDefineBulkFun5(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun5_t a_pFun);
140         API_EXPORT(void) mupDefineBulkFun6(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun6_t a_pFun);
141         API_EXPORT(void) mupDefineBulkFun7(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun7_t a_pFun);
142         API_EXPORT(void) mupDefineBulkFun8(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun8_t a_pFun);
143         API_EXPORT(void) mupDefineBulkFun9(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun9_t a_pFun);
144         API_EXPORT(void) mupDefineBulkFun10(muParserHandle_t a_hParser, const muChar_t* a_szName, muBulkFun10_t a_pFun);
145
146         // string functions
147         API_EXPORT(void) mupDefineStrFun1(muParserHandle_t a_hParser, const muChar_t* a_szName, muStrFun1_t a_pFun);
148         API_EXPORT(void) mupDefineStrFun2(muParserHandle_t a_hParser, const muChar_t* a_szName, muStrFun2_t a_pFun);
149         API_EXPORT(void) mupDefineStrFun3(muParserHandle_t a_hParser, const muChar_t* a_szName, muStrFun3_t a_pFun);
150
151         API_EXPORT(void) mupDefineMultFun(muParserHandle_t a_hParser,
152                 const muChar_t* a_szName,
153                 muMultFun_t a_pFun,
154                 muBool_t a_bOptimize);
155
156         API_EXPORT(void) mupDefineOprt(muParserHandle_t a_hParser,
157                 const muChar_t* a_szName,
158                 muFun2_t a_pFun,
159                 muInt_t a_nPrec,
160                 muInt_t a_nOprtAsct,
161                 muBool_t a_bOptimize);
162
163         API_EXPORT(void) mupDefineConst(muParserHandle_t a_hParser,
164                 const muChar_t* a_szName,
165                 muFloat_t a_fVal);
166
167         API_EXPORT(void) mupDefineStrConst(muParserHandle_t a_hParser,
168                 const muChar_t* a_szName,
169                 const muChar_t* a_sVal);
170
171         API_EXPORT(void) mupDefineVar(muParserHandle_t a_hParser,
172                 const muChar_t* a_szName,
173                 muFloat_t* a_fVar);
174
175         API_EXPORT(void) mupDefineBulkVar(muParserHandle_t a_hParser,
176                 const muChar_t* a_szName,
177                 muFloat_t* a_fVar);
178
179         API_EXPORT(void) mupDefinePostfixOprt(muParserHandle_t a_hParser,
180                 const muChar_t* a_szName,
181                 muFun1_t a_pOprt,
182                 muBool_t a_bOptimize);
183
184
185         API_EXPORT(void) mupDefineInfixOprt(muParserHandle_t a_hParser,
186                 const muChar_t* a_szName,
187                 muFun1_t a_pOprt,
188                 muBool_t a_bOptimize);
189
190         // Define character sets for identifiers
191         API_EXPORT(void) mupDefineNameChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset);
192         API_EXPORT(void) mupDefineOprtChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset);
193         API_EXPORT(void) mupDefineInfixOprtChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset);
194
195         // Remove all / single variables
196         API_EXPORT(void) mupRemoveVar(muParserHandle_t a_hParser, const muChar_t* a_szName);
197         API_EXPORT(void) mupClearVar(muParserHandle_t a_hParser);
198         API_EXPORT(void) mupClearConst(muParserHandle_t a_hParser);
199         API_EXPORT(void) mupClearOprt(muParserHandle_t a_hParser);
200         API_EXPORT(void) mupClearFun(muParserHandle_t a_hParser);
201
202         // Querying variables / expression variables / constants
203         API_EXPORT(int) mupGetExprVarNum(muParserHandle_t a_hParser);
204         API_EXPORT(int) mupGetVarNum(muParserHandle_t a_hParser);
205         API_EXPORT(int) mupGetConstNum(muParserHandle_t a_hParser);
206         API_EXPORT(void) mupGetExprVar(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t** a_pVar);
207         API_EXPORT(void) mupGetVar(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t** a_pVar);
208         API_EXPORT(void) mupGetConst(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t* a_pVar);
209         API_EXPORT(void) mupSetArgSep(muParserHandle_t a_hParser, const muChar_t cArgSep);
210         API_EXPORT(void) mupSetDecSep(muParserHandle_t a_hParser, const muChar_t cArgSep);
211         API_EXPORT(void) mupSetThousandsSep(muParserHandle_t a_hParser, const muChar_t cArgSep);
212         API_EXPORT(void) mupResetLocale(muParserHandle_t a_hParser);
213
214         // Add value recognition callbacks
215         API_EXPORT(void) mupAddValIdent(muParserHandle_t a_hParser, muIdentFun_t);
216
217         // Error handling
218         API_EXPORT(muBool_t) mupError(muParserHandle_t a_hParser);
219         API_EXPORT(void) mupErrorReset(muParserHandle_t a_hParser);
220         API_EXPORT(void) mupSetErrorHandler(muParserHandle_t a_hParser, muErrorHandler_t a_pErrHandler);
221         API_EXPORT(const muChar_t*) mupGetErrorMsg(muParserHandle_t a_hParser);
222         API_EXPORT(muInt_t) mupGetErrorCode(muParserHandle_t a_hParser);
223         API_EXPORT(muInt_t) mupGetErrorPos(muParserHandle_t a_hParser);
224         API_EXPORT(const muChar_t*) mupGetErrorToken(muParserHandle_t a_hParser);
225         //API_EXPORT(const muChar_t*) mupGetErrorExpr(muParserHandle_t a_hParser);
226
227         // This is used for .NET only. It creates a new variable allowing the dll to
228         // manage the variable rather than the .NET garbage collector.
229         API_EXPORT(muFloat_t*) mupCreateVar(void);
230         API_EXPORT(void) mupReleaseVar(muFloat_t*);
231
232 #ifdef __cplusplus
233 }
234 #endif
235
236 #endif // include guard