1 #ifndef EBML_NG_MASTERELEMENT_PAIR_H 2 #define EBML_NG_MASTERELEMENT_PAIR_H 4 #include <unordered_map> 11 #include "../ebmlDataElement.h" 12 #include "../ebmlElement.h" 14 #define IS_EBML_TYPE(V) std::is_class<V>::value && std::is_base_of<ebmlElement, V>::value 17 template<
typename K,
typename V>
20 template<
typename K,
typename V>
23 template<
typename K,
typename V>
33 using pair_value_class_t = std::conditional_t<IS_EBML_TYPE(V), ebmlElementType, ebmlDataType<V>>;
42 using pair_value_t = std::conditional_t<IS_EBML_TYPE(V), ebml::ptr<V>, V>;
57 typename H = std::hash<K>,
58 typename E = std::equal_to<K>,
59 typename A = std::allocator<std::pair<const K, ebml::ptr<ebmlPair<const K, V>>>>,
60 typename B = std::allocator<std::pair<const K, pair_value_t<V>>>
75 template<
typename K,
typename V>
93 template<
typename K,
typename V>
119 std::wstring
minirepr()
const override;
127 const K&
key()
const;
192 template<
typename Kp,
typename Vp,
typename H,
typename E,
typename A,
typename B>
Definition: ebmlPair.h:132
ebmlMasterElement::_const_iterator * copy() const
std::conditional_t< std::is_class< V >::value &&std::is_base_of< ebmlElement, V >::value, ebml::ptr< const V >, const V & > pair_const_value_t
Definition: ebmlPair.h:51
Definition: ebmlMasterElement.h:292
std::conditional_t< std::is_class< V >::value &&std::is_base_of< ebmlElement, V >::value, childSlot_t< V >, V & > pair_value_slot_t
Definition: ebmlPair.h:45
ebmlMasterElement::_const_iterator & operator=(const ebmlMasterElement::_const_iterator &)
void _setData(const K &, const pair_value_t< V > &)
Abstract base class for EBML master element instances.This class provides the functionality to manage...
Definition: ebmlMasterElement.h:19
Definition: ebmlMasterElement.h:269
bool operator==(const ebmlMasterElement::_iterator &) const
ebml::ptr< pair_value_inst_t< V > > _value
Definition: ebmlPair.h:100
ebmlMasterElement::_iterator & operator++()
ebmlMasterElement::_const_iterator * _cbegin() const override
const ebmlElement & operator*() const
void _addChild(const ebmlElement_sp &) override
Attaches a child element (rvalue version).
ebmlMasterElement::_iterator & operator=(const ebmlMasterElement::_iterator &)
ebmlMasterElement::_const_iterator & operator++()
bool operator!=(const ebmlMasterElement::_iterator &) const
ebmlPairType(const char *, const std::wstring &, const pair_key_class_t< K > *keycls, const pair_value_class_t< V > *valcls)
Definition: ebmlPair.h:18
A template class representing a key-value pair.
Definition: ebmlPair.h:76
Definition: basictypes.h:40
A drop-in replacement for std::shared_ptr tailored for EBML objects.
Definition: ptrs.h:27
Definition: ebmlMasterElement.h:342
std::conditional_t< std::is_class< V >::value &&std::is_base_of< ebmlElement, V >::value, V, ebmlDataElement< V > > pair_value_inst_t
Definition: ebmlPair.h:36
Definition: ebmlMasterElement.h:324
ebmlMasterElement::_iterator * _end() override
ebmlMasterElement::_const_iterator * _cend() const override
const pair_value_class_t< V > & valcls() const
childTypeSpec_t _valueSpec
Definition: ebmlPair.h:85
ebmlMasterElement::_iterator * copy() const
uint64_t ebmlID_t
Definition: ebmlID_t.h:7
pair_value_slot_t< V > value()
std::wstring minirepr() const override
bool operator==(const ebmlMasterElement::_const_iterator &) const
bool operator!=(const ebmlMasterElement::_const_iterator &) const
ebmlElement & operator*() const
std::conditional_t< std::is_class< V >::value &&std::is_base_of< ebmlElement, V >::value, ebml::ptr< V >, V > pair_value_t
Definition: ebmlPair.h:42
void _clear() override
Clears all child elements.
ebml::ptr< ebmlDataElement< K > > _key
Definition: ebmlPair.h:99
Represents the base type for all EBML master elements.
Definition: ebmlMasterElementType.h:57
Abstract base class for EBML Element instances.
Definition: ebmlElement.h:79
std::conditional_t< std::is_class< V >::value &&std::is_base_of< ebmlElement, V >::value, ebmlElementType, ebmlDataType< V > > pair_value_class_t
Definition: ebmlPair.h:33
Definition: ebmlPair.h:160
CRTP template for EBML Element instances.
Definition: ebmlElement.h:320
Specifies accepted child element types within a parent element.
Definition: childTypeSpec.h:76
ebmlPair(const ebmlPairType< K, V > *)
ebmlMasterElement::_iterator * _begin() override
CRTP template for EBML Element Type objects.
Definition: ebmlElementType.h:454
virtual ~_const_iterator()
const pair_key_class_t< K > & keycls() const