3 _____ __ _____________ _______ ______ ___________
4 / \| | \____ \__ \\_ __ \/ ___// __ \_ __ \
5 | Y Y \ | / |_> > __ \| | \/\___ \\ ___/| | \/
6 |__|_| /____/| __(____ /__| /____ >\___ >__|
8 Copyright (C) 2004 - 2020 Ingo Berg
10 Redistribution and use in source and binary forms, with or without modification, are permitted
11 provided that the following conditions are met:
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.
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.
29 #ifndef MU_PARSER_DLL_H
30 #define MU_PARSER_DLL_H
32 #include "muParserFixes.h"
40 \brief This file contains the DLL interface of muparser.
44 typedef void* muParserHandle_t; // parser handle
47 typedef char muChar_t; // character type
49 typedef wchar_t muChar_t; // character type
52 typedef int muBool_t; // boolean type
53 typedef int muInt_t; // integer type
54 typedef double muFloat_t; // floating point type
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);
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);
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);
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
92 //-----------------------------------------------------------------------------------------------------
94 static const int muOPRT_ASCT_LEFT = 0;
95 static const int muOPRT_ASCT_RIGHT = 1;
97 static const int muBASETYPE_FLOAT = 0;
98 static const int muBASETYPE_INT = 1;
100 //-----------------------------------------------------------------------------------------------------
103 // muParser C compatible bindings
106 //-----------------------------------------------------------------------------------------------------
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);
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);
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);
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);
151 API_EXPORT(void) mupDefineMultFun(muParserHandle_t a_hParser,
152 const muChar_t* a_szName,
154 muBool_t a_bOptimize);
156 API_EXPORT(void) mupDefineOprt(muParserHandle_t a_hParser,
157 const muChar_t* a_szName,
161 muBool_t a_bOptimize);
163 API_EXPORT(void) mupDefineConst(muParserHandle_t a_hParser,
164 const muChar_t* a_szName,
167 API_EXPORT(void) mupDefineStrConst(muParserHandle_t a_hParser,
168 const muChar_t* a_szName,
169 const muChar_t* a_sVal);
171 API_EXPORT(void) mupDefineVar(muParserHandle_t a_hParser,
172 const muChar_t* a_szName,
175 API_EXPORT(void) mupDefineBulkVar(muParserHandle_t a_hParser,
176 const muChar_t* a_szName,
179 API_EXPORT(void) mupDefinePostfixOprt(muParserHandle_t a_hParser,
180 const muChar_t* a_szName,
182 muBool_t a_bOptimize);
185 API_EXPORT(void) mupDefineInfixOprt(muParserHandle_t a_hParser,
186 const muChar_t* a_szName,
188 muBool_t a_bOptimize);
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);
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);
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);
214 // Add value recognition callbacks
215 API_EXPORT(void) mupAddValIdent(muParserHandle_t a_hParser, muIdentFun_t);
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);
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*);
236 #endif // include guard