1 #ifndef DataFormats_Common_OwnVector_h
2 #define DataFormats_Common_OwnVector_h
11 #if defined CMS_USE_DEBUGGING_ALLOCATOR
23 template <
typename T,
typename P = ClonePolicy<T> >
26 #if defined(CMS_USE_DEBUGGING_ALLOCATOR)
27 typedef std::vector<T*, debugging_allocator<T> >
base;
29 typedef std::vector<T*>
base;
68 typename base::const_iterator
base_iter()
const {
return i; }
69 typename base::const_iterator
i;
98 iterator(
typename base::iterator
const& it) :
i(it) { }
99 typename base::iterator
i;
108 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
124 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
129 data_.shrink_to_fit();
136 template <
typename D>
void push_back(std::unique_ptr<D>
d);
139 template <
typename D>
void set(
size_t i,
D*&
d);
140 template <
typename D>
void set(
size_t i,
D*
const &
d);
141 template <
typename D>
void set(
size_t i, std::unique_ptr<D>
d);
142 void set(
size_t i, T
const& valueToCopy);
144 template <
typename D>
void insert(const_iterator
i,
D*&
d);
145 template <
typename D>
void insert(const_iterator
i,
D*
const &
d);
146 template <
typename D>
void insert(const_iterator
i, std::unique_ptr<D>
d);
147 void insert(const_iterator
i, T
const& valueToCopy);
157 iterator
erase(iterator pos);
167 std::vector<void const*>& pointers,
170 void setPtr(std::type_info
const& toType,
172 void const*& ptr)
const;
175 std::vector<unsigned long>
const& indices,
176 std::vector<void const*>& ptrs)
const;
188 return comp(*t1, *t2);
195 return Ordering<O>(
comp);
200 template<
typename T,
typename P>
204 template<
typename T,
typename P>
208 template<
typename T,
typename P>
210 size_type current = 0;
211 for (const_iterator
i = o.
begin(),
e = o.
end();
i !=
e; ++
i,++current)
215 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
216 template<
typename T,
typename P>
222 template<
typename T,
typename P>
227 template<
typename T,
typename P>
234 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
235 template<
typename T,
typename P>
243 template<
typename T,
typename P>
248 template<
typename T,
typename P>
253 template<
typename T,
typename P>
258 template<
typename T,
typename P>
263 template<
typename T,
typename P>
268 template<
typename T,
typename P>
270 return data_.empty();
273 template<
typename T,
typename P>
278 template<
typename T,
typename P>
283 template<
typename T,
typename P>
288 template<
typename T,
typename P>
298 template<
typename T,
typename P>
309 template<
typename T,
typename P>
312 data_.push_back(d.release());
315 template<
typename T,
typename P>
320 template<
typename T,
typename P>
324 if (d == data_[i])
return;
330 template<
typename T,
typename P>
334 if (d == data_[i])
return;
339 template<
typename T,
typename P>
342 if (d.get() == data_[
i])
return;
344 data_[
i] = d.release();
347 template<
typename T,
typename P>
349 if (&d == data_[i])
return;
355 template<
typename T,
typename P>
362 template<
typename T,
typename P>
368 template<
typename T,
typename P>
371 data_.insert(it.
base_iter(), d.release());
374 template<
typename T,
typename P>
381 template<
typename T,
typename P>
389 template <
typename T,
typename P>
391 return data_.back() != 0;
394 template<
typename T,
typename P>
399 "In OwnVector::back() we have intercepted an attempt to dereference a null pointer\n"
400 "Since OwnVector is allowed to contain null pointers, you much assure that the\n"
401 "pointer at the end of the collection is not null before calling back()\n"
402 "if you wish to avoid this exception.\n"
403 "Consider using OwnVector::is_back_safe()\n");
405 return *data_.back();
408 template<
typename T,
typename P>
413 "In OwnVector::back() we have intercepted an attempt to dereference a null pointer\n"
414 "Since OwnVector is allowed to contain null pointers, you much assure that the\n"
415 "pointer at the end of the collection is not null before calling back()\n"
416 "if you wish to avoid this exception.\n"
417 "Consider using OwnVector::is_back_safe()\n");
419 return *data_.back();
422 template<
typename T,
typename P>
424 return *data_.front();
427 template<
typename T,
typename P>
429 return *data_.front();
432 template<
typename T,
typename P>
434 typename base::const_iterator
b = data_.begin(),
e = data_.end();
435 for(
typename base::const_iterator
i = b;
i !=
e; ++
i)
439 template<
typename T,
typename P>
444 template<
typename T,
typename P>
450 template<
typename T,
typename P>
456 template<
typename T,
typename P>
458 typename base::iterator
b = first.
i,
e = last.
i;
459 for(
typename base::iterator
i = b;
i !=
e; ++
i)
464 template<
typename T,
typename P>
template<
typename S>
466 std::sort(data_.begin(), data_.end(),
ordering(comp));
469 template<
typename T,
typename P>
471 std::sort(data_.begin(), data_.end(),
ordering(std::less<value_type>()));
474 template<
typename T,
typename P>
476 data_.swap(other.data_);
479 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
480 template<
typename T,
typename P>
482 std::vector<void const*>& pointers,
484 size_type numElements = this->
size();
485 pointers.reserve(numElements);
486 helpers.reserve(numElements);
488 for(
typename base::const_iterator
i=data_.begin(),
e=data_.end();
i!=
e; ++
i, ++
key) {
492 "In OwnVector::fillView() we have intercepted an attempt to put a null pointer\n"
493 "into a View and that is not allowed. It is probably an error that the null\n"
494 "pointer was in the OwnVector in the first place.\n");
497 pointers.push_back(*
i);
498 helpers.emplace_back(
id,key);
504 template<
typename T,
typename P>
513 template <
typename T,
typename P>
518 std::vector<void const*>& pointers,
520 obj.
fillView(
id, pointers, helpers);
524 template <
typename T,
typename P>
532 template <
typename T,
typename P>
537 void const*& ptr)
const {
538 detail::reallySetPtr<OwnVector<T,P> >(*
this, toType,
index, ptr);
541 template <
typename T,
typename P>
545 std::type_info
const& toType,
548 obj.
setPtr(toType, index, ptr);
551 template <
typename T,
typename P>
555 std::vector<unsigned long>
const& indices,
556 std::vector<void const*>& ptrs)
const {
561 template <
typename T,
typename P>
565 std::type_info
const& toType,
566 std::vector<unsigned long>
const& indices,
567 std::vector<void const*>& ptrs) {
572 template <
typename T,
typename P>
difference_type operator-(iterator const &o) const
T const * operator->() const
iterator operator-(difference_type n) const
base::const_iterator::iterator_category iterator_category
const_iterator & operator++()
reference operator[](size_type)
bool operator()(T const *t1, T const *t2) const
void fillPtrVector(std::vector< T, A > const &obj, std::type_info const &iToType, std::vector< unsigned long > const &iIndicies, std::vector< void const * > &oPtr)
iterator & operator+=(difference_type d)
T const & operator*() const
iterator & operator-=(difference_type d)
void fillView(ProductID const &id, std::vector< void const * > &pointers, FillViewHelperVector &helpers) const
bool operator!=(iterator const &ci) const
bool operator==(const_iterator const &ci) const
#define CMS_CLASS_VERSION(_version_)
OwnVector< T, P > & operator=(OwnVector< T, P > const &)
void swap(Association< C > &lhs, Association< C > &rhs)
void setPtr(std::vector< T, A > const &obj, std::type_info const &iToType, unsigned long iIndex, void const *&oPtr)
static void throwThis(Code category, char const *message0="", char const *message1="", char const *message2="", char const *message3="", char const *message4="")
void reallyfillPtrVector(COLLECTION const &coll, std::type_info const &iToType, std::vector< unsigned long > const &iIndicies, std::vector< void const * > &oPtr)
const_iterator operator--(int)
bool operator<(const_iterator const &o) const
reference operator[](difference_type d) const
bool operator<(iterator const &o) const
bool operator==(iterator const &ci) const
reference operator[](difference_type d) const
ptrdiff_t difference_type
auto const T2 &decltype(t1.eta()) t2
const_iterator(typename base::const_iterator const &it)
void fillView(AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper > const &obj, ProductID const &id, std::vector< void const * > &pointers, FillViewHelperVector &helpers)
iterator erase(iterator pos)
void setPtr(std::type_info const &toType, unsigned long index, void const *&ptr) const
void set(size_t i, D *&d)
ptrdiff_t difference_type
void fillPtrVector(std::type_info const &toType, std::vector< unsigned long > const &indices, std::vector< void const * > &ptrs) const
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
const_iterator operator++(int)
bool is_back_safe() const
const_iterator(iterator const &it)
DecomposeProduct< arg, typename Div::arg > D
T const & const_reference
base::size_type size_type
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
double S(const TLorentzVector &, const TLorentzVector &)
base const & data() const
iterator(typename base::iterator const &it)
difference_type operator-(const_iterator const &o) const
const_iterator & operator--()
static Ordering< O > ordering(O const &comp)
iterator operator+(difference_type n) const
const_iterator & operator-=(difference_type d)
T first(std::pair< T, U > const &p)
base::const_iterator base_iter() const
void swap(OwnVector< T, P > &other)
void insert(const_iterator i, D *&d)
std::vector< std::pair< edm::ProductID, unsigned long > > FillViewHelperVector
const_iterator operator+(difference_type n) const
tuple size
Write out results.
bool operator!=(const_iterator const &ci) const
const_iterator & operator+=(difference_type d)
base::iterator::iterator_category iterator_category
const_iterator operator-(difference_type n) const