1 #ifndef cetlib_map_vector_h 2 #define cetlib_map_vector_h 10 #include "cetlib_except/exception.h" 19 bool operator==(map_vector_key
const&, map_vector_key
const&) noexcept;
20 bool operator!=(map_vector_key
const&, map_vector_key const&) noexcept;
21 bool operator<(map_vector_key const&, map_vector_key const&) noexcept;
22 bool operator>(map_vector_key const&, map_vector_key const&) noexcept;
23 bool operator<=(map_vector_key const&, map_vector_key const&) noexcept;
24 bool operator>=(map_vector_key const&, map_vector_key const&) noexcept;
26 std::ostream& operator<<(
std::ostream&, map_vector_key const&);
28 template <class Value>
38 explicit map_vector_key(
int key);
39 constexpr
explicit map_vector_key(
unsigned const key) noexcept : key_{key} {}
40 constexpr
explicit map_vector_key(
unsigned long key) noexcept;
53 void ensure_valid()
const;
64 <<
"Negative key " << key <<
" not valid for map_vector_key.";
75 if (
key_ == static_cast<unsigned long>(-1)) {
77 <<
"Attempt to use an invalid cet::map_vector_key.";
83 template <
class Value>
101 using pointer =
typename allocator_type::pointer;
109 template <
class InIter>
131 return v_.max_size();
136 return v_.capacity();
142 return v_.get_allocator();
154 return v_.empty() ? 0 : 1 +
v_.back().first.asInt();
174 return getOrThrow(key);
262 std::pair<iterator, bool> insert(
value_type const&
x);
264 template <
class InIter>
265 void insert(InIter
b, InIter
e);
277 bool class_invariant()
const;
293 return k1.asInt() == k2.asInt();
299 return k1.asInt() != k2.asInt();
305 return k1.asInt() < k2.asInt();
311 return k1.asInt() > k2.asInt();
317 return k1.asInt() <= k2.asInt();
323 return k1.asInt() >= k2.asInt();
332 return os << key.
asInt();
341 template <
class Value>
346 throw cet::exception(
"map_vector::front") <<
"container is empty!\n";
350 template <
class Value>
355 throw cet::exception(
"map_vector::back") <<
"container is empty!\n";
359 template <
class Value>
364 return std::binary_search(
v_.begin(),
v_.end(),
v,
lt);
367 template <
class Value>
372 auto const begin =
v_.begin(),
end =
v_.end();
373 auto it = std::lower_bound(begin,
end,
v,
lt);
374 if (
it !=
end &&
it->first != key)
379 template <
class Value>
384 auto const begin =
v_.cbegin(),
end =
v_.cend();
385 auto it = std::lower_bound(begin,
end,
v,
lt);
386 if (
it !=
end &&
it->first != key)
391 template <
class Value>
403 template <
class Value>
408 return it ==
v_.end() ?
nullptr : &
it->second;
411 template <
class Value>
416 return it ==
v_.cend() ?
nullptr : &
it->second;
419 template <
class Value>
423 auto*
p = getOrNull(key);
431 template <
class Value>
435 auto const*
p = getOrNull(key);
443 template <
class Value>
447 auto const begin =
v_.begin(),
end =
v_.end();
448 auto it = std::lower_bound(begin,
end,
v,
lt);
449 if (
it ==
end ||
it->first != key)
450 it =
v_.insert(
it, std::move(
v));
457 template <
class Value>
458 std::pair<typename cet::map_vector<Value>::iterator,
bool>
461 v.first.ensure_valid();
462 auto const begin =
v_.begin(),
end =
v_.end();
463 auto it = std::lower_bound(begin,
end, v,
lt);
464 if (
it ==
end ||
it->first != v.first)
469 template <
class Value>
470 template <
class InIter>
474 std::for_each(b, e, [](
auto const&
pr) {
return pr.first.ensure_valid(); });
476 std::merge(
v_.cbegin(),
v_.cend(),
b,
e, back_inserter(result),
lt);
477 auto new_end = std::unique(result.begin(), result.end(), eq);
478 result.erase(new_end, result.end());
485 template <
class Value>
489 return std::is_sorted(
v_.begin(),
v_.end(),
lt);
494 template <
class Value>
498 return v1.first < v2.first;
501 template <
class Value>
505 return v1.first == v2.first;
reverse_iterator rbegin() noexcept
bool empty() const noexcept
constexpr map_vector_key(unsigned const key) noexcept
allocator_type get_allocator() const noexcept
unsigned long asUint() const noexcept
size_type capacity() const noexcept
const_reverse_iterator rend() const noexcept
std::ostream & operator<<(std::ostream &, map_vector_key const &)
const_iterator cend() const noexcept
std::vector< value_type > impl_type
void swap(map_vector< mapped_type > &other)
bool operator!=(exempt_ptr< E > const &, exempt_ptr< E > const &)
std::pair< key_type, mapped_type > value_type
bool operator<(exempt_ptr< E > const &, exempt_ptr< E > const &)
bool has(key_type key) const
iterator find(key_type key)
std::pair< iterator, bool > insert(value_type const &x)
::xsd::cxx::tree::exception< char > exception
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
map_vector(InIter const b, InIter const e)
const_iterator end() const noexcept
typename allocator_type::reference reference
constexpr map_vector_key() noexcept
typename impl_type::const_reverse_iterator const_reverse_iterator
typename impl_type::allocator_type allocator_type
typename allocator_type::const_reference const_reference
typename impl_type::reverse_iterator reverse_iterator
static bool lt(value_type const &, value_type const &) noexcept
bool operator<=(exempt_ptr< E > const &, exempt_ptr< E > const &)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic >::Index size_type
const_iterator begin() const noexcept
typename impl_type::size_type size_type
size_type max_size() const noexcept
mapped_type & operator[](key_type key)
typename impl_type::difference_type difference_type
typename allocator_type::const_pointer const_pointer
typename allocator_type::pointer pointer
bool class_invariant() const
void reserve(size_type const n)
value_type const & front() const
bool operator>(exempt_ptr< E > const &, exempt_ptr< E > const &)
reverse_iterator rend() noexcept
bool operator==(exempt_ptr< E > const &, exempt_ptr< E > const &)
mapped_type const & operator[](key_type key) const
typename impl_type::iterator iterator
iterator begin() noexcept
value_type const & back() const
const_reverse_iterator crbegin() const
bool operator>=(exempt_ptr< E > const &, exempt_ptr< E > const &)
const_reverse_iterator rbegin() const noexcept
static bool eq(value_type const &, value_type const &) noexcept
void ensure_valid() const
mapped_type const & at(key_type key) const
const_iterator findOrThrow(key_type key) const
mapped_type & getOrThrow(key_type key)
static short Class_Version()
size_type size() const noexcept
const_reverse_iterator crend() const noexcept
typename impl_type::const_iterator const_iterator
const_iterator cbegin() const noexcept
unsigned long asInt() const noexcept
mapped_type * getOrNull(key_type key)