MOS
container.hpp
1 #pragma once
2 #include <chrono>
3 #include <initializer_list>
4 #include <mos/core/tracked_container.hpp>
5 #include <vector>
6 
7 namespace mos {
8 
9 template <class T> class Tracked_container;
10 
12 template <class T> class Container {
13 public:
14  using Items = std::vector<T>;
15  using size_type = typename Items::size_type;
16 
17  Container() = default;
18 
19  template <class It>
20  explicit Container(const std::initializer_list<It> list)
21  : Container(list.begin(), list.end()) {}
22 
23  template <class It> Container(It begin, It end) { assign(begin, end); }
24 
25  explicit Container(const Tracked_container<T> &container)
26  : Container(container.begin(), container.end()) {}
27 
28  template <class It> void assign(It begin, It end) {
29  items_.assign(begin, end);
30  }
31 
32  template <class It>
33  typename Items::iterator insert(typename Items::const_iterator pos, It begin,
34  It end) {
35  return items_.insert(pos, begin, end);
36  }
37 
38  typename Items::iterator begin() { return items_.begin(); }
39  typename Items::iterator end() { return items_.end(); }
40  typename Items::const_iterator begin() const { return items_.begin(); }
41  typename Items::const_iterator end() const { return items_.end(); }
42  void assign(const std::initializer_list<T> &list) { items_.assign(list); }
43  typename Items::reference operator[](typename Items::size_type pos) {
44  return items_[pos];
45  }
46  typename Items::const_reference
47  operator[](typename Items::size_type pos) const {
48  return items_[pos];
49  }
50  typename Items::size_type size() const { return items_.size(); }
51  typename Items::reference back() { return items_.back(); }
52  const T *data() const noexcept { return items_.data(); }
53  void clear() { items_.clear(); }
54 
55  void push_back(const T &item) { items_.push_back(item); }
56 
57  void append(const Container<T> &container) {
58  insert(end(), container.begin(), container.end());
59  }
60 
61 private:
62  Items items_;
63 };
64 
65 } // namespace mos
Container.
Definition: container.hpp:12
Container with modified time stamp.
Definition: container.hpp:9