\doxysection{DObject Class Reference}
\hypertarget{class_d_object}{}\label{class_d_object}\index{DObject@{DObject}}


A universal data container class.  




{\ttfamily \#include $<$DObject.\+h$>$}

\doxysubsubsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
using \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{Data\+Type}}
\begin{DoxyCompactList}\small\item\em Supported data types for the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
using \mbox{\hyperlink{class_d_object_af11334d08ef85c68b3aae7554548e5a7}{Plugin}} = std\+::function$<$void(\mbox{\hyperlink{class_d_object}{DObject}}\&)$>$
\begin{DoxyCompactList}\small\item\em Placeholder type for plugins. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{class_d_object_a0ae54853e18265657296bfb5ac3bf9d0}{DObject}} ()
\begin{DoxyCompactList}\small\item\em Default constructor. \end{DoxyCompactList}\item 
\mbox{\hyperlink{class_d_object_ab0c940fa193a42158c6726bf1a2ef54d}{DObject}} (const \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{Data\+Type}} \&data, const \mbox{\hyperlink{class_metadata}{Metadata}} \&metadata)
\begin{DoxyCompactList}\small\item\em Constructor to initialize a \doxylink{class_d_object}{DObject} with data and metadata. \end{DoxyCompactList}\item 
const \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{Data\+Type}} \& \mbox{\hyperlink{class_d_object_a4862655c3634d019b0a45b811d6f7235}{get\+Data}} () const noexcept
\begin{DoxyCompactList}\small\item\em Retrieves the data stored in the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_ab1718571434e84e90f1ec463e4786a8a}{set\+Data}} (const \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{Data\+Type}} \&data)
\begin{DoxyCompactList}\small\item\em Sets the data for the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
const \mbox{\hyperlink{class_metadata}{Metadata}} \& \mbox{\hyperlink{class_d_object_a157b31e881aac6dd40782d3abc561d4e}{get\+Metadata}} () const noexcept
\begin{DoxyCompactList}\small\item\em Retrieves the metadata associated with the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_a296b1519249fdc1f6c7b4ab62d5421bc}{set\+Metadata}} (const \mbox{\hyperlink{class_metadata}{Metadata}} \&metadata)
\begin{DoxyCompactList}\small\item\em Updates the metadata for the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_a6f0023aee463e71d92442dcf61b6ed47}{set\+Debugging}} (bool enable\+Debug)
\begin{DoxyCompactList}\small\item\em Enables or disables debugging and tracing for the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
bool \mbox{\hyperlink{class_d_object_ae47bf220fbe2173cf6933c2380035dbd}{is\+Debugging\+Enabled}} () const noexcept
\begin{DoxyCompactList}\small\item\em Checks if debugging is enabled for the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_a15afffdf339150fc872bf63bdd08d581}{register\+Plugin}} (const std\+::string \&id, \mbox{\hyperlink{class_d_object_af11334d08ef85c68b3aae7554548e5a7}{Plugin}} plugin)
\begin{DoxyCompactList}\small\item\em Registers a plugin with the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_a99b8688849e11501033a25f61efb8356}{unregister\+Plugin}} (const std\+::string \&id)
\begin{DoxyCompactList}\small\item\em Unregisters a plugin by its identifier. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_a99072eb52bb22745f0248f273fbf28fb}{run\+Plugin}} (const std\+::string \&id)
\begin{DoxyCompactList}\small\item\em Executes a plugin by its identifier. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{class_d_object_a1223275dcbbf20334ea11707346acb93}{run\+All\+Plugins}} ()
\begin{DoxyCompactList}\small\item\em Executes all registered plugins in the registry. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Friends}
\begin{DoxyCompactItemize}
\item 
std\+::ostream \& \mbox{\hyperlink{class_d_object_aa54e75574f0302a2ca7252f9f0f0b3f1}{operator$<$$<$}} (std\+::ostream \&os, const \mbox{\hyperlink{class_d_object}{DObject}} \&obj)
\begin{DoxyCompactList}\small\item\em Provides a human-\/readable summary of the \doxylink{class_d_object}{DObject}. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
A universal data container class. 

The \doxylink{class_d_object}{DObject} class is designed to store arbitrary data alongside descriptive metadata. It supports plugin registration to allow extensible functionality. 

\doxysubsection{Member Typedef Documentation}
\Hypertarget{class_d_object_ad6fc2e29eae70cf94a2d241527857573}\index{DObject@{DObject}!DataType@{DataType}}
\index{DataType@{DataType}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{DataType}{DataType}}
{\footnotesize\ttfamily \label{class_d_object_ad6fc2e29eae70cf94a2d241527857573} 
using \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{DObject\+::\+Data\+Type}}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\ std::variant<}
\DoxyCodeLine{\ \ \ \ \ \ \ \ int,\ float,\ double,\ std::string,\ std::monostate,}
\DoxyCodeLine{\ \ \ \ \ \ \ \ std::vector<int>,\ std::vector<float>,\ std::vector<double>}
\DoxyCodeLine{\ \ \ \ >}

\end{DoxyCode}


Supported data types for the \doxylink{class_d_object}{DObject}. 

This type alias uses {\ttfamily std\+::variant} to store different types of data, ensuring type safety and flexibility. \Hypertarget{class_d_object_af11334d08ef85c68b3aae7554548e5a7}\index{DObject@{DObject}!Plugin@{Plugin}}
\index{Plugin@{Plugin}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{Plugin}{Plugin}}
{\footnotesize\ttfamily \label{class_d_object_af11334d08ef85c68b3aae7554548e5a7} 
using \mbox{\hyperlink{class_d_object_af11334d08ef85c68b3aae7554548e5a7}{DObject\+::\+Plugin}} = std\+::function$<$void(\mbox{\hyperlink{class_d_object}{DObject}}\&)$>$}



Placeholder type for plugins. 

In the future, this will be replaced with a concrete interface. 

\doxysubsection{Constructor \& Destructor Documentation}
\Hypertarget{class_d_object_a0ae54853e18265657296bfb5ac3bf9d0}\index{DObject@{DObject}!DObject@{DObject}}
\index{DObject@{DObject}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{DObject()}{DObject()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{class_d_object_a0ae54853e18265657296bfb5ac3bf9d0} 
DObject\+::\+DObject (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})}



Default constructor. 

Creates an empty \doxylink{class_d_object}{DObject} with default metadata. \Hypertarget{class_d_object_ab0c940fa193a42158c6726bf1a2ef54d}\index{DObject@{DObject}!DObject@{DObject}}
\index{DObject@{DObject}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{DObject()}{DObject()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{class_d_object_ab0c940fa193a42158c6726bf1a2ef54d} 
DObject\+::\+DObject (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{Data\+Type}} \&}]{data}{, }\item[{const \mbox{\hyperlink{class_metadata}{Metadata}} \&}]{metadata}{}\end{DoxyParamCaption})}



Constructor to initialize a \doxylink{class_d_object}{DObject} with data and metadata. 


\begin{DoxyParams}{Parameters}
{\em data} & The data to be stored in the \doxylink{class_d_object}{DObject}. \\
\hline
{\em metadata} & \doxylink{class_metadata}{Metadata} describing the stored data. \\
\hline
\end{DoxyParams}


\doxysubsection{Member Function Documentation}
\Hypertarget{class_d_object_a4862655c3634d019b0a45b811d6f7235}\index{DObject@{DObject}!getData@{getData}}
\index{getData@{getData}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{getData()}{getData()}}
{\footnotesize\ttfamily \label{class_d_object_a4862655c3634d019b0a45b811d6f7235} 
const \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{DObject\+::\+Data\+Type}} \& DObject\+::get\+Data (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [noexcept]}}



Retrieves the data stored in the \doxylink{class_d_object}{DObject}. 

Use the appropriate type (matching the stored data) with {\ttfamily std\+::get\texorpdfstring{$<$}{<}T\texorpdfstring{$>$}{>}()}.

\begin{DoxyReturn}{Returns}
A constant reference to the stored data. 
\end{DoxyReturn}
\Hypertarget{class_d_object_a157b31e881aac6dd40782d3abc561d4e}\index{DObject@{DObject}!getMetadata@{getMetadata}}
\index{getMetadata@{getMetadata}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{getMetadata()}{getMetadata()}}
{\footnotesize\ttfamily \label{class_d_object_a157b31e881aac6dd40782d3abc561d4e} 
const \mbox{\hyperlink{class_metadata}{Metadata}} \& DObject\+::get\+Metadata (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [noexcept]}}



Retrieves the metadata associated with the \doxylink{class_d_object}{DObject}. 

The metadata provides essential information about the stored data, such as its type, size, and dimensions.

\begin{DoxyReturn}{Returns}
A constant reference to the metadata. 
\end{DoxyReturn}
\Hypertarget{class_d_object_ae47bf220fbe2173cf6933c2380035dbd}\index{DObject@{DObject}!isDebuggingEnabled@{isDebuggingEnabled}}
\index{isDebuggingEnabled@{isDebuggingEnabled}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{isDebuggingEnabled()}{isDebuggingEnabled()}}
{\footnotesize\ttfamily \label{class_d_object_ae47bf220fbe2173cf6933c2380035dbd} 
bool DObject\+::is\+Debugging\+Enabled (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [nodiscard]}, {\ttfamily [noexcept]}}



Checks if debugging is enabled for the \doxylink{class_d_object}{DObject}. 

\begin{DoxyReturn}{Returns}
True if debugging is enabled, false otherwise. 
\end{DoxyReturn}
\Hypertarget{class_d_object_a15afffdf339150fc872bf63bdd08d581}\index{DObject@{DObject}!registerPlugin@{registerPlugin}}
\index{registerPlugin@{registerPlugin}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{registerPlugin()}{registerPlugin()}}
{\footnotesize\ttfamily \label{class_d_object_a15afffdf339150fc872bf63bdd08d581} 
void DObject\+::register\+Plugin (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{id}{, }\item[{\mbox{\hyperlink{class_d_object_af11334d08ef85c68b3aae7554548e5a7}{Plugin}}}]{plugin}{}\end{DoxyParamCaption})}



Registers a plugin with the \doxylink{class_d_object}{DObject}. 

Plugins are stored in a registry and can add custom functionality to the \doxylink{class_d_object}{DObject}.


\begin{DoxyParams}{Parameters}
{\em id} & A unique identifier for the plugin. \\
\hline
{\em plugin} & The plugin function to register. \\
\hline
\end{DoxyParams}
\Hypertarget{class_d_object_a1223275dcbbf20334ea11707346acb93}\index{DObject@{DObject}!runAllPlugins@{runAllPlugins}}
\index{runAllPlugins@{runAllPlugins}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{runAllPlugins()}{runAllPlugins()}}
{\footnotesize\ttfamily \label{class_d_object_a1223275dcbbf20334ea11707346acb93} 
void DObject\+::run\+All\+Plugins (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})}



Executes all registered plugins in the registry. 

Iterates through all plugins and invokes them on the current \doxylink{class_d_object}{DObject}. \Hypertarget{class_d_object_a99072eb52bb22745f0248f273fbf28fb}\index{DObject@{DObject}!runPlugin@{runPlugin}}
\index{runPlugin@{runPlugin}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{runPlugin()}{runPlugin()}}
{\footnotesize\ttfamily \label{class_d_object_a99072eb52bb22745f0248f273fbf28fb} 
void DObject\+::run\+Plugin (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{id}{}\end{DoxyParamCaption})}



Executes a plugin by its identifier. 

Invokes the registered plugin function. If the plugin is not found, no action is taken.


\begin{DoxyParams}{Parameters}
{\em id} & The unique identifier of the plugin to execute. \\
\hline
\end{DoxyParams}
\Hypertarget{class_d_object_ab1718571434e84e90f1ec463e4786a8a}\index{DObject@{DObject}!setData@{setData}}
\index{setData@{setData}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{setData()}{setData()}}
{\footnotesize\ttfamily \label{class_d_object_ab1718571434e84e90f1ec463e4786a8a} 
void DObject\+::set\+Data (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_d_object_ad6fc2e29eae70cf94a2d241527857573}{Data\+Type}} \&}]{data}{}\end{DoxyParamCaption})}



Sets the data for the \doxylink{class_d_object}{DObject}. 

Updates the stored data and optionally updates metadata.


\begin{DoxyParams}{Parameters}
{\em data} & The new data to store in the \doxylink{class_d_object}{DObject}. \\
\hline
\end{DoxyParams}
\Hypertarget{class_d_object_a6f0023aee463e71d92442dcf61b6ed47}\index{DObject@{DObject}!setDebugging@{setDebugging}}
\index{setDebugging@{setDebugging}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{setDebugging()}{setDebugging()}}
{\footnotesize\ttfamily \label{class_d_object_a6f0023aee463e71d92442dcf61b6ed47} 
void DObject\+::set\+Debugging (\begin{DoxyParamCaption}\item[{bool}]{enable\+Debug}{}\end{DoxyParamCaption})}



Enables or disables debugging and tracing for the \doxylink{class_d_object}{DObject}. 

When debugging is enabled, the \doxylink{class_d_object}{DObject} tracks creation and modification history.


\begin{DoxyParams}{Parameters}
{\em enable\+Debug} & True to enable debugging, false to disable it. \\
\hline
\end{DoxyParams}
\Hypertarget{class_d_object_a296b1519249fdc1f6c7b4ab62d5421bc}\index{DObject@{DObject}!setMetadata@{setMetadata}}
\index{setMetadata@{setMetadata}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{setMetadata()}{setMetadata()}}
{\footnotesize\ttfamily \label{class_d_object_a296b1519249fdc1f6c7b4ab62d5421bc} 
void DObject\+::set\+Metadata (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_metadata}{Metadata}} \&}]{metadata}{}\end{DoxyParamCaption})}



Updates the metadata for the \doxylink{class_d_object}{DObject}. 

Use this function carefully to ensure consistency between the data and metadata.


\begin{DoxyParams}{Parameters}
{\em metadata} & The new metadata to associate with the \doxylink{class_d_object}{DObject}. \\
\hline
\end{DoxyParams}
\Hypertarget{class_d_object_a99b8688849e11501033a25f61efb8356}\index{DObject@{DObject}!unregisterPlugin@{unregisterPlugin}}
\index{unregisterPlugin@{unregisterPlugin}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{unregisterPlugin()}{unregisterPlugin()}}
{\footnotesize\ttfamily \label{class_d_object_a99b8688849e11501033a25f61efb8356} 
void DObject\+::unregister\+Plugin (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{id}{}\end{DoxyParamCaption})}



Unregisters a plugin by its identifier. 

Removes the plugin from the registry if it exists.


\begin{DoxyParams}{Parameters}
{\em id} & The unique identifier of the plugin to unregister. \\
\hline
\end{DoxyParams}


\doxysubsection{Friends And Related Symbol Documentation}
\Hypertarget{class_d_object_aa54e75574f0302a2ca7252f9f0f0b3f1}\index{DObject@{DObject}!operator$<$$<$@{operator$<$$<$}}
\index{operator$<$$<$@{operator$<$$<$}!DObject@{DObject}}
\doxysubsubsection{\texorpdfstring{operator$<$$<$}{operator<<}}
{\footnotesize\ttfamily \label{class_d_object_aa54e75574f0302a2ca7252f9f0f0b3f1} 
std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{os}{, }\item[{const \mbox{\hyperlink{class_d_object}{DObject}} \&}]{obj}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}



Provides a human-\/readable summary of the \doxylink{class_d_object}{DObject}. 

Useful for quick inspection or logging during debugging sessions.


\begin{DoxyParams}{Parameters}
{\em os} & The output stream to write to. \\
\hline
{\em obj} & The \doxylink{class_d_object}{DObject} to summarize. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A reference to the output stream. 
\end{DoxyReturn}


The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
src/dobj/public/\mbox{\hyperlink{_d_object_8h}{DObject.\+h}}\item 
src/dobj/private/\mbox{\hyperlink{_d_object_8cpp}{DObject.\+cpp}}\end{DoxyCompactItemize}
