13 method_(method), member_(), ints_(ints), isFunction_(
true)
24 method_(), member_(member), ints_(), isFunction_(
false)
35 method_(other.method_), member_(other.member_), ints_(other.ints_), isFunction_(other.isFunction_) {
49 for(
size_t i = 0;
i <
ints_.size(); ++
i) {
98 <<
" arguments returned a null pointer ";
104 retType = retType.
toType();
114 <<
"\" returned void invoked on object of type \""
122 argsBeforeFixups_(args)
145 pair<edm::ObjectWithDict, bool>
ret(o,
false);
148 if (type.
isClass()) type = ret.first.dynamicType();
150 }
while (ret.second ==
false);
157 pair<edm::ObjectWithDict, bool>
ret(o,
false);
161 if (type.
isClass()) type = ret.first.dynamicType();
164 }
while (ret.second ==
false);
170 const std::vector<AnyMethodArgument> &
args)
176 isRefGet_ = !setter.
push(name, args,
"LazyInvoker dynamic resolution",
false);
193 pair<edm::ObjectWithDict,bool>
218 <<
"member \"" <<
invokers_.back().methodName()
219 <<
"\" return type is \"" <<
invokers_.back().returnTypeName()
221 <<
"\" which is not convertible to double.";
SingleInvoker(const edm::TypeWithDict &t, const std::string &name, const std::vector< AnyMethodArgument > &args)
method::TypeCode retType_
std::vector< void * > args_
MethodInvoker & operator=(const MethodInvoker &)
MethodInvoker(const edm::FunctionWithDict &method, const std::vector< AnyMethodArgument > &ints=std::vector< AnyMethodArgument >())
void invoke(ObjectWithDict const &obj, ObjectWithDict *ret, std::vector< void * > const &values=std::vector< void * >()) const
edm::FunctionWithDict method_
bool isRefGet_
true if this invoker just pops out a ref and returns (ref.get(), false)
bool storageNeedsDestructor_
std::pair< edm::ObjectWithDict, bool > invoke(const edm::ObjectWithDict &o, std::vector< edm::ObjectWithDict > &v) const
bool push(const std::string &, const std::vector< AnyMethodArgument > &, const char *, bool deep=true) const
static bool makeStorage(edm::ObjectWithDict &obj, const edm::TypeWithDict &retType)
std::vector< edm::TypeWithDict > TypeStack
std::string qualifiedName() const
double invokeLast(const edm::ObjectWithDict &o, std::vector< edm::ObjectWithDict > &v) const
invoke and coerce result to double
static void delStorage(edm::ObjectWithDict &obj)
boost::shared_ptr< SingleInvoker > SingleInvokerPtr
TypeWithDict toType() const
static bool isValidReturnType(method::TypeCode)
std::vector< AnyMethodArgument > MethodArgumentStack
static double objToDouble(const edm::ObjectWithDict &obj, method::TypeCode type)
edm::ObjectWithDict storage_
TypeCode typeCode(const edm::TypeWithDict &t)
ObjectWithDict get() const
TypeWithDict typeOf() const
edm::ObjectWithDict invoke(const edm::ObjectWithDict &o, std::vector< edm::ObjectWithDict > &v) const
TypeWithDict const & typeOf() const
TypeWithDict typeOf() const
TypeWithDict finalReturnType() const
std::vector< LazyInvoker > LazyMethodStack
std::string returnTypeName() const
double retToDouble(const edm::ObjectWithDict &o) const
edm::ObjectWithDict invoke(const edm::ObjectWithDict &o, edm::ObjectWithDict &retstore) const
std::vector< AnyMethodArgument > ints_
const SingleInvoker & invoker(const edm::TypeWithDict &t) const
std::type_info const & id() const
void throwFailedConversion(const edm::ObjectWithDict &o) const
std::vector< AnyMethodArgument > argsBeforeFixups_
std::string methodName() const
volatile std::atomic< bool > shutdown_flag false
std::vector< MethodInvoker > invokers_
std::map< edm::TypeID, SingleInvokerPtr > invokers_
LazyInvoker(const std::string &name, const std::vector< AnyMethodArgument > &args)
edm::MemberWithDict member_