CMS 3D CMS Logo

Public Types | Public Member Functions | Static Public Member Functions | Static Private Member Functions | Private Attributes | Friends

DDName Class Reference

DDName is used to identify DDD entities uniquely. More...

#include <DDName.h>

List of all members.

Public Types

typedef DDCurrentNamespace CNS
typedef int id_type
typedef std::vector
< Registry::const_iterator > 
IdToName
typedef std::map< std::pair
< std::string, std::string >
, id_type
Registry

Public Member Functions

 DDName (const std::string &name, const std::string &ns)
 Constructs a DDName with name name and assigns name to the namespace ns.
 DDName (const std::string &name)
 Creates a DDName with name in the current namespace defined in the singleton DDCurrentNamespace.
 DDName (const char *name, const char *ns)
 DDName (id_type)
 DDName (const char *name)
 DDName ()
const std::string fullname () const
id_type id () const
const std::string & name () const
 Returns the name.
const std::string & ns () const
 Returns the namespace.
 operator std::string () const
bool operator< (const DDName &rhs) const
bool operator== (const DDName &rhs) const

Static Public Member Functions

static void defineId (const std::pair< std::string, std::string > &, id_type id)
 register pre-defined ids
static bool exists (const std::string &name, const std::string &ns)
 true, if a DDName with given name and namespace (ns) already is registerd, otherwise false

Static Private Member Functions

static Registry::iterator registerName (const std::pair< std::string, std::string > &s)

Private Attributes

id_type id_

Friends

class DStreamer

Detailed Description

DDName is used to identify DDD entities uniquely.

A DDName consists of a name and a namespace. Both are represented as std::string.

Definition at line 18 of file DDName.h.


Member Typedef Documentation

Definition at line 24 of file DDName.h.

typedef int DDName::id_type

Definition at line 25 of file DDName.h.

typedef std::vector<Registry::const_iterator> DDName::IdToName

Definition at line 27 of file DDName.h.

typedef std::map<std::pair<std::string,std::string>,id_type> DDName::Registry

Definition at line 26 of file DDName.h.


Constructor & Destructor Documentation

DDName::DDName ( const std::string &  name,
const std::string &  ns 
)

Constructs a DDName with name name and assigns name to the namespace ns.

Definition at line 19 of file DDName.cc.

 : id_(registerName(std::make_pair(name,ns))->second)
{ }
DDName::DDName ( const std::string &  name)

Creates a DDName with name in the current namespace defined in the singleton DDCurrentNamespace.

Definition at line 24 of file DDName.cc.

References DDSplit(), id_, DDCurrentNamespace::ns(), registerName(), and query::result.

 : id_(0)
{ 
  std::pair<std::string,std::string> result = DDSplit(name);
  if (result.second == "") {
    id_ = registerName(std::make_pair(result.first,DDCurrentNamespace::ns()))->second;
  }  
  else {
    id_ = registerName(result)->second;
  }
}
DDName::DDName ( const char *  name)

Definition at line 37 of file DDName.cc.

References DDSplit(), id_, DDCurrentNamespace::ns(), registerName(), and query::result.

 : id_(0)
{ 
  std::pair<std::string,std::string> result = DDSplit(name);
  if (result.second == "") {
    id_ = registerName(std::make_pair(result.first,DDCurrentNamespace::ns()))->second;
  }  
  else {
    id_ = registerName(result)->second;
  }
}
DDName::DDName ( const char *  name,
const char *  ns 
)

Definition at line 50 of file DDName.cc.

 : id_(registerName(std::make_pair(std::string(name),std::string(ns)))->second)
{ }
DDName::DDName ( DDName::id_type  id)

Definition at line 59 of file DDName.cc.

 : id_(id)
{ }
DDName::DDName ( ) [explicit]

Definition at line 55 of file DDName.cc.

 : id_(0)
{ } 

Member Function Documentation

void DDName::defineId ( const std::pair< std::string, std::string > &  nm,
DDName::id_type  id 
) [static]

register pre-defined ids

Definition at line 63 of file DDName.cc.

References first, id(), and asciidump::s.

Referenced by DDStreamer::names_read().

{ 
  IdToName & id2n = DDI::Singleton<IdToName>::instance();
  
  /* 
    Semantics:
    If id exists && the registered value matches the given one, do nothing
    If id exists && the registered value DOES NOT match, throw
    If id DOES NOT exists, register with the given value
  */
  if ( id < id_type(id2n.size()) ) {
    if(id2n[id]->first != nm) {
      std::stringstream s;
      s << id;
      throw DDException("DDName::DDName(std::pair<std::string,std::string>,id_type): id=" + s.str() + " reg-name=?" );
    }
  }
  else {
    id2n.resize(id+1);
    DDI::Singleton<Registry>::instance()[nm]=id;
    id2n[id] = DDI::Singleton<Registry>::instance().find(nm);
  }
}
bool DDName::exists ( const std::string &  name,
const std::string &  ns 
) [static]

true, if a DDName with given name and namespace (ns) already is registerd, otherwise false

Definition at line 116 of file DDName.cc.

References AlCaHLTBitMon_ParallelJobs::p.

{
   const std::pair<std::string,std::string> p(name,ns);
   Registry::const_iterator it = DDI::Singleton<Registry>::instance().find(p);
   return it != DDI::Singleton<Registry>::instance().end() ? true : false;
}
const std::string DDName::fullname ( ) const [inline]
id_type DDName::id ( void  ) const [inline]

Definition at line 61 of file DDName.h.

References id_.

Referenced by defineId(), nameout(), and operator<<().

{ return id_;}
const std::string & DDName::name ( ) const

Returns the name.

Definition at line 87 of file DDName.cc.

References id_, and query::result.

Referenced by DDEcalEndcapAlgo::addTmp(), DDCompactView::algoPosPart(), MaterialForOnline::beginRun(), DDG4SolidConverter::box(), MagGeoBuilderFromDDD::build(), RPCGeometryBuilderFromDDD::buildGeometry(), RPCGeometryParsFromDD::buildGeometry(), DDG4SolidConverter::cons(), DDHCalBarrelAlgo::constructInsideDetectors(), DDHCalEndcapAlgo::constructInsideModule(), DDHCalEndcapAlgo::constructInsideModule0(), DDG4Builder::convertLV(), DDG4Builder::convertMaterial(), TGeoMgrFromDdd::createShape(), TGeoFromDddService::createShape(), DD_NC(), DDBox::DDBox(), DDCheckAll(), DDCheckMaterial(), DDCons::DDCons(), DDEllipsoid::DDEllipsoid(), DDEllipticalTube::DDEllipticalTube(), DDIntersection::DDIntersection(), DDOrb::DDOrb(), DDParallelepiped::DDParallelepiped(), DDPolycone::DDPolycone(), DDPolyhedra::DDPolyhedra(), DDPseudoTrap::DDPseudoTrap(), DDrot(), DDrotReflect(), DDShapelessSolid::DDShapelessSolid(), DDSphere::DDSphere(), DDSubtraction::DDSubtraction(), DDTorus::DDTorus(), DDTrap::DDTrap(), DDTruncTubs::DDTruncTubs(), DDTubs::DDTubs(), DDUnion::DDUnion(), DDG4SolidConverter::ellipsoid(), DDG4SolidConverter::ellipticaltube(), DDTBH4Algo::execute(), DDTIBLayerAlgo_MTCC::execute(), DDEcalBarrelNewAlgo::execute(), DDPixBarLayerAlgo::execute(), DDEcalBarrelAlgo::execute(), DDTECModuleAlgo::execute(), DDTIBLayerAlgo::execute(), DDTIDRingAlgo::execute(), DDHCalForwardAlgo::execute(), fullname(), HcalTB06BeamSD::getNames(), MaterialBudgetHcalHistos::getNames(), HCalSD::getNames(), HCalSD::HCalSD(), HcalTB06BeamSD::HcalTB06BeamSD(), HcalTB02SD::initMap(), ECalSD::initMap(), DreamSD::initMap(), DDG4SolidConverter::intersection(), CmsTrackerDebugNavigator::iterate(), DDDividedConsRho::makeDDLogicalPart(), DDDividedBoxX::makeDDLogicalPart(), DDDividedTrdZ::makeDDLogicalPart(), DDDividedConsZ::makeDDLogicalPart(), DDDividedPolyhedraPhi::makeDDLogicalPart(), DDDividedConsPhi::makeDDLogicalPart(), DDDividedPolyconePhi::makeDDLogicalPart(), DDDividedPolyhedraRho::makeDDLogicalPart(), DDDividedTrdX::makeDDLogicalPart(), DDDividedBoxZ::makeDDLogicalPart(), DDDividedPolyhedraZ::makeDDLogicalPart(), DDDividedTubsRho::makeDDLogicalPart(), DDDividedBoxY::makeDDLogicalPart(), DDDividedPolyconeRho::makeDDLogicalPart(), DDDividedPolyconeZ::makeDDLogicalPart(), DDDividedTubsZ::makeDDLogicalPart(), DDDividedPolyconePhi::makeDDRotation(), DDDividedConsPhi::makeDDRotation(), DDDividedTubsPhi::makeDDRotation(), DDDividedPolyhedraPhi::makeDDRotation(), DDLDivision::makeDivider(), nameout_strings(), operator std::string(), DDCompareEPV::operator()(), operator<<(), DDG4SolidConverter::orb(), DDG4SolidConverter::para(), DDG4SolidConverter::polycone_rrz(), DDG4SolidConverter::polycone_rz(), DDG4SolidConverter::polyhedra_rrz(), DDG4SolidConverter::polyhedra_rz(), DDLDivision::processElement(), DDLCompositeMaterial::processElement(), DDLPosPart::processElement(), DDLRotationByAxis::processElement(), DDG4SolidConverter::pseudotrap(), GeometricDetLoader::putOne(), PGeometricDetBuilder::putOne(), CocoaAnalyzer::ReadXMLFile(), DDG4SolidConverter::reflected(), DDG4SolidConverter::sphere(), DDG4SolidConverter::subtraction(), DDG4SolidConverter::torus(), DDG4SolidConverter::trap(), DDG4SolidConverter::trunctubs(), DDG4SolidConverter::tubs(), DDG4SolidConverter::unionsolid(), PrintGeomInfoAction::update(), MagGeoBuilderFromDDD::volumeHandle::volumeHandle(), DDEcalBarrelNewAlgo::web(), and DDEcalBarrelAlgo::web().

{
  static std::string ano_("anonymous");
  const std::string * result;
  if (id_ < 0) {
      result = &ano_;
  }
  else {
    result = &DDI::Singleton<IdToName>::instance()[id_]->first.first;
  }
  return *result; 
}
const std::string & DDName::ns ( ) const

Returns the namespace.

Definition at line 101 of file DDName.cc.

References id_, and query::result.

Referenced by DDCompactView::algoPosPart(), DD_NC(), DDBox::DDBox(), DDCheckAll(), DDCheckMaterial(), DDCons::DDCons(), DDEllipsoid::DDEllipsoid(), DDEllipticalTube::DDEllipticalTube(), DDIntersection::DDIntersection(), DDOrb::DDOrb(), DDParallelepiped::DDParallelepiped(), DDPolycone::DDPolycone(), DDPolyhedra::DDPolyhedra(), DDPseudoTrap::DDPseudoTrap(), DDShapelessSolid::DDShapelessSolid(), DDSphere::DDSphere(), DDSubtraction::DDSubtraction(), DDTorus::DDTorus(), DDTrap::DDTrap(), DDTruncTubs::DDTruncTubs(), DDTubs::DDTubs(), DDUnion::DDUnion(), fullname(), hierarchy(), DDDividedConsRho::makeDDLogicalPart(), DDDividedBoxX::makeDDLogicalPart(), DDDividedTrdZ::makeDDLogicalPart(), DDDividedConsZ::makeDDLogicalPart(), DDDividedPolyhedraPhi::makeDDLogicalPart(), DDDividedConsPhi::makeDDLogicalPart(), DDDividedPolyconePhi::makeDDLogicalPart(), DDDividedPolyhedraRho::makeDDLogicalPart(), DDDividedTrdX::makeDDLogicalPart(), DDDividedBoxZ::makeDDLogicalPart(), DDDividedPolyhedraZ::makeDDLogicalPart(), DDDividedTubsRho::makeDDLogicalPart(), DDDividedBoxY::makeDDLogicalPart(), DDDividedPolyconeRho::makeDDLogicalPart(), DDDividedPolyconeZ::makeDDLogicalPart(), DDDividedTubsZ::makeDDLogicalPart(), DDDividedPolyconePhi::makeDDRotation(), DDDividedConsPhi::makeDDRotation(), DDDividedTubsPhi::makeDDRotation(), DDDividedPolyhedraPhi::makeDDRotation(), DDLDivision::makeDivider(), nameout_strings(), operator std::string(), operator<<(), DDLDivision::processElement(), DDLCompositeMaterial::processElement(), DDLPosPart::processElement(), and PGeometricDetBuilder::putOne().

{
  static std::string ano_("anonymous");
  const std::string * result;
  if (id_ < 0) {
      result = &ano_;
  }
  else {
    result = &DDI::Singleton<IdToName>::instance()[id_]->first.second;
  }
  return *result;
}
DDName::operator std::string ( ) const [inline]

Definition at line 59 of file DDName.h.

References name(), and ns().

{ return ns() + ":" + name(); }
bool DDName::operator< ( const DDName rhs) const [inline]

Definition at line 63 of file DDName.h.

References id_.

{ return id_ < rhs.id_; }
bool DDName::operator== ( const DDName rhs) const [inline]

Definition at line 64 of file DDName.h.

References id_.

{ return id_ == rhs.id_; }
DDName::Registry::iterator DDName::registerName ( const std::pair< std::string, std::string > &  s) [static, private]

Definition at line 124 of file DDName.cc.

References query::result.

Referenced by DDName().

                                                                                   {
    Registry& reg_ = DDI::Singleton<Registry>::instance();
    IdToName & idToName = DDI::Singleton<IdToName>::instance();  
    Registry::size_type sz = reg_.size();
    if (!sz) {
      reg_[std::make_pair(std::string(""),std::string(""))] = 0;
      idToName.push_back(reg_.begin());
      ++sz;
    }
    Registry::value_type val(nm, sz);
    std::pair<Registry::iterator,bool> result = reg_.insert(val);
    if (result.second) {
      idToName.push_back(result.first);
    }
    return result.first;
}

Friends And Related Function Documentation

friend class DStreamer [friend]

Definition at line 20 of file DDName.h.


Member Data Documentation

id_type DDName::id_ [private]

Definition at line 67 of file DDName.h.

Referenced by DDName(), id(), name(), ns(), operator<(), and operator==().