CMS 3D CMS Logo

MuonDigiCollection.h
Go to the documentation of this file.
1 #ifndef DataFormats_MuonDigiCollection_h
2 #define DataFormats_MuonDigiCollection_h
3 
12 #include <vector>
13 #include <map>
14 #include <iterator>
15 
29 template <typename IndexType, typename DigiType>
31 public:
32  typedef typename std::vector<DigiType>::const_iterator DigiRangeIterator;
33  typedef std::map<IndexType, std::vector<DigiType> > BaseContainer;
34  typedef typename BaseContainer::const_iterator BaseIterator;
35 
36  typedef std::pair<IndexType, std::pair<DigiRangeIterator, DigiRangeIterator> > value_type;
38  typedef void pointer;
39  typedef typename DigiRangeIterator::difference_type difference_type;
40  typedef typename DigiRangeIterator::iterator_category iterator_category;
41 
44  // implicit copy constructor
45  // implicit assignment operator
46  // implicit destructor
47 
49 
51  ++base_;
52  return *this;
53  }
54 
55  bool operator==(const DigiContainerIterator& x) const { return x.base_ == base_; }
56 
57  bool operator!=(const DigiContainerIterator& x) const { return x.base_ != base_; }
58 
59  value_type operator*(void) const {
60  return std::make_pair(base_->first, std::make_pair(base_->second.begin(), base_->second.end()));
61  }
62 
63 private:
65 };
66 
86 template <typename IndexType, typename DigiType>
88 public:
90 
91  // void swap(MuonDigiCollection<IndexType,DigiType> & rh) { std::swap(data_,rh.data_);}
93 
94  typedef typename std::vector<DigiType>::const_iterator const_iterator;
95  typedef typename std::pair<const_iterator, const_iterator> Range;
96 
98  void insertDigi(const IndexType& index, const DigiType& digi) {
99  std::vector<DigiType>& digis = data_[index];
100  digis.push_back(digi);
101  }
102 
104  void put(Range range, const IndexType& index) {
105  std::vector<DigiType>& digis = data_[index];
106  digis.reserve(digis.size() + (range.second - range.first));
107  std::copy(range.first, range.second, std::back_inserter(digis));
108  }
109 
110 #ifndef CMS_NOCXX11
111  template <typename IRange>
113  void move(IRange range, const IndexType& index) {
114  std::vector<DigiType>& digis = data_[index];
115  digis.reserve(digis.size() + (range.second - range.first));
116  digis.insert(digis.end(), std::make_move_iterator(range.first), std::make_move_iterator(range.second));
117  }
118 #endif
119 
121  Range get(const IndexType& index) const {
122  typename container::const_iterator it = data_.find(index);
123  if (it == data_.end()) {
124  // if data_ is empty there is no other way to get an empty range
125  static const std::vector<DigiType> empty;
126  return std::make_pair(empty.end(), empty.end());
127  }
128  const std::vector<DigiType>& digis = (*it).second;
129  return std::make_pair(digis.begin(), digis.end());
130  }
131 
133 
134  DigiRangeIterator begin() const { return data_.begin(); }
135 
136  DigiRangeIterator end() const { return data_.end(); }
137 
138 private:
139  typedef std::map<IndexType, std::vector<DigiType> > container;
141 
142 }; // MuonDigiCollection
143 
144 template <typename IndexType, typename DigiType>
146  rh.swap(lh);
147 }
148 
149 #endif
void move(IRange range, const IndexType &index)
insert a range of digis for a given DetUnit
std::vector< DigiType >::const_iterator DigiRangeIterator
void swap(MuonDigiCollection &rh)
DigiContainerIterator< IndexType, DigiType > DigiRangeIterator
void swap(MuonDigiCollection< IndexType, DigiType > &rh, MuonDigiCollection< IndexType, DigiType > &lh)
std::map< IndexType, std::vector< DigiType > > BaseContainer
value_type operator*(void) const
bool operator==(const DigiContainerIterator &x) const
void insertDigi(const IndexType &index, const DigiType &digi)
insert a digi for a given DetUnit
bool int lh
Definition: SIMDVec.h:27
DigiRangeIterator::iterator_category iterator_category
DigiRangeIterator::difference_type difference_type
std::map< IndexType, std::vector< DigiType > > container
DigiRangeIterator begin() const
std::pair< IndexType, std::pair< DigiRangeIterator, DigiRangeIterator > > value_type
std::pair< const_iterator, const_iterator > Range
std::vector< DigiType >::const_iterator const_iterator
DigiContainerIterator operator++(int)
DigiContainerIterator(BaseIterator i)
bool operator!=(const DigiContainerIterator &x) const
BaseContainer::const_iterator BaseIterator
void put(Range range, const IndexType &index)
insert a range of digis for a given DetUnit
DigiRangeIterator end() const
DigiContainerIterator & operator++(void)
A container for a generic type of digis indexed by some index, implemented with a map<IndexType...