CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DDLAlgorithm.cc
Go to the documentation of this file.
2 
3 #include <stddef.h>
4 #include <map>
5 #include <utility>
6 
16 
17 class DDCompactView;
18 
20  : DDXMLElement( myreg )
21 {}
22 
23 void
25 {
26  myRegistry_->getElement( "Vector" )->clear();
27 }
28 
29 void
31 {
32  DDXMLElement* myNumeric = myRegistry_->getElement( "Numeric" );
33  DDXMLElement* myString = myRegistry_->getElement( "String" );
34  DDXMLElement* myVector = myRegistry_->getElement( "Vector" );
35  DDXMLElement* myMap = myRegistry_->getElement( "Map" );
36  DDXMLElement* myrParent = myRegistry_->getElement( "rParent" );
37 
38  DDName algoName( getDDName( nmspace ));
39  DDLogicalPart lp( DDName( myrParent->getDDName( nmspace )));
40  DDXMLAttribute atts;
41 
42  // handle all Numeric elements in the Algorithm.
43  DDNumericArguments nArgs;
44  size_t i = 0;
45  for( ; i < myNumeric->size(); ++i )
46  {
47  atts = myNumeric->getAttributeSet( i );
48  nArgs[atts.find( "name" )->second] = myRegistry_->evaluator().eval( nmspace, atts.find( "value" )->second );
49  }
50 
51  DDStringArguments sArgs;
52  for( i = 0; i < myString->size(); ++i )
53  {
54  atts = myString->getAttributeSet( i );
55  sArgs[atts.find( "name" )->second] = atts.find( "value" )->second;
56  }
57 
58  DDAlgorithmHandler handler;
59  atts = getAttributeSet();
60  DDLVector* tv = dynamic_cast<DDLVector*>( myVector );
61  DDLMap* tm = dynamic_cast<DDLMap*>( myMap );
62  handler.initialize( algoName, lp, nArgs, tv->getMapOfVectors(), tm->getMapOfMaps(), sArgs, tv->getMapOfStrVectors());
63  handler.execute( cpv );
64 
65  // clear used/referred to elements.
66  myString->clear();
67  myNumeric->clear();
68  myVector->clear();
69  myMap->clear();
70  myrParent->clear();
71  clear();
72 }
73 
int i
Definition: DBlmapReader.cc:9
void execute(DDCompactView &)
executes the wrapped algorithm algo_; some pre- and post-processing (exception handling) ...
wrapper around a DDAlgorithm
DDLElementRegistry * myRegistry_
Definition: DDXMLElement.h:172
DDLVector handles Rotation and ReflectionRotation elements.
Definition: DDLVector.h:31
ReadMapType< std::vector< std::string > > & getMapOfStrVectors()
Definition: DDLVector.cc:163
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a &quot;row&quot; of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:73
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:16
ReadMapType< std::map< std::string, double > > & getMapOfMaps(void)
Definition: DDLMap.cc:159
type of data representation of DDCompactView
Definition: DDCompactView.h:90
std::map< std::string, std::string > DDXMLAttribute
Definition: DDXMLElement.h:45
void initialize(const std::string &algoName, const DDLogicalPart &parent, const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &svArgs)
initializes the wrapped algorithm algo_ and does some pre- and post-processing
ReadMapType< std::vector< double > > & getMapOfVectors()
Definition: DDLVector.cc:157
DDXMLElement * getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Processing the element.
Definition: DDLAlgorithm.cc:30
ClhepEvaluator & evaluator()
virtual size_t size(void) const
Number of elements accumulated.
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:92
void preProcessElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Called by loadAttributes AFTER attributes are loaded.
Definition: DDLAlgorithm.cc:24
DDLMap handles Map container.
Definition: DDLMap.h:63
This is a base class for processing XML elements in the DDD.
Definition: DDXMLElement.h:48
DDLAlgorithm(DDLElementRegistry *myreg)
Definition: DDLAlgorithm.cc:19
double eval(const std::string &ns, const std::string &expr)
The main class for processing parsed elements.
virtual void clear(void)
clear this element&#39;s contents.
Definition: DDXMLElement.cc:55
virtual const DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
Definition: DDXMLElement.cc:80