muParser API -  1.35
muParserDLL.h
Go to the documentation of this file.
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
This file contains compatibility fixes for some platforms.