libebml_ng
Public Member Functions | Protected Member Functions | List of all members
ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t > Class Template Reference

CRTP template for EBML Element Type objects. More...

#include <ebmlElementType.h>

Inheritance diagram for ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >:
ebml::ebmlMapType< K, V, H, E, A, B > ebml::ebmlDataType< const K > ebml::ebmlDataType< K >

Public Member Functions

template<typename... Args>
 ebmlTypeCRTP (Args &&... args)
 
template<typename... Args>
ebml::ptr< ebmlinst_t > operator() (Args &&... args) const
 Creates a new instance of an EBML element. More...
 
ebml::ptr< ebmlinst_t > decode (const parseString &parsed) const
 
ebml::ptr< ebmlinst_t > decode (const parseFile &parsed) const
 
ebml::ptr< ebmlinst_t > decode (const char *data, size_t size) const
 
ebml::ptr< ebmlinst_t > decode (const std::string &data) const
 
ebml::ptr< ebmlinst_t > decode (ioBase &file) const
 
ebml::ptr< ebmlinst_t > decode (ioBase &file, off_t &offset) const
 
ebml::ptr< ebmlinst_t > decode (ioBase &file, off_t offset, off_t &endoffset) const
 
ebml::ptr< const ebmlinst_t > cdecode (const parseString &parsed) const
 
ebml::ptr< const ebmlinst_t > cdecode (const parseFile &parsed) const
 
ebml::ptr< const ebmlinst_t > cdecode (const char *data, size_t size) const
 
ebml::ptr< const ebmlinst_t > cdecode (const std::string &data) const
 
ebml::ptr< const ebmlinst_t > cdecode (ioBase &file) const
 
ebml::ptr< const ebmlinst_t > cdecode (ioBase &file, off_t &offset) const
 
ebml::ptr< const ebmlinst_t > cdecode (ioBase &file, off_t offset, off_t &endoffset) const
 

Protected Member Functions

ebmlElement_new () const
 
ebmlElement_decode_v (const parseString &) const
 
ebmlElement_decode_v (const parseFile &) const
 
ebmlElement_cdecode_v (const parseString &) const
 
ebmlElement_cdecode_v (const parseFile &) const
 

Detailed Description

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
class ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >

CRTP template for EBML Element Type objects.

This template implements the Curiously Recurring Template Pattern (CRTP) to enhance EBML element type classes. By wrapping their decode and cdecode functions, it provides type-safe pointer conversions, eliminating the need for manual recasting.

Benefits and Design Rationale

By inheriting from ebmlTypeCRTP, derived EBML element type classes receive:

See also
Using the CRTP Mixins for detailed usage instructions.
ebml::ebmlElementCRTP<ebmltype_t, ebmlinst_t, instbase_t>
ebml::ebmlElementType
Template Parameters
ebmltype_tThe concrete element type class using this CRTP mixin.
ebmlinst_tThe associated concrete element instance class.
typebase_tThe base element type class (default is ebml::ebmlElementType).
Author
Brian Sherson
Date
9/12/2025

Constructor & Destructor Documentation

◆ ebmlTypeCRTP()

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
template<typename... Args>
ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::ebmlTypeCRTP ( Args &&...  args)
inline

Member Function Documentation

◆ _cdecode_v() [1/2]

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
ebmlElement* ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::_cdecode_v ( const parseString ) const
protected

◆ _cdecode_v() [2/2]

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
ebmlElement* ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::_cdecode_v ( const parseFile ) const
protected

◆ _decode_v() [1/2]

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
ebmlElement* ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::_decode_v ( const parseString ) const
protected

◆ _decode_v() [2/2]

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
ebmlElement* ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::_decode_v ( const parseFile ) const
protected

◆ _new()

template<typename ebmltype_t, typename ebmlinst_t, typename typebase_t = ebmlElementType>
ebmlElement* ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::_new ( ) const
protected

◆ cdecode() [1/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( const parseString parsed) const
inline

◆ cdecode() [2/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( const parseFile parsed) const
inline

◆ cdecode() [3/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( const char *  data,
size_t  size 
) const
inline

◆ cdecode() [4/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( const std::string &  data) const
inline

◆ cdecode() [5/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( ioBase file) const
inline

◆ cdecode() [6/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( ioBase file,
off_t &  offset 
) const
inline

◆ cdecode() [7/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< const ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::cdecode ( ioBase file,
off_t  offset,
off_t &  endoffset 
) const
inline

◆ decode() [1/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( const parseString parsed) const
inline

◆ decode() [2/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( const parseFile parsed) const
inline

◆ decode() [3/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( const char *  data,
size_t  size 
) const
inline

◆ decode() [4/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( const std::string &  data) const
inline

◆ decode() [5/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( ioBase file) const
inline

◆ decode() [6/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( ioBase file,
off_t &  offset 
) const
inline

◆ decode() [7/7]

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::decode ( ioBase file,
off_t  offset,
off_t &  endoffset 
) const
inline

◆ operator()()

template<typename ebmltype_t , typename ebmlinst_t , typename typebase_t >
template<typename... Args>
ebml::ptr< ebmlinst_t > ebml::ebmlTypeCRTP< ebmltype_t, ebmlinst_t, typebase_t >::operator() ( Args &&...  args) const
inline

Creates a new instance of an EBML element.

This operator wraps around the constructor of ebmlinst_t of the form ebmlinst_t(const ebmltype_t*, Args&&...), forwarding the provided arguments, validating the created instance, and returning a shared pointer to the new element.

Template Parameters
ebmltype_tThe concrete EBML element type class.
ebmlinst_tThe concrete EBML element instance class.
typebase_tThe base element type class.
ArgsArguments to be forwarded to the constructor of ebmlinst_t.
Parameters
argsThe arguments to forward.
Returns
ebml::ptr<ebmlinst_t> A shared pointer to the created EBML element instance.

The documentation for this class was generated from the following file: