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.
1 /**************************************************************************
2  DDLAlgorithm.cc - description
3  -------------------
4  begin : Saturday November 29, 2003
5  email : case@ucdhep.ucdavis.edu
6  ***************************************************************************/
7 
8 /***************************************************************************
9  * *
10  * DDDParser sub-component of DDD *
11  * *
12  ***************************************************************************/
13 
17 
21 
23 
24 #include <sstream>
25 
27  : DDXMLElement( myreg )
28 {}
29 
31 {}
32 
33 void
34 DDLAlgorithm::preProcessElement( const std::string& name, const std::string& nmspace, DDCompactView& cpv )
35 {
36  myRegistry_->getElement( "Vector" )->clear();
37 }
38 
39 void
40 DDLAlgorithm::processElement( const std::string& name, const std::string& nmspace, DDCompactView& cpv )
41 {
42  DCOUT_V( 'P', "DDLAlgorithm::processElement started" );
43 
44  DDXMLElement* myNumeric = myRegistry_->getElement( "Numeric" );
45  DDXMLElement* myString = myRegistry_->getElement( "String" );
46  DDXMLElement* myVector = myRegistry_->getElement( "Vector" );
47  DDXMLElement* myMap = myRegistry_->getElement( "Map" );
48  DDXMLElement* myrParent = myRegistry_->getElement( "rParent" );
49 
50  DDName algoName( getDDName( nmspace ));
51  DDLogicalPart lp( DDName( myrParent->getDDName( nmspace )));
52  DDXMLAttribute atts;
53 
54  // handle all Numeric elements in the Algorithm.
55  DDNumericArguments nArgs;
56  size_t i = 0;
57  for( ; i < myNumeric->size(); ++i )
58  {
59  atts = myNumeric->getAttributeSet( i );
60  nArgs[atts.find( "name" )->second] = ExprEvalSingleton::instance().eval( nmspace, atts.find( "value" )->second );
61  }
62 
63  DDStringArguments sArgs;
64  for( i = 0; i < myString->size(); ++i )
65  {
66  atts = myString->getAttributeSet( i );
67  sArgs[atts.find( "name" )->second] = atts.find( "value" )->second;
68  }
69 
70  DDAlgorithmHandler handler;
71  atts = getAttributeSet();
72  DDLVector* tv = dynamic_cast<DDLVector*>( myVector );
73  DDLMap* tm = dynamic_cast<DDLMap*>( myMap );
74  handler.initialize( algoName, lp, nArgs, tv->getMapOfVectors(), tm->getMapOfMaps(), sArgs, tv->getMapOfStrVectors());
75  handler.execute( cpv );
76 
77  // clear used/referred to elements.
78  myString->clear();
79  myNumeric->clear();
80  myVector->clear();
81  myMap->clear();
82  myrParent->clear();
83  clear();
84 
85  DCOUT_V( 'P', "DDLAlgorithm::processElement(...)" );
86 }
87 
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:186
DDLVector handles Rotation and ReflectionRotation elements.
Definition: DDLVector.h:31
ReadMapType< std::vector< std::string > > & getMapOfStrVectors()
Definition: DDLVector.cc:169
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a &quot;row&quot; of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:79
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
ReadMapType< std::map< std::string, double > > & getMapOfMaps(void)
Definition: DDLMap.cc:171
type of data representation of DDCompactView
Definition: DDCompactView.h:77
std::map< std::string, std::string > DDXMLAttribute
Definition: DDXMLElement.h:55
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:163
~DDLAlgorithm()
Destructor.
Definition: DDLAlgorithm.cc:30
DDXMLElement * getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
static value_type & instance()
virtual size_t size(void) const
Number of elements accumulated.
void preProcessElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv)
Called by loadAttributes AFTER attributes are loaded.
Definition: DDLAlgorithm.cc:34
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
#define DCOUT_V(M_v_Y, M_v_S)
Definition: DDdebug.h:54
DDLMap handles Map container.
Definition: DDLMap.h:58
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv)
Processing the element.
Definition: DDLAlgorithm.cc:40
This is a base class for processing XML elements in the DDD.
Definition: DDXMLElement.h:58
DDLAlgorithm(DDLElementRegistry *myreg)
Constructor.
Definition: DDLAlgorithm.cc:26
The main class for processing parsed elements.
virtual void clear(void)
clear this element&#39;s contents.
Definition: DDXMLElement.cc:61
virtual const DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
Definition: DDXMLElement.cc:86