44 #ifndef CEXMC_AST_EVAL_HH
45 #define CEXMC_AST_EVAL_HH
47 #ifdef CEXMC_USE_CUSTOM_FILTER
51 #include <boost/variant/variant.hpp>
59 class CexmcASTEval :
public CexmcAST::BasicEval
63 const bool * > VarAddr;
65 typedef std::map< std::string, VarAddr > VarAddrMap;
67 typedef VarAddrMap::value_type VarAddrMapData;
70 explicit CexmcASTEval(
71 const CexmcEventFastSObject * evFastSObject = NULL,
72 const CexmcEventSObject * evSObject = NULL );
75 void SetAddressedData(
76 const CexmcEventFastSObject * evFastSObject_ = NULL,
77 const CexmcEventSObject * evSObject_ = NULL );
79 void BindAddresses( CexmcAST::Subtree & ast );
81 void ResetAddressBinding( CexmcAST::Subtree & ast );
84 ScalarValueType GetFunScalarValue(
const CexmcAST::Subtree & ast )
87 ScalarValueType GetVarScalarValue(
const CexmcAST::Variable &
var )
90 void GetEDCollectionValue(
const CexmcAST::Node & node,
94 const G4double * GetThreeVectorElementAddrByIndex(
95 const CexmcSimpleThreeVectorStore & vect,
98 const G4double * GetLorentzVectorElementAddrByIndex(
99 const CexmcSimpleLorentzVectorStore & vect,
103 const CexmcEventFastSObject * evFastSObject;
105 const CexmcEventSObject * evSObject;
108 VarAddrMap varAddrMap;
115 inline void CexmcASTEval::SetAddressedData(
116 const CexmcEventFastSObject * evFastSObject_,
117 const CexmcEventSObject * evSObject_ )
120 evFastSObject = evFastSObject_;
121 evSObject = evSObject_;
125 inline const G4double * CexmcASTEval::GetThreeVectorElementAddrByIndex(
126 const CexmcSimpleThreeVectorStore & vect,
144 inline const G4double * CexmcASTEval::GetLorentzVectorElementAddrByIndex(
145 const CexmcSimpleLorentzVectorStore & vect,