CMS 3D CMS Logo

Public Types | Public Member Functions | Private Attributes

DDMapper< KeyType, ValueType > Class Template Reference

#include <DDMapper.h>

List of all members.

Public Types

typedef std::pair< KeyType,
ValueType > 
Pair
 usefull typedef
typedef std::vector< PairVector
 usefull typedef

Public Member Functions

Vector all (const std::string &name, const std::string &value) const
 get all std::mapped instances which have a specific 'name' with value 'value'
Vector all (const std::string &name, const double &value) const
 get all std::mapped instances which have a specific 'name' with value 'value'
Vector all (const std::string &name) const
 get all std::mapped instances which have a specific 'name'
void insert (const KeyType &, const ValueType &)
 insert a new key-value-pair
unsigned int noSpecifics (const KeyType &key, const std::string &name) const
 fetch a key given a value
unsigned int toDouble (const std::string &name, const KeyType &key, double &value, unsigned int pos=0) const
 returns the number specific parameters named 'name' and the corrsponding double
unsigned int toDouble (const std::string &name, const ValueType &key, double &value, unsigned int pos=0) const
unsigned int toString (const std::string &name, const ValueType &key, std::string &value, unsigned int pos=0) const
 same as toDouble but for std::string-valued values of named parameters
unsigned int toString (const std::string &name, const KeyType &key, std::string &value, unsigned int pos=0) const
 same as toDouble but for std::string-valued values of named parameters
bool value (const KeyType &key, ValueType &result)
 removes a key-value pair

Private Attributes

std::map< KeyType, ValueType > keyToValue_
std::multimap< ValueType, KeyType > valueToKey_

Detailed Description

template<class KeyType, class ValueType>
class DDMapper< KeyType, ValueType >

Definition at line 13 of file DDMapper.h.


Member Typedef Documentation

template<class KeyType, class ValueType>
typedef std::pair<KeyType, ValueType> DDMapper< KeyType, ValueType >::Pair

usefull typedef

Definition at line 17 of file DDMapper.h.

template<class KeyType, class ValueType>
typedef std::vector<Pair> DDMapper< KeyType, ValueType >::Vector

usefull typedef

Definition at line 20 of file DDMapper.h.


Member Function Documentation

template<class K , class V >
std::vector< std::pair< K, V > > DDMapper< K, V >::all ( const std::string &  name,
const std::string &  value 
) const

get all std::mapped instances which have a specific 'name' with value 'value'

Definition at line 208 of file DDMapper.h.

References DDfetch(), query::result, asciidump::s, DDValue::strings(), and v.

Referenced by DDG4ProductionCuts::initialize().

{
  std::vector<std::pair<K,V> > result;
  typedef std::vector<const DDsvalues_type *> sv_type;
  typename std::map<V,K>::const_iterator it = valueToKey_.begin();
  typename std::map<V,K>::const_iterator ed = valueToKey_.end();
  
  // loop over all registered ValueTypes
  for (; it != ed; ++it) {
     sv_type sv = it->first.specifics();
     //std::cout << "now at: " << it->first.name() << std::endl;
     sv_type::const_iterator svIt = sv.begin();
     sv_type::const_iterator svEd = sv.end();
     DDValue v(name);
     for (; svIt != svEd; ++svIt) {
       if (DDfetch(*svIt,v)) {
         //std::cout << "found: ";
         const std::vector<std::string> & s = v.strings();
          if (s.size()) {
            //std::cout << s[0];
            if (s[0]==value) {
              result.push_back(std::make_pair(it->second,it->first));
              break;
            }
          }       
         //std::cout << std::endl; 
       }
     }  
  }
  return result;
}
template<class K , class V >
std::vector< std::pair< K, V > > DDMapper< K, V >::all ( const std::string &  name,
const double &  value 
) const

get all std::mapped instances which have a specific 'name' with value 'value'

Definition at line 242 of file DDMapper.h.

References DDfetch(), DDValue::doubles(), query::result, asciidump::s, and v.

{
  std::vector<std::pair<K,V> > result;
  typedef std::vector<const DDsvalues_type *> sv_type;
  typename std::map<V,K>::const_iterator it = valueToKey_.begin();
  typename std::map<V,K>::const_iterator ed = valueToKey_.end();
  
  // loop over all registered ValueTypes
  for (; it != ed; ++it) {
     sv_type sv = it->first.specifics();
     //std::cout << "now at: " << it->first.name() << std::endl;
     sv_type::const_iterator svIt = sv.begin();
     sv_type::const_iterator svEd = sv.end();
     DDValue v(name);
     for (; svIt != svEd; ++svIt) {
       if (DDfetch(*svIt,v)) {
         //std::cout << "found: ";
         const std::vector<double> & s = v.doubles();
          if (s.size()) {
            //std::cout << s[0];
            if (s[0]==value) {
              result.push_back(std::make_pair(it->second,it->first));
              break;
            }
          }       
         //std::cout << std::endl; 
       }
     }  
  }
  return result;
}
template<class K , class V >
std::vector< std::pair< K, V > > DDMapper< K, V >::all ( const std::string &  name) const

get all std::mapped instances which have a specific 'name'

Definition at line 276 of file DDMapper.h.

References DDfetch(), query::result, and v.

{
  std::vector<std::pair<K,V> > result;
  typedef std::vector<const DDsvalues_type *> sv_type;
  typename std::map<V,K>::const_iterator it = valueToKey_.begin();
  typename std::map<V,K>::const_iterator ed = valueToKey_.end();
  
  // loop over all registered ValueTypes
  for (; it != ed; ++it) {
     sv_type sv = it->first.specifics();
     //std::cout << "now at: " << it->first.name() << std::endl;
     sv_type::const_iterator svIt = sv.begin();
     sv_type::const_iterator svEd = sv.end();
     DDValue v(name);
     for (; svIt != svEd; ++svIt) {
       if (DDfetch(*svIt,v)) {
           result.push_back(std::make_pair(it->second,it->first));
           break;  
         }        
     }  
  }
  return result;
}
template<class K, class V>
void DDMapper< K, V >::insert ( const K &  key,
const V &  value 
)

insert a new key-value-pair

any existing entry will be overridden

Definition at line 77 of file DDMapper.h.

References combine::key, and relativeConstraints::value.

Referenced by DDG4Builder::BuildGeometry(), and DDG4Builder::convertLV().

{
   keyToValue_[key] = value;
   valueToKey_.insert(std::make_pair(value,key));
   //   valueToKey_[value] = key;
}
template<class K, class V >
unsigned int DDMapper< K, V >::noSpecifics ( const K &  key,
const std::string &  name 
) const

fetch a key given a value

the number of specific parameters which are named 'name'

Definition at line 98 of file DDMapper.h.

References DDfetch(), query::result, DDValue::size(), and v.

{
  typedef std::vector<const DDsvalues_type *> sv_type;
  unsigned int result = 0;
  typename std::map<K,V>::const_iterator it = keyToValue_.find(key);
  if (it != keyToValue_.end()) {
    sv_type sv = it->second.specifics();
    sv_type::const_iterator it = sv.begin();
    DDValue v(name);
    for (; it != sv.end(); ++it) {
      if (DDfetch(*it, v)) {
        result += v.size();
      }
    }
  }
  return result;
}
template<class K, class V >
unsigned int DDMapper< K, V >::toDouble ( const std::string &  name,
const K &  key,
double &  value,
unsigned int  pos = 0 
) const

returns the number specific parameters named 'name' and the corrsponding double

of the DDLogicalPart which corresponds to the given KeyType key. The returned value is assigned to the 'value'-reference

  • if no parameters exist, 0 is returned and value is left unchanged
  • if more than one parameter with the given name exists, the first is returned by default, alternatively 'pos' can be used to address another value (note: pos=0 -> first value)

Definition at line 119 of file DDMapper.h.

References DDfetch(), DDValue::doubles(), pos, query::result, DDValue::size(), and v.

Referenced by DDG4ProductionCuts::setProdCuts().

{
  typedef std::vector<const DDsvalues_type *> sv_type;
  unsigned int result=0;
  typename std::map<K,V>::const_iterator it = keyToValue_.find(key);
  if (it != keyToValue_.end()) {
    sv_type sv = it->second.specifics();
    sv_type::const_iterator svIt = sv.begin();
    sv_type::const_iterator svEd = sv.end();
    DDValue v(name);
    for (; svIt != svEd; ++svIt) {
      if (DDfetch(*svIt,v)) {
        result = v.size();
        value = v.doubles()[pos];
         break;
      } 
    } 
  }  
  return result;
}
template<class K , class V>
unsigned int DDMapper< K, V >::toDouble ( const std::string &  name,
const V &  key,
double &  value,
unsigned int  pos = 0 
) const

Definition at line 142 of file DDMapper.h.

References DDfetch(), DDValue::doubles(), pos, query::result, DDValue::size(), and v.

{
  typedef std::vector<const DDsvalues_type *> sv_type;
    unsigned int result=0;
    sv_type sv = val.specifics();
    sv_type::const_iterator svIt = sv.begin();
    sv_type::const_iterator svEd = sv.end();
    DDValue v(name);
    for (; svIt != svEd; ++svIt) {
      if (DDfetch(*svIt,v)) {
        result = v.size();
        value = v.doubles()[pos];
         break;
      } 
    }    
    return result;
}
template<class K, class V>
unsigned int DDMapper< K, V >::toString ( const std::string &  name,
const V &  key,
std::string &  value,
unsigned int  pos = 0 
) const

same as toDouble but for std::string-valued values of named parameters

Definition at line 162 of file DDMapper.h.

References DDfetch(), pos, query::result, DDValue::size(), DDValue::strings(), and v.

{
  typedef std::vector<const DDsvalues_type *> sv_type;
    unsigned int result=0;
    sv_type sv = val.specifics();
    sv_type::const_iterator svIt = sv.begin();
    sv_type::const_iterator svEd = sv.end();
    DDValue v(name);
    for (; svIt != svEd; ++svIt) {
      if (DDfetch(*svIt,v)) {
        result = v.size();
        value = v.strings()[pos];
         break;
      } 
    }    
    return result;
}
template<class K, class V >
unsigned int DDMapper< K, V >::toString ( const std::string &  name,
const K &  key,
std::string &  value,
unsigned int  pos = 0 
) const

same as toDouble but for std::string-valued values of named parameters

Definition at line 182 of file DDMapper.h.

References DDfetch(), pos, query::result, DDValue::size(), DDValue::strings(), and v.

Referenced by DDG4ProductionCuts::initialize(), and DDG4ProductionCuts::setProdCuts().

{
  typedef std::vector<const DDsvalues_type *> sv_type;
  unsigned int result=0;
  typename std::map<K,V>::const_iterator it = keyToValue_.find(key);
  if (it != keyToValue_.end()) {
    sv_type sv = it->second.specifics();
    sv_type::const_iterator svIt = sv.begin();
    sv_type::const_iterator svEd = sv.end();
    DDValue v(name);
    //std::cout << "DDValue=" << name << std::endl;
    for (; svIt != svEd; ++svIt) {
      //std::cout << "looping..." << **svIt << std::endl;
      if (DDfetch(*svIt,v)) {
        result = v.size();
         //std::cout << "found!" << std::endl;
        value = v.strings()[pos];
         break;
      } 
    }
  }  
  return result;
}
template<class K, class V>
bool DDMapper< K, V >::value ( const K &  key,
V &  result 
)

removes a key-value pair

non-existing keys are simply ignored removes a key-value pair non-existing values are simply ignored fetch a value given a key returns true, if sucessfull - value is assigned to result; else false

Definition at line 86 of file DDMapper.h.

References query::result.

{
  bool result = false;
  typename std::map<K,V>::const_iterator it = keyToValue_.find(key);
  if (it != keyToValue_.end()) {
    value = it->second;
    result = true;
  }
  return result;
}

Member Data Documentation

template<class KeyType, class ValueType>
std::map<KeyType, ValueType> DDMapper< KeyType, ValueType >::keyToValue_ [private]

Definition at line 71 of file DDMapper.h.

template<class KeyType, class ValueType>
std::multimap<ValueType, KeyType> DDMapper< KeyType, ValueType >::valueToKey_ [private]

Definition at line 72 of file DDMapper.h.