From 8d206a9ef0f5e5cf35eae031cde8b2f524f1b704 Mon Sep 17 00:00:00 2001 From: Tomasz Wlostowski Date: Wed, 23 Sep 2020 23:50:06 +0200 Subject: [PATCH] PCB_EXPR_EVALUATOR: added fromTo() method --- pcbnew/pcb_expr_evaluator.cpp | 30 ++++++++++++++++-------------- pcbnew/pcb_expr_evaluator.h | 10 ++++++++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/pcbnew/pcb_expr_evaluator.cpp b/pcbnew/pcb_expr_evaluator.cpp index 898d899d6b..e118d5a4fa 100644 --- a/pcbnew/pcb_expr_evaluator.cpp +++ b/pcbnew/pcb_expr_evaluator.cpp @@ -286,23 +286,25 @@ static void isBlindBuriedVia( LIBEVAL::CONTEXT* aCtx, void* self ) } +extern void exprFromTo( LIBEVAL::CONTEXT* aCtx, void* self ); PCB_EXPR_BUILTIN_FUNCTIONS::PCB_EXPR_BUILTIN_FUNCTIONS() { - auto registerFunc = [&]( const wxString& funcSignature, LIBEVAL::FUNC_CALL_REF funcPtr ) + RegisterAllFunctions(); +} + + +void PCB_EXPR_BUILTIN_FUNCTIONS::RegisterAllFunctions() { - wxString funcName = funcSignature.BeforeFirst( '(' ); - m_funcs[ std::string( funcName.Lower() ) ] = std::move( funcPtr ); - m_funcSigs.Add( funcSignature ); - }; - - registerFunc( "onLayer('x')", onLayer ); - registerFunc( "isPlated()", isPlated ); - registerFunc( "insideCourtyard('x')", insideCourtyard ); - registerFunc( "insideArea('x')", insideArea ); - registerFunc( "memberOf('x')", memberOf ); - registerFunc( "isMicroVia()", isMicroVia ); - registerFunc( "isBlindBuriedVia()", isBlindBuriedVia ); + m_funcs.clear(); + RegisterFunc( "onLayer('x')", onLayer ); + RegisterFunc( "isPlated()", isPlated ); + RegisterFunc( "insideCourtyard('x')", insideCourtyard ); + RegisterFunc( "insideArea('x')", insideArea ); + RegisterFunc( "isMicroVia()", isMicroVia ); + RegisterFunc( "isBlindBuriedVia()", isBlindBuriedVia ); + RegisterFunc( "memberOf('x')", memberOf ); + RegisterFunc( "fromTo('x','y')", exprFromTo ); } @@ -409,7 +411,7 @@ std::unique_ptr PCB_EXPR_UCODE::CreateVarRef( const wxString& else if ( prop->HasChoices() ) { // it's an enum, we treat it as string vref->SetType( LIBEVAL::VT_STRING ); - vref->SetIsEnum( true ); + vref->SetIsEnum ( true ); } else { diff --git a/pcbnew/pcb_expr_evaluator.h b/pcbnew/pcb_expr_evaluator.h index 260e71c8cd..3a2911957f 100644 --- a/pcbnew/pcb_expr_evaluator.h +++ b/pcbnew/pcb_expr_evaluator.h @@ -137,6 +137,16 @@ public: return m_funcSigs; } + void RegisterFunc( const wxString& funcSignature, LIBEVAL::FUNC_CALL_REF funcPtr ) + { + wxString funcName = funcSignature.BeforeFirst( '(' ); + m_funcs[std::string( funcName.Lower() )] = std::move( funcPtr ); + m_funcSigs.Add( funcSignature ); + printf("Register '%s'\n", (const char *) funcName.Lower() ); + } + + void RegisterAllFunctions(); + private: std::map m_funcs;