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.14 2008/02/15 05:57:03 wmtan Exp $
9 
10 ----------------------------------------------------------------------*/
11 
14 #include <vector>
15 
16 namespace edm {
17 
18  class EDProductGetter;
19  template <typename KEY>
20  class RefVectorBase {
21  public:
22  typedef std::vector<RefItem<KEY> > RefItems;
23  typedef KEY key_type;
24  typedef typename RefItems::size_type size_type;
27 
28  explicit RefVectorBase(ProductID const& productID, void const* prodPtr = 0,
29  EDProductGetter const* prodGetter = 0) :
30  product_(productID, prodPtr, prodGetter, false), items_() {}
31 
34 
36  RefCore const& refCore() const {return product_;}
37 
39  RefItems const& items() const {return items_;}
40 
42  bool empty() const {return items_.empty();}
43 
45  size_type size() const {return items_.size();}
46 
47  void pushBack(RefCore const& product, RefItem<KEY> const& item_) {
48  product_.pushBackItem(product, true);
49  items_.push_back(item_);
50  }
51 
53  size_type capacity() const {return items_.capacity();}
54 
56  void reserve(size_type n) {items_.reserve(n);}
57 
59  typename RefItems::iterator eraseAtIndex(size_type index) {
60  return items_.erase(items_.begin() + index);
61  }
62 
64  void clear() {
65  items_.clear();
66  product_ = RefCore();
67  }
68 
70  void swap(RefVectorBase<KEY> & other) {
71  product_.swap(other.product_);
72  items_.swap(other.items_);
73  }
74 
77  RefVectorBase temp(rhs);
78  this->swap(temp);
79  return *this;
80  }
81 
82  private:
85  };
86 
88  template<typename KEY>
89  bool
91  return lhs.refCore() == rhs.refCore() && lhs.items() == rhs.items();
92  }
93 
95  template<typename KEY>
96  bool
98  return !(lhs == rhs);
99  }
100 
102  template<typename KEY>
103  inline
104  void
106  a.swap(b);
107  }
108 
109 }
110 #endif
void pushBackItem(RefCore const &productToBeInserted, bool checkPointer)
Definition: RefCore.cc:101
std::vector< RefItem< KEY > > RefItems
Definition: RefVectorBase.h:22
void swap(RefCore &)
Definition: RefCore.h:103
RefVectorBase & operator=(RefVectorBase const &rhs)
Copy assignment.
Definition: RefVectorBase.h:76
bool empty() const
Is vector empty?
Definition: RefVectorBase.h:42
bool operator!=(debugging_allocator< X > const &, debugging_allocator< Y > const &)
uint16_t size_type
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:112
RefVectorBase()
Default constructor needed for reading from persistent store. Not for direct use. ...
Definition: RefVectorBase.h:26
void swap(RefVectorBase< KEY > &other)
swap two vectors
Definition: RefVectorBase.h:70
size_type capacity() const
Capacity of vector.
Definition: RefVectorBase.h:53
RefCore const & refCore() const
Accessor for product ID and product getter.
Definition: RefVectorBase.h:36
RefItems const & items() const
Accessor for vector of keys and pointers.
Definition: RefVectorBase.h:39
bool operator==(debugging_allocator< X > const &, debugging_allocator< Y > const &)
void clear()
clear the vector
Definition: RefVectorBase.h:64
~RefVectorBase()
Destructor.
Definition: RefVectorBase.h:33
RefVectorBase(ProductID const &productID, void const *prodPtr=0, EDProductGetter const *prodGetter=0)
Definition: RefVectorBase.h:28
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
void pushBack(RefCore const &product, RefItem< KEY > const &item_)
Definition: RefVectorBase.h:47
size_type size() const
Size of vector.
Definition: RefVectorBase.h:45
RefItems::iterator eraseAtIndex(size_type index)
erase an element from the vector
Definition: RefVectorBase.h:59
void reserve(size_type n)
Reserve space for vector.
Definition: RefVectorBase.h:56
RefItems::size_type size_type
Definition: RefVectorBase.h:24