16 #include "Reflex/Object.h"
17 #include "Reflex/Base.h"
35 using namespace ROOT::Reflex;
37 Member
temp = iType.MemberByName(iName);
41 for(Base_Iterator it = iType.Base_Begin(), itEnd = iType.Base_End();
52 const std::string& valueToString(
const std::string& iName,
53 const std::string& iUnit,
54 const Reflex::Object& iObject,
55 const Reflex::Member& iMember)
57 static std::string bala(128, 0);
59 iMember.Invoke(iObject,temp);
60 snprintf(&bala[0], 127,
"%s: %.1f %s", iName.c_str(),
temp, iUnit.c_str());
64 typedef const std::string& (*FunctionType)(
const std::string&,
const std::string&,
const Reflex::Object&,
const Reflex::Member&);
65 typedef std::map<std::string, FunctionType> TypeToStringMap;
68 static void addToStringMap(TypeToStringMap& iMap) {
69 iMap[
typeid(
T).
name()]=valueToString<T>;
73 double valueToDouble(
const Reflex::Object& iObj,
const Reflex::Member& iMember) {
75 iMember.Invoke(iObj,temp);
79 typedef double (*DoubleFunctionType)(
const Reflex::Object&,
const Reflex::Member&);
80 typedef std::map<std::string, DoubleFunctionType> TypeToDoubleMap;
83 static void addToDoubleMap(TypeToDoubleMap& iMap) {
84 iMap[
typeid(
T).
name()]=valueToDouble<T>;
92 const ROOT::Reflex::Member& iMember,
93 const std::string& iUnit)
95 static std::string s_empty_string;
96 static TypeToStringMap s_map;
99 addToStringMap<float>(s_map);
100 addToStringMap<double>(s_map);
104 TypeToStringMap::iterator itFound =s_map.find(returnType.TypeInfo().name());
105 if (itFound == s_map.end())
108 return s_empty_string;
111 return itFound->second(iMember.Name(),iUnit,iObj,iMember);
116 doubleValueFor(
const ROOT::Reflex::Object& iObj,
const ROOT::Reflex::Member& iMember) {
117 static TypeToDoubleMap s_map;
119 addToDoubleMap<float>(s_map);
120 addToDoubleMap<double>(s_map);
126 TypeToDoubleMap::iterator itFound =s_map.find(returnType.TypeInfo().name());
127 if(itFound == s_map.end()) {
132 return itFound->second(iObj,iMember);
140 const std::vector<std::pair<std::string, std::string> >& iFindValueFrom) :
143 using namespace ROOT::Reflex;
144 for(std::vector<std::pair<std::string,std::string> >::const_iterator it = iFindValueFrom.begin(), itEnd=iFindValueFrom.end();
150 if(0==temp.FunctionParameterSize(
true)) {
193 const_cast<void*>(iObject));
202 const_cast<void*>(iObject));
static ROOT::Reflex::Member recursiveFindMember(const std::string &iName, const ROOT::Reflex::Type &iType)
const std::string & unit() const
Type returnType(const Member &mem)
std::string valueName() const
tuple obj
Example code starts here #.
const std::string & stringValueFor(const void *) const
ROOT::Reflex::Member m_memberFunction
FWItemValueGetter(const ROOT::Reflex::Type &, const std::vector< std::pair< std::string, std::string > > &iFindValueFrom)
double valueFor(const void *) const
static const std::string & stringValueFor(const ROOT::Reflex::Object &iObj, const ROOT::Reflex::Member &iMember, const std::string &iUnit)
static double doubleValueFor(const ROOT::Reflex::Object &iObj, const ROOT::Reflex::Member &iMember)
ROOT::Reflex::Type m_type