CMS 3D CMS Logo

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

◆ ExpressionVarSetter()

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

◆ lazyPush()

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 }

◆ operator()()

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 push(const char *, const char *) const
void lazyPush(const char *, const char *) const

◆ push()

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  {
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:24

Member Data Documentation

◆ exprStack_

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

Definition at line 31 of file ExpressionVarSetter.h.

◆ lazyMethStack_

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

Definition at line 33 of file ExpressionVarSetter.h.

◆ methStack_

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

Definition at line 32 of file ExpressionVarSetter.h.

◆ typeStack_

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

Definition at line 34 of file ExpressionVarSetter.h.