6 #include "boost/spirit/home/classic/core/non_terminal/grammar.hpp"
7 #include "boost/spirit/include/classic.hpp"
41 class Mapper :
public boost::spirit::classic::grammar<Mapper> {
44 template <
typename ScannerT>
61 using namespace boost::spirit::classic;
65 template <
typename ScannerT>
74 value = (+(anychar_p -
','))[
self.mapMakeDouble()];
101 if (tTextToParse.empty()) {
102 errorOut(
"No std::string to parse!");
106 if (atts.find(
"type") != atts.end() && atts.find(
"type")->second ==
"string") {
107 errorOut(
"Map of type std::string is not supported yet.");
116 errorOut(
"Does not conform to name=value, name=value... etc. of ddl Map element.");
121 }
else if (
parent() ==
"ConstantsSection" ||
parent() ==
"DDDefinition") {
123 for (std::map<std::string, double>::const_iterator it =
pMap.begin(); it !=
pMap.end(); ++it) {
124 tMap[it->first] = it->second;
131 std::string nEntries = atts.find(
"nEntries")->second;
133 errorOut(
"Number of entries found in Map text does not match number in attribute nEntries.");
150 msg +=
"\n as a Map element (comma separated list of name=value).";
MapMakeName mapMakeName() const
vector< string > parse(string line, const string &delimiter)
void operator()(char const *str, char const *end) const
DDLElementRegistry * myRegistry_
DDLMap(DDLElementRegistry *myreg)
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a "row" of attributes, i.e. one attribute set.
void throwError(const std::string &keyMessage) const
format std::string for throw an error.
ReadMapType< std::map< std::string, double > > & getMapOfMaps(void)
const std::string & parent(void) const
access to parent element name
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Processing the element.
Compact representation of the geometrical detector hierarchy.
MapMakeDouble mapMakeDouble() const
a named constant corresponding to the DDL-XML tag <Constant> and <ConstantsVector> ...
std::map< std::string, std::string > DDXMLAttribute
MapMakeName(DDLMap *iMap)
ClhepEvaluator & evaluator()
definition(Mapper const &self)
void do_makeName(char const *str, char const *end)
void operator()(char const *str, char const *end) const
void preProcessElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Called by loadAttributes AFTER attributes are loaded.
MapMakeDouble(DDLMap *iMap)
void do_pair(char const *str, char const *end)
ReadMapType< std::map< std::string, double > > pMapMap
DDLMap handles Map container.
This is a base class for processing XML elements in the DDD.
void errorOut(const char *str)
rule< ScannerT > const & start() const
double eval(const std::string &ns, const std::string &expr)
The main class for processing parsed elements.
virtual void clear(void)
clear this element's contents.
void do_makeDouble(char const *str, char const *end)
virtual const DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
void operator()(char const *str, char const *end) const
const std::string getText(size_t tindex=0) const
retrieve the text blob.