CMS 3D CMS Logo

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  auto myNumeric = myRegistry_->getElement( "Numeric" );
33  auto myString = myRegistry_->getElement( "String" );
34  auto myVector = myRegistry_->getElement( "Vector" );
35  auto myMap = myRegistry_->getElement( "Map" );
36  auto 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  handler.initialize( algoName, lp, nArgs,
61  static_cast<DDLVector*>( myVector.get())->getMapOfVectors(),
62  static_cast<DDLMap*>( myMap.get())->getMapOfMaps(), sArgs,
63  static_cast<DDLVector*>( myVector.get())->getMapOfStrVectors());
64  handler.execute( cpv );
65 
66  // clear used/referred to elements.
67  myString->clear();
68  myNumeric->clear();
69  myVector->clear();
70  myMap->clear();
71  myrParent->clear();
72  clear();
73 }
74 
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
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a "row" of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:73
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
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
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Processing the element.
Definition: DDLAlgorithm.cc:30
ClhepEvaluator & evaluator()
std::shared_ptr< DDXMLElement > getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
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