1 #ifndef EBML_NG_MASTERELEMENT_MULTSLOT_H 2 #define EBML_NG_MASTERELEMENT_MULTSLOT_H 5 #include <unordered_map> 8 #include <ext/new_allocator.h> 48 typedef std::unordered_map<std::string, slotArg_t>
slotArg_d;
68 std::vector<slotSpec_t> _slotSpecs;
69 std::unordered_map<ebmlID_t, const slotSpec_t*> _slots_by_ebmlID;
70 std::unordered_map<std::string, const slotSpec_t*> _slots_by_name;
95 const std::vector<slotSpec_t>&
slotSpecs()
const;
96 const std::unordered_map<std::string, const slotSpec_t*>&
slotSpecsByKey()
const;
97 const std::unordered_map<ebmlID_t, const slotSpec_t*>&
slotSpecsByID()
const;
105 void _check_single()
const;
106 void _check_multi()
const;
193 ebmlElement_l::const_iterator
_iter;
235 return data<T>(elem);
271 template<
typename T=ebmlElement>
274 template<
typename T=ebmlElement>
277 template<
typename T=ebmlElement>
284 const T&
data(
size_t)
const;
357 void _check_single()
const;
358 void _check_multi()
const;
408 void erase(
size_t index);
431 std::wstring
repr()
const;
443 return data<T>(elem);
449 std::vector<_slot_t> _slots;
450 std::unordered_map<std::string, _slot_t*> _slots_by_name;
451 std::unordered_map<ebmlID_t, _slot_t*> _slots_by_ebmlID;
489 std::wstring
minirepr()
const override;
502 T&
data(
const std::string&);
505 const T&
data(
size_t)
const;
508 const T&
data(
const std::string&)
const;
515 std::vector<_slot_t>::iterator _slotiter;
516 std::vector<_slot_t>::iterator _slotiterend;
523 const std::vector<_slot_t>::iterator& slotiter,
524 const std::vector<_slot_t>::iterator& slotiterend,
531 std::vector<_slot_t>::iterator&& slotiter,
532 std::vector<_slot_t>::iterator&& slotiterend,
561 std::vector<_slot_t>::const_iterator _slotiter;
562 std::vector<_slot_t>::const_iterator _slotiterend;
569 const std::vector<_slot_t>::const_iterator& slotiter,
570 const std::vector<_slot_t>::const_iterator& slotiterend,
576 std::vector<_slot_t>::const_iterator&& slotiter,
577 std::vector<_slot_t>::const_iterator&& slotiterend,
ebmlElement_sp & push_back(const ebmlElement_sp &elem)
Definition: ebmlStruct.cpp:744
void erase(size_t index)
Definition: ebmlStruct.cpp:739
Helper class for creating and initializing seek data.
Definition: seekdata.h:195
T & data(const ebmlElement_sp &elem)
void _clear() override
Clears all child elements.
Definition: ebmlStruct.cpp:1531
Abstract base class for EBML Element Type objects.
Definition: ebmlElementType.h:106
ebmlElement_l elems
Definition: ebmlStruct.h:110
iterator & operator++()
Definition: ebmlStruct.cpp:1962
ebmlElement_l::iterator _iter
Definition: ebmlStruct.h:308
Definition: ebmlMasterElement.h:292
slotArg_t()
Definition: ebmlStruct.cpp:285
~slotSpec_t()
Definition: ebmlStruct.cpp:39
std::list< childTypeSpecArg_t > childTypeSpecArg_l
Alias for a list of child type specification arguments.
Definition: childTypeSpec.h:39
Definition: ebmlStruct.h:157
Definition: ebmlStruct.h:303
Definition: ebmlStruct.h:348
const_slot_t::iterator cbegin() const
Definition: ebmlStruct.cpp:2229
slotArg_t & operator=(const slotArg_t &)
Definition: ebmlStruct.cpp:325
ebmlElement_l::const_iterator _iter
Definition: ebmlStruct.h:193
const_slot_t::iterator cend() const
Definition: ebmlStruct.cpp:2239
iterator()
Definition: ebmlStruct.cpp:2075
bool operator==(const ebmlMasterElement::_const_iterator &) const
Definition: ebmlStruct.cpp:2419
ebmlElement_l elems
Definition: ebmlStruct.h:353
iterator & operator=(const iterator &)
Definition: ebmlStruct.cpp:2140
Abstract base class for EBML master element instances.This class provides the functionality to manage...
Definition: ebmlMasterElement.h:19
void setData(const slotArg_l &)
Definition: ebmlStruct.cpp:1485
ebmlMasterElement::_const_iterator & operator=(const ebmlMasterElement::_const_iterator &)
Definition: ebmlStruct.cpp:2404
Definition: ebmlMasterElement.h:269
bool multi() const
Definition: ebmlStruct.cpp:2129
const std::unordered_map< std::string, const slotSpec_t * > & slotSpecsByKey() const
Definition: ebmlStruct.cpp:230
slot_t & operator=(const slot_t &)
Definition: ebmlStruct.cpp:1706
childSlot_t push_back(const ebmlElement_sp &)
Definition: ebmlStruct.cpp:1789
bool operator!=(const ebmlMasterElement::_const_iterator &) const
Definition: ebmlStruct.cpp:2439
seekHelper_t seekHelper
Definition: seekdata.cpp:136
~_slot_t()
Definition: ebmlStruct.cpp:600
ebmlMultiSlot_sp _parent
Definition: ebmlStruct.h:241
iterator begin()
Definition: ebmlStruct.cpp:1997
Definition: ebmlStruct.h:558
bool multi() const
Definition: ebmlStruct.cpp:409
Definition: ebmlStruct.h:512
ebmlElement_sp & emplace_back(const ebmlElement_sp &elem)
Definition: ebmlStruct.cpp:758
bool operator==(const iterator &) const
Definition: ebmlStruct.cpp:2216
ptr< ebmlElement > ebmlElement_sp
Definition: ptrs.h:837
c_ebmlElement_sp operator[](size_t) const
Definition: ebmlStruct.cpp:2069
void _validateArgs(const slotArg_l &args)
Definition: ebmlStruct.cpp:954
slotSpec_t()
Definition: ebmlStruct.cpp:25
ebmlMasterElement::_iterator * _end() override
Definition: ebmlStruct.cpp:1614
Definition: ebmlStruct.h:17
_slot_t & operator=(const _slot_t &other)
Definition: ebmlStruct.cpp:523
const_iterator cend() const
Definition: ebmlStruct.cpp:2257
size_t size() const
Definition: ebmlStruct.cpp:643
c_ebmlElement_sp operator*() const
Definition: ebmlStruct.cpp:2206
const ebmlElement_sp & operator*() const
Definition: ebmlStruct.cpp:1977
childTypeSpec_t _childTypes
Definition: ebmlStruct.h:22
iterator & operator=(const iterator &)
Definition: ebmlStruct.cpp:1919
_iterator()
Definition: ebmlStruct.cpp:2265
Definition: ebmlStruct.h:188
A drop-in replacement for std::weak_ptr tailored for EBML objects.
Definition: ptrs.h:30
Definition: basictypes.h:40
childSlot_t operator[](size_t)
Definition: ebmlStruct.cpp:1784
ebmlMasterElement::_const_iterator & operator++()
Definition: ebmlStruct.cpp:2377
A drop-in replacement for std::shared_ptr tailored for EBML objects.
Definition: ptrs.h:27
virtual ~_iterator()
Definition: ebmlStruct.cpp:2266
Definition: ebmlMasterElement.h:342
std::list< slotArg_t > slotArg_l
Definition: ebmlStruct.h:46
ebmlElement_sp & insert(size_t index, const ebmlElement_sp &elem)
Definition: ebmlStruct.cpp:725
const slotSpec_t & slotSpec() const
Definition: ebmlStruct.cpp:635
void _addChild(const ebmlElement_sp &) override
Attaches a child element (rvalue version).
Definition: ebmlStruct.cpp:1572
Definition: ebmlStruct.h:239
ebmlMasterElement::_iterator * _begin() override
Definition: ebmlStruct.cpp:1596
std::wstring repr() const
Definition: ebmlStruct.cpp:831
bool multi() const
Definition: ebmlStruct.cpp:639
bool _done
Definition: ebmlStruct.h:307
size_t size() const
Definition: ebmlStruct.cpp:1807
Definition: ebmlMasterElement.h:324
~slotArg_t()
Definition: ebmlStruct.cpp:433
const_slot_t(const ebml::ptr< const ebmlStruct > &, const _slot_t &)
Definition: ebmlStruct.cpp:2015
ebmlStructType(const char *, const std::wstring &, const slotSpec_l &)
Definition: ebmlStruct.cpp:78
const_iterator cbegin() const
Definition: ebmlStruct.cpp:2247
ebmlElement_sp & front()
Definition: ebmlStruct.cpp:715
std::wstring minirepr() const override
Definition: ebmlStruct.cpp:1553
ebmlElement_sp & operator[](size_t index)
Definition: ebmlStruct.cpp:705
slot_t(const ebml::ptr< ebmlStruct > &, _slot_t &)
Definition: ebmlStruct.cpp:1701
const std::vector< slotSpec_t > & slotSpecs() const
Definition: ebmlStruct.cpp:226
std::unordered_map< std::string, slotArg_t > slotArg_d
Definition: ebmlStruct.h:48
_slot_t * _slot
Definition: ebmlStruct.h:242
Read-only list wrapper for EBML element shared pointers.
Definition: c_ebmlElement_l.h:16
ebmlElement_sp elem
Definition: ebmlStruct.h:352
const childTypeSpec_t & childTypes() const
Definition: ebmlStruct.cpp:41
ebmlMasterElement::_iterator & operator++()
Definition: ebmlStruct.cpp:2289
void _setData(const slotArg_l &args)
Definition: ebmlStruct.cpp:1349
slotArg_t(const ebml::ptr< T > &ptr)
Definition: ebmlStruct.h:119
~iterator()
Definition: ebmlStruct.cpp:2133
bool multi() const
Definition: ebmlStruct.cpp:1859
const_slot_t::iterator const_iterator
Definition: ebmlStruct.h:338
uint64_t ebmlID_t
Definition: ebmlID_t.h:7
ebmlElement_sp & back()
Definition: ebmlStruct.cpp:720
ebml::ptr< const ebmlStruct > c_ebmlMultiSlot_sp
Definition: ebmlStruct.h:153
A flexible pointer that can store either a strong (shared) or weak pointer.
Definition: flexptr.h:21
~iterator()
Definition: ebmlStruct.cpp:1890
ptr< const ebmlElement > c_ebmlElement_sp
Definition: ptrs.h:843
virtual ~_const_iterator()
Definition: ebmlStruct.cpp:2354
ebmlElement_sp elem
Definition: ebmlStruct.h:109
ebmlStruct(const ebmlStructType *)
Definition: ebmlStruct.cpp:871
ebmlElement & operator*() const
Definition: ebmlStruct.cpp:2285
ebml_shared_ptr< T > ebml_static_pointer_cast(const ebml_shared_ptr< U > &)
Definition: ptrs.h:731
childSlot_t< T > at(size_t)
ebmlElement_sp & at(size_t index)
Definition: ebmlStruct.cpp:710
const std::unordered_map< ebmlID_t, const slotSpec_t * > & slotSpecsByID() const
Definition: ebmlStruct.cpp:234
bool operator==(const iterator &) const
Definition: ebmlStruct.cpp:1984
ebmlMasterElement::_iterator & operator=(const ebmlMasterElement::_iterator &)
Definition: ebmlStruct.cpp:2316
_const_iterator()
Definition: ebmlStruct.cpp:2353
bool multi() const
Definition: ebmlStruct.cpp:59
std::string name
Definition: ebmlStruct.h:19
Represents the base type for all EBML master elements.
Definition: ebmlMasterElementType.h:57
ebmlMasterElement::_const_iterator * _cend() const override
Definition: ebmlStruct.cpp:1648
void _validateData(const slotArg_l &args)
Definition: ebmlStruct.cpp:1297
ebmlMasterElement::_const_iterator * copy() const
Definition: ebmlStruct.cpp:2369
Abstract base class for EBML Element instances.
Definition: ebmlElement.h:79
ebmlMasterElement::_const_iterator * _cbegin() const override
Definition: ebmlStruct.cpp:1623
iterator()
Definition: ebmlStruct.cpp:1854
bool _multi
Definition: ebmlStruct.h:23
CRTP template for EBML Element instances.
Definition: ebmlElement.h:320
slotSpec_t & operator=(const slotSpec_t &)
Definition: ebmlStruct.cpp:45
Specifies accepted child element types within a parent element.
Definition: childTypeSpec.h:76
iterator end()
Definition: ebmlStruct.cpp:2007
Definition: ebmlStruct.h:103
ebml::ptr< ebmlStruct > ebmlMultiSlot_sp
Definition: ebmlStruct.h:50
iterator & operator++()
Definition: ebmlStruct.cpp:2183
const slotSpec_t * _spec
Definition: ebmlStruct.h:350
slotArg_t(ebml::ptr< T > &&ptr)
Definition: ebmlStruct.h:122
Represents a structure-like EBML master element.
Definition: ebmlStruct.h:64
const_slot_t & operator=(const const_slot_t &)
Definition: ebmlStruct.cpp:2026
std::vector< slotSpec_t > slotSpec_l
Definition: ebmlStruct.h:44
Definition: ebmlStruct.h:447
std::vector< ebmlElement_sp > ebmlElement_l
Definition: c_ebmlElement_l.h:9
bool operator==(const ebmlMasterElement::_iterator &) const
Definition: ebmlStruct.cpp:2329
void validate(const ebmlElement_sp &elem) const
Definition: ebmlStruct.cpp:625
CRTP template for EBML Element Type objects.
Definition: ebmlElementType.h:454
bool _done
Definition: ebmlStruct.h:192
const ebmlElementType * typeBySlot(const std::string &) const
Definition: ebmlStruct.cpp:238
ebmlMasterElement::_iterator * copy() const
Definition: ebmlStruct.cpp:2281
bool operator!=(const ebmlMasterElement::_iterator &) const
Definition: ebmlStruct.cpp:2349
slot_t operator[](size_t)
Definition: ebmlStruct.cpp:1657
_slot_t()
Definition: ebmlStruct.cpp:500
const ebmlElement & operator*() const
Definition: ebmlStruct.cpp:2373
A templated helper class managing a child slot within an EBML master element.
Definition: childSlot_t.h:22