CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Attributes
DDLElementRegistry Class Reference

The main class for processing parsed elements. More...

#include <DDLElementRegistry.h>

Public Types

typedef std::map< std::string,
DDXMLElement * > 
RegistryMap
 

Public Member Functions

 DDLElementRegistry ()
 Constructor. More...
 
DDXMLElementgetElement (const std::string &name)
 THE most important part. Getting the pointer to a given element type. More...
 
const std::string & getElementName (DDXMLElement *theElement) const
 Get the name given a pointer. This may not be needed... More...
 
void registerElement (const std::string &name, DDXMLElement *)
 This allows other Elements to register themselves with the static registry. More...
 
 ~DDLElementRegistry ()
 Destructor. More...
 

Private Attributes

RegistryMap registry_
 

Detailed Description

The main class for processing parsed elements.

DDLElementRegistry.h - description

begin : Wed Oct 24 2001 email : case@.nosp@m.ucdh.nosp@m.ep.uc.nosp@m.davi.nosp@m.s.edu

This class is designed to serve as a registry of all DDL XML elements. It inherits from DDXMLElementRegistry.

This class is responsible for constructing and destructing any necessary DDL element.

Definition at line 41 of file DDLElementRegistry.h.

Member Typedef Documentation

typedef std::map<std::string, DDXMLElement*> DDLElementRegistry::RegistryMap

Definition at line 45 of file DDLElementRegistry.h.

Constructor & Destructor Documentation

DDLElementRegistry::DDLElementRegistry ( void  )

Constructor.

Definition at line 52 of file DDLElementRegistry.cc.

53 {}
DDLElementRegistry::~DDLElementRegistry ( void  )

Destructor.

Definition at line 55 of file DDLElementRegistry.cc.

References end, spr::find(), and registry_.

56 {
57  // Complicated cleanup. I keep track of DDXMLElements that have
58  // already been deleted using this vector. Then delete them one-by-one.
59  std::vector<DDXMLElement*> toDelete;
60  for( RegistryMap::const_iterator it = registry_.begin(), end = registry_.end(); it != end; ++it )
61  {
62  std::vector<DDXMLElement*>::const_iterator deleteIt = std::find( toDelete.begin(), toDelete.end(), it->second );
63  if( deleteIt == toDelete.end())
64  {
65  toDelete.push_back( it->second );
66  delete it->second;
67  }
68  }
69 }
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
#define end
Definition: vmac.h:38

Member Function Documentation

DDXMLElement * DDLElementRegistry::getElement ( const std::string &  name)

THE most important part. Getting the pointer to a given element type.

If this is called with a DDXMLElementRegistry pointer, it will simply return a pointer if already registered or NULL, no instantiating.

Definition at line 75 of file DDLElementRegistry.cc.

References DCOUT_V, mergeVDriftHistosByStation::name, NULL, and registry_.

Referenced by DDLBooleanSolid::dumpBooleanSolid(), DDLAlgorithm::preProcessElement(), DDLReflectionSolid::preProcessElement(), DDLBooleanSolid::preProcessElement(), DDLRotationSequence::preProcessElement(), DDLPosPart::preProcessElement(), DDLShapelessSolid::preProcessElement(), DDLPolyGenerator::preProcessElement(), DDLCompositeMaterial::preProcessElement(), DDLLogicalPart::preProcessElement(), DDLSpecPar::processElement(), DDLReflectionSolid::processElement(), DDLAlgorithm::processElement(), DDLAlgoPosPart::processElement(), DDLPolyGenerator::processElement(), DDLRotationSequence::processElement(), DDLBooleanSolid::processElement(), DDLPosPart::processElement(), DDLRotationByAxis::processElement(), DDLCompositeMaterial::processElement(), DDLLogicalPart::processElement(), DDLMaterial::setReference(), and DDLSolid::setReference().

76 {
77  DCOUT_V('P',"myRegistry_->getElementRegistry(" << name << ")");
78 
79  // DDXMLElement* myret = instance()->DDXMLElementRegistry::getElement(name);
80  RegistryMap::iterator it = registry_.find(name);
81  // std::cout << "it found name? "<< name << " " ;
82  // if (it != registry_.end() ) std::cout << "yes"; else std::cout << "no";
83  // std::cout << std::endl;
84  // std::cout << "there are " << registry_.size() << " elements-types so far." << std::endl;
85  DDXMLElement* myret = NULL;
86  if( it != registry_.end())
87  {
88  myret = it->second;
89  } else {
90  // std::cout << " making first and only " << name << std::endl;
91  // Make the Solid handlers and register them.
92  if (name == "Box")
93  {
94  myret = new DDLBox(this);
95  }
96  else if (name == "Cone")
97  {
98  myret = new DDLCone(this);
99  }
100  else if (name == "Polyhedra" || name == "Polycone")
101  {
102  myret = new DDLPolyGenerator(this);
103  }
104  else if (name == "Trapezoid" || name == "Trd1")
105  {
106  myret = new DDLTrapezoid(this);
107  }
108  else if (name == "PseudoTrap")
109  {
110  myret = new DDLPseudoTrap(this);
111  }
112  else if (name == "Tubs" || name == "Tube" || name == "TruncTubs")
113  {
114  myret = new DDLTubs(this);
115  }
116  else if (name == "Torus")
117  {
118  myret = new DDLTorus(this);
119  }
120  else if (name == "ReflectionSolid")
121  {
122  myret = new DDLReflectionSolid(this);
123  }
124  else if (name == "UnionSolid" || name == "SubtractionSolid"
125  || name == "IntersectionSolid")
126  {
127  myret = new DDLBooleanSolid(this);
128  }
129  else if (name == "ShapelessSolid")
130  {
131  myret = new DDLShapelessSolid(this);
132  }
133  else if (name == "Sphere")
134  {
135  myret = new DDLSphere(this);
136  }
137  else if (name == "Orb")
138  {
139  myret = new DDLOrb(this);
140  }
141  else if (name == "EllipticalTube")
142  {
143  myret = new DDLEllipticalTube(this);
144  }
145  else if (name == "Ellipsoid")
146  {
147  myret = new DDLEllipsoid(this);
148  }
149  else if (name == "Sphere")
150  {
151  myret = new DDLParallelepiped(this);
152  }
153 
154  // LogicalParts, Positioners, Materials, Rotations, Reflections
155  // and Specific (Specified?) Parameters
156  else if (name == "PosPart")
157  {
158  myret = new DDLPosPart(this);
159  }
160  else if (name == "AlgoPosPart")
161  {
162  myret = new DDLAlgoPosPart(this);
163  }
164  else if (name == "CompositeMaterial")
165  {
166  myret = new DDLCompositeMaterial(this);
167  }
168  else if (name == "ElementaryMaterial")
169  {
170  myret = new DDLElementaryMaterial(this);
171  }
172  else if (name == "LogicalPart")
173  {
174  myret = new DDLLogicalPart(this);
175  }
176  else if (name == "ReflectionRotation" || name == "Rotation" )
177  {
178  myret = new DDLRotationAndReflection(this);
179  }
180  else if (name == "SpecPar")
181  {
182  myret = new DDLSpecPar(this);
183  }
184  else if (name == "RotationSequence")
185  {
186  myret = new DDLRotationSequence(this);
187  }
188  else if (name == "RotationByAxis")
189  {
190  myret = new DDLRotationByAxis(this);
191  }
192  // Special, need them around.
193  else if (name == "SpecParSection") {
194  myret = new DDXMLElement(this, true);
195  }
196  else if (name == "Vector") {
197  myret = new DDLVector(this);
198  }
199  else if (name == "Map") {
200  myret = new DDLMap(this);
201  }
202  else if (name == "String") {
203  myret = new DDLString(this);
204  }
205  else if (name == "Numeric") {
206  myret = new DDLNumeric(this);
207  }
208  else if (name == "Algorithm") {
209  myret = new DDLAlgorithm(this);
210  }
211  else if (name == "Division") {
212  myret = new DDLDivision(this);
213  }
214 
215  // Supporting Cast of elements.
216  // All elements which simply accumulate attributes which are then used
217  // by one of the above elements.
218  else if (name == "MaterialFraction" || name == "ParE" || name == "ParS"
219  || name == "RZPoint" || name == "PartSelector"
220  || name == "Parameter" || name == "ZSection"
221  || name == "Translation"
222  || name == "rSolid" || name == "rMaterial"
223  || name == "rParent" || name == "rChild"
224  || name == "rRotation" || name == "rReflectionRotation"
225  || name == "DDDefinition" )
226  {
227  myret = new DDXMLElement(this);
228  }
229 
230  // IF it is a new element return a default XMLElement which processes nothing.
231  // Since there are elements in the XML which require no processing, they
232  // can all use the same DDXMLElement which defaults to anything. A validated
233  // XML document (i.e. validated with XML Schema) will work properly.
234  // As of 8/16/2002: Elements like LogicalPartSection and any other *Section
235  // XML elements of the DDLSchema are taken care of by this.
236  else
237  {
238  // myret = instance()->DDXMLElementRegistry::getElement("***");
239 
240  myret = new DDXMLElement(this);
241  // std::cout << "about to register a " << "***" << std::endl;
242  // registry_["***"] = myret;
243  // DCOUT_V('P', "WARNING: The default (DDLElementRegistry) was used for "
244  // << name << " since there was no specific handler." << std::endl);
245  // return myret;
246  }
247 
248  // Actually register the thing
249  // instance()->registerElement(name, myret);
250  // std::cout << "about to register a " << name << std::endl;
251  registry_[name] = myret;
252  }
253  return myret;
254 }
DDLPosPart handles PosPart elements.
Definition: DDLPosPart.h:24
This class takes care of processing all BooleanSolid type elements.
DDLSphere processes all Sphere elements.
Definition: DDLSphere.h:24
DDLDivision processes Division elements.
Definition: DDLDivision.h:23
DDLOrb processes all Orb elements.
Definition: DDLOrb.h:24
DDLString handles String Elements.
Definition: DDLString.h:26
DDLVector handles Rotation and ReflectionRotation elements.
Definition: DDLVector.h:31
DDLReflectionSolid processes ReflectionSolid elements.
DDLAlgoPosPart handles AlgoPosPart elements.
#define NULL
Definition: scimark2.h:8
DDLSpecPar processes SpecPar elements.
Definition: DDLSpecPar.h:23
DDLRotationAndReflection handles RotationCMSIM and ReflectionRotation elements.
DDLEllipticalTube processes all EllipticalTube elements.
DDLAlgorithm processes Algorithm elements.
Definition: DDLAlgorithm.h:22
DDLParallelepiped processes all Parallelepiped elements.
DDLBox processes Box elements.
Definition: DDLBox.h:24
DDLElementaryMaterial processes ElementaryMaterial elements.
DDLCone processes all Cone elements.
Definition: DDLCone.h:24
DDLEllipsoid processes all Ellipsoid elements.
Definition: DDLEllipsoid.h:24
DDLTubs processes Tubs elements.
Definition: DDLTubs.h:22
DDLPolyGenerator processes DDL XML Polycone and DDL XML Polyhedra elements.
#define DCOUT_V(M_v_Y, M_v_S)
Definition: DDdebug.h:54
DDLMap handles Map container.
Definition: DDLMap.h:58
DDLLogicalPart processes LogicalPart elements.
This is a base class for processing XML elements in the DDD.
Definition: DDXMLElement.h:58
DDLRotationByAxis handles RotationByAxis elements.
DDLCompositeMaterial processes all CompositeMaterial elements.
DDLNumeric handles Numeric Elements.
Definition: DDLNumeric.h:26
DDLRotationSequence handles a set of Rotations.
DDLShapelessSolid processes ShapelessSolid elements.
const std::string & DDLElementRegistry::getElementName ( DDXMLElement theElement) const

Get the name given a pointer. This may not be needed...

Definition at line 257 of file DDLElementRegistry.cc.

References end, and registry_.

258 {
259  for( RegistryMap::const_iterator it = registry_.begin(), end = registry_.end(); it != end; ++it )
260  if( it->second == theElement )
261  return it->first;
262  return registry_.find( "***" )->first;
263 }
#define end
Definition: vmac.h:38
void DDLElementRegistry::registerElement ( const std::string &  name,
DDXMLElement  
)

This allows other Elements to register themselves with the static registry.

Member Data Documentation

RegistryMap DDLElementRegistry::registry_
private

Definition at line 68 of file DDLElementRegistry.h.

Referenced by getElement(), getElementName(), and ~DDLElementRegistry().