CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
reco::parser::ExpressionVarSetter Struct Reference

#include <ExpressionVarSetter.h>

Public Member Functions

 ExpressionVarSetter (ExpressionStack &exprStack, MethodStack &methStack, LazyMethodStack &lazyMethStack, TypeStack &typeStack)
 
void operator() (const char *, const char *) const
 

Private Member Functions

void lazyPush (const char *, const char *) const
 
void push (const char *, const char *) const
 

Private Attributes

ExpressionStackexprStack_
 
LazyMethodStacklazyMethStack_
 
MethodStackmethStack_
 
TypeStacktypeStack_
 

Detailed Description

Definition at line 19 of file ExpressionVarSetter.h.

Constructor & Destructor Documentation

reco::parser::ExpressionVarSetter::ExpressionVarSetter ( ExpressionStack exprStack,
MethodStack methStack,
LazyMethodStack lazyMethStack,
TypeStack typeStack 
)
inline

Definition at line 20 of file ExpressionVarSetter.h.

23  :
24  exprStack_(exprStack),
25  methStack_(methStack),
26  lazyMethStack_(lazyMethStack),
27  typeStack_(typeStack) { }

Member Function Documentation

void ExpressionVarSetter::lazyPush ( const char *  begin,
const char *  end 
) const
private

Definition at line 36 of file ExpressionVarSetter.cc.

36  {
37  exprStack_.push_back(boost::shared_ptr<ExpressionBase>(new ExpressionLazyVar(lazyMethStack_)));
38  lazyMethStack_.clear();
39  typeStack_.resize(1);
40 }
void ExpressionVarSetter::operator() ( const char *  begin,
const char *  end 
) const

Definition at line 9 of file ExpressionVarSetter.cc.

References edm::hlt::Exception.

9  {
10  //std::cerr << "ExpressionVarSetter: Pushed [" << std::string(begin,end) << "]" << std::endl;
11  if (!methStack_.empty()) push(begin,end);
12  else if (!lazyMethStack_.empty()) lazyPush(begin,end);
13  else throw Exception(begin) << " Expression didn't parse neither hastily nor lazyly. This must not happen.\n";
14 }
void lazyPush(const char *, const char *) const
#define end
Definition: vmac.h:37
void push(const char *, const char *) const
#define begin
Definition: vmac.h:30
void ExpressionVarSetter::push ( const char *  begin,
const char *  end 
) const
private

Definition at line 16 of file ExpressionVarSetter.cc.

References edm::hlt::Exception, reco::method::invalid, reco::parser::ExpressionVar::isValidReturnType(), and reco::typeCode().

16  {
18  method::TypeCode retType = reco::typeCode(type);
19  if(retType == method::invalid) {
20  throw Exception(begin)
21  << "member \"" << methStack_.back().methodName() << "\" has an invalid return type: \""
22  << methStack_.back().returnTypeName() << "\"";
23  }
24  if(!ExpressionVar::isValidReturnType(retType)) {
25  throw Exception(begin)
26  << "member \"" << methStack_.back().methodName()
27  << "\" return type is \"" << methStack_.back().returnTypeName()
28  << "\" which is not convertible to double.";
29  }
30 
31  exprStack_.push_back(boost::shared_ptr<ExpressionBase>(new ExpressionVar(methStack_, retType)));
32  methStack_.clear();
33  typeStack_.resize(1);
34 }
type
Definition: HCALResponse.h:21
static bool isValidReturnType(method::TypeCode)
TypeCode typeCode(const edm::TypeWithDict &t)
Definition: returnType.cc:38
#define begin
Definition: vmac.h:30
Evaluate an object&#39;s method or datamember (or chain of them) to get a number.
Definition: ExpressionVar.h:21

Member Data Documentation

ExpressionStack& reco::parser::ExpressionVarSetter::exprStack_
private

Definition at line 34 of file ExpressionVarSetter.h.

LazyMethodStack& reco::parser::ExpressionVarSetter::lazyMethStack_
private

Definition at line 36 of file ExpressionVarSetter.h.

MethodStack& reco::parser::ExpressionVarSetter::methStack_
private

Definition at line 35 of file ExpressionVarSetter.h.

TypeStack& reco::parser::ExpressionVarSetter::typeStack_
private

Definition at line 37 of file ExpressionVarSetter.h.