muParser API -  1.35
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
muParserDLL.h
Go to the documentation of this file.
1 /*
2  __________
3  _____ __ __\______ \_____ _______ ______ ____ _______
4  / \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \
5  | Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/
6  |__|_| /|____/ |____| (____ /|__| /____ > \___ >|__|
7  \/ \/ \/ \/
8  Copyright (C) 2011 Ingo Berg
9 
10  Permission is hereby granted, free of charge, to any person obtaining a copy of this
11  software and associated documentation files (the "Software"), to deal in the Software
12  without restriction, including without limitation the rights to use, copy, modify,
13  merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
14  permit persons to whom the Software is furnished to do so, subject to the following conditions:
15 
16  The above copyright notice and this permission notice shall be included in all copies or
17  substantial portions of the Software.
18 
19  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
20  NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 */
25 #ifndef MU_PARSER_DLL_H
26 #define MU_PARSER_DLL_H
27 
28 #if defined(WIN32) || defined(_WIN32)
29  #ifdef MUPARSERLIB_EXPORTS
30  #define API_EXPORT(TYPE) __declspec(dllexport) TYPE __cdecl
31  #else
32  #define API_EXPORT(TYPE) __declspec(dllimport) TYPE __cdecl
33  #endif
34 #else
35  #define API_EXPORT(TYPE) TYPE
36 #endif
37 
38 
39 #ifdef __cplusplus
40 extern "C"
41 {
42 #endif
43 
44 /** \file
45  \brief This file contains the DLL interface of muparser.
46 */
47 
48 // Basic types
49 typedef void* muParserHandle_t; // parser handle
50 
51 #ifndef _UNICODE
52  typedef char muChar_t; // character type
53 #else
54  typedef wchar_t muChar_t; // character type
55 #endif
56 
57 typedef int muBool_t; // boolean type
58 typedef int muInt_t; // integer type
59 typedef double muFloat_t; // floating point type
60 
61 // function types for calculation
62 typedef muFloat_t (*muFun0_t )();
63 typedef muFloat_t (*muFun1_t )(muFloat_t);
64 typedef muFloat_t (*muFun2_t )(muFloat_t, muFloat_t);
65 typedef muFloat_t (*muFun3_t )(muFloat_t, muFloat_t, muFloat_t);
66 typedef muFloat_t (*muFun4_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t);
67 typedef muFloat_t (*muFun5_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
68 typedef muFloat_t (*muFun6_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
69 typedef muFloat_t (*muFun7_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
70 typedef muFloat_t (*muFun8_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
71 typedef muFloat_t (*muFun9_t )(muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
72 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);
73 
74 // Function prototypes for bulkmode functions
75 typedef muFloat_t (*muBulkFun0_t )(int, int);
76 typedef muFloat_t (*muBulkFun1_t )(int, int, muFloat_t);
77 typedef muFloat_t (*muBulkFun2_t )(int, int, muFloat_t, muFloat_t);
78 typedef muFloat_t (*muBulkFun3_t )(int, int, muFloat_t, muFloat_t, muFloat_t);
79 typedef muFloat_t (*muBulkFun4_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
80 typedef muFloat_t (*muBulkFun5_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
81 typedef muFloat_t (*muBulkFun6_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
82 typedef muFloat_t (*muBulkFun7_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
83 typedef muFloat_t (*muBulkFun8_t )(int, int, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t, muFloat_t);
84 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);
85 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);
86 
87 typedef muFloat_t (*muMultFun_t)(const muFloat_t*, muInt_t);
88 typedef muFloat_t (*muStrFun1_t)(const muChar_t*);
89 typedef muFloat_t (*muStrFun2_t)(const muChar_t*, muFloat_t);
90 typedef muFloat_t (*muStrFun3_t)(const muChar_t*, muFloat_t, muFloat_t);
91 
92 // Functions for parser management
93 typedef void (*muErrorHandler_t)(muParserHandle_t a_hParser); // [optional] callback to an error handler
94 typedef muFloat_t* (*muFacFun_t)(const muChar_t*, void*); // [optional] callback for creating new variables
95 typedef muInt_t (*muIdentFun_t)(const muChar_t*, muInt_t*, muFloat_t*); // [optional] value identification callbacks
96 
97 //-----------------------------------------------------------------------------------------------------
98 // Constants
99 static const int muOPRT_ASCT_LEFT = 0;
100 static const int muOPRT_ASCT_RIGHT = 1;
101 
102 static const int muBASETYPE_FLOAT = 0;
103 static const int muBASETYPE_INT = 1;
104 
105 //-----------------------------------------------------------------------------------------------------
106 //
107 //
108 // muParser C compatible bindings
109 //
110 //
111 //-----------------------------------------------------------------------------------------------------
112 
113 
114 // Basic operations / initialization
115 API_EXPORT(muParserHandle_t) mupCreate(int nBaseType);
116 API_EXPORT(void) mupRelease(muParserHandle_t a_hParser);
117 API_EXPORT(const muChar_t*) mupGetExpr(muParserHandle_t a_hParser);
118 API_EXPORT(void) mupSetExpr(muParserHandle_t a_hParser, const muChar_t *a_szExpr);
119 API_EXPORT(void) mupSetVarFactory(muParserHandle_t a_hParser, muFacFun_t a_pFactory, void* pUserData);
120 API_EXPORT(const muChar_t*) mupGetVersion(muParserHandle_t a_hParser);
121 API_EXPORT(muFloat_t) mupEval(muParserHandle_t a_hParser);
122 API_EXPORT(muFloat_t*) mupEvalMulti(muParserHandle_t a_hParser, int *nNum);
123 API_EXPORT(void) mupEvalBulk(muParserHandle_t a_hParser, muFloat_t *a_fResult, int nSize);
124 
125 // Defining callbacks / variables / constants
126 API_EXPORT(void) mupDefineFun0(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun0_t a_pFun, muBool_t a_bOptimize);
127 API_EXPORT(void) mupDefineFun1(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun1_t a_pFun, muBool_t a_bOptimize);
128 API_EXPORT(void) mupDefineFun2(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun2_t a_pFun, muBool_t a_bOptimize);
129 API_EXPORT(void) mupDefineFun3(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun3_t a_pFun, muBool_t a_bOptimize);
130 API_EXPORT(void) mupDefineFun4(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun4_t a_pFun, muBool_t a_bOptimize);
131 API_EXPORT(void) mupDefineFun5(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun5_t a_pFun, muBool_t a_bOptimize);
132 API_EXPORT(void) mupDefineFun6(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun6_t a_pFun, muBool_t a_bOptimize);
133 API_EXPORT(void) mupDefineFun7(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun7_t a_pFun, muBool_t a_bOptimize);
134 API_EXPORT(void) mupDefineFun8(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun8_t a_pFun, muBool_t a_bOptimize);
135 API_EXPORT(void) mupDefineFun9(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun9_t a_pFun, muBool_t a_bOptimize);
136 API_EXPORT(void) mupDefineFun10(muParserHandle_t a_hParser, const muChar_t *a_szName, muFun10_t a_pFun, muBool_t a_bOptimize);
137 
138 // Defining bulkmode functions
139 API_EXPORT(void) mupDefineBulkFun0(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun0_t a_pFun);
140 API_EXPORT(void) mupDefineBulkFun1(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun1_t a_pFun);
141 API_EXPORT(void) mupDefineBulkFun2(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun2_t a_pFun);
142 API_EXPORT(void) mupDefineBulkFun3(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun3_t a_pFun);
143 API_EXPORT(void) mupDefineBulkFun4(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun4_t a_pFun);
144 API_EXPORT(void) mupDefineBulkFun5(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun5_t a_pFun);
145 API_EXPORT(void) mupDefineBulkFun6(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun6_t a_pFun);
146 API_EXPORT(void) mupDefineBulkFun7(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun7_t a_pFun);
147 API_EXPORT(void) mupDefineBulkFun8(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun8_t a_pFun);
148 API_EXPORT(void) mupDefineBulkFun9(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun9_t a_pFun);
149 API_EXPORT(void) mupDefineBulkFun10(muParserHandle_t a_hParser, const muChar_t *a_szName, muBulkFun10_t a_pFun);
150 
151 // string functions
152 API_EXPORT(void) mupDefineStrFun1(muParserHandle_t a_hParser, const muChar_t *a_szName, muStrFun1_t a_pFun);
153 API_EXPORT(void) mupDefineStrFun2(muParserHandle_t a_hParser, const muChar_t *a_szName, muStrFun2_t a_pFun);
154 API_EXPORT(void) mupDefineStrFun3(muParserHandle_t a_hParser, const muChar_t *a_szName, muStrFun3_t a_pFun);
155 
156 API_EXPORT(void) mupDefineMultFun( muParserHandle_t a_hParser,
157  const muChar_t* a_szName,
158  muMultFun_t a_pFun,
159  muBool_t a_bOptimize);
160 
161 API_EXPORT(void) mupDefineOprt( muParserHandle_t a_hParser,
162  const muChar_t* a_szName,
163  muFun2_t a_pFun,
164  muInt_t a_nPrec,
165  muInt_t a_nOprtAsct,
166  muBool_t a_bOptimize);
167 
168 API_EXPORT(void) mupDefineConst( muParserHandle_t a_hParser,
169  const muChar_t* a_szName,
170  muFloat_t a_fVal );
171 
172 API_EXPORT(void) mupDefineStrConst( muParserHandle_t a_hParser,
173  const muChar_t* a_szName,
174  const muChar_t *a_sVal );
175 
176 API_EXPORT(void) mupDefineVar( muParserHandle_t a_hParser,
177  const muChar_t* a_szName,
178  muFloat_t *a_fVar);
179 
180 API_EXPORT(void) mupDefineBulkVar( muParserHandle_t a_hParser,
181  const muChar_t* a_szName,
182  muFloat_t *a_fVar);
183 
184 API_EXPORT(void) mupDefinePostfixOprt( muParserHandle_t a_hParser,
185  const muChar_t* a_szName,
186  muFun1_t a_pOprt,
187  muBool_t a_bOptimize);
188 
189 
190 API_EXPORT(void) mupDefineInfixOprt( muParserHandle_t a_hParser,
191  const muChar_t* a_szName,
192  muFun1_t a_pOprt,
193  muBool_t a_bOptimize);
194 
195 // Define character sets for identifiers
196 API_EXPORT(void) mupDefineNameChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset);
197 API_EXPORT(void) mupDefineOprtChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset);
198 API_EXPORT(void) mupDefineInfixOprtChars(muParserHandle_t a_hParser, const muChar_t* a_szCharset);
199 
200 // Remove all / single variables
201 API_EXPORT(void) mupRemoveVar(muParserHandle_t a_hParser, const muChar_t* a_szName);
202 API_EXPORT(void) mupClearVar(muParserHandle_t a_hParser);
203 API_EXPORT(void) mupClearConst(muParserHandle_t a_hParser);
204 API_EXPORT(void) mupClearOprt(muParserHandle_t a_hParser);
205 API_EXPORT(void) mupClearFun(muParserHandle_t a_hParser);
206 
207 // Querying variables / expression variables / constants
208 API_EXPORT(int) mupGetExprVarNum(muParserHandle_t a_hParser);
209 API_EXPORT(int) mupGetVarNum(muParserHandle_t a_hParser);
210 API_EXPORT(int) mupGetConstNum(muParserHandle_t a_hParser);
211 API_EXPORT(void) mupGetExprVar(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t** a_pVar);
212 API_EXPORT(void) mupGetVar(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t** a_pVar);
213 API_EXPORT(void) mupGetConst(muParserHandle_t a_hParser, unsigned a_iVar, const muChar_t** a_pszName, muFloat_t* a_pVar);
214 API_EXPORT(void) mupSetArgSep(muParserHandle_t a_hParser, const muChar_t cArgSep);
215 API_EXPORT(void) mupSetDecSep(muParserHandle_t a_hParser, const muChar_t cArgSep);
216 API_EXPORT(void) mupSetThousandsSep(muParserHandle_t a_hParser, const muChar_t cArgSep);
217 API_EXPORT(void) mupResetLocale(muParserHandle_t a_hParser);
218 
219 // Add value recognition callbacks
220 API_EXPORT(void) mupAddValIdent(muParserHandle_t a_hParser, muIdentFun_t);
221 
222 // Error handling
223 API_EXPORT(muBool_t) mupError(muParserHandle_t a_hParser);
224 API_EXPORT(void) mupErrorReset(muParserHandle_t a_hParser);
225 API_EXPORT(void) mupSetErrorHandler(muParserHandle_t a_hParser, muErrorHandler_t a_pErrHandler);
226 API_EXPORT(const muChar_t*) mupGetErrorMsg(muParserHandle_t a_hParser);
227 API_EXPORT(muInt_t) mupGetErrorCode(muParserHandle_t a_hParser);
228 API_EXPORT(muInt_t) mupGetErrorPos(muParserHandle_t a_hParser);
229 API_EXPORT(const muChar_t*) mupGetErrorToken(muParserHandle_t a_hParser);
230 //API_EXPORT(const muChar_t*) mupGetErrorExpr(muParserHandle_t a_hParser);
231 
232 // This is used for .NET only. It creates a new variable allowing the dll to
233 // manage the variable rather than the .NET garbage collector.
234 API_EXPORT(muFloat_t*) mupCreateVar();
235 API_EXPORT(void) mupReleaseVar(muFloat_t*);
236 
237 #ifdef __cplusplus
238 }
239 #endif
240 
241 #endif // include guard