CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TagName.h
Go to the documentation of this file.
1 #ifndef x_TagName_h
2 #define x_TagName_h
3 
4 #include <utility>
5 #include <string>
6 #include <iostream>
7 #include <map>
8 
9 class TagName
10 {
11 public:
12 
14  : id_(count())
15  {}
16 
17  explicit TagName(const std::string & name)
18  : name_(regName(name)), id_(count())
19  { };
20 
21  const std::string & str() const { return name_->first; }
22 
23  std::string operator()() const { return name_->first; }
24 
25  bool sameName(const TagName & tn) const {
26  return (name_ == tn.name_);
27  }
28 
29  bool operator<(const TagName & n) const {
30  return (id_ < n.id_);
31  }
32 
33 private:
34  typedef std::map<std::string,unsigned int> Registry;
35  typedef unsigned int count_type;
36 
37  Registry::iterator name_;
38  count_type id_; // identification for equality checks
39 
40  static Registry::iterator regName(const std::string & s) {
41  static Registry reg;
42  Registry::size_type sz = reg.size();
43  Registry::value_type val(s, sz);
44  /*
45  std::pair<Registry::iterator, bool> insert = reg.insert(val);
46  if (!insert.second) {
47  sz = insert.first->second;
48  }
49  return insert.first;
50  */
51  return reg.insert(val).first;
52  }
53 
54  static count_type count() {
55  static count_type i=0;
56  ++i;
57  return i;
58  }
59 };
60 
61 #endif
Registry::iterator name_
Definition: TagName.h:37
int i
Definition: DBlmapReader.cc:9
Definition: TagName.h:9
std::map< std::string, unsigned int > Registry
Definition: TagName.h:34
static Registry::iterator regName(const std::string &s)
Definition: TagName.h:40
uint16_t size_type
unsigned int count_type
Definition: TagName.h:35
TagName()
Definition: TagName.h:13
bool operator<(const TagName &n) const
Definition: TagName.h:29
const std::string & str() const
Definition: TagName.h:21
Container::value_type value_type
std::string operator()() const
Definition: TagName.h:23
static count_type count()
Definition: TagName.h:54
bool sameName(const TagName &tn) const
Definition: TagName.h:25
TagName(const std::string &name)
Definition: TagName.h:17
count_type id_
Definition: TagName.h:38