25#ifndef __PCB_EXPR_EVALUATOR_H
26#define __PCB_EXPR_EVALUATOR_H
28#include <unordered_map>
46 virtual std::unique_ptr<LIBEVAL::VAR_REF>
CreateVarRef(
const wxString& aVar,
47 const wxString& aField )
override;
180 wxString funcName = funcSignature.BeforeFirst(
'(' );
181 m_funcs[std::string( funcName.Lower() )] = std::move( funcPtr );
188 std::map<wxString, LIBEVAL::FUNC_CALL_REF>
m_funcs;
201 double Convert(
const wxString& aString,
int unitId )
const override;
210 double Convert(
const wxString& aString,
int unitId )
const override;
227 bool Evaluate(
const wxString& aExpr );
230 void SetErrorCallback( std::function<
void(
const wxString& aMessage,
int aOffset )> aCallback )
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Information pertinent to a Pcbnew printed circuit board.
void SetErrorCallback(std::function< void(const wxString &aMessage, int aOffset)> aCallback)
void RegisterFunc(const wxString &funcSignature, LIBEVAL::FUNC_CALL_REF funcPtr)
LIBEVAL::FUNC_CALL_REF Get(const wxString &name)
const wxArrayString GetSignatures() const
void RegisterAllFunctions()
PCB_EXPR_BUILTIN_FUNCTIONS()
std::map< wxString, LIBEVAL::FUNC_CALL_REF > m_funcs
static PCB_EXPR_BUILTIN_FUNCTIONS & Instance()
void SetItems(BOARD_ITEM *a, BOARD_ITEM *b=nullptr)
BOARD_ITEM * GetItem(int index) const
PCB_EXPR_CONTEXT(int aConstraint, PCB_LAYER_ID aLayer)
PCB_LAYER_ID GetLayer() const
int GetConstraint() const
bool Evaluate(const wxString &aExpr)
PCB_EXPR_COMPILER m_compiler
const LIBEVAL::ERROR_STATUS & GetError() const
bool IsErrorPending() const
void SetErrorCallback(std::function< void(const wxString &aMessage, int aOffset)> aCallback)
LIBEVAL::ERROR_STATUS m_errorStatus
LIBEVAL::VALUE * GetValue(LIBEVAL::CONTEXT *aCtx) override
PCB_EXPR_NETCLASS_REF(int aItemIndex)
LIBEVAL::VALUE * GetValue(LIBEVAL::CONTEXT *aCtx) override
PCB_EXPR_NETNAME_REF(int aItemIndex)
PCB_EXPR_TYPE_REF(int aItemIndex)
LIBEVAL::VALUE * GetValue(LIBEVAL::CONTEXT *aCtx) override
virtual LIBEVAL::FUNC_CALL_REF CreateFuncCall(const wxString &aName) override
virtual std::unique_ptr< LIBEVAL::VAR_REF > CreateVarRef(const wxString &aVar, const wxString &aField) override
virtual ~PCB_EXPR_UCODE()
BOARD_ITEM * GetObject(const LIBEVAL::CONTEXT *aCtx) const
std::unordered_map< TYPE_ID, PROPERTY_BASE * > m_matchingTypes
PCB_EXPR_VAR_REF(int aItemIndex)
LIBEVAL::VAR_TYPE_T m_type
LIBEVAL::VAR_TYPE_T GetType() const override
void AddAllowedClass(TYPE_ID type_hash, PROPERTY_BASE *prop)
void SetType(LIBEVAL::VAR_TYPE_T type)
LIBEVAL::VALUE * GetValue(LIBEVAL::CONTEXT *aCtx) override
const std::vector< wxString > & GetSupportedUnits() const override
double Convert(const wxString &aString, int unitId) const override
double Convert(const wxString &aString, int unitId) const override
wxString GetSupportedUnitsMessage() const override
const std::vector< wxString > & GetSupportedUnits() const override
PCB_LAYER_ID
A quick note on layer IDs:
std::function< void(CONTEXT *, void *)> FUNC_CALL_REF
size_t TYPE_ID
Unique type identifier.