libebml_ng
ebmlList.h
Go to the documentation of this file.
1 #ifndef EBML_NG_MASTERELEMENT_LIST_H
2 #define EBML_NG_MASTERELEMENT_LIST_H
3 
4 // #include "libebml_ng/base.h"
5 #include <unordered_map>
6 #include <vector>
7 
8 // #include "base.h"
11 #include "base/childSlot_t.h"
12 
13 namespace ebml {
25  class ebmlListType : public ebmlTypeCRTP<ebmlListType, ebmlList, ebmlMasterElementType> {
26  public:
27  ebmlListType(const char*, const std::wstring&, const occurSpec_t& recursive={0, 0});
28  ebmlListType(const char*, const std::wstring&, const childTypeSpecArg_l &, const occurSpec_t& recursive={0, 0});
29  ebmlListType(const char*, const std::wstring&, childClassSpecArg_init_l, const occurSpec_t& recursive={0, 0});
30 
31  ebmlListType(ebmlID_t, const std::wstring&, const occurSpec_t& recursive={0, 0});
32  ebmlListType(ebmlID_t, const std::wstring&, const childTypeSpecArg_l &, const occurSpec_t& recursive={0, 0});
33  ebmlListType(ebmlID_t, const std::wstring&, childClassSpecArg_init_l, const occurSpec_t& recursive={0, 0});
34  friend class ebmlList;
35  };
36 
37  class ebmlList : public ebmlElementCRTP<ebmlListType, ebmlList, ebmlMasterElement> {
40  public:
42  private:
43  std::vector<ebmlElement_sp> _data;
44 
45  protected:
46  ebmlList(const ebmlListType *);
47  ebmlList(const ebmlListType *, const ebmlElement_l&);
49  ebmlList(const ebmlList&);
50 
51  void _clear() override;
52  void _validateData(const ebmlElement_l&);
53  void _setData(const ebmlElement_l&);
54  void _setData(ebmlElement_l&&);
55 
56  public:
57  void setData(const ebmlElement_l&);
58  void setData(ebmlElement_l&&);
59  std::wstring minirepr() const override;
60 
61  // Element access
63 
64  template<typename T=ebmlElement>
65  childSlot_t<T> at(off_t);
66 
67  template<typename T=ebmlElement>
69 
70  template<typename T=ebmlElement>
72 
73  // Const element access
74  const ebmlElement& operator[](off_t) const;
75  const ebmlElement& at(off_t) const;
76  const ebmlElement& front() const;
77  const ebmlElement& back() const;
78 
79  // Element search
80  bool contains(const c_ebmlElement_sp&) const;
81  off_t index(const c_ebmlElement_sp&) const;
82 
83  // Element modification
84  void push_back(const ebmlElement_sp&);
85  void push_back(ebmlElement_sp&&);
86  void pop_back();
87  void insert(off_t, const ebmlElement_sp&);
88  void insert(off_t, ebmlElement_sp&&);
89  void erase(off_t);
90  void clear();
91 
92  // Container size
93  size_t size() const;
94 
95  // Iteration
96  protected:
98  private:
99  ebml::ptr<ebmlList> _elem;
100  std::vector<ebmlElement_sp>::iterator _iter;
101 
102  protected:
103  _iterator(const ebml::ptr<ebmlList>& elem, const std::vector<ebmlElement_sp>::iterator& iter);
104  _iterator(ebml::ptr<ebmlList>&& elem, std::vector<ebmlElement_sp>::iterator&& iter);
105 
106  public:
107  _iterator();
108  virtual ~_iterator();
109 
111 
112  ebmlElement& operator*() const;
115  bool operator==(const ebmlMasterElement::_iterator&) const;
116  bool operator!=(const ebmlMasterElement::_iterator&) const;
117  friend class ebmlList;
119  };
120 
123 
124 
126  private:
128  std::vector<ebmlElement_sp>::const_iterator _iter;
129 
130  protected:
131  _const_iterator(const ebml::ptr<const ebmlList>& elem, const std::vector<ebmlElement_sp>::const_iterator& iter);
132  _const_iterator(ebml::ptr<const ebmlList>&& elem, std::vector<ebmlElement_sp>::const_iterator&& iter);
133 
134  public:
135  _const_iterator();
136  virtual ~_const_iterator();
137 
139  const ebmlElement& operator*() const;
144 
145  friend class ebmlList;
147  };
148 
150  ebmlMasterElement::_const_iterator* _cend() const override;
151 
152  void _addChild(const ebmlElement_sp&) override;
153  void _addChild(ebmlElement_sp&&) override;
154 
155  friend class ebmlListClass;
156  // template<typename T, typename U, typename... Args>
157  // friend ebml::ptr<U> new_sp(Args... args);
158  };
159 
160  extern template class childSlot_t<ebmlList>;
163 }
164 #endif
void insert(off_t, const ebmlElement_sp &)
Definition: ebmlList.cpp:204
Structure representing occurrence specifications.
Definition: childTypeSpec.h:49
ebmlElement & operator*() const
Definition: ebmlList.cpp:265
std::wstring minirepr() const override
Definition: ebmlList.cpp:129
Definition: ebmlMasterElement.h:292
std::list< childTypeSpecArg_t > childTypeSpecArg_l
Alias for a list of child type specification arguments.
Definition: childTypeSpec.h:39
ebmlMasterElement::_iterator * _begin() override
Definition: ebmlList.cpp:239
void push_back(const ebmlElement_sp &)
Definition: ebmlList.cpp:221
void _validateData(const ebmlElement_l &)
Definition: ebmlList.cpp:80
_const_iterator()
Definition: ebmlList.cpp:303
ebmlMasterElement::_iterator & operator=(const ebmlMasterElement::_iterator &)
Definition: ebmlList.cpp:274
Abstract base class for EBML master element instances.This class provides the functionality to manage...
Definition: ebmlMasterElement.h:19
Definition: ebmlMasterElement.h:269
ebmlList(const ebmlListType *)
Definition: ebmlList.cpp:77
void _addChild(const ebmlElement_sp &) override
Attaches a child element (rvalue version).
Definition: ebmlList.cpp:231
bool operator!=(const ebmlMasterElement::_iterator &) const
Definition: ebmlList.cpp:292
size_t size() const
Definition: ebmlList.cpp:153
void _clear() override
Clears all child elements.
Definition: ebmlList.cpp:157
ebmlListType class_t
Definition: ebmlList.h:41
_iterator()
Definition: ebmlList.cpp:258
void _setData(const ebmlElement_l &)
Definition: ebmlList.cpp:99
virtual ~_const_iterator()
Definition: ebmlList.cpp:304
friend class ebmlListClass
Definition: ebmlList.h:155
Definition: basictypes.h:40
A drop-in replacement for std::shared_ptr tailored for EBML objects.
Definition: ptrs.h:27
bool operator==(const ebmlMasterElement::_const_iterator &) const
Definition: ebmlList.cpp:330
Definition: ebmlMasterElement.h:342
bool operator==(const ebmlMasterElement::_iterator &) const
Definition: ebmlList.cpp:284
ebmlMasterElement::_const_iterator & operator++()
Definition: ebmlList.cpp:315
Definition: ebmlMasterElement.h:324
childSlot_t< T > front()
Definition: ebmlList.cpp:195
Definition: ebmlList.h:97
uint64_t ebmlID_t
Definition: ebmlID_t.h:7
childSlot_t< T > at(off_t)
Definition: ebmlList.cpp:170
ebmlMasterElement::_const_iterator * _cbegin() const override
Definition: ebmlList.cpp:247
ebmlListType(const char *, const std::wstring &, const occurSpec_t &recursive={0, 0})
Definition: ebmlList.cpp:12
ebmlMasterElement::_iterator * _end() override
Definition: ebmlList.cpp:243
ebmlMasterElement::_const_iterator * _cend() const override
Definition: ebmlList.cpp:251
Definition: ebmlList.h:125
childSlot_t< T > back()
Definition: ebmlList.cpp:200
const ebmlElement & operator*() const
Definition: ebmlList.cpp:311
ebmlMasterElement::_const_iterator * copy() const
Definition: ebmlList.cpp:307
Represents the base type for all EBML master elements.
Definition: ebmlMasterElementType.h:57
Abstract base class for EBML Element instances.
Definition: ebmlElement.h:79
Represents a list-like EBML master element.
Definition: ebmlList.h:25
CRTP template for EBML Element instances.
Definition: ebmlElement.h:320
childSlot_t operator[](off_t)
Definition: ebmlList.cpp:165
Definition: ebmlList.h:37
bool contains(const c_ebmlElement_sp &) const
bool operator!=(const ebmlMasterElement::_const_iterator &) const
Definition: ebmlList.cpp:337
ebmlMasterElement::_iterator & operator++()
Definition: ebmlList.cpp:269
ebmlMasterElement::_const_iterator & operator=(const ebmlMasterElement::_const_iterator &)
Definition: ebmlList.cpp:320
void erase(off_t)
Definition: ebmlList.cpp:212
virtual ~_iterator()
Definition: ebmlList.cpp:259
std::vector< ebmlElement_sp > ebmlElement_l
Definition: c_ebmlElement_l.h:9
off_t index(const c_ebmlElement_sp &) const
void setData(const ebmlElement_l &)
Definition: ebmlList.cpp:107
ebmlMasterElement::_iterator * copy() const
Definition: ebmlList.cpp:261
CRTP template for EBML Element Type objects.
Definition: ebmlElementType.h:454
std::initializer_list< childTypeSpecArg_t > childClassSpecArg_init_l
Alias for an initializer list of child type specification arguments.
Definition: childTypeSpec.h:44
A templated helper class managing a child slot within an EBML master element.
Definition: childSlot_t.h:22