#include "c4d_library.h" #include "lib_regexpr.h" #include "c4d_basecontainer.h" RegExprLib* lib_regexpr = nullptr; static RegExprLib *CheckLibRegExpr(Int32 offset) { return (RegExprLib*)CheckLib(REG_EXP_PARSER, offset, (C4DLibrary**)&lib_regexpr); } #define RegExprLibCall(b) RegExprLib *lib = CheckLibRegExpr(LIBOFFSET(RegExprLib, b)); \ if (!lib || !lib->b) return; \ (((RegExpParser*)this)->*lib->b) #define RegExprLibCallR(a,b) RegExprLib *lib = CheckLibRegExpr(LIBOFFSET(RegExprLib, b)); \ if (!lib || !lib->b) return a; \ return (((RegExpParser*)this)->*lib->b) RegularExprParser* RegularExprParser::Alloc() { RegExprLib *lib = CheckLibRegExpr(LIBOFFSET(RegExprLib, RegExprLib_Alloc)); if (!lib) return nullptr; return (RegularExprParser*)lib->RegExprLib_Alloc(); } void RegularExprParser::Free(RegularExprParser* p) { if (!p) return; RegExprLib *lib = CheckLibRegExpr(LIBOFFSET(RegExprLib, RegExprLib_Free)); if (!lib) return; RegExpParser* i = (RegExpParser*)p; lib->RegExprLib_Free(i); p = nullptr; } Bool RegularExprParser::Init(const String &strExprssion) { RegExprLibCallR(false, Init)(strExprssion); } Bool RegularExprParser::FindFirst(const String &strText, RegParseMode mode, Bool bOnlyFirst, Int32 &lPos, String &strPattern) { RegExprLibCallR(false, FindFirst)(strText, mode, bOnlyFirst, lPos, strPattern); } Bool RegularExprParser::FindNext(Int32 &lPos, String &strPattern) { RegExprLibCallR(false, FindNext)(lPos, strPattern); } void RegularExprParser::CleanUp() { RegExprLibCall(CleanUp)(); }