CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RefVectorBase.h
Go to the documentation of this file.
1 #ifndef DataFormats_Common_RefVectorBase_h
2 #define DataFormats_Common_RefVectorBase_h
3 
4 /*----------------------------------------------------------------------
5 
6 RefVectorBase: Base class for a vector of interproduct references.
7 
8 $Id: RefVectorBase.h,v 1.19 2012/04/11 10:15:07 innocent Exp $
9 
10 ----------------------------------------------------------------------*/
11 
15 #include <vector>
17 
18 namespace edm {
19 
20  class EDProductGetter;
21  template <typename KEY>
22  class RefVectorBase {
23  public:
24  typedef std::vector<KEY > keys_type;
25  typedef KEY key_type;
26  typedef typename keys_type::size_type size_type;
29  RefVectorBase( RefVectorBase const & rhs) : product_(rhs.product_), keys_(rhs.keys_) {}
30 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
31  RefVectorBase( RefVectorBase && rhs) noexcept : product_(std::move(rhs.product_)), keys_(std::move(rhs.keys_)) {}
32 #endif
33 
34  explicit RefVectorBase(ProductID const& productID, void const* prodPtr = 0,
35  EDProductGetter const* prodGetter = 0) :
36  product_(productID, prodPtr, prodGetter, false), keys_() {}
37 
40 
42  RefCore const& refCore() const {return product_;}
43 
45  keys_type const& keys() const {return keys_;}
46 
48  bool empty() const {return keys_.empty();}
49 
51  size_type size() const {return keys_.size();}
52 
53  void pushBack(RefCore const& product, KEY const& key) {
54  product_.pushBackItem(product, true);
55  keys_.push_back(key);
56  }
57 
59  size_type capacity() const {return keys_.capacity();}
60 
62  void reserve(size_type n) {keys_.reserve(n);}
63 
65  typename keys_type::iterator eraseAtIndex(size_type index) {
66  return keys_.erase(keys_.begin() + index);
67  }
68 
70  void clear() {
71  keys_.clear();
72  product_ = RefCore();
73  }
74 
77  product_.swap(other.product_);
78  keys_.swap(other.keys_);
79  }
80 
83  RefVectorBase temp(rhs);
84  this->swap(temp);
85  return *this;
86  }
87 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
89  product_ = std::move(rhs.product_);
90  keys_ =std::move(rhs.keys_);
91  return *this;
92  }
93 #endif
94 
95  //Needed for ROOT storage
97 
98  private:
101  };
102 
104  template<typename KEY>
105  bool
106  operator==(RefVectorBase<KEY> const& lhs, RefVectorBase<KEY> const& rhs) {
107  return lhs.refCore() == rhs.refCore() && lhs.keys() == rhs.keys();
108  }
109 
111  template<typename KEY>
112  bool
114  return !(lhs == rhs);
115  }
116 
118  template<typename KEY>
119  inline
120  void
122  a.swap(b);
123  }
124 
125 }
126 #endif
void pushBackItem(RefCore const &productToBeInserted, bool checkPointer)
Definition: RefCore.cc:133
void swap(RefCore &)
Definition: RefCore.h:116
RefVectorBase & operator=(RefVectorBase const &rhs)
Copy assignment.
Definition: RefVectorBase.h:82
RefVectorBase(RefVectorBase const &rhs)
Definition: RefVectorBase.h:29
bool empty() const
Is vector empty?
Definition: RefVectorBase.h:48
bool operator!=(debugging_allocator< X > const &, debugging_allocator< Y > const &)
keys_type::iterator eraseAtIndex(size_type index)
erase an element from the vector
Definition: RefVectorBase.h:65
#define CMS_CLASS_VERSION(_version_)
Definition: classes.h:32
uint16_t size_type
void pushBack(RefCore const &product, KEY const &key)
Definition: RefVectorBase.h:53
RefVectorBase()
Default constructor needed for reading from persistent store. Not for direct use. ...
Definition: RefVectorBase.h:28
void swap(RefVectorBase< KEY > &other)
swap two vectors
Definition: RefVectorBase.h:76
size_type capacity() const
Capacity of vector.
Definition: RefVectorBase.h:59
RefCore const & refCore() const
Accessor for product ID and product getter.
Definition: RefVectorBase.h:42
void clear()
clear the vector
Definition: RefVectorBase.h:70
keys_type const & keys() const
Accessor for vector of keys and pointers.
Definition: RefVectorBase.h:45
~RefVectorBase()
Destructor.
Definition: RefVectorBase.h:39
#define noexcept
RefVectorBase(ProductID const &productID, void const *prodPtr=0, EDProductGetter const *prodGetter=0)
Definition: RefVectorBase.h:34
double b
Definition: hdecay.h:120
string const
Definition: compareJSON.py:14
#define private
Definition: FWFileEntry.h:18
list key
Definition: combine.py:13
double a
Definition: hdecay.h:121
keys_type::size_type size_type
Definition: RefVectorBase.h:26
size_type size() const
Size of vector.
Definition: RefVectorBase.h:51
std::vector< KEY > keys_type
Definition: RefVectorBase.h:24
def template
Definition: svgfig.py:520
void reserve(size_type n)
Reserve space for vector.
Definition: RefVectorBase.h:62