25 #if defined(MUPARSER_DLL)
28 #define WIN32_LEAN_AND_MEAN
44 catch (muError_t &e) \
46 ParserTag *pTag = static_cast<ParserTag*>(a_hParser); \
48 pTag->bError = true; \
49 if (pTag->errHandler) \
50 (pTag->errHandler)(a_hParser); \
54 ParserTag *pTag = static_cast<ParserTag*>(a_hParser); \
55 pTag->exc = muError_t(mu::ecINTERNAL_ERROR); \
56 pTag->bError = true; \
57 if (pTag->errHandler) \
58 (pTag->errHandler)(a_hParser); \
77 :pParser((nType == muBASETYPE_FLOAT) ? (
mu::ParserBase*)new
mu::Parser() :
78 (nType == muBASETYPE_INT) ? (
mu::ParserBase*)new
mu::ParserInt() : NULL)
82 , m_nParserType(nType)
92 muErrorHandler_t errHandler;
96 ParserTag(
const ParserTag &ref);
97 ParserTag& operator=(
const ParserTag &ref);
102 static muChar_t s_tmpOutBuf[2048];
113 muParser_t* AsParser(muParserHandle_t a_hParser)
115 return static_cast<ParserTag*
>(a_hParser)->pParser;
119 ParserTag* AsParserTag(muParserHandle_t a_hParser)
121 return static_cast<ParserTag*
>(a_hParser);
126 #define _CRT_SECURE_NO_DEPRECATE
128 BOOL APIENTRY DllMain(HANDLE ,
129 DWORD ul_reason_for_call,
132 switch (ul_reason_for_call)
134 case DLL_PROCESS_ATTACH:
137 case DLL_THREAD_ATTACH:
138 case DLL_THREAD_DETACH:
139 case DLL_PROCESS_DETACH:
156 API_EXPORT(
void) mupSetVarFactory(muParserHandle_t a_hParser, muFacFun_t a_pFactory,
void *pUserData)
159 muParser_t* p(AsParser(a_hParser));
160 p->SetVarFactory(a_pFactory, pUserData);
167 API_EXPORT(muParserHandle_t) mupCreate(
int nBaseType)
171 case muBASETYPE_FLOAT:
return (
void*)(
new ParserTag(muBASETYPE_FLOAT));
172 case muBASETYPE_INT:
return (
void*)(
new ParserTag(muBASETYPE_INT));
173 default:
return NULL;
180 API_EXPORT(
void) mupRelease(muParserHandle_t a_hParser)
183 ParserTag* p =
static_cast<ParserTag*
>(a_hParser);
189 API_EXPORT(
const muChar_t*) mupGetVersion(muParserHandle_t a_hParser)
192 muParser_t*
const p(AsParser(a_hParser));
195 sprintf(s_tmpOutBuf,
"%s", p->GetVersion().c_str());
197 wsprintf(s_tmpOutBuf,
_T(
"%s"), p->GetVersion().c_str());
209 API_EXPORT(muFloat_t) mupEval(muParserHandle_t a_hParser)
212 muParser_t*
const p(AsParser(a_hParser));
220 API_EXPORT(muFloat_t*) mupEvalMulti(muParserHandle_t a_hParser,
int *nNum)
223 assert(nNum != NULL);
225 muParser_t*
const p(AsParser(a_hParser));
226 return p->Eval(*nNum);
233 API_EXPORT(
void) mupEvalBulk(muParserHandle_t a_hParser, muFloat_t *a_res,
int nSize)
236 muParser_t* p(AsParser(a_hParser));
237 p->Eval(a_res, nSize);
242 API_EXPORT(
void) mupSetExpr(muParserHandle_t a_hParser, const muChar_t* a_szExpr)
245 muParser_t*
const p(AsParser(a_hParser));
246 p->SetExpr(a_szExpr);
251 API_EXPORT(
void) mupRemoveVar(muParserHandle_t a_hParser, const muChar_t* a_szName)
254 muParser_t*
const p(AsParser(a_hParser));
255 p->RemoveVar(a_szName);
263 API_EXPORT(
void) mupClearVar(muParserHandle_t a_hParser)
266 muParser_t*
const p(AsParser(a_hParser));
275 API_EXPORT(
void) mupClearConst(muParserHandle_t a_hParser)
278 muParser_t*
const p(AsParser(a_hParser));
287 API_EXPORT(
void) mupClearOprt(muParserHandle_t a_hParser)
290 muParser_t*
const p(AsParser(a_hParser));
296 API_EXPORT(
void) mupClearFun(muParserHandle_t a_hParser)
299 muParser_t*
const p(AsParser(a_hParser));
305 API_EXPORT(
void) mupDefineFun0(muParserHandle_t a_hParser,
306 const muChar_t* a_szName,
308 muBool_t a_bAllowOpt)
311 muParser_t*
const p(AsParser(a_hParser));
312 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
317 API_EXPORT(
void) mupDefineFun1(muParserHandle_t a_hParser,
318 const muChar_t* a_szName,
320 muBool_t a_bAllowOpt)
323 muParser_t*
const p(AsParser(a_hParser));
324 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
329 API_EXPORT(
void) mupDefineFun2(muParserHandle_t a_hParser,
330 const muChar_t* a_szName,
332 muBool_t a_bAllowOpt)
335 muParser_t*
const p(AsParser(a_hParser));
336 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
341 API_EXPORT(
void) mupDefineFun3(muParserHandle_t a_hParser,
342 const muChar_t *a_szName,
344 muBool_t a_bAllowOpt)
347 muParser_t*
const p(AsParser(a_hParser));
348 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
353 API_EXPORT(
void) mupDefineFun4(muParserHandle_t a_hParser,
354 const muChar_t *a_szName,
356 muBool_t a_bAllowOpt)
359 muParser_t*
const p(AsParser(a_hParser));
360 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
365 API_EXPORT(
void) mupDefineFun5(muParserHandle_t a_hParser,
366 const muChar_t *a_szName,
368 muBool_t a_bAllowOpt)
371 muParser_t*
const p(AsParser(a_hParser));
372 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
377 API_EXPORT(
void) mupDefineFun6(muParserHandle_t a_hParser,
378 const muChar_t *a_szName,
380 muBool_t a_bAllowOpt)
383 muParser_t*
const p(AsParser(a_hParser));
384 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
389 API_EXPORT(
void) mupDefineFun7(muParserHandle_t a_hParser,
390 const muChar_t *a_szName,
392 muBool_t a_bAllowOpt)
395 muParser_t*
const p(AsParser(a_hParser));
396 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
401 API_EXPORT(
void) mupDefineFun8(muParserHandle_t a_hParser,
402 const muChar_t *a_szName,
404 muBool_t a_bAllowOpt)
407 muParser_t*
const p(AsParser(a_hParser));
408 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
413 API_EXPORT(
void) mupDefineFun9(muParserHandle_t a_hParser,
414 const muChar_t *a_szName,
416 muBool_t a_bAllowOpt)
419 muParser_t*
const p(AsParser(a_hParser));
420 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
425 API_EXPORT(
void) mupDefineFun10(muParserHandle_t a_hParser,
426 const muChar_t *a_szName,
428 muBool_t a_bAllowOpt)
431 muParser_t*
const p(AsParser(a_hParser));
432 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
437 API_EXPORT(
void) mupDefineBulkFun0(muParserHandle_t a_hParser,
438 const muChar_t* a_szName,
442 muParser_t*
const p(AsParser(a_hParser));
443 p->DefineFun(a_szName, a_pFun,
false);
448 API_EXPORT(
void) mupDefineBulkFun1(muParserHandle_t a_hParser,
449 const muChar_t* a_szName,
453 muParser_t*
const p(AsParser(a_hParser));
454 p->DefineFun(a_szName, a_pFun,
false);
459 API_EXPORT(
void) mupDefineBulkFun2(muParserHandle_t a_hParser,
460 const muChar_t* a_szName,
464 muParser_t*
const p(AsParser(a_hParser));
465 p->DefineFun(a_szName, a_pFun,
false);
470 API_EXPORT(
void) mupDefineBulkFun3(muParserHandle_t a_hParser,
471 const muChar_t *a_szName,
475 muParser_t*
const p(AsParser(a_hParser));
476 p->DefineFun(a_szName, a_pFun,
false);
481 API_EXPORT(
void) mupDefineBulkFun4(muParserHandle_t a_hParser,
482 const muChar_t *a_szName,
486 muParser_t*
const p(AsParser(a_hParser));
487 p->DefineFun(a_szName, a_pFun,
false);
492 API_EXPORT(
void) mupDefineBulkFun5(muParserHandle_t a_hParser,
493 const muChar_t *a_szName,
497 muParser_t*
const p(AsParser(a_hParser));
498 p->DefineFun(a_szName, a_pFun,
false);
503 API_EXPORT(
void) mupDefineBulkFun6(muParserHandle_t a_hParser,
504 const muChar_t *a_szName,
508 muParser_t*
const p(AsParser(a_hParser));
509 p->DefineFun(a_szName, a_pFun,
false);
514 API_EXPORT(
void) mupDefineBulkFun7(muParserHandle_t a_hParser,
515 const muChar_t *a_szName,
519 muParser_t*
const p(AsParser(a_hParser));
520 p->DefineFun(a_szName, a_pFun,
false);
525 API_EXPORT(
void) mupDefineBulkFun8(muParserHandle_t a_hParser,
526 const muChar_t *a_szName,
530 muParser_t*
const p(AsParser(a_hParser));
531 p->DefineFun(a_szName, a_pFun,
false);
536 API_EXPORT(
void) mupDefineBulkFun9(muParserHandle_t a_hParser,
537 const muChar_t *a_szName,
541 muParser_t*
const p(AsParser(a_hParser));
542 p->DefineFun(a_szName, a_pFun,
false);
547 API_EXPORT(
void) mupDefineBulkFun10(muParserHandle_t a_hParser,
548 const muChar_t *a_szName,
549 muBulkFun10_t a_pFun)
552 muParser_t*
const p(AsParser(a_hParser));
553 p->DefineFun(a_szName, a_pFun,
false);
558 API_EXPORT(
void) mupDefineStrFun1(muParserHandle_t a_hParser,
559 const muChar_t *a_szName,
563 muParser_t*
const p(AsParser(a_hParser));
564 p->DefineFun(a_szName, a_pFun,
false);
569 API_EXPORT(
void) mupDefineStrFun2(muParserHandle_t a_hParser,
570 const muChar_t* a_szName,
574 muParser_t*
const p(AsParser(a_hParser));
575 p->DefineFun(a_szName, a_pFun,
false);
580 API_EXPORT(
void) mupDefineStrFun3(muParserHandle_t a_hParser,
581 const muChar_t* a_szName,
585 muParser_t*
const p(AsParser(a_hParser));
586 p->DefineFun(a_szName, a_pFun,
false);
591 API_EXPORT(
void) mupDefineMultFun(muParserHandle_t a_hParser,
592 const muChar_t *a_szName,
594 muBool_t a_bAllowOpt)
597 muParser_t*
const p(AsParser(a_hParser));
598 p->DefineFun(a_szName, a_pFun, a_bAllowOpt != 0);
603 API_EXPORT(
void) mupDefineOprt(muParserHandle_t a_hParser,
604 const muChar_t* a_szName,
608 muBool_t a_bAllowOpt)
611 muParser_t*
const p(AsParser(a_hParser));
612 p->DefineOprt(a_szName,
621 API_EXPORT(
void) mupDefineVar(muParserHandle_t a_hParser,
622 const muChar_t *a_szName,
626 muParser_t*
const p(AsParser(a_hParser));
627 p->DefineVar(a_szName, a_pVar);
632 API_EXPORT(
void) mupDefineBulkVar(muParserHandle_t a_hParser,
633 const muChar_t *a_szName,
637 muParser_t*
const p(AsParser(a_hParser));
638 p->DefineVar(a_szName, a_pVar);
643 API_EXPORT(
void) mupDefineConst(muParserHandle_t a_hParser,
644 const muChar_t *a_szName,
648 muParser_t*
const p(AsParser(a_hParser));
649 p->DefineConst(a_szName, a_fVal);
654 API_EXPORT(
void) mupDefineStrConst(muParserHandle_t a_hParser,
655 const muChar_t *a_szName,
656 const muChar_t *a_szVal)
659 muParser_t*
const p(AsParser(a_hParser));
660 p->DefineStrConst(a_szName, a_szVal);
665 API_EXPORT(
const muChar_t*) mupGetExpr(muParserHandle_t a_hParser)
668 muParser_t*
const p(AsParser(a_hParser));
673 sprintf(s_tmpOutBuf,
"%s", p->GetExpr().c_str());
675 wsprintf(s_tmpOutBuf,
_T(
"%s"), p->GetExpr().c_str());
686 API_EXPORT(
void) mupDefinePostfixOprt(muParserHandle_t a_hParser,
687 const muChar_t* a_szName,
689 muBool_t a_bAllowOpt)
692 muParser_t*
const p(AsParser(a_hParser));
693 p->DefinePostfixOprt(a_szName, a_pOprt, a_bAllowOpt != 0);
698 API_EXPORT(
void) mupDefineInfixOprt(muParserHandle_t a_hParser,
699 const muChar_t* a_szName,
701 muBool_t a_bAllowOpt)
704 muParser_t*
const p(AsParser(a_hParser));
705 p->DefineInfixOprt(a_szName, a_pOprt, a_bAllowOpt != 0);
711 API_EXPORT(
void) mupDefineNameChars(muParserHandle_t a_hParser,
712 const muChar_t* a_szCharset)
714 muParser_t*
const p(AsParser(a_hParser));
715 p->DefineNameChars(a_szCharset);
719 API_EXPORT(
void) mupDefineOprtChars(muParserHandle_t a_hParser,
720 const muChar_t* a_szCharset)
722 muParser_t*
const p(AsParser(a_hParser));
723 p->DefineOprtChars(a_szCharset);
727 API_EXPORT(
void) mupDefineInfixOprtChars(muParserHandle_t a_hParser,
728 const muChar_t *a_szCharset)
730 muParser_t*
const p(AsParser(a_hParser));
731 p->DefineInfixOprtChars(a_szCharset);
740 API_EXPORT(
int) mupGetVarNum(muParserHandle_t a_hParser)
743 muParser_t*
const p(AsParser(a_hParser));
745 return (
int)VarMap.size();
767 API_EXPORT(
void) mupGetVar(muParserHandle_t a_hParser,
769 const muChar_t **a_szName,
774 static muChar_t szName[1024];
777 muParser_t*
const p(AsParser(a_hParser));
780 if (a_iVar >= VarMap.size())
786 mu::varmap_type::const_iterator item;
788 item = VarMap.begin();
789 for (
unsigned i = 0; i < a_iVar; ++i)
793 strncpy(szName, item->first.c_str(),
sizeof(szName));
795 wcsncpy(szName, item->first.c_str(),
sizeof(szName));
798 szName[
sizeof(szName)-1] = 0;
800 *a_szName = &szName[0];
801 *a_pVar = item->second;
816 API_EXPORT(
int) mupGetExprVarNum(muParserHandle_t a_hParser)
819 muParser_t*
const p(AsParser(a_hParser));
821 return (
int)VarMap.size();
844 API_EXPORT(
void) mupGetExprVar(muParserHandle_t a_hParser,
846 const muChar_t **a_szName,
851 static muChar_t szName[1024];
854 muParser_t*
const p(AsParser(a_hParser));
857 if (a_iVar >= VarMap.size())
863 mu::varmap_type::const_iterator item;
865 item = VarMap.begin();
866 for (
unsigned i = 0; i < a_iVar; ++i)
870 strncpy(szName, item->first.c_str(),
sizeof(szName));
872 wcsncpy(szName, item->first.c_str(),
sizeof(szName));
875 szName[
sizeof(szName)-1] = 0;
877 *a_szName = &szName[0];
878 *a_pVar = item->second;
889 API_EXPORT(
int) mupGetConstNum(muParserHandle_t a_hParser)
892 muParser_t*
const p(AsParser(a_hParser));
894 return (
int)ValMap.size();
901 API_EXPORT(
void) mupSetArgSep(muParserHandle_t a_hParser, const muChar_t cArgSep)
904 muParser_t*
const p(AsParser(a_hParser));
905 p->SetArgSep(cArgSep);
910 API_EXPORT(
void) mupResetLocale(muParserHandle_t a_hParser)
913 muParser_t*
const p(AsParser(a_hParser));
919 API_EXPORT(
void) mupSetDecSep(muParserHandle_t a_hParser, const muChar_t cDecSep)
922 muParser_t*
const p(AsParser(a_hParser));
923 p->SetDecSep(cDecSep);
928 API_EXPORT(
void) mupSetThousandsSep(muParserHandle_t a_hParser, const muChar_t cThousandsSep)
931 muParser_t*
const p(AsParser(a_hParser));
932 p->SetThousandsSep(cThousandsSep);
943 API_EXPORT(
void) mupGetConst(muParserHandle_t a_hParser,
945 const muChar_t **a_pszName,
950 static muChar_t szName[1024];
953 muParser_t*
const p(AsParser(a_hParser));
956 if (a_iVar >= ValMap.size())
963 mu::valmap_type::const_iterator item;
964 item = ValMap.begin();
965 for (
unsigned i = 0; i < a_iVar; ++i)
969 strncpy(szName, item->first.c_str(),
sizeof(szName));
971 wcsncpy(szName, item->first.c_str(),
sizeof(szName));
974 szName[
sizeof(szName)-1] = 0;
976 *a_pszName = &szName[0];
977 *a_fVal = item->second;
989 API_EXPORT(
void) mupAddValIdent(muParserHandle_t a_hParser,
993 muParser_t* p(AsParser(a_hParser));
994 p->AddValIdent(a_pFun);
1004 API_EXPORT(muBool_t) mupError(muParserHandle_t a_hParser)
1006 bool bError(AsParserTag(a_hParser)->bError);
1007 AsParserTag(a_hParser)->bError =
false;
1014 API_EXPORT(
void) mupErrorReset(muParserHandle_t a_hParser)
1016 AsParserTag(a_hParser)->bError =
false;
1020 API_EXPORT(
void) mupSetErrorHandler(muParserHandle_t a_hParser, muErrorHandler_t a_pHandler)
1022 AsParserTag(a_hParser)->errHandler = a_pHandler;
1028 API_EXPORT(
const muChar_t*) mupGetErrorMsg(muParserHandle_t a_hParser)
1030 ParserTag*
const p(AsParserTag(a_hParser));
1031 const muChar_t *pMsg = p->exc.GetMsg().c_str();
1036 sprintf(s_tmpOutBuf,
"%s", pMsg);
1038 wsprintf(s_tmpOutBuf,
_T(
"%s"), pMsg);
1047 API_EXPORT(
const muChar_t*) mupGetErrorToken(muParserHandle_t a_hParser)
1049 ParserTag*
const p(AsParserTag(a_hParser));
1050 const muChar_t *pToken = p->exc.GetToken().c_str();
1055 sprintf(s_tmpOutBuf,
"%s", pToken);
1057 wsprintf(s_tmpOutBuf,
_T(
"%s"), pToken);
1066 API_EXPORT(
int) mupGetErrorCode(muParserHandle_t a_hParser)
1068 return AsParserTag(a_hParser)->exc.GetCode();
1073 API_EXPORT(
int) mupGetErrorPos(muParserHandle_t a_hParser)
1075 return (
int)AsParserTag(a_hParser)->exc.GetPos();
1085 API_EXPORT(muFloat_t*) mupCreateVar()
1087 return new muFloat_t(0);
1091 API_EXPORT(
void) mupReleaseVar(muFloat_t *ptr)
1096 #endif // MUPARSER_DLL
#define _T(x)
Activate this option in order to compile with OpenMP support.
std::map< string_type, value_type * > varmap_type
Type used for storing variables.
Definition of a parser using integer value.
Definition of the standard floating point parser.
EOprtAssociativity
Parser operator precedence values.
std::map< string_type, value_type > valmap_type
Type used for storing constants.
Error class of the parser.
Namespace for mathematical applications.
This file contains the DLL interface of muparser.
Mathematical expressions parser (base parser engine).
This file defines the error class used by the parser.