libebml_ng
childTypeSpec.h
Go to the documentation of this file.
1 #ifndef EBML_NG_CHILDCLASSSPEC_H
2 #define EBML_NG_CHILDCLASSSPEC_H
3 
4 // #include "../ebmlID_t.h"
5 // #include <cstddef>
6 #include "../../ebmlElementType.h"
7 // #include "ebmlMasterElementClass.h"
8 // #include "../element.h"
9 // #include "../exceptions.h"
10 //
11 #include <unordered_map>
12 #include <unordered_set>
13 // #include <deque>
14 #include <list>
15 // #include <vector>
16 // #include <optional>
17 
18 namespace ebml {
30  childTypeSpecArg_t(const ebmlElementType *, unsigned long min=0, long max=-1);
32  unsigned long min; // Minimum number of occurrences required.
33  long max; // Maximum number of occurrences permitted. Negative values interpreted as infinity.
34  };
35 
39  typedef std::list<childTypeSpecArg_t> childTypeSpecArg_l;
40 
44  typedef std::initializer_list<childTypeSpecArg_t> childClassSpecArg_init_l;
45 
49  struct occurSpec_t {
50  unsigned long min;
51  long max;
52  };
53 
57  typedef std::unordered_map<ebmlID_t, const ebmlElementType *> ebmlElementClass_d;
58 
62  typedef std::unordered_set<const ebmlElementType *> ebmlElementClass_s;
63 
67  typedef std::unordered_map<ebmlID_t, occurSpec_t> occurSpec_d;
68 
77  private:
78  ebmlElementClass_d _cls_by_ebmlID;
79  ebmlElementClass_s _clss;
80  occurSpec_d _occurspec;
81  inline void _clear() {
82  _cls_by_ebmlID.clear();
83  _clss.clear();
84  _occurspec.clear();
85  }
86 
87  public:
91  childTypeSpec_t(const childTypeSpec_t&) = default;
92  childTypeSpec_t(childTypeSpec_t&&) = default;
93 
96  childTypeSpec_t & operator=(const childTypeSpec_t&) = default;
98 
104  void add(const childTypeSpecArg_t&);
105 
113  void add(const ebmlElementType*, unsigned long min=0, long max=-1);
114 
120  void remove(ebmlID_t);
121 
129  const ebmlElementType* operator[](ebmlID_t) const;
130 
137  size_t count(ebmlID_t) const;
138 
145  size_t count(const ebmlElementType*) const;
146 
152  size_t size() const;
153 
159  const occurSpec_d& occurSpec() const;
160 
167  const occurSpec_t& occurSpec(ebmlID_t) const;
168 
175  const occurSpec_t& occurSpec(const ebmlElementType*) const;
176 
183  bool isValid(const ebmlElement_sp&) const;
184 
190  ebmlElementClass_d::const_iterator begin() const;
191 
197  ebmlElementClass_d::const_iterator end() const;
198  };
199 }
200 #endif
Structure representing occurrence specifications.
Definition: childTypeSpec.h:49
std::unordered_set< const ebmlElementType * > ebmlElementClass_s
Defines a set of ebmlElementType pointers.
Definition: childTypeSpec.h:62
Abstract base class for EBML Element Type objects.
Definition: ebmlElementType.h:106
ebmlElementClass_d::const_iterator begin() const
Returns an iterator pointing to the beginning of the specifications.
Definition: childTypeSpec.cpp:93
std::list< childTypeSpecArg_t > childTypeSpecArg_l
Alias for a list of child type specification arguments.
Definition: childTypeSpec.h:39
void add(const childTypeSpecArg_t &)
Adds a child type.
Definition: childTypeSpec.cpp:49
Structure representing a single child type specification argument.
Definition: childTypeSpec.h:28
size_t size() const
Returns the total number of child type specifications.
Definition: childTypeSpec.cpp:80
long max
Definition: childTypeSpec.h:33
const ebmlElementType * operator[](ebmlID_t) const
Retrieves the child type for a given EBML ID.
Definition: childTypeSpec.cpp:84
Definition: basictypes.h:40
A drop-in replacement for std::shared_ptr tailored for EBML objects.
Definition: ptrs.h:27
std::unordered_map< ebmlID_t, const ebmlElementType * > ebmlElementClass_d
Defines the mapping from EBML ID to ebmlElementType pointers.
Definition: childTypeSpec.h:57
long max
Definition: childTypeSpec.h:51
unsigned long min
Definition: childTypeSpec.h:50
uint64_t ebmlID_t
Definition: ebmlID_t.h:7
bool isValid(const ebmlElement_sp &) const
Checks whether a given element is valid under this specification.
Definition: childTypeSpec.cpp:72
const ebmlElementType * cls
Definition: childTypeSpec.h:31
const occurSpec_d & occurSpec() const
Retrieves the complete occurrence specifications.
Definition: childTypeSpec.cpp:59
childTypeSpec_t & operator=(childClassSpecArg_init_l)
Definition: childTypeSpec.cpp:101
childTypeSpec_t()
Definition: childTypeSpec.cpp:30
ebmlElementClass_d::const_iterator end() const
Returns an iterator pointing past the end of the specifications.
Definition: childTypeSpec.cpp:97
childTypeSpecArg_t()
Definition: childTypeSpec.cpp:18
Specifies accepted child element types within a parent element.
Definition: childTypeSpec.h:76
size_t count(ebmlID_t) const
Determines if a child type for a given EBML ID exists.
Definition: childTypeSpec.cpp:76
unsigned long min
Definition: childTypeSpec.h:32
std::unordered_map< ebmlID_t, occurSpec_t > occurSpec_d
Defines the mapping from EBML ID to occurrence specifications.
Definition: childTypeSpec.h:67
std::initializer_list< childTypeSpecArg_t > childClassSpecArg_init_l
Alias for an initializer list of child type specification arguments.
Definition: childTypeSpec.h:44