{\bfseries libebml\+\_\+ng} is a modern, C++20-\/native library for parsing and generating E\+B\+ML (Extensible Binary Meta Language) documents. This project represents a fresh take on E\+B\+ML tooling, focusing on a clean, extensible, and high-\/performance design.

The library is built around a core factory pattern that cleanly separates the definition of an E\+B\+ML element\textquotesingle{}s {\ttfamily type} from the management of its {\ttfamily instance} data. This design makes it simple to extend the library with new E\+B\+ML element types.

\subsection*{Key Features}


\begin{DoxyItemize}
\item {\bfseries Modern C++20\+:} Leverages new language features to provide a type-\/safe and idiomatic A\+PI.
\item {\bfseries Factory Pattern\+:} A clean separation of concerns for E\+B\+ML element types and instances.
\item {\bfseries High Performance\+:} Optimized for efficient encoding and decoding of large E\+B\+ML documents.
\item {\bfseries Extensible\+:} Designed to be easily extended with new custom E\+B\+ML element types.
\end{DoxyItemize}

\subsection*{Getting Started}

\subsubsection*{Prerequisites}


\begin{DoxyItemize}
\item A C++ compiler that supports the C++20 standard (e.\+g., G\+CC 10+).
\end{DoxyItemize}

\subsubsection*{Installation}

The library uses a standard {\ttfamily autotools} build system.


\begin{DoxyEnumerate}
\item Clone the repository\+:
\end{DoxyEnumerate}

\begin{DoxyVerb}git clone https://github.com/shersonb/libebml_ng.git
cd libebml_ng
\end{DoxyVerb}



\begin{DoxyEnumerate}
\item Run the {\ttfamily configure} script. This will check your system for a compatible C++ compiler.
\end{DoxyEnumerate}

\begin{DoxyVerb}./configure
\end{DoxyVerb}



\begin{DoxyEnumerate}
\item Compile and install the library\+:
\end{DoxyEnumerate}

\begin{DoxyVerb}make
sudo make install
\end{DoxyVerb}


\subsection*{Using the Library}

The core of {\ttfamily libebml\+\_\+ng} is its extensibility. In addition to built-\/in types, you can create your own custom E\+B\+ML elements by inheriting from the core classes and implementing the necessary methods. For detailed instructions on this process, please refer to the following documentation pages\+:


\begin{DoxyItemize}
\item \mbox{\hyperlink{core_concepts}{Core Concepts\+: E\+B\+ML Element Types and Instances}}
\item \mbox{\hyperlink{crtp_usage}{The C\+R\+TP Design Pattern}}
\item \mbox{\hyperlink{data_type_templates}{Data Type Templates\+: Creating Custom E\+B\+ML Data Types}}
\end{DoxyItemize}

\subsection*{Contributing}

We welcome contributions! Please feel free to open a new issue or submit a pull request on the Git\+Hub repository.

\subsection*{License}

This project is licensed under the G\+NU Lesser General Public License Version 3. See the {\ttfamily L\+I\+C\+E\+N\+SE} file for details. 