CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups 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.

24  : exprStack_(exprStack), methStack_(methStack), lazyMethStack_(lazyMethStack), 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(std::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 Exception.

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

Definition at line 19 of file ExpressionVarSetter.cc.

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

Referenced by esMonitoring.LineHistoryEnd::write(), and esMonitoring.LineHistoryStart::write().

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

Member Data Documentation

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

Definition at line 31 of file ExpressionVarSetter.h.

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

Definition at line 33 of file ExpressionVarSetter.h.

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

Definition at line 32 of file ExpressionVarSetter.h.

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

Definition at line 34 of file ExpressionVarSetter.h.