DDLVector handles Rotation and ReflectionRotation elements. More...
#include <DDLVector.h>
Public Member Functions | |
void | clearall () |
DDLVector (DDLElementRegistry *myreg) | |
ReadMapType< std::vector < std::string > > & | getMapOfStrVectors () |
ReadMapType< std::vector < double > > & | getMapOfVectors () |
void | preProcessElement (const std::string &name, const std::string &nmspace, DDCompactView &cpv) |
Called by loadAttributes AFTER attributes are loaded. | |
void | processElement (const std::string &name, const std::string &nmspace, DDCompactView &cpv) |
Processing the element. | |
~DDLVector () | |
Private Member Functions | |
void | do_makeDouble (char const *str, char const *end) |
void | do_makeString (char const *str, char const *end) |
void | errorOut (const char *str) const |
bool | parse_numbers (char const *str) const |
bool | parse_strings (char const *str) const |
Private Attributes | |
std::string | pNameSpace |
ReadMapType< std::vector < std::string > > | pStrVecMap |
std::vector< std::string > | pStrVector |
ReadMapType< std::vector < double > > | pVecMap |
std::vector< double > | pVector |
Friends | |
class | VectorMakeDouble |
class | VectorMakeString |
DDLVector handles Rotation and ReflectionRotation elements.
DDLVector.h - description ------------------- begin: Fri Nov 21 2003 email: case@ucdhep.ucdavis.edu
This is the Vector container
Definition at line 31 of file DDLVector.h.
DDLVector::DDLVector | ( | DDLElementRegistry * | myreg | ) |
Definition at line 72 of file DDLVector.cc.
: DDXMLElement( myreg ) {}
DDLVector::~DDLVector | ( | void | ) |
Definition at line 76 of file DDLVector.cc.
{}
void DDLVector::clearall | ( | void | ) |
Definition at line 199 of file DDLVector.cc.
References DDXMLElement::clear(), pStrVecMap, and pVecMap.
{ DDXMLElement::clear(); pVecMap.clear(); pStrVecMap.clear(); }
void DDLVector::do_makeDouble | ( | char const * | str, |
char const * | end | ||
) | [private] |
Definition at line 175 of file DDLVector.cc.
References DDI::Singleton< I >::instance(), pNameSpace, and pVector.
{ std::string ts(str, end); double td = ExprEvalSingleton::instance().eval(pNameSpace, ts); pVector.push_back(td); }
void DDLVector::do_makeString | ( | char const * | str, |
char const * | end | ||
) | [private] |
Definition at line 183 of file DDLVector.cc.
References pStrVector.
{ std::string ts(str, end); pStrVector.push_back(ts); }
void DDLVector::errorOut | ( | const char * | str | ) | const [private] |
Definition at line 190 of file DDLVector.cc.
References DDXMLElement::throwError().
Referenced by processElement().
{ std::string e("Failed to parse the following: \n"); e+= std::string(str); e+="\n as a Vector element (comma separated list)."; throwError (e); }
ReadMapType< std::vector< std::string > > & DDLVector::getMapOfStrVectors | ( | void | ) |
Definition at line 169 of file DDLVector.cc.
References pStrVecMap.
Referenced by DDLAlgorithm::processElement().
{ return pStrVecMap; }
ReadMapType< std::vector< double > > & DDLVector::getMapOfVectors | ( | void | ) |
Definition at line 163 of file DDLVector.cc.
References pVecMap.
Referenced by DDLAlgorithm::processElement().
{ return pVecMap; }
bool DDLVector::parse_numbers | ( | char const * | str | ) | const [private] |
Definition at line 51 of file DDLVector.cc.
References triggerExpression::parse().
Referenced by processElement().
{ static VectorMakeDouble makeDouble; return parse(str, ((+(anychar_p - ','))[makeDouble] >> *(',' >> (+(anychar_p - ','))[makeDouble])) >> end_p , space_p).full; }
bool DDLVector::parse_strings | ( | char const * | str | ) | const [private] |
Definition at line 62 of file DDLVector.cc.
References triggerExpression::parse().
Referenced by processElement().
{ static VectorMakeString makeString; return parse(str, ((+(anychar_p - ','))[makeString] >> *(',' >> (+(anychar_p - ','))[makeString])) >> end_p , space_p).full; }
void DDLVector::preProcessElement | ( | const std::string & | name, |
const std::string & | nmspace, | ||
DDCompactView & | cpv | ||
) | [virtual] |
Called by loadAttributes AFTER attributes are loaded.
The preProcessElement method can assume that the attributes are loaded and perform any code that is necessary at the start of an element.
This would allow users to call their own code to setup anything necessary for the continued processing of the child elements.
Reimplemented from DDXMLElement.
Definition at line 80 of file DDLVector.cc.
References pNameSpace, pStrVector, and pVector.
{ pVector.clear(); pStrVector.clear(); pNameSpace = nmspace; }
void DDLVector::processElement | ( | const std::string & | name, |
const std::string & | nmspace, | ||
DDCompactView & | cpv | ||
) | [virtual] |
Processing the element.
The processElement method completes any necessary work to process the XML element.
For example, this can be used to call the DDCore to make the geometry in memory. There is a default for this so that if not declared in the inheriting class, no processing is done.
Reimplemented from DDXMLElement.
Definition at line 88 of file DDLVector.cc.
References DDXMLElement::clear(), DCOUT_V, errorOut(), DDXMLElement::getAttributeSet(), DDXMLElement::getDDName(), DDXMLElement::getText(), DDI::Singleton< I >::instance(), MatrixRunner::msg, DDXMLElement::parent(), parse_numbers(), parse_strings(), pNameSpace, pStrVecMap, pStrVector, pVecMap, pVector, and v.
{ DCOUT_V('P', "DDLVector::processElement started"); DDXMLAttribute atts = getAttributeSet(); bool isNumVec((atts.find("type") == atts.end() || atts.find("type")->second == "numeric") ? true : false); bool isStringVec((!isNumVec && atts.find("type") != atts.end() && atts.find("type")->second == "string") ? true : false); std::string tTextToParse = getText(); // cout << "tTextToParse is |"<< tTextToParse << "|" << endl; if (tTextToParse.size() == 0) { errorOut(" EMPTY STRING "); } if (isNumVec) {//(atts.find("type") == atts.end() || atts.find("type")->second == "numeric") { if (!parse_numbers(tTextToParse.c_str())) { errorOut(tTextToParse.c_str()); } } else if (isStringVec) { //(atts.find("type")->second == "string") { if (!parse_strings(tTextToParse.c_str())) { errorOut(tTextToParse.c_str()); } } else { errorOut("Unexpected std::vector type. Only \"numeric\" and \"string\" are allowed."); } if (parent() == "Algorithm" || parent() == "SpecPar") { if (isNumVec) { //(atts.find("type") != atts.end() || atts.find("type")->second == "numeric") { // std::cout << "adding to pVecMap name= " << atts.find("name")->second << std::endl; // for (std::vector<double>::const_iterator it = pVector.begin(); it != pVector.end(); ++it) // std::cout << *it << "\t" << std::endl; pVecMap[atts.find("name")->second] = pVector; // std::cout << "size: " << pVecMap.size() << std::endl; } else if (isStringVec) { //(atts.find("type")->second == "string") { pStrVecMap[atts.find("name")->second] = pStrVector; // cout << "it is a string, name is: " << atts.find("name")->second << endl; } size_t expNEntries = 0; if (atts.find("nEntries") != atts.end()) { std::string nEntries = atts.find("nEntries")->second; expNEntries = size_t (ExprEvalSingleton::instance().eval(pNameSpace, nEntries)); } if ( (isNumVec && pVector.size() != expNEntries) || (isStringVec && pStrVector.size() != expNEntries) ) { std::string msg ("Number of entries found in Vector text does not match number in attribute nEntries."); msg += "\n\tnEntries = " + atts.find("nEntries")->second; msg += "\n------------------text---------\n"; msg += tTextToParse; msg += "\n------------------text---------\n"; errorOut(msg.c_str()); } } else if (parent() == "ConstantsSection" || parent() == "DDDefinition") { if (atts.find("type") == atts.end() || atts.find("type")->second == "numeric") { DDVector v(getDDName(nmspace), new std::vector<double>(pVector)); } else { DDStrVector v(getDDName(nmspace), new std::vector<std::string>(pStrVector)); } } clear(); DCOUT_V('P', "DDLVector::processElement completed"); }
friend class VectorMakeDouble [friend] |
Definition at line 34 of file DDLVector.h.
friend class VectorMakeString [friend] |
Definition at line 35 of file DDLVector.h.
std::string DDLVector::pNameSpace [private] |
Definition at line 58 of file DDLVector.h.
Referenced by do_makeDouble(), preProcessElement(), and processElement().
ReadMapType< std::vector<std::string> > DDLVector::pStrVecMap [private] |
Definition at line 57 of file DDLVector.h.
Referenced by clearall(), getMapOfStrVectors(), and processElement().
std::vector<std::string> DDLVector::pStrVector [private] |
Definition at line 55 of file DDLVector.h.
Referenced by do_makeString(), preProcessElement(), and processElement().
ReadMapType< std::vector<double> > DDLVector::pVecMap [private] |
Definition at line 56 of file DDLVector.h.
Referenced by clearall(), getMapOfVectors(), and processElement().
std::vector<double> DDLVector::pVector [private] |
Definition at line 54 of file DDLVector.h.
Referenced by do_makeDouble(), preProcessElement(), and processElement().