\hypertarget{group__Eet__Data__Group}{\section{Eet Data Serialization}
\label{group__Eet__Data__Group}\index{Eet Data Serialization@{Eet Data Serialization}}
}


Convenience functions to serialize and parse complex data structures to binary blobs.  


\subsection*{Modules}
\begin{DoxyCompactItemize}
\item 
\hyperlink{group__Eet__Data__Cipher__Group}{Eet Data Serialization using A Ciphers}
\begin{DoxyCompactList}\small\item\em Most of the \hyperlink{group__Eet__Data__Group}{Eet Data Serialization} have alternative versions that accounts for ciphers to protect their content. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{struct__Eet__Data__Descriptor__Class}{\+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}
\begin{DoxyCompactList}\small\item\em Instructs Eet about memory management for different needs under serialization and parse process. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\hypertarget{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{\#define \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{E\+E\+T\+\_\+\+T\+\_\+\+U\+N\+K\+N\+O\+W}~0}\label{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}

\begin{DoxyCompactList}\small\item\em Unknown data encoding type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga74d89b710e845c708ae7b0ca98016957}{\#define \hyperlink{group__Eet__Data__Group_ga74d89b710e845c708ae7b0ca98016957}{E\+E\+T\+\_\+\+T\+\_\+\+C\+H\+A\+R}~1}\label{group__Eet__Data__Group_ga74d89b710e845c708ae7b0ca98016957}

\begin{DoxyCompactList}\small\item\em Data type\+: char. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gacf536867efdf1164af97f0d57bc43894}{\#define \hyperlink{group__Eet__Data__Group_gacf536867efdf1164af97f0d57bc43894}{E\+E\+T\+\_\+\+T\+\_\+\+S\+H\+O\+R\+T}~2}\label{group__Eet__Data__Group_gacf536867efdf1164af97f0d57bc43894}

\begin{DoxyCompactList}\small\item\em Data type\+: short. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga4e196733795867f14c6e387af7287baa}{\#define \hyperlink{group__Eet__Data__Group_ga4e196733795867f14c6e387af7287baa}{E\+E\+T\+\_\+\+T\+\_\+\+I\+N\+T}~3}\label{group__Eet__Data__Group_ga4e196733795867f14c6e387af7287baa}

\begin{DoxyCompactList}\small\item\em Data type\+: int. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gabdf13bbc0df675742aef8e1e87ccb1ef}{\#define \hyperlink{group__Eet__Data__Group_gabdf13bbc0df675742aef8e1e87ccb1ef}{E\+E\+T\+\_\+\+T\+\_\+\+L\+O\+N\+G\+\_\+\+L\+O\+N\+G}~4}\label{group__Eet__Data__Group_gabdf13bbc0df675742aef8e1e87ccb1ef}

\begin{DoxyCompactList}\small\item\em Data type\+: long long. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga447b1b41e09b24ac6b3fbbac8d3efb30}{\#define \hyperlink{group__Eet__Data__Group_ga447b1b41e09b24ac6b3fbbac8d3efb30}{E\+E\+T\+\_\+\+T\+\_\+\+F\+L\+O\+A\+T}~5}\label{group__Eet__Data__Group_ga447b1b41e09b24ac6b3fbbac8d3efb30}

\begin{DoxyCompactList}\small\item\em Data type\+: float. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gac2d8336b1127fd382c65416cf45cd3e8}{\#define \hyperlink{group__Eet__Data__Group_gac2d8336b1127fd382c65416cf45cd3e8}{E\+E\+T\+\_\+\+T\+\_\+\+D\+O\+U\+B\+L\+E}~6}\label{group__Eet__Data__Group_gac2d8336b1127fd382c65416cf45cd3e8}

\begin{DoxyCompactList}\small\item\em Data type\+: double. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga09a1341cc158fda0ba60ad2386ecd795}{\#define \hyperlink{group__Eet__Data__Group_ga09a1341cc158fda0ba60ad2386ecd795}{E\+E\+T\+\_\+\+T\+\_\+\+U\+C\+H\+A\+R}~7}\label{group__Eet__Data__Group_ga09a1341cc158fda0ba60ad2386ecd795}

\begin{DoxyCompactList}\small\item\em Data type\+: unsigned char. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga8811200857e44566037ff3871cd05b12}{\#define \hyperlink{group__Eet__Data__Group_ga8811200857e44566037ff3871cd05b12}{E\+E\+T\+\_\+\+T\+\_\+\+U\+S\+H\+O\+R\+T}~8}\label{group__Eet__Data__Group_ga8811200857e44566037ff3871cd05b12}

\begin{DoxyCompactList}\small\item\em Data type\+: unsigned short. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gacf6a3c9f06e10e20be5b02cd8c6a220b}{\#define \hyperlink{group__Eet__Data__Group_gacf6a3c9f06e10e20be5b02cd8c6a220b}{E\+E\+T\+\_\+\+T\+\_\+\+U\+I\+N\+T}~9}\label{group__Eet__Data__Group_gacf6a3c9f06e10e20be5b02cd8c6a220b}

\begin{DoxyCompactList}\small\item\em Data type\+: unsigned int. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gac984c4b3f0ad353a14679cf39a70ebd7}{\#define \hyperlink{group__Eet__Data__Group_gac984c4b3f0ad353a14679cf39a70ebd7}{E\+E\+T\+\_\+\+T\+\_\+\+U\+L\+O\+N\+G\+\_\+\+L\+O\+N\+G}~10}\label{group__Eet__Data__Group_gac984c4b3f0ad353a14679cf39a70ebd7}

\begin{DoxyCompactList}\small\item\em Data type\+: unsigned long long. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}{\#define \hyperlink{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}{E\+E\+T\+\_\+\+T\+\_\+\+S\+T\+R\+I\+N\+G}~11}\label{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}

\begin{DoxyCompactList}\small\item\em Data type\+: char $\ast$. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga3331b98e4c2a0e7336a0f542e88789bd}{\#define \hyperlink{group__Eet__Data__Group_ga3331b98e4c2a0e7336a0f542e88789bd}{E\+E\+T\+\_\+\+T\+\_\+\+I\+N\+L\+I\+N\+E\+D\+\_\+\+S\+T\+R\+I\+N\+G}~12}\label{group__Eet__Data__Group_ga3331b98e4c2a0e7336a0f542e88789bd}

\begin{DoxyCompactList}\small\item\em Data type\+: char $\ast$ (but compressed inside the resulting eet) \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga9f1da67bf8dca0b19012b3a38e5a1a41}{\#define \hyperlink{group__Eet__Data__Group_ga9f1da67bf8dca0b19012b3a38e5a1a41}{E\+E\+T\+\_\+\+T\+\_\+\+N\+U\+L\+L}~13}\label{group__Eet__Data__Group_ga9f1da67bf8dca0b19012b3a38e5a1a41}

\begin{DoxyCompactList}\small\item\em Data type\+: (void $\ast$) (only use it if you know why) \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gac4e1fc36a3042aec9e90832046994a08}{\#define \hyperlink{group__Eet__Data__Group_gac4e1fc36a3042aec9e90832046994a08}{E\+E\+T\+\_\+\+T\+\_\+\+F32\+P32}~14}\label{group__Eet__Data__Group_gac4e1fc36a3042aec9e90832046994a08}

\begin{DoxyCompactList}\small\item\em Data type\+: fixed point 32.\+32. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gac8050f11d766b6682273c6c250e2c163}{\#define \hyperlink{group__Eet__Data__Group_gac8050f11d766b6682273c6c250e2c163}{E\+E\+T\+\_\+\+T\+\_\+\+F16\+P16}~15}\label{group__Eet__Data__Group_gac8050f11d766b6682273c6c250e2c163}

\begin{DoxyCompactList}\small\item\em Data type\+: fixed point 16.\+16. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga844a1125845d282948fe8081c983975c}{\#define \hyperlink{group__Eet__Data__Group_ga844a1125845d282948fe8081c983975c}{E\+E\+T\+\_\+\+T\+\_\+\+F8\+P24}~16}\label{group__Eet__Data__Group_ga844a1125845d282948fe8081c983975c}

\begin{DoxyCompactList}\small\item\em Data type\+: fixed point 8.\+24. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gacee130040e46778d42d5dc9e9de07909}{E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E}~17
\begin{DoxyCompactList}\small\item\em Data type\+: pointer to Eina\+\_\+\+Value. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga6f7f811187af5c15535ca56c69bd5f7e}{\#define \hyperlink{group__Eet__Data__Group_ga6f7f811187af5c15535ca56c69bd5f7e}{E\+E\+T\+\_\+\+T\+\_\+\+L\+A\+S\+T}~18}\label{group__Eet__Data__Group_ga6f7f811187af5c15535ca56c69bd5f7e}

\begin{DoxyCompactList}\small\item\em Last data type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{\#define \hyperlink{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N}~100}\label{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}

\begin{DoxyCompactList}\small\item\em Unknown group data encoding type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}{\#define \hyperlink{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}{E\+E\+T\+\_\+\+G\+\_\+\+A\+R\+R\+A\+Y}~101}\label{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}

\begin{DoxyCompactList}\small\item\em Fixed size array group type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}{\#define \hyperlink{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}{E\+E\+T\+\_\+\+G\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}~102}\label{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}

\begin{DoxyCompactList}\small\item\em Variable size array group type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gadcfddbc1928d1068eba93326201c6232}{\#define \hyperlink{group__Eet__Data__Group_gadcfddbc1928d1068eba93326201c6232}{E\+E\+T\+\_\+\+G\+\_\+\+L\+I\+S\+T}~103}\label{group__Eet__Data__Group_gadcfddbc1928d1068eba93326201c6232}

\begin{DoxyCompactList}\small\item\em Linked list group type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_gab4cb1f8b97b17e36694fbe2f0ced86ce}{\#define \hyperlink{group__Eet__Data__Group_gab4cb1f8b97b17e36694fbe2f0ced86ce}{E\+E\+T\+\_\+\+G\+\_\+\+H\+A\+S\+H}~104}\label{group__Eet__Data__Group_gab4cb1f8b97b17e36694fbe2f0ced86ce}

\begin{DoxyCompactList}\small\item\em Hash table group type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga52795c9c05702fbcd4e7df2952b492da}{\#define \hyperlink{group__Eet__Data__Group_ga52795c9c05702fbcd4e7df2952b492da}{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+I\+O\+N}~105}\label{group__Eet__Data__Group_ga52795c9c05702fbcd4e7df2952b492da}

\begin{DoxyCompactList}\small\item\em Union group type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga2c61448d5d371152de980526819404dd}{\#define \hyperlink{group__Eet__Data__Group_ga2c61448d5d371152de980526819404dd}{E\+E\+T\+\_\+\+G\+\_\+\+V\+A\+R\+I\+A\+N\+T}~106}\label{group__Eet__Data__Group_ga2c61448d5d371152de980526819404dd}

\begin{DoxyCompactList}\small\item\em Selectable subtype group. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga76f94c1520fc351ad2b847153795b41d}{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D}~107
\begin{DoxyCompactList}\small\item\em Unknown nested group type. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga6f151c2439d3149c7efde702165f88e6}{\#define \hyperlink{group__Eet__Data__Group_ga6f151c2439d3149c7efde702165f88e6}{E\+E\+T\+\_\+\+G\+\_\+\+L\+A\+S\+T}~108}\label{group__Eet__Data__Group_ga6f151c2439d3149c7efde702165f88e6}

\begin{DoxyCompactList}\small\item\em Last group type. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gac35ee01ce34edb6c37ca07d4603f20d8}{E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T}~128
\begin{DoxyCompactList}\small\item\em Other type exist but are reserved for internal purpose. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga61a090586eff90415b429f1017acf8a7}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}~4
\begin{DoxyCompactList}\small\item\em The version of \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} at the time of the distribution of the sources. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga941b1fcd6c6c72221d9390f9a0ed751c}{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}(clas, type)~(\hyperlink{group__Eet__Data__Group_gac1fe86198291a7acb6642053301f317f}{eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}(clas, sizeof ($\ast$(clas)), \# type, sizeof(type)))
\begin{DoxyCompactList}\small\item\em This macro is an helper that set all the parameter of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with stream. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga0bf94c07d8e69cfaac8dd2d615d7542c}{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}(clas, type)~(\hyperlink{group__Eet__Data__Group_ga61af07cced82f787f3c52d52834491c3}{eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}(clas, sizeof ($\ast$(clas)), \# type, sizeof(type)))
\begin{DoxyCompactList}\small\item\em This macro is an helper that set all the parameter of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with file. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C}(edd, struct\+\_\+type, name, member, type)
\begin{DoxyCompactList}\small\item\em Add a basic data element to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B}(edd, struct\+\_\+type, name, member, subtype)
\begin{DoxyCompactList}\small\item\em Add a sub-\/element type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gae89d75a5b3a035161d937aa388f30e17}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D}(edd, struct\+\_\+type, name, member, subtype)
\begin{DoxyCompactList}\small\item\em Add a nested sub-\/element type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T}(edd, struct\+\_\+type, name, member, subtype)
\begin{DoxyCompactList}\small\item\em Add a linked list type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga56b290f4a8d3749daa88134aeb2317fb}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G}(edd, struct\+\_\+type, name, member)
\begin{DoxyCompactList}\small\item\em Add a linked list of string to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gad5e348ead4ba0b441c1e020f9bf23365}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H}(edd, struct\+\_\+type, name, member, subtype)
\begin{DoxyCompactList}\small\item\em Add a hash type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gad5e0db408c74f1cf7b54caa02fef4df1}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G}(edd, struct\+\_\+type, name, member)
\begin{DoxyCompactList}\small\item\em Add a hash of string to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga7866d1986ed8869b52c665cbeb854c8e}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y}(edd, struct\+\_\+type, name, member, type)
\begin{DoxyCompactList}\small\item\em Add an array of basic data elements to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga9b5f2daab54e97f710b108b7d45fb535}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}(edd, struct\+\_\+type, name, member, type)
\begin{DoxyCompactList}\small\item\em Add a variable array of basic data elements to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gabc903baa4d5dc50a98f5e1a68d66fd2b}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y}(edd, struct\+\_\+type, name, member, subtype)
\begin{DoxyCompactList}\small\item\em Add a fixed size array type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga7adad32d2eba76566533353632f00ae4}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}(edd, struct\+\_\+type, name, member, subtype)
\begin{DoxyCompactList}\small\item\em Add a variable size array type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga7425aa544951fa82db3015ce96abedfb}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G}(edd, struct\+\_\+type, name, member)
\begin{DoxyCompactList}\small\item\em Add a variable size array type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga07b711dca3d4bcaa0ccb8ced48341b90}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N}(edd, struct\+\_\+type, name, member, type\+\_\+member, unified\+\_\+type)
\begin{DoxyCompactList}\small\item\em Add an union type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_ga8851a40b130061262a8dd009f0457a65}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T}(edd, struct\+\_\+type, name, member, type\+\_\+member, unified\+\_\+type)
\begin{DoxyCompactList}\small\item\em Add a automatically selectable type to a data descriptor. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gad0daa543d93a64add80961ae5387d45a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G}(unified\+\_\+type, name, subtype)
\begin{DoxyCompactList}\small\item\em Add a mapping to a data descriptor that will be used by union, variant or inherited type. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eet__Data__Group_gaaf153807a88cd2c3483c5c34bb920a95}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C}(unified\+\_\+type, name, basic\+\_\+type)
\begin{DoxyCompactList}\small\item\em Add a mapping of a basic type to a data descriptor that will be used by a union type. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef struct \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor}
\begin{DoxyCompactList}\small\item\em Opaque handle that have information on a type members. \end{DoxyCompactList}\item 
typedef struct \\*
\hyperlink{struct__Eet__Data__Descriptor__Class}{\+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}
\begin{DoxyCompactList}\small\item\em Instructs Eet about memory management for different needs under serialization and parse process. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{group__Eet__Data__Group_gaab1358cb471dce20be9da6febbdf8327}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback} )(void $\ast$h, const char $\ast$k, void $\ast$dt, void $\ast$fdt)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga894af1ef8c006fc48235d8b48755e3d8}{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback} )(size\+\_\+t size)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc. \end{DoxyCompactList}\item 
typedef void($\ast$ \hyperlink{group__Eet__Data__Group_gadc11123034dfc44c5bc31c6f5bdb55fb}{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback} )(void $\ast$mem)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc. \end{DoxyCompactList}\item 
typedef char $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga014b92bba17d33ea41e31ebfd9a23a8b}{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback} )(const char $\ast$str)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc. \end{DoxyCompactList}\item 
typedef void($\ast$ \hyperlink{group__Eet__Data__Group_ga6e1c79f2b15a0315dd33c05d99cb065a}{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback} )(const char $\ast$str)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga4aef6ac18690983e6d608d0844b43e5d}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback} )(void $\ast$l)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga7e6b656ac984d44d0e736655c45982de}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback} )(void $\ast$l, void $\ast$d)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga1a75ebbc7a4d8bab9971974335599b04}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback} )(void $\ast$l)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga97f9bf8be3bcd13699c4890487bba66c}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback} )(void $\ast$l)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free. \end{DoxyCompactList}\item 
typedef void($\ast$ \hyperlink{group__Eet__Data__Group_ga530125fcbeb48fb675d020f51b839151}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback} )(void $\ast$h, \hyperlink{group__Eet__Data__Group_gaab1358cb471dce20be9da6febbdf8327}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback} func, void $\ast$fdt)
\begin{DoxyCompactList}\small\item\em Callback for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga94d8c39d01f0c9064713eeb0a18dc6d2}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback} )(void $\ast$h, const char $\ast$k, void $\ast$d)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add. \end{DoxyCompactList}\item 
typedef void($\ast$ \hyperlink{group__Eet__Data__Group_ga09d99991df39953b4b28de202f3109ab}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback} )(void $\ast$h)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free. \end{DoxyCompactList}\item 
\hypertarget{group__Eet__Data__Group_ga92e369c45bd998906c3aa75ace0918f4}{typedef char $\ast$($\ast$ {\bfseries Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Direct\+\_\+\+Alloc\+\_\+\+Callback} )(const char $\ast$str)}\label{group__Eet__Data__Group_ga92e369c45bd998906c3aa75ace0918f4}

\item 
\hypertarget{group__Eet__Data__Group_ga9001111f98061a6f9a70b4b8b7537598}{typedef void($\ast$ {\bfseries Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Direct\+\_\+\+Free\+\_\+\+Callback} )(const char $\ast$str)}\label{group__Eet__Data__Group_ga9001111f98061a6f9a70b4b8b7537598}

\item 
typedef const char $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_gafd67014abf81fb9ff949f32db811253b}{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback} )(const void $\ast$data, \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} $\ast$unknow)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get. \end{DoxyCompactList}\item 
typedef \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}($\ast$ \hyperlink{group__Eet__Data__Group_gad98f354bc1af39c65c306a2d6905879c}{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback} )(const char $\ast$type, void $\ast$data, \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} unknow)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set. \end{DoxyCompactList}\item 
typedef void $\ast$($\ast$ \hyperlink{group__Eet__Data__Group_ga1782d84edeff89252c1fbaece4244c26}{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback} )(size\+\_\+t size)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc. \end{DoxyCompactList}\item 
typedef void($\ast$ \hyperlink{group__Eet__Data__Group_ga466313985fc95944629db2a1d2edf08b}{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback} )(void $\ast$mem)
\begin{DoxyCompactList}\small\item\em Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{group__Eina__Types__Group_gad5b2116495471db12a34bab9a34edfaa}{E\+I\+N\+A\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+E\+D} \hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \\*
\hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$ \hyperlink{group__Eet__Data__Group_ga43095e92354c81c8ff3aafcdcbcb6b69}{eet\+\_\+data\+\_\+descriptor\+\_\+new} (const char $\ast$name, int size, \hyperlink{group__Eet__Data__Group_ga4aef6ac18690983e6d608d0844b43e5d}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback} func\+\_\+list\+\_\+next, \hyperlink{group__Eet__Data__Group_ga7e6b656ac984d44d0e736655c45982de}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback} func\+\_\+list\+\_\+append, \hyperlink{group__Eet__Data__Group_ga1a75ebbc7a4d8bab9971974335599b04}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback} func\+\_\+list\+\_\+data, \hyperlink{group__Eet__Data__Group_ga97f9bf8be3bcd13699c4890487bba66c}{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback} func\+\_\+list\+\_\+free, \hyperlink{group__Eet__Data__Group_ga530125fcbeb48fb675d020f51b839151}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback} func\+\_\+hash\+\_\+foreach, \hyperlink{group__Eet__Data__Group_ga94d8c39d01f0c9064713eeb0a18dc6d2}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback} func\+\_\+hash\+\_\+add, \hyperlink{group__Eet__Data__Group_ga09d99991df39953b4b28de202f3109ab}{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback} func\+\_\+hash\+\_\+free)
\begin{DoxyCompactList}\small\item\em Create a new empty data structure descriptor. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$ \hyperlink{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new} (const \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$eddc)
\begin{DoxyCompactList}\small\item\em This function creates a new data descriptor and returns a handle to the new data descriptor. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$ \hyperlink{group__Eet__Data__Group_ga2a7251edf1f60ced86c4860207331bb6}{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new} (const \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$eddc)
\begin{DoxyCompactList}\small\item\em This function creates a new data descriptor and returns a handle to the new data descriptor. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eet__Data__Group_gac1fe86198291a7acb6642053301f317f}{eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set} (\hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$eddc, unsigned int eddc\+\_\+size, const char $\ast$name, int size)
\begin{DoxyCompactList}\small\item\em This function is an helper that set all the parameters of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with a stream. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eet__Data__Group_ga61af07cced82f787f3c52d52834491c3}{eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set} (\hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$eddc, unsigned int eddc\+\_\+size, const char $\ast$name, int size)
\begin{DoxyCompactList}\small\item\em This function is an helper that set all the parameter of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with a file. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} void \hyperlink{group__Eet__Data__Group_ga3e2b601720973d0e1f4683768a593c4d}{eet\+\_\+data\+\_\+descriptor\+\_\+free} (\hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd)
\begin{DoxyCompactList}\small\item\em This function frees a data descriptor when it is not needed anymore. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} const char $\ast$ \hyperlink{group__Eet__Data__Group_ga3e5efcd8d71872a7c79591af921c60b5}{eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get} (const \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd)
\begin{DoxyCompactList}\small\item\em This function returns the name of a data descriptor. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} void \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add} (\hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd, const char $\ast$name, int type, int group\+\_\+type, int offset, int count, const char $\ast$counter\+\_\+name, \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$subtype)
\begin{DoxyCompactList}\small\item\em This function is an internal used by macros. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} void $\ast$ \hyperlink{group__Eet__Data__Group_ga4d1807cbbc448304f22a8808318a3429}{eet\+\_\+data\+\_\+read} (\hyperlink{group__Eet__File__Group_ga8d9779184a9870c1a225f1f40c76e8a7}{Eet\+\_\+\+File} $\ast$ef, \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd, const char $\ast$name)
\begin{DoxyCompactList}\small\item\em Read a data structure from an eet file and decodes it. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} int \hyperlink{group__Eet__Data__Group_gac66d1c49e3490bc5d803982d833ff8aa}{eet\+\_\+data\+\_\+write} (\hyperlink{group__Eet__File__Group_ga8d9779184a9870c1a225f1f40c76e8a7}{Eet\+\_\+\+File} $\ast$ef, \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd, const char $\ast$name, const void $\ast$data, int compress)
\begin{DoxyCompactList}\small\item\em Write a data structure from memory and store in an eet file. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} int \hyperlink{group__Eet__Data__Group_ga4160a247c086955b4734af896b6fd270}{eet\+\_\+data\+\_\+text\+\_\+dump} (const void $\ast$data\+\_\+in, int size\+\_\+in, Eet\+\_\+\+Dump\+\_\+\+Callback dumpfunc, void $\ast$dumpdata)
\begin{DoxyCompactList}\small\item\em Dump an eet encoded data structure into ascii text. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} void $\ast$ \hyperlink{group__Eet__Data__Group_ga7ec4079e08e657a80bee05bd12e1b972}{eet\+\_\+data\+\_\+text\+\_\+undump} (const char $\ast$text, int textlen, int $\ast$size\+\_\+ret)
\begin{DoxyCompactList}\small\item\em Take an ascii encoding from \hyperlink{group__Eet__Data__Group_ga4160a247c086955b4734af896b6fd270}{eet\+\_\+data\+\_\+text\+\_\+dump()} and re-\/encode in binary. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} int \hyperlink{group__Eet__Data__Group_ga33b90cc41fe0e6fffc6b4fb0c8c62a99}{eet\+\_\+data\+\_\+dump} (\hyperlink{group__Eet__File__Group_ga8d9779184a9870c1a225f1f40c76e8a7}{Eet\+\_\+\+File} $\ast$ef, const char $\ast$name, Eet\+\_\+\+Dump\+\_\+\+Callback dumpfunc, void $\ast$dumpdata)
\begin{DoxyCompactList}\small\item\em Dump an eet encoded data structure from an eet file into ascii text. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} int \hyperlink{group__Eet__Data__Group_gafb1d3207c31e349ed184645e21aa838d}{eet\+\_\+data\+\_\+undump} (\hyperlink{group__Eet__File__Group_ga8d9779184a9870c1a225f1f40c76e8a7}{Eet\+\_\+\+File} $\ast$ef, const char $\ast$name, const char $\ast$text, int textlen, int compress)
\begin{DoxyCompactList}\small\item\em Take an ascii encoding from \hyperlink{group__Eet__Data__Group_ga33b90cc41fe0e6fffc6b4fb0c8c62a99}{eet\+\_\+data\+\_\+dump()} and re-\/encode in binary. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} void $\ast$ \hyperlink{group__Eet__Data__Group_gaad95530fdaec27047c41a5ceace5c231}{eet\+\_\+data\+\_\+descriptor\+\_\+decode} (\hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd, const void $\ast$data\+\_\+in, int size\+\_\+in)
\begin{DoxyCompactList}\small\item\em Decode a data structure from an arbitrary location in memory. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} void $\ast$ \hyperlink{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{eet\+\_\+data\+\_\+descriptor\+\_\+encode} (\hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$edd, const void $\ast$data\+\_\+in, int $\ast$size\+\_\+ret)
\begin{DoxyCompactList}\small\item\em Encode a dsata struct to memory and return that encoded data. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
Convenience functions to serialize and parse complex data structures to binary blobs. 

While Eet core just handles binary blobs, it is often required to save some structured data of different types, such as strings, integers, lists, hashes and so on.

Eet can serialize and then parse data types given some construction instructions. These are defined in two levels\+:


\begin{DoxyItemize}
\item \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} to tell generic memory handling, such as the size of the type, how to allocate memory, strings, lists, hashes and so on.
\item \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor} to tell inside such type, the members and their offsets inside the memory blob, their types and names. These members can be simple types or other \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor}, allowing hierarchical types to be defined.
\end{DoxyItemize}

Given that C provides no introspection, this process can be quite cumbersome, so we provide lots of macros and convenience functions to aid creating the types.

We make now a quick overview of some of the most commonly used elements of this part of the library. A simple example of a configuration system will work as a somewhat real life example that is still simple enough to follow. Only the relevant sections will be shown here, but you can get the full code \hyperlink{eet-data-simple_8c-example}{here}.

Ignoring the included headers, we'll begin by defining our configuration struct.  
\begin{DoxyCodeInclude}
\textcolor{keyword}{typedef} \textcolor{keyword}{struct}
\{
   \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} version; \textcolor{comment}{// it is recommended to use versioned configuration!}
   \textcolor{keyword}{const} \textcolor{keywordtype}{char}  *name;
   \textcolor{keywordtype}{int}          id;
   \textcolor{keywordtype}{int}          not\_saved\_value; \textcolor{comment}{// example of not saved data inside!}
   \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}    enabled;
\} My\_Conf\_Type;

\end{DoxyCodeInclude}


When using Eet, you don't think in matters of what data the program needs to run and which you would like to store. It's all the same and if it makes more sense to keep them together, it's perfectly fine to do so. At the time of telling Eet how your data is comprised you can leave out the things that are runtime only and let Eet take care of the rest for you.

The key used to store the config follows, as well as the variable used to store our data descriptor. This last one is very important. It's the one thing that Eet will use to identify your data, both at the time of writing it to the file and when loading from it. 
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} MY\_CONF\_FILE\_ENTRY[] = \textcolor{stringliteral}{"config"};
\textcolor{keyword}{static} \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\_Data\_Descriptor} *\_my\_conf\_descriptor;

\end{DoxyCodeInclude}


Now we'll see how to create this descriptor, so Eet knows how to handle our data later on. Begin our function by declaring an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class, which is used to create the actual descriptor. This class contains the name of our data type, its size and several functions that dictate how Eet should handle memory to allocate the necessary bits to bring our data to life. You, as a user, will very hardly set this class' contents directly. The most common scenario is to use one of the provided macros that set it using the Eina data types, so that's what we'll be doing across all our examples. 
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_my\_conf\_descriptor\_init(\textcolor{keywordtype}{void})
\{
   \hyperlink{struct__Eet__Data__Descriptor__Class}{Eet\_Data\_Descriptor\_Class} eddc;

   \textcolor{comment}{// The class describe the functions to use to create the type and its}
   \textcolor{comment}{// full allocated size.}
   \textcolor{comment}{//}
   \textcolor{comment}{// Eina types are very convenient, so use them to create the descriptor,}
   \textcolor{comment}{// so we get eina\_list,  eina\_hash and eina\_stringshare automatically!}
   \textcolor{comment}{//}
   \textcolor{comment}{// The STREAM variant is better for configuration files as the values}
   \textcolor{comment}{// will likely change a lot.}
   \textcolor{comment}{//}
   \textcolor{comment}{// The other variant, FILE, is good for caches and things that are just}
   \textcolor{comment}{// appended, but needs to take care when changing strings and files must}
   \textcolor{comment}{// be kept open so mmap()ed strings will be kept alive.}
   \hyperlink{group__Eet__Data__Group_ga941b1fcd6c6c72221d9390f9a0ed751c}{EET\_EINA\_STREAM\_DATA\_DESCRIPTOR\_CLASS\_SET}(&eddc, My\_Conf\_Type);
   \_my\_conf\_descriptor = \hyperlink{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}{eet\_data\_descriptor\_stream\_new}(&eddc);

\end{DoxyCodeInclude}


Now that we have our descriptor, we need to make it describe something. We do so by telling it which members of our struct we want it to know about and their types. The \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add()} function takes care of this, but it's too cumbersome for normal use, so several macros are provided that make it easier to handle. Even with them, however, code can get very repetitive and it's not uncommon to define custom macros using them to save on typing. 
\begin{DoxyCodeInclude}
\textcolor{preprocessor}{#define MY\_CONF\_ADD\_BASIC(member, eet\_type) \(\backslash\)}
\textcolor{preprocessor}{  EET\_DATA\_DESCRIPTOR\_ADD\_BASIC             \(\backslash\)}
\textcolor{preprocessor}{    (\_my\_conf\_descriptor, My\_Conf\_Type, # member, member, eet\_type)}

   MY\_CONF\_ADD\_BASIC(version, \hyperlink{group__Eet__Data__Group_gacf6a3c9f06e10e20be5b02cd8c6a220b}{EET\_T\_UINT});
   MY\_CONF\_ADD\_BASIC(name, \hyperlink{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}{EET\_T\_STRING});
   MY\_CONF\_ADD\_BASIC(\textcolor{keywordtype}{id}, \hyperlink{group__Eet__Data__Group_ga4e196733795867f14c6e387af7287baa}{EET\_T\_INT});
   MY\_CONF\_ADD\_BASIC(enabled, \hyperlink{group__Eet__Data__Group_ga09a1341cc158fda0ba60ad2386ecd795}{EET\_T\_UCHAR});

\textcolor{preprocessor}{#undef MY\_CONF\_ADD\_BASIC}
\textcolor{preprocessor}{\} }\textcolor{comment}{/* \_my\_conf\_descriptor\_init */}\textcolor{preprocessor}{}

\end{DoxyCodeInclude}


Now our descriptor knows about the parts of our structure that we are interesting in saving. You can see that not all of them are there, yet Eet will find those that need saving and do the right thing. When loading our data, any non-\/described fields in the structure will be zeroed, so there's no need to worry about garbage memory in them. Refer to the documentation of \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C} to understand what our macro does.

We are done with our descriptor init function and it's proper to have the relevant shutdown. Proper coding guidelines indiciate that all memory allocated should be freed when the program ends, and since you will most likely keep your descriptor around for the life or your application, it's only right to free it at the end. 
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_my\_conf\_descriptor\_shutdown(\textcolor{keywordtype}{void})
\{
   \hyperlink{group__Eet__Data__Group_ga3e2b601720973d0e1f4683768a593c4d}{eet\_data\_descriptor\_free}(\_my\_conf\_descriptor);
\} \textcolor{comment}{/* \_my\_conf\_descriptor\_shutdown */}

\end{DoxyCodeInclude}


Not listed here, but included in the full example are functions to create a blank configuration and free it. The first one will only be used when no file exists to load from, or nothing is found in it, but the latter is used regardless of where our data comes from. Unless you are reading direct data from the Eet file, you will be in charge of freeing anything loaded from it.

Now it's time to look at how we can load our config from some file. Begin by opening the Eet file normally. 
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} My\_Conf\_Type *
\_my\_conf\_new(\textcolor{keywordtype}{void})
\{
   My\_Conf\_Type *my\_conf = calloc(1, \textcolor{keyword}{sizeof}(My\_Conf\_Type));
   \textcolor{keywordflow}{if} (!my\_conf)
     \{
        fprintf(stderr, \textcolor{stringliteral}{"ERROR: could not calloc My\_Conf\_Type\(\backslash\)n"});
        \textcolor{keywordflow}{return} NULL;
     \}

\end{DoxyCodeInclude}


And now we need to read the data from the file and decode it using our descriptor. Fortunately, that's all done in one single step. 
\begin{DoxyCodeInclude}

   my\_conf->version = 0x112233;
   my\_conf->enabled = \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE};
   \textcolor{keywordflow}{return} my\_conf;
\} \textcolor{comment}{/* \_my\_conf\_new */}

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_my\_conf\_free(My\_Conf\_Type *my\_conf)
\{
   \hyperlink{group__Eina__Stringshare__Group_ga4453d2aff2b325c7b45048f30df9b1f5}{eina\_stringshare\_del}(my\_conf->name);
   free(my\_conf);
\} \textcolor{comment}{/* \_my\_conf\_free */}

\textcolor{keyword}{static} My\_Conf\_Type *
\_my\_conf\_load(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *filename)
\{
   My\_Conf\_Type *my\_conf;
   \hyperlink{group__Eet__File__Group_ga8d9779184a9870c1a225f1f40c76e8a7}{Eet\_File} *ef = \hyperlink{group__Eet__File__Group_ga5f55956b860aa2c77af9b1a880c4c256}{eet\_open}(filename, \hyperlink{group__Eet__File__Group_ggaa8e1a7af50fefaf15eb2f69543d24998a416f7e9a76b8131a44bbeedb13060c81}{EET\_FILE\_MODE\_READ});
   \textcolor{keywordflow}{if} (!ef)
     \{
        fprintf(stderr, \textcolor{stringliteral}{"ERROR: could not open '%s' for read\(\backslash\)n"}, filename);
        \textcolor{keywordflow}{return} NULL;
     \}

   my\_conf = \hyperlink{group__Eet__Data__Group_ga4d1807cbbc448304f22a8808318a3429}{eet\_data\_read}(ef, \_my\_conf\_descriptor, MY\_CONF\_FILE\_ENTRY);
   \textcolor{keywordflow}{if} (!my\_conf)
     \textcolor{keywordflow}{goto} end;

\end{DoxyCodeInclude}


And that's it for all Eet cares about. But since we are dealing with a common case, as is save and load of user configurations, the next fragment of code shows why we have a version field in our struct, and how you can use it to load older configuration files and update them as needed. 
\begin{DoxyCodeInclude}

   \textcolor{keywordflow}{if} (my\_conf->version < 0x112233)
     \{
        fprintf(stderr,
                \textcolor{stringliteral}{"WARNING: version %#x was too old, upgrading it to %#x\(\backslash\)n"},
                my\_conf->version, 0x112233);

        my\_conf->version = 0x112233;
        my\_conf->enabled = \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE};
     \}

\end{DoxyCodeInclude}


Finally, close the file and return the newly loaded config data. 
\begin{DoxyCodeInclude}

end:
   \hyperlink{group__Eet__File__Group_ga1675fef1f6012c1e02ae313d13dc3e03}{eet\_close}(ef);
   \textcolor{keywordflow}{return} my\_conf;
\} \textcolor{comment}{/* \_my\_conf\_load */}

\end{DoxyCodeInclude}


Saving data is just as easy. The full version of the following function includes code to save to a temporary file first, so you can be sure not to lose all your data in the case of a failure mid-\/writing. You can look at it \hyperlink{eet-data-simple_8c-example}{here}. 
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}
\_my\_conf\_save(\textcolor{keyword}{const} My\_Conf\_Type *my\_conf,
              \textcolor{keyword}{const} \textcolor{keywordtype}{char}         *filename)
\{
   \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool} ret;
   ef = \hyperlink{group__Eet__File__Group_ga5f55956b860aa2c77af9b1a880c4c256}{eet\_open}(tmp, \hyperlink{group__Eet__File__Group_ggaa8e1a7af50fefaf15eb2f69543d24998a8f395f56fba48be007c65be51d799ee9}{EET\_FILE\_MODE\_WRITE});
   \textcolor{keywordflow}{if} (!ef)
     \{
        fprintf(stderr, \textcolor{stringliteral}{"ERROR: could not open '%s' for write\(\backslash\)n"}, tmp);
        \textcolor{keywordflow}{return} \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE};
     \}

   ret = \hyperlink{group__Eet__Data__Group_gac66d1c49e3490bc5d803982d833ff8aa}{eet\_data\_write}
       (ef, \_my\_conf\_descriptor, MY\_CONF\_FILE\_ENTRY, my\_conf, \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE});
   \hyperlink{group__Eet__File__Group_ga1675fef1f6012c1e02ae313d13dc3e03}{eet\_close}(ef);
   \textcolor{keywordflow}{return} ret;
\} \textcolor{comment}{/* \_my\_conf\_save */}

\end{DoxyCodeInclude}


To close, our main function, which doesn't do much. Just take some arguments from the command line with the name of the file to load and another one where to save again. If input file doesn't exist, a new config structure will be created and saved to our output file. 
\begin{DoxyCodeInclude}

\end{DoxyCodeInclude}


The following is a list of more advanced and detailed examples. \begin{DoxyItemize}
\item \hyperlink{eet_data_nested_example}{Nested structures and Eet Data Descriptors} \item \hyperlink{eet_data_file_descriptor}{Advanced use of Eet Data Descriptors} \item \hyperlink{Example_Eet_Data_File_Descriptor_02}{File descriptor data example, with Eet unions and variants} \item \hyperlink{Example_Eet_Data_Cipher_Decipher}{Eet data cipher/decipher example} \end{DoxyItemize}


\subsection{Macro Definition Documentation}
\hypertarget{group__Eet__Data__Group_gacee130040e46778d42d5dc9e9de07909}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E@{E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E}}
\index{E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E@{E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+T\+\_\+\+V\+A\+L\+U\+E~17}}\label{group__Eet__Data__Group_gacee130040e46778d42d5dc9e9de07909}


Data type\+: pointer to Eina\+\_\+\+Value. 

\begin{DoxySince}{Since}
1.\+8 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_ga76f94c1520fc351ad2b847153795b41d}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D@{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D}}
\index{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D@{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N\+\_\+\+N\+E\+S\+T\+E\+D~107}}\label{group__Eet__Data__Group_ga76f94c1520fc351ad2b847153795b41d}


Unknown nested group type. 

\begin{DoxySince}{Since}
1.\+8 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_gac35ee01ce34edb6c37ca07d4603f20d8}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T@{E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T}}
\index{E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T@{E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+I\+\_\+\+L\+I\+M\+I\+T~128}}\label{group__Eet__Data__Group_gac35ee01ce34edb6c37ca07d4603f20d8}


Other type exist but are reserved for internal purpose. 

\hypertarget{group__Eet__Data__Group_ga61a090586eff90415b429f1017acf8a7}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N~4}}\label{group__Eet__Data__Group_ga61a090586eff90415b429f1017acf8a7}


The version of \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} at the time of the distribution of the sources. 

One should define this to its version member so it is compatible with abi changes, or at least will not crash with them. \begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}


Referenced by eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set(), and eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set().

\hypertarget{group__Eet__Data__Group_ga941b1fcd6c6c72221d9390f9a0ed751c}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T@{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}}
\index{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T@{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T(
\begin{DoxyParamCaption}
\item[{}]{clas, }
\item[{}]{type}
\end{DoxyParamCaption}
)~({\bf eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}(clas, sizeof ($\ast$(clas)), \# type, sizeof(type)))}}\label{group__Eet__Data__Group_ga941b1fcd6c6c72221d9390f9a0ed751c}


This macro is an helper that set all the parameter of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with stream. 


\begin{DoxyParams}{Parameters}
{\em clas} & The Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class you want to set. \\
\hline
{\em type} & The type of the structure described by this class. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
E\+I\+N\+A\+\_\+\+T\+R\+U\+E if the structure was correctly set (The only reason that could make it fail is if you did give wrong parameter).
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new} 
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+2.\+3 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-nested_8c-example}{eet-\/data-\/nested.\+c}, and \hyperlink{eet-data-simple_8c-example}{eet-\/data-\/simple.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_ga0bf94c07d8e69cfaac8dd2d615d7542c}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T@{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}}
\index{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T@{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T(
\begin{DoxyParamCaption}
\item[{}]{clas, }
\item[{}]{type}
\end{DoxyParamCaption}
)~({\bf eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}(clas, sizeof ($\ast$(clas)), \# type, sizeof(type)))}}\label{group__Eet__Data__Group_ga0bf94c07d8e69cfaac8dd2d615d7542c}


This macro is an helper that set all the parameter of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with file. 


\begin{DoxyParams}{Parameters}
{\em clas} & The Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class you want to set. \\
\hline
{\em type} & The type of the structure described by this class. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
E\+I\+N\+A\+\_\+\+T\+R\+U\+E if the structure was correctly set (The only reason that could make it fail is if you did give wrong parameter).
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_ga2a7251edf1f60ced86c4860207331bb6}{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new} 
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+2.\+3 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}, and \hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{type}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                      \(\backslash\)
       struct\_type \_\_\_ett;                                                  \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, type, 
      \hyperlink{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{EET\_G\_UNKNOWN},      \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -        \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, NULL);            \(\backslash\)
    \} \textcolor{keywordflow}{while}(0)
\end{DoxyCode}


Add a basic data element to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em type} & The type of the member to encode.\\
\hline
\end{DoxyParams}
This macro is a convenience macro provided to add a member to the data descriptor {\ttfamily edd}. The type of the structure is provided as the {\ttfamily struct\+\_\+type} parameter (for example\+: struct my\+\_\+struct). The {\ttfamily name} parameter defines a string that will be used to uniquely name that member of the struct (it is suggested to use the struct member itself). The {\ttfamily member} parameter is the actual struct member itself (for example\+: values), and {\ttfamily type} is the basic data type of the member which must be one of\+: E\+E\+T\+\_\+\+T\+\_\+\+C\+H\+A\+R, E\+E\+T\+\_\+\+T\+\_\+\+S\+H\+O\+R\+T, E\+E\+T\+\_\+\+T\+\_\+\+I\+N\+T, E\+E\+T\+\_\+\+T\+\_\+\+L\+O\+N\+G\+\_\+\+L\+O\+N\+G, E\+E\+T\+\_\+\+T\+\_\+\+F\+L\+O\+A\+T, E\+E\+T\+\_\+\+T\+\_\+\+D\+O\+U\+B\+L\+E, E\+E\+T\+\_\+\+T\+\_\+\+U\+C\+H\+A\+R, E\+E\+T\+\_\+\+T\+\_\+\+U\+S\+H\+O\+R\+T, E\+E\+T\+\_\+\+T\+\_\+\+U\+I\+N\+T, E\+E\+T\+\_\+\+T\+\_\+\+U\+L\+O\+N\+G\+\_\+\+L\+O\+N\+G or E\+E\+T\+\_\+\+T\+\_\+\+S\+T\+R\+I\+N\+G.

\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                         \(\backslash\)
       struct\_type \_\_\_ett;                                                     \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{EET\_G\_UNKNOWN}, \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -           \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                   \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, subtype);            \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a sub-\/element type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em subtype} & The type of sub-\/type struct to add.\\
\hline
\end{DoxyParams}
This macro lets you easily add a sub-\/type (a struct that's pointed to by this one). All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, with the {\ttfamily subtype} being the exception. This must be the data descriptor of the struct that is pointed to by this element.

\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_gae89d75a5b3a035161d937aa388f30e17}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B\+\_\+\+N\+E\+S\+T\+E\+D(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gae89d75a5b3a035161d937aa388f30e17}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                         \(\backslash\)
       struct\_type \_\_\_ett;                                                     \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_ga76f94c1520fc351ad2b847153795b41d}{EET\_G\_UNKNOWN\_NESTED}, \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -           \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                   \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, subtype);            \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a nested sub-\/element type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em subtype} & The type of sub-\/type struct to add.\\
\hline
\end{DoxyParams}
This macro lets you easily add a sub-\/type\+: a struct that is nested into this one. If your data is pointed by this element instead of being nested, you should use \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()}. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()}.

\begin{DoxySince}{Since}
1.\+8.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                        \(\backslash\)
       struct\_type \_\_\_ett;                                                    \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_gadcfddbc1928d1068eba93326201c6232}{EET\_G\_LIST},   \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -          \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                  \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, subtype);           \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a linked list type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em subtype} & The type of linked list member to add.\\
\hline
\end{DoxyParams}
This macro lets you easily add a linked list of other data types. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, with the {\ttfamily subtype} being the exception. This must be the data descriptor of the element that is in each member of the linked list to be stored.

\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}, \hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}, and \hyperlink{eet-data-nested_8c-example}{eet-\/data-\/nested.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_ga56b290f4a8d3749daa88134aeb2317fb}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T\+\_\+\+S\+T\+R\+I\+N\+G(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga56b290f4a8d3749daa88134aeb2317fb}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                      \(\backslash\)
       struct\_type \_\_\_ett;                                                  \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}{EET\_T\_STRING}, \hyperlink{group__Eet__Data__Group_gadcfddbc1928d1068eba93326201c6232}{EET\_G\_LIST}, \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -        \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, NULL);            \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a linked list of string to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded.\\
\hline
\end{DoxyParams}
This macro lets you easily add a linked list of char $\ast$. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}.

\begin{DoxySince}{Since}
1.\+5.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_gad5e348ead4ba0b441c1e020f9bf23365}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gad5e348ead4ba0b441c1e020f9bf23365}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                        \(\backslash\)
       struct\_type \_\_\_ett;                                                    \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_gab4cb1f8b97b17e36694fbe2f0ced86ce}{EET\_G\_HASH},   \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -          \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                  \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, subtype);           \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a hash type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em subtype} & The type of hash member to add.\\
\hline
\end{DoxyParams}
This macro lets you easily add a hash of other data types. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, with the {\ttfamily subtype} being the exception. This must be the data descriptor of the element that is in each member of the hash to be stored. The hash keys must be strings.

\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_gad5e0db408c74f1cf7b54caa02fef4df1}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H\+\_\+\+S\+T\+R\+I\+N\+G(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gad5e0db408c74f1cf7b54caa02fef4df1}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                      \(\backslash\)
       struct\_type \_\_\_ett;                                                  \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}{EET\_T\_STRING}, \hyperlink{group__Eet__Data__Group_gab4cb1f8b97b17e36694fbe2f0ced86ce}{EET\_G\_HASH}, \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -        \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                \(\backslash\)
                                       0, \textcolor{comment}{/* 0,  */} NULL, NULL);            \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a hash of string to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded.\\
\hline
\end{DoxyParams}
This macro lets you easily add a hash of string elements. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gad5e348ead4ba0b441c1e020f9bf23365}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H()}.

\begin{DoxySince}{Since}
1.\+3.\+4 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_ga7866d1986ed8869b52c665cbeb854c8e}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+A\+R\+R\+A\+Y(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{type}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga7866d1986ed8869b52c665cbeb854c8e}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                            \(\backslash\)
       struct\_type \_\_\_ett;                                                        
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, type, 
      \hyperlink{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}{EET\_G\_ARRAY},              \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -              \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                      \(\backslash\)
                                       \textcolor{keyword}{sizeof}(\_\_\_ett.member) /                    \(\backslash\)
                                       \textcolor{keyword}{sizeof}(\_\_\_ett.member[0]),                  \(\backslash\)
                                       NULL, NULL);                               \(\backslash\)
    \} \textcolor{keywordflow}{while}(0)
\end{DoxyCode}


Add an array of basic data elements to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em type} & The type of the member to encode.\\
\hline
\end{DoxyParams}
This macro lets you easily add a fixed size array of basic data types. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}. The array must be defined with a fixed size in the declaration of the struct containing it.

\begin{DoxySince}{Since}
1.\+5.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_ga9b5f2daab54e97f710b108b7d45fb535}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{type}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga9b5f2daab54e97f710b108b7d45fb535}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                                \(\backslash\)
       struct\_type \_\_\_ett;                                                            
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, type, 
      \hyperlink{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}{EET\_G\_VAR\_ARRAY},              \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -                  \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                          \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member ## \_count)) -        \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                          \(\backslash\)
                                       NULL,                                          \(\backslash\)
                                       NULL);                                         \(\backslash\)
    \} \textcolor{keywordflow}{while}(0)
\end{DoxyCode}


Add a variable array of basic data elements to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em type} & The type of the member to encode.\\
\hline
\end{DoxyParams}
This macro lets you easily add a variable size array of basic data types. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}. This assumes you have a struct member (of type E\+E\+T\+\_\+\+T\+\_\+\+I\+N\+T) called member\+\_\+count (note the \+\_\+count appended to the member) that holds the number of items in the array. This array will be allocated separately to the struct it is in.

\begin{DoxySince}{Since}
1.\+6.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_gabc903baa4d5dc50a98f5e1a68d66fd2b}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+A\+R\+R\+A\+Y(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gabc903baa4d5dc50a98f5e1a68d66fd2b}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                           \(\backslash\)
       struct\_type \_\_\_ett;                                                       
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}{EET\_G\_ARRAY},     \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -             \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                     \(\backslash\)
                                       \textcolor{comment}{/* 0,  */} \textcolor{keyword}{sizeof}(\_\_\_ett.member) /         \(\backslash\)
                                       \textcolor{keyword}{sizeof}(\_\_\_ett.member[0]), NULL, subtype); \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a fixed size array type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em subtype} & The type of hash member to add.\\
\hline
\end{DoxyParams}
This macro lets you easily add a fixed size array of other data types. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, with the {\ttfamily subtype} being the exception. This must be the data descriptor of the element that is in each member of the array to be stored. The array must be defined with a fixed size in the declaration of the struct containing it.

\begin{DoxySince}{Since}
1.\+0.\+2 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_ga7adad32d2eba76566533353632f00ae4}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga7adad32d2eba76566533353632f00ae4}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                             \(\backslash\)
       struct\_type \_\_\_ett;                                                         
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd,                          
                    \(\backslash\)
                                       name,                                       \(\backslash\)
                                       \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW},                               \(\backslash\)
                                       \hyperlink{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}{EET\_G\_VAR\_ARRAY},                            \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -               \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                       \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member ## \_count)) -     \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                       \(\backslash\)
                                       \textcolor{comment}{/* 0,  */} NULL,                             \(\backslash\)
                                       subtype);                                   \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a variable size array type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em subtype} & The type of hash member to add.\\
\hline
\end{DoxyParams}
This macro lets you easily add a variable size array of other data types. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, with the {\ttfamily subtype} being the exception. This must be the data descriptor of the element that is in each member of the array to be stored. This assumes you have a struct member (of type E\+E\+T\+\_\+\+T\+\_\+\+I\+N\+T) called member\+\_\+count (note the \+\_\+count appended to the member) that holds the number of items in the array. This array will be allocated separately to the struct it is in.

\begin{DoxySince}{Since}
1.\+0.\+2 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_ga7425aa544951fa82db3015ce96abedfb}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+S\+T\+R\+I\+N\+G(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga7425aa544951fa82db3015ce96abedfb}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                           \(\backslash\)
       struct\_type \_\_\_ett;                                                       
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd,                          
                  \(\backslash\)
                                       name,                                     \(\backslash\)
                                       \hyperlink{group__Eet__Data__Group_ga0d2cf409bf3f151156d74d18ac59e3d1}{EET\_T\_STRING},                             \(\backslash\)
                                       \hyperlink{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}{EET\_G\_VAR\_ARRAY},                          \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -             \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                     \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member ## \_count)) -   \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                     \(\backslash\)
                                       \textcolor{comment}{/* 0,  */} NULL,                           \(\backslash\)
                                       NULL);                                    \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a variable size array type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded.\\
\hline
\end{DoxyParams}
This macro lets you easily add a variable size array of strings. All the parameters are the same as for \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}.

\begin{DoxySince}{Since}
1.\+4.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_ga07b711dca3d4bcaa0ccb8ced48341b90}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+U\+N\+I\+O\+N(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{type\+\_\+member, }
\item[{}]{unified\+\_\+type}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga07b711dca3d4bcaa0ccb8ced48341b90}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                                           \(\backslash\)
       struct\_type \_\_\_ett;                                                                       
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_ga52795c9c05702fbcd4e7df2952b492da}{EET\_G\_UNION},                     \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -                             \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                                     \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.type\_member)) -                        \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                                     \(\backslash\)
                                       NULL, unified\_type);                                      \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add an union type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em type\+\_\+member} & The member that give hints on what is in the union. \\
\hline
{\em unified\+\_\+type} & Describe all possible type the union could handle.\\
\hline
\end{DoxyParams}
This macro lets you easily add an union with a member that specify what is inside. The {\ttfamily unified\+\_\+type} is an Eet\+\_\+\+Data\+\_\+\+Descriptor, but only the entry that match the name returned by type\+\_\+get will be used for each serialized data. The type\+\_\+get and type\+\_\+set callback of unified\+\_\+type should be defined.

\begin{DoxySince}{Since}
1.\+2.\+4
\end{DoxySince}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_ga8851a40b130061262a8dd009f0457a65}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+V\+A\+R\+I\+A\+N\+T(
\begin{DoxyParamCaption}
\item[{}]{edd, }
\item[{}]{struct\+\_\+type, }
\item[{}]{name, }
\item[{}]{member, }
\item[{}]{type\+\_\+member, }
\item[{}]{unified\+\_\+type}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga8851a40b130061262a8dd009f0457a65}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{do} \{                                                                                             \(\backslash\)
       struct\_type \_\_\_ett;                                                                         
      \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\(\backslash\)}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{       eet\_data\_descriptor\_element\_add}(edd, name, 
      \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW}, \hyperlink{group__Eet__Data__Group_ga2c61448d5d371152de980526819404dd}{EET\_G\_VARIANT},                     \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.member)) -                               \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                                       \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett.type\_member)) -                          \(\backslash\)
                                       (\textcolor{keywordtype}{char} *)(& (\_\_\_ett)),                                       \(\backslash\)
                                       NULL, unified\_type);                                        \(\backslash\)
    \} \textcolor{keywordflow}{while} (0)
\end{DoxyCode}


Add a automatically selectable type to a data descriptor. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to add the type to. \\
\hline
{\em struct\+\_\+type} & The type of the struct. \\
\hline
{\em name} & The string name to use to encode/decode this member (must be a constant global and never change). \\
\hline
{\em member} & The struct member itself to be encoded. \\
\hline
{\em type\+\_\+member} & The member that give hints on what is in the union. \\
\hline
{\em unified\+\_\+type} & Describe all possible type the union could handle.\\
\hline
\end{DoxyParams}
This macro lets you easily define what the content of {\ttfamily member} points to depending of the content of {\ttfamily type\+\_\+member}. The type\+\_\+get and type\+\_\+set callback of unified\+\_\+type should be defined. If the the type is not know at the time of restoring it, eet will still call type\+\_\+set of {\ttfamily unified\+\_\+type} but the pointer will be set to a serialized binary representation of what eet know. This make it possible, to save this pointer again by just returning the string given previously and telling it by setting unknow to E\+I\+N\+A\+\_\+\+T\+R\+U\+E.

\begin{DoxySince}{Since}
1.\+2.\+4
\end{DoxySince}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_gad0daa543d93a64add80961ae5387d45a}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G(
\begin{DoxyParamCaption}
\item[{}]{unified\+\_\+type, }
\item[{}]{name, }
\item[{}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gad0daa543d93a64add80961ae5387d45a}
{\bfseries Value\+:}
\begin{DoxyCode}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{eet\_data\_descriptor\_element\_add}(unified\_type,                      \(\backslash\)
                                  name,                              \(\backslash\)
                                  \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{EET\_T\_UNKNOW},                      \(\backslash\)
                                  \hyperlink{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{EET\_G\_UNKNOWN},                     \(\backslash\)
                                  0,                                 \(\backslash\)
                                  0,                                 \(\backslash\)
                                  NULL,                              \(\backslash\)
                                  subtype)
\end{DoxyCode}


Add a mapping to a data descriptor that will be used by union, variant or inherited type. 


\begin{DoxyParams}{Parameters}
{\em unified\+\_\+type} & The data descriptor to add the mapping to. \\
\hline
{\em name} & The string name to get/set type. \\
\hline
{\em subtype} & The matching data descriptor.\\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+2.\+4
\end{DoxySince}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}


Referenced by ecore\+\_\+con\+\_\+eet\+\_\+register().

\hypertarget{group__Eet__Data__Group_gaaf153807a88cd2c3483c5c34bb920a95}{\index{Eet Data Serialization@{Eet Data Serialization}!E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C}}
\index{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C@{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+M\+A\+P\+P\+I\+N\+G\+\_\+\+B\+A\+S\+I\+C(
\begin{DoxyParamCaption}
\item[{}]{unified\+\_\+type, }
\item[{}]{name, }
\item[{}]{basic\+\_\+type}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gaaf153807a88cd2c3483c5c34bb920a95}
{\bfseries Value\+:}
\begin{DoxyCode}
\hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{eet\_data\_descriptor\_element\_add}(unified\_type,                               
      \(\backslash\)
                                  name,                                       \(\backslash\)
                                  basic\_type,                                 \(\backslash\)
                                  \hyperlink{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{EET\_G\_UNKNOWN},                              \(\backslash\)
                                  0,                                          \(\backslash\)
                                  0,                                          \(\backslash\)
                                  NULL,                                       \(\backslash\)
                                  NULL)
\end{DoxyCode}


Add a mapping of a basic type to a data descriptor that will be used by a union type. 


\begin{DoxyParams}{Parameters}
{\em unified\+\_\+type} & The data descriptor to add the mapping to. \\
\hline
{\em name} & The string name to get/set type. \\
\hline
{\em basic\+\_\+type} & The matching basic type.\\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+8
\end{DoxySince}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}


\subsection{Typedef Documentation}
\hypertarget{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Data\+\_\+\+Descriptor@{Eet\+\_\+\+Data\+\_\+\+Descriptor}}
\index{Eet\+\_\+\+Data\+\_\+\+Descriptor@{Eet\+\_\+\+Data\+\_\+\+Descriptor}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Data\+\_\+\+Descriptor}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor}}}\label{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}


Opaque handle that have information on a type members. 

Descriptors are created using an \hyperlink{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}, and they describe the contents of the structure that will be serialized by Eet. Not all members need be described by it, just those that should be handled by Eet. This way it's possible to have one structure with both data to be saved to a file, like application configuration, and runtime information that would be meaningless to store, but is appropriate to keep together during the program execution. The members are added by means of \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()}, \hyperlink{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T()}, \hyperlink{group__Eet__Data__Group_gad5e348ead4ba0b441c1e020f9bf23365}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+H\+A\+S\+H()} or \hyperlink{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add()}.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new()} 

\hyperlink{group__Eet__Data__Group_ga2a7251edf1f60ced86c4860207331bb6}{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new()} 

\hyperlink{group__Eet__Data__Group_ga3e2b601720973d0e1f4683768a593c4d}{eet\+\_\+data\+\_\+descriptor\+\_\+free()} 
\end{DoxySeeAlso}
\hypertarget{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class@{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}}
\index{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class@{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class}}}\label{group__Eet__Data__Group_gace5d1ff83e06ad08d15aadef3916082f}


Instructs Eet about memory management for different needs under serialization and parse process. 

Callback protoype for Eet\+\_\+\+Dump.


\begin{DoxyParams}{Parameters}
{\em data} & to passe to the callback \\
\hline
{\em str} & the string to dump \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_gaab1358cb471dce20be9da6febbdf8327}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback\+\_\+\+Callback}}\label{group__Eet__Data__Group_gaab1358cb471dce20be9da6febbdf8327}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback. 


\begin{DoxyParams}{Parameters}
{\em h} & the hash \\
\hline
{\em k} & the key \\
\hline
{\em dt} & the data \\
\hline
{\em fdt} & the data passed to the callback \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
an integer 
\end{DoxyReturn}
\hypertarget{group__Eet__Data__Group_ga894af1ef8c006fc48235d8b48755e3d8}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga894af1ef8c006fc48235d8b48755e3d8}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc. 


\begin{DoxyParams}{Parameters}
{\em size} & is the size of memory to alloc on call of the callback \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_gadc11123034dfc44c5bc31c6f5bdb55fb}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Free\+\_\+\+Callback}}\label{group__Eet__Data__Group_gadc11123034dfc44c5bc31c6f5bdb55fb}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Mem\+\_\+\+Alloc. 


\begin{DoxyParams}{Parameters}
{\em mem} & must be a pointer to free on call of the callback \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga014b92bba17d33ea41e31ebfd9a23a8b}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga014b92bba17d33ea41e31ebfd9a23a8b}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Alloc. 


\begin{DoxyParams}{Parameters}
{\em str} & must be the string to alloc \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
have must be an allocated char $\ast$ for the given string
\end{DoxyReturn}

\begin{DoxyParams}{Parameters}
{\em str} & the string to allocate \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
an allocated pointer to the string 
\end{DoxyReturn}
\hypertarget{group__Eet__Data__Group_ga6e1c79f2b15a0315dd33c05d99cb065a}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga6e1c79f2b15a0315dd33c05d99cb065a}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Str\+\_\+\+Free. 


\begin{DoxyParams}{Parameters}
{\em str} & must be an allocated string to free\\
\hline
{\em str} & the string to free \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga4aef6ac18690983e6d608d0844b43e5d}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga4aef6ac18690983e6d608d0844b43e5d}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next. 


\begin{DoxyParams}{Parameters}
{\em l} & must be a pointer to the list \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
must be a pointer to the list 
\end{DoxyReturn}
\hypertarget{group__Eet__Data__Group_ga7e6b656ac984d44d0e736655c45982de}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga7e6b656ac984d44d0e736655c45982de}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append. 


\begin{DoxyParams}{Parameters}
{\em l} & must be a pointer to the list \\
\hline
{\em d} & the data to append to the list \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
must be a pointer to the list 
\end{DoxyReturn}
\hypertarget{group__Eet__Data__Group_ga1a75ebbc7a4d8bab9971974335599b04}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga1a75ebbc7a4d8bab9971974335599b04}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data. 


\begin{DoxyParams}{Parameters}
{\em l} & must be a pointer to the list \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
must be a pointer to the list 
\end{DoxyReturn}
\hypertarget{group__Eet__Data__Group_ga97f9bf8be3bcd13699c4890487bba66c}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga97f9bf8be3bcd13699c4890487bba66c}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free. 


\begin{DoxyParams}{Parameters}
{\em l} & must be a pointer to the list to free \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga530125fcbeb48fb675d020f51b839151}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga530125fcbeb48fb675d020f51b839151}


Callback for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach. 


\begin{DoxyParams}{Parameters}
{\em h} & the hash \\
\hline
{\em func} & the function callback to call on each iteration \\
\hline
{\em fdt} & the data to pass to the callbac setted in param func \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga94d8c39d01f0c9064713eeb0a18dc6d2}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga94d8c39d01f0c9064713eeb0a18dc6d2}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add. 


\begin{DoxyParams}{Parameters}
{\em h} & the hash \\
\hline
{\em k} & the key \\
\hline
{\em d} & the data to associate with the 'k' key \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga09d99991df39953b4b28de202f3109ab}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga09d99991df39953b4b28de202f3109ab}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free. 


\begin{DoxyParams}{Parameters}
{\em h} & the hash to free \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_gafd67014abf81fb9ff949f32db811253b}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get\+\_\+\+Callback}}\label{group__Eet__Data__Group_gafd67014abf81fb9ff949f32db811253b}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Get. 


\begin{DoxyParams}{Parameters}
{\em data} & data to pass to the callback \\
\hline
{\em unknow} & Eina\+\_\+\+Bool {\bfseries F\+I\+X\+M\+E} \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_gad98f354bc1af39c65c306a2d6905879c}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set\+\_\+\+Callback}}\label{group__Eet__Data__Group_gad98f354bc1af39c65c306a2d6905879c}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Type\+\_\+\+Set. 


\begin{DoxyParams}{Parameters}
{\em type} & the type to set \\
\hline
{\em data} & to pass to the callback \\
\hline
{\em unknow} & Eina\+\_\+\+Bool {\bfseries F\+I\+X\+M\+E} \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga1782d84edeff89252c1fbaece4244c26}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga1782d84edeff89252c1fbaece4244c26}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Alloc. 


\begin{DoxyParams}{Parameters}
{\em size} & The size of the array \\
\hline
\end{DoxyParams}
\hypertarget{group__Eet__Data__Group_ga466313985fc95944629db2a1d2edf08b}{\index{Eet Data Serialization@{Eet Data Serialization}!Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback}}
\index{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback@{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback}]{\setlength{\rightskip}{0pt plus 5cm}Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free\+\_\+\+Callback}}\label{group__Eet__Data__Group_ga466313985fc95944629db2a1d2edf08b}


Callback prototype for Eet\+\_\+\+Descriptor\+\_\+\+Array\+\_\+\+Free. 


\begin{DoxyParams}{Parameters}
{\em size} & The size of the array \\
\hline
\end{DoxyParams}


\subsection{Function Documentation}
\hypertarget{group__Eet__Data__Group_ga43095e92354c81c8ff3aafcdcbcb6b69}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+new@{eet\+\_\+data\+\_\+descriptor\+\_\+new}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+new@{eet\+\_\+data\+\_\+descriptor\+\_\+new}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+I\+N\+A\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+E\+D} {\bf E\+A\+P\+I} {\bf Eet\+\_\+\+Data\+\_\+\+Descriptor}$\ast$ eet\+\_\+data\+\_\+descriptor\+\_\+new (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{name, }
\item[{int}]{size, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Next\+\_\+\+Callback}}]{func\+\_\+list\+\_\+next, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Append\+\_\+\+Callback}}]{func\+\_\+list\+\_\+append, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Data\+\_\+\+Callback}}]{func\+\_\+list\+\_\+data, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+List\+\_\+\+Free\+\_\+\+Callback}}]{func\+\_\+list\+\_\+free, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Foreach\+\_\+\+Callback}}]{func\+\_\+hash\+\_\+foreach, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Add\+\_\+\+Callback}}]{func\+\_\+hash\+\_\+add, }
\item[{{\bf Eet\+\_\+\+Descriptor\+\_\+\+Hash\+\_\+\+Free\+\_\+\+Callback}}]{func\+\_\+hash\+\_\+free}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga43095e92354c81c8ff3aafcdcbcb6b69}


Create a new empty data structure descriptor. 


\begin{DoxyParams}{Parameters}
{\em name} & The string name of this data structure (most be a global constant and never change). \\
\hline
{\em size} & The size of the struct (in bytes). \\
\hline
{\em func\+\_\+list\+\_\+next} & The function to get the next list node. \\
\hline
{\em func\+\_\+list\+\_\+append} & The function to append a member to a list. \\
\hline
{\em func\+\_\+list\+\_\+data} & The function to get the data from a list node. \\
\hline
{\em func\+\_\+list\+\_\+free} & The function to free an entire linked list. \\
\hline
{\em func\+\_\+hash\+\_\+foreach} & The function to iterate through all hash table entries. \\
\hline
{\em func\+\_\+hash\+\_\+add} & The function to add a member to a hash table. \\
\hline
{\em func\+\_\+hash\+\_\+free} & The function to free an entire hash table. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new empty data descriptor.
\end{DoxyReturn}
This function creates a new data descriptor and returns a handle to the new data descriptor. On creation it will be empty, containing no contents describing anything other than the shell of the data structure.

You add structure members to the data descriptor using the macros \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()} and \hyperlink{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T()}, depending on what type of member you are adding to the description.

Once you have described all the members of a struct you want loaded, or saved eet can load and save those members for you, encode them into endian-\/independent serialised data chunks for transmission across a a network or more.

The function pointers to the list and hash table functions are only needed if you use those data types, else you can pass N\+U\+L\+L instead.

\begin{DoxySince}{Since}
1.\+0.\+0
\end{DoxySince}
\begin{DoxyRefDesc}{Deprecated}
\item[\hyperlink{deprecated__deprecated000017}{Deprecated}]use \hyperlink{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new()} or \hyperlink{group__Eet__Data__Group_ga2a7251edf1f60ced86c4860207331bb6}{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new()} \end{DoxyRefDesc}


References \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+add, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+foreach, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+free, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+append, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+data, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+free, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+next, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::name, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::size, and \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::version.

\hypertarget{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new@{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new@{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} {\bf Eet\+\_\+\+Data\+\_\+\+Descriptor}$\ast$ eet\+\_\+data\+\_\+descriptor\+\_\+stream\+\_\+new (
\begin{DoxyParamCaption}
\item[{const {\bf Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$}]{eddc}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gae300b4a97dbaab30a200edbb97f108c1}


This function creates a new data descriptor and returns a handle to the new data descriptor. 

On creation it will be empty, containing no contents describing anything other than the shell of the data structure. 
\begin{DoxyParams}{Parameters}
{\em eddc} & The class from where to create the data descriptor. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A handle to the new data descriptor.
\end{DoxyReturn}
You add structure members to the data descriptor using the macros \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()} and \hyperlink{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T()}, depending on what type of member you are adding to the description.

Once you have described all the members of a struct you want loaded or saved, eet can load and save those members for you, encode them into endian-\/independent serialised data chunks for transmission across a network or more.

This function specially ignores str\+\_\+direct\+\_\+alloc and str\+\_\+direct\+\_\+free. It is useful when the eet\+\_\+data you are reading doesn't have a dictionary, like network stream or I\+P\+C. It also mean that all string will be allocated and duplicated in memory.

\begin{DoxySince}{Since}
1.\+2.\+3 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}, \hyperlink{eet-data-nested_8c-example}{eet-\/data-\/nested.\+c}, and \hyperlink{eet-data-simple_8c-example}{eet-\/data-\/simple.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_ga2a7251edf1f60ced86c4860207331bb6}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new@{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new@{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} {\bf Eet\+\_\+\+Data\+\_\+\+Descriptor}$\ast$ eet\+\_\+data\+\_\+descriptor\+\_\+file\+\_\+new (
\begin{DoxyParamCaption}
\item[{const {\bf Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$}]{eddc}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga2a7251edf1f60ced86c4860207331bb6}


This function creates a new data descriptor and returns a handle to the new data descriptor. 

On creation it will be empty, containing no contents describing anything other than the shell of the data structure. 
\begin{DoxyParams}{Parameters}
{\em eddc} & The class from where to create the data descriptor. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A handle to the new data descriptor.
\end{DoxyReturn}
You add structure members to the data descriptor using the macros \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()} and \hyperlink{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T()}, depending on what type of member you are adding to the description.

Once you have described all the members of a struct you want loaded or saved, eet can load and save those members for you, encode them into endian-\/independent serialised data chunks for transmission across a a network or more.

This function uses str\+\_\+direct\+\_\+alloc and str\+\_\+direct\+\_\+free. It is useful when the eet\+\_\+data you are reading come from a file and have a dictionary. This will reduce memory use and improve the possibility for the O\+S to page this string out. However, the load speed and memory saving comes with some drawbacks to keep in mind. If you never modify the contents of the structures loaded from the file, all you need to remember is that closing the eet file will make the strings go away. On the other hand, should you need to free a string, before doing so you have to verify that it's not part of the eet dictionary. You can do this in the following way, assuming {\ttfamily ef} is a valid Eet\+\_\+\+File and {\ttfamily str} is a string loaded from said file.


\begin{DoxyCode}
1 void eet\_string\_free(Eet\_File *ef, const char *str)
2 \{
3    Eet\_Dictionary *dict = eet\_dictionary\_get(ef);
4    if (dict && eet\_dictionary\_string\_check(dict, str))
5      \{
6         // The file contains a dictionary and the given string is a part of
7         // of it, so we can't free it, just return.
8         return;
9      \}
10    // We assume eina\_stringshare was used on the descriptor
11    eina\_stringshare\_del(str);
12 \}
\end{DoxyCode}


\begin{DoxySince}{Since}
1.\+2.\+3 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}, and \hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}.\end{Desc}
\hypertarget{group__Eet__Data__Group_gac1fe86198291a7acb6642053301f317f}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set@{eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}}
\index{eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set@{eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} {\bf Eina\+\_\+\+Bool} eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$}]{eddc, }
\item[{unsigned int}]{eddc\+\_\+size, }
\item[{const char $\ast$}]{name, }
\item[{int}]{size}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gac1fe86198291a7acb6642053301f317f}


This function is an helper that set all the parameters of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with a stream. 


\begin{DoxyParams}{Parameters}
{\em eddc} & The Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class you want to set. \\
\hline
{\em eddc\+\_\+size} & The size of the Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class at the compilation time. \\
\hline
{\em name} & The name of the structure described by this class. \\
\hline
{\em size} & The size of the structure described by this class. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
E\+I\+N\+A\+\_\+\+T\+R\+U\+E if the structure was correctly set (The only reason that could make it fail is if you did give wrong parameter).
\end{DoxyReturn}
\begin{DoxyNote}{Note}
Unless there's a very specific reason to use this function directly, the E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T macro is recommended.
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+2.\+3 
\end{DoxySince}


References \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::array\+\_\+alloc, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::array\+\_\+free, E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N, E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, eina\+\_\+list\+\_\+append(), eina\+\_\+list\+\_\+data\+\_\+get(), eina\+\_\+list\+\_\+free(), eina\+\_\+list\+\_\+next(), eina\+\_\+stringshare\+\_\+add(), eina\+\_\+stringshare\+\_\+del(), E\+I\+N\+A\+\_\+\+T\+R\+U\+E, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+add, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+foreach, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+free, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+append, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+data, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+free, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::list\+\_\+next, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::mem\+\_\+alloc, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::mem\+\_\+free, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::name, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::size, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::str\+\_\+alloc, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::str\+\_\+free, and \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::version.



Referenced by eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set().

\hypertarget{group__Eet__Data__Group_ga61af07cced82f787f3c52d52834491c3}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set@{eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}}
\index{eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set@{eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} {\bf Eina\+\_\+\+Bool} eet\+\_\+eina\+\_\+file\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class} $\ast$}]{eddc, }
\item[{unsigned int}]{eddc\+\_\+size, }
\item[{const char $\ast$}]{name, }
\item[{int}]{size}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga61af07cced82f787f3c52d52834491c3}


This function is an helper that set all the parameter of an Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class correctly when you use Eina data type with a file. 


\begin{DoxyParams}{Parameters}
{\em eddc} & The Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class you want to set. \\
\hline
{\em eddc\+\_\+size} & The size of the Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class at the compilation time. \\
\hline
{\em name} & The name of the structure described by this class. \\
\hline
{\em size} & The size of the structure described by this class. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
E\+I\+N\+A\+\_\+\+T\+R\+U\+E if the structure was correctly set (The only reason that could make it fail is if you did give wrong parameter).
\end{DoxyReturn}
\begin{DoxyNote}{Note}
Unless there's a very specific reason to use this function directly, the E\+E\+T\+\_\+\+E\+I\+N\+A\+\_\+\+F\+I\+L\+E\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+S\+E\+T macro is recommended.
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+2.\+3 
\end{DoxySince}


References E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N, eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set(), E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, E\+I\+N\+A\+\_\+\+T\+R\+U\+E, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::hash\+\_\+add, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::str\+\_\+direct\+\_\+alloc, \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::str\+\_\+direct\+\_\+free, and \+\_\+\+Eet\+\_\+\+Data\+\_\+\+Descriptor\+\_\+\+Class\+::version.

\hypertarget{group__Eet__Data__Group_ga3e2b601720973d0e1f4683768a593c4d}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+free@{eet\+\_\+data\+\_\+descriptor\+\_\+free}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+free@{eet\+\_\+data\+\_\+descriptor\+\_\+free}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} void eet\+\_\+data\+\_\+descriptor\+\_\+free (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga3e2b601720973d0e1f4683768a593c4d}


This function frees a data descriptor when it is not needed anymore. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to free.\\
\hline
\end{DoxyParams}
This function takes a data descriptor handle as a parameter and frees all data allocated for the data descriptor and the handle itself. After this call the descriptor is no longer valid.

\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}, \hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}, \hyperlink{eet-data-nested_8c-example}{eet-\/data-\/nested.\+c}, and \hyperlink{eet-data-simple_8c-example}{eet-\/data-\/simple.\+c}.\end{Desc}


Referenced by ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+free().

\hypertarget{group__Eet__Data__Group_ga3e5efcd8d71872a7c79591af921c60b5}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get@{eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get@{eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} const char$\ast$ eet\+\_\+data\+\_\+descriptor\+\_\+name\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga3e5efcd8d71872a7c79591af921c60b5}


This function returns the name of a data descriptor. 

\begin{DoxySince}{Since}
1.\+8.\+0 
\end{DoxySince}
\hypertarget{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add@{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add@{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} void eet\+\_\+data\+\_\+descriptor\+\_\+element\+\_\+add (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd, }
\item[{const char $\ast$}]{name, }
\item[{int}]{type, }
\item[{int}]{group\+\_\+type, }
\item[{int}]{offset, }
\item[{int}]{count, }
\item[{const char $\ast$}]{counter\+\_\+name, }
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{subtype}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga450fd478c0c2531a5d2beb4f1af7cd34}


This function is an internal used by macros. 

This function is used by macros \hyperlink{group__Eet__Data__Group_gac38ce778d7eba37cfca8a19efb7a9b3a}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+B\+A\+S\+I\+C()}, \hyperlink{group__Eet__Data__Group_ga6c1f33c4c503be76f64555c3ab999725}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+S\+U\+B()} and \hyperlink{group__Eet__Data__Group_gabb4c7833ba053f2322e6b667a9ec7f04}{E\+E\+T\+\_\+\+D\+A\+T\+A\+\_\+\+D\+E\+S\+C\+R\+I\+P\+T\+O\+R\+\_\+\+A\+D\+D\+\_\+\+L\+I\+S\+T()}. It is complex to use by hand and should be left to be used by the macros, and thus is not documented.


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor handle to add element (member). \\
\hline
{\em name} & The name of element to be serialized. \\
\hline
{\em type} & The type of element to be serialized, like \hyperlink{group__Eet__Data__Group_ga4e196733795867f14c6e387af7287baa}{E\+E\+T\+\_\+\+T\+\_\+\+I\+N\+T}. If \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{E\+E\+T\+\_\+\+T\+\_\+\+U\+N\+K\+N\+O\+W}, then it is considered to be a group, list or hash. \\
\hline
{\em group\+\_\+type} & If element type is \hyperlink{group__Eet__Data__Group_ga23f233441eb2d0eccafe51c1641ff5c9}{E\+E\+T\+\_\+\+T\+\_\+\+U\+N\+K\+N\+O\+W}, then the {\ttfamily group\+\_\+type} will specify if it is a list (\hyperlink{group__Eet__Data__Group_gadcfddbc1928d1068eba93326201c6232}{E\+E\+T\+\_\+\+G\+\_\+\+L\+I\+S\+T}), array (\hyperlink{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}{E\+E\+T\+\_\+\+G\+\_\+\+A\+R\+R\+A\+Y}) and so on. If \hyperlink{group__Eet__Data__Group_gae97a13f08f6f48335a60e2a910aec41f}{E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N}, then the member is a subtype (pointer to another type defined by another \hyperlink{group__Eet__Data__Group_ga4baec0e840012480a0958c5c3bca276d}{Eet\+\_\+\+Data\+\_\+\+Descriptor}). \\
\hline
{\em offset} & byte offset inside the source memory to be serialized. \\
\hline
{\em count} & number of elements (if \hyperlink{group__Eet__Data__Group_ga0db274e50f3cc8c9e4844d94d63a4433}{E\+E\+T\+\_\+\+G\+\_\+\+A\+R\+R\+A\+Y} or \hyperlink{group__Eet__Data__Group_gaa1ca41d2def763d6f5ce4d94eaf2581d}{E\+E\+T\+\_\+\+G\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y}). \\
\hline
{\em counter\+\_\+name} & variable that defines the name of number of elements. \\
\hline
{\em subtype} & If contains a subtype, then its data descriptor.\\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References E\+E\+T\+\_\+\+G\+\_\+\+L\+A\+S\+T, E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+I\+O\+N, E\+E\+T\+\_\+\+G\+\_\+\+U\+N\+K\+N\+O\+W\+N, E\+E\+T\+\_\+\+G\+\_\+\+V\+A\+R\+\_\+\+A\+R\+R\+A\+Y, E\+E\+T\+\_\+\+G\+\_\+\+V\+A\+R\+I\+A\+N\+T, E\+E\+T\+\_\+\+T\+\_\+\+L\+A\+S\+T, E\+E\+T\+\_\+\+T\+\_\+\+N\+U\+L\+L, E\+E\+T\+\_\+\+T\+\_\+\+S\+T\+R\+I\+N\+G, E\+E\+T\+\_\+\+T\+\_\+\+U\+N\+K\+N\+O\+W, E\+I\+N\+A\+\_\+\+T\+R\+U\+E, and I\+N\+F.

\hypertarget{group__Eet__Data__Group_ga4d1807cbbc448304f22a8808318a3429}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+read@{eet\+\_\+data\+\_\+read}}
\index{eet\+\_\+data\+\_\+read@{eet\+\_\+data\+\_\+read}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+read}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} void$\ast$ eet\+\_\+data\+\_\+read (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+File} $\ast$}]{ef, }
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd, }
\item[{const char $\ast$}]{name}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga4d1807cbbc448304f22a8808318a3429}


Read a data structure from an eet file and decodes it. 


\begin{DoxyParams}{Parameters}
{\em ef} & The eet file handle to read from. \\
\hline
{\em edd} & The data descriptor handle to use when decoding. \\
\hline
{\em name} & The key the data is stored under in the eet file. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A pointer to the decoded data structure.
\end{DoxyReturn}
This function decodes a data structure stored in an eet file, returning a pointer to it if it decoded successfully, or N\+U\+L\+L on failure. This can save a programmer dozens of hours of work in writing configuration file parsing and writing code, as eet does all that work for the program and presents a program-\/friendly data structure, just as the programmer likes. Eet can handle members being added or deleted from the data in storage and safely zero-\/fills unfilled members if they were not found in the data. It checks sizes and headers whenever it reads data, allowing the programmer to not worry about corrupt data.

Once a data structure has been described by the programmer with the fields they wish to save or load, storing or retrieving a data structure from an eet file, or from a chunk of memory is as simple as a single function call.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_ga418b7f00fc7f2e0cc94b33787eddbe08}{eet\+\_\+data\+\_\+read\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}, \hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}, \hyperlink{eet-data-nested_8c-example}{eet-\/data-\/nested.\+c}, and \hyperlink{eet-data-simple_8c-example}{eet-\/data-\/simple.\+c}.\end{Desc}


References eet\+\_\+data\+\_\+read\+\_\+cipher().



Referenced by edje\+\_\+edit\+\_\+group\+\_\+copy().

\hypertarget{group__Eet__Data__Group_gac66d1c49e3490bc5d803982d833ff8aa}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+write@{eet\+\_\+data\+\_\+write}}
\index{eet\+\_\+data\+\_\+write@{eet\+\_\+data\+\_\+write}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+write}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} int eet\+\_\+data\+\_\+write (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+File} $\ast$}]{ef, }
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd, }
\item[{const char $\ast$}]{name, }
\item[{const void $\ast$}]{data, }
\item[{int}]{compress}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gac66d1c49e3490bc5d803982d833ff8aa}


Write a data structure from memory and store in an eet file. 


\begin{DoxyParams}{Parameters}
{\em ef} & The eet file handle to write to. \\
\hline
{\em edd} & The data descriptor to use when encoding. \\
\hline
{\em name} & The key to store the data under in the eet file. \\
\hline
{\em data} & A pointer to the data structure to save and encode. \\
\hline
{\em compress} & Compression flags for storage. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
bytes written on successful write, 0 on failure.
\end{DoxyReturn}
This function is the reverse of \hyperlink{group__Eet__Data__Group_ga4d1807cbbc448304f22a8808318a3429}{eet\+\_\+data\+\_\+read()}, saving a data structure to an eet file. The file must have been opening in write mode and the data will be kept in memory until the file is either closed or \hyperlink{group__Eet__File__Group_gaf343f344180955ed898aa86b90ebefda}{eet\+\_\+sync()} is called to flush any unwritten changes.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_ga9e46230c55006296f141ed9a5807c759}{eet\+\_\+data\+\_\+write\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eet-data-file_descriptor_01_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+01.\+c}, \hyperlink{eet-data-file_descriptor_02_8c-example}{eet-\/data-\/file\+\_\+descriptor\+\_\+02.\+c}, \hyperlink{eet-data-nested_8c-example}{eet-\/data-\/nested.\+c}, and \hyperlink{eet-data-simple_8c-example}{eet-\/data-\/simple.\+c}.\end{Desc}


References eet\+\_\+data\+\_\+write\+\_\+cipher().



Referenced by edje\+\_\+edit\+\_\+without\+\_\+source\+\_\+save().

\hypertarget{group__Eet__Data__Group_ga4160a247c086955b4734af896b6fd270}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+text\+\_\+dump@{eet\+\_\+data\+\_\+text\+\_\+dump}}
\index{eet\+\_\+data\+\_\+text\+\_\+dump@{eet\+\_\+data\+\_\+text\+\_\+dump}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+text\+\_\+dump}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} int eet\+\_\+data\+\_\+text\+\_\+dump (
\begin{DoxyParamCaption}
\item[{const void $\ast$}]{data\+\_\+in, }
\item[{int}]{size\+\_\+in, }
\item[{Eet\+\_\+\+Dump\+\_\+\+Callback}]{dumpfunc, }
\item[{void $\ast$}]{dumpdata}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga4160a247c086955b4734af896b6fd270}


Dump an eet encoded data structure into ascii text. 


\begin{DoxyParams}{Parameters}
{\em data\+\_\+in} & The pointer to the data to decode into a struct. \\
\hline
{\em size\+\_\+in} & The size of the data pointed to in bytes. \\
\hline
{\em dumpfunc} & The function to call passed a string when new data is converted to text \\
\hline
{\em dumpdata} & The data to pass to the {\ttfamily dumpfunc} callback. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 on success, 0 on failure
\end{DoxyReturn}
This function will take a chunk of data encoded by \hyperlink{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{eet\+\_\+data\+\_\+descriptor\+\_\+encode()} and convert it into human readable ascii text. It does this by calling the {\ttfamily dumpfunc} callback for all new text that is generated. This callback should append to any existing text buffer and will be passed the pointer {\ttfamily dumpdata} as a parameter as well as a string with new text to be appended.

Example\+:


\begin{DoxyCode}
1 void output(void *data, const char *string)
2 \{
3   printf("%s", string);
4 \}
5 
6 void dump(const char *file)
7 \{
8   FILE *f;
9   int len;
10   void *data;
11 
12   f = fopen(file, "r");
13   fseek(f, 0, SEEK\_END);
14   len = ftell(f);
15   rewind(f);
16   data = malloc(len);
17   fread(data, len, 1, f);
18   fclose(f);
19   eet\_data\_text\_dump(data, len, output, NULL);
20 \}
\end{DoxyCode}


\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_gac85bb8a9b46804288bb5e37caf21fd1c}{eet\+\_\+data\+\_\+text\+\_\+dump\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References eet\+\_\+data\+\_\+text\+\_\+dump\+\_\+cipher().

\hypertarget{group__Eet__Data__Group_ga7ec4079e08e657a80bee05bd12e1b972}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+text\+\_\+undump@{eet\+\_\+data\+\_\+text\+\_\+undump}}
\index{eet\+\_\+data\+\_\+text\+\_\+undump@{eet\+\_\+data\+\_\+text\+\_\+undump}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+text\+\_\+undump}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} void$\ast$ eet\+\_\+data\+\_\+text\+\_\+undump (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{text, }
\item[{int}]{textlen, }
\item[{int $\ast$}]{size\+\_\+ret}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga7ec4079e08e657a80bee05bd12e1b972}


Take an ascii encoding from \hyperlink{group__Eet__Data__Group_ga4160a247c086955b4734af896b6fd270}{eet\+\_\+data\+\_\+text\+\_\+dump()} and re-\/encode in binary. 


\begin{DoxyParams}{Parameters}
{\em text} & The pointer to the string data to parse and encode. \\
\hline
{\em textlen} & The size of the string in bytes (not including 0 byte terminator). \\
\hline
{\em size\+\_\+ret} & This gets filled in with the encoded data blob size in bytes. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The encoded data on success, N\+U\+L\+L on failure.
\end{DoxyReturn}
This function will parse the string pointed to by {\ttfamily text} and return an encoded data lump the same way \hyperlink{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{eet\+\_\+data\+\_\+descriptor\+\_\+encode()} takes an in-\/memory data struct and encodes into a binary blob. {\ttfamily text} is a normal C string.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_ga99e8a3acd6c3fbe552b0f9d474ae4f0d}{eet\+\_\+data\+\_\+text\+\_\+undump\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References eet\+\_\+data\+\_\+text\+\_\+undump\+\_\+cipher().

\hypertarget{group__Eet__Data__Group_ga33b90cc41fe0e6fffc6b4fb0c8c62a99}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+dump@{eet\+\_\+data\+\_\+dump}}
\index{eet\+\_\+data\+\_\+dump@{eet\+\_\+data\+\_\+dump}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+dump}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} int eet\+\_\+data\+\_\+dump (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+File} $\ast$}]{ef, }
\item[{const char $\ast$}]{name, }
\item[{Eet\+\_\+\+Dump\+\_\+\+Callback}]{dumpfunc, }
\item[{void $\ast$}]{dumpdata}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_ga33b90cc41fe0e6fffc6b4fb0c8c62a99}


Dump an eet encoded data structure from an eet file into ascii text. 


\begin{DoxyParams}{Parameters}
{\em ef} & A valid eet file handle. \\
\hline
{\em name} & Name of the entry. eg\+: \char`\"{}/base/file\+\_\+i\+\_\+want\char`\"{}. \\
\hline
{\em dumpfunc} & The function to call passed a string when new data is converted to text \\
\hline
{\em dumpdata} & The data to pass to the {\ttfamily dumpfunc} callback. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 on success, 0 on failure
\end{DoxyReturn}
This function will take an open and valid eet file from \hyperlink{group__Eet__File__Group_ga5f55956b860aa2c77af9b1a880c4c256}{eet\+\_\+open()} request the data encoded by \hyperlink{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{eet\+\_\+data\+\_\+descriptor\+\_\+encode()} corresponding to the key {\ttfamily name} and convert it into human readable ascii text. It does this by calling the {\ttfamily dumpfunc} callback for all new text that is generated. This callback should append to any existing text buffer and will be passed the pointer {\ttfamily dumpdata} as a parameter as well as a string with new text to be appended.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_ga5f80e7c90720422ee595f229fd8fcbef}{eet\+\_\+data\+\_\+dump\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References eet\+\_\+data\+\_\+dump\+\_\+cipher().

\hypertarget{group__Eet__Data__Group_gafb1d3207c31e349ed184645e21aa838d}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+undump@{eet\+\_\+data\+\_\+undump}}
\index{eet\+\_\+data\+\_\+undump@{eet\+\_\+data\+\_\+undump}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+undump}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} int eet\+\_\+data\+\_\+undump (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+File} $\ast$}]{ef, }
\item[{const char $\ast$}]{name, }
\item[{const char $\ast$}]{text, }
\item[{int}]{textlen, }
\item[{int}]{compress}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gafb1d3207c31e349ed184645e21aa838d}


Take an ascii encoding from \hyperlink{group__Eet__Data__Group_ga33b90cc41fe0e6fffc6b4fb0c8c62a99}{eet\+\_\+data\+\_\+dump()} and re-\/encode in binary. 


\begin{DoxyParams}{Parameters}
{\em ef} & A valid eet file handle. \\
\hline
{\em name} & Name of the entry. eg\+: \char`\"{}/base/file\+\_\+i\+\_\+want\char`\"{}. \\
\hline
{\em text} & The pointer to the string data to parse and encode. \\
\hline
{\em textlen} & The size of the string in bytes (not including 0 byte terminator). \\
\hline
{\em compress} & Compression flags (1 == compress, 0 = don't compress). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 on success, 0 on failure
\end{DoxyReturn}
This function will parse the string pointed to by {\ttfamily text}, encode it the same way \hyperlink{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{eet\+\_\+data\+\_\+descriptor\+\_\+encode()} takes an in-\/memory data struct and encodes into a binary blob.

The data (optionally compressed) will be in ram, pending a flush to disk (it will stay in ram till the eet file handle is closed though).

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_ga58060eca71513b8634a32e076dc8dd85}{eet\+\_\+data\+\_\+undump\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References eet\+\_\+data\+\_\+undump\+\_\+cipher().

\hypertarget{group__Eet__Data__Group_gaad95530fdaec27047c41a5ceace5c231}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+decode@{eet\+\_\+data\+\_\+descriptor\+\_\+decode}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+decode@{eet\+\_\+data\+\_\+descriptor\+\_\+decode}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+decode}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} void$\ast$ eet\+\_\+data\+\_\+descriptor\+\_\+decode (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd, }
\item[{const void $\ast$}]{data\+\_\+in, }
\item[{int}]{size\+\_\+in}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gaad95530fdaec27047c41a5ceace5c231}


Decode a data structure from an arbitrary location in memory. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to use when decoding. \\
\hline
{\em data\+\_\+in} & The pointer to the data to decode into a struct. \\
\hline
{\em size\+\_\+in} & The size of the data pointed to in bytes. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
N\+U\+L\+L on failure, or a valid decoded struct pointer on success.
\end{DoxyReturn}
This function will decode a data structure that has been encoded using \hyperlink{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{eet\+\_\+data\+\_\+descriptor\+\_\+encode()}, and return a data structure with all its elements filled out, if successful, or N\+U\+L\+L on failure.

The data to be decoded is stored at the memory pointed to by {\ttfamily data\+\_\+in}, and is described by the descriptor pointed to by {\ttfamily edd}. The data size is passed in as the value to {\ttfamily size\+\_\+in}, ande must be greater than 0 to succeed.

This function is useful for decoding data structures delivered to the application by means other than an eet file, such as an I\+P\+C or socket connection, raw files, shared memory etc.

Please see \hyperlink{group__Eet__Data__Group_ga4d1807cbbc448304f22a8808318a3429}{eet\+\_\+data\+\_\+read()} for more information.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_ga139dd65b6d66537da27f3e9dd620a631}{eet\+\_\+data\+\_\+descriptor\+\_\+decode\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References eet\+\_\+data\+\_\+descriptor\+\_\+decode\+\_\+cipher().

\hypertarget{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}{\index{Eet Data Serialization@{Eet Data Serialization}!eet\+\_\+data\+\_\+descriptor\+\_\+encode@{eet\+\_\+data\+\_\+descriptor\+\_\+encode}}
\index{eet\+\_\+data\+\_\+descriptor\+\_\+encode@{eet\+\_\+data\+\_\+descriptor\+\_\+encode}!Eet Data Serialization@{Eet Data Serialization}}
\subsubsection[{eet\+\_\+data\+\_\+descriptor\+\_\+encode}]{\setlength{\rightskip}{0pt plus 5cm}{\bf E\+A\+P\+I} void$\ast$ eet\+\_\+data\+\_\+descriptor\+\_\+encode (
\begin{DoxyParamCaption}
\item[{{\bf Eet\+\_\+\+Data\+\_\+\+Descriptor} $\ast$}]{edd, }
\item[{const void $\ast$}]{data\+\_\+in, }
\item[{int $\ast$}]{size\+\_\+ret}
\end{DoxyParamCaption}
)}}\label{group__Eet__Data__Group_gaa7c3b3a8cbeffc34c21dbbb1decc3c2d}


Encode a dsata struct to memory and return that encoded data. 


\begin{DoxyParams}{Parameters}
{\em edd} & The data descriptor to use when encoding. \\
\hline
{\em data\+\_\+in} & The pointer to the struct to encode into data. \\
\hline
{\em size\+\_\+ret} & pointer to the an int to be filled with the decoded size. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
N\+U\+L\+L on failure, or a valid encoded data chunk on success.
\end{DoxyReturn}
This function takes a data structutre in memory and encodes it into a serialised chunk of data that can be decoded again by \hyperlink{group__Eet__Data__Group_gaad95530fdaec27047c41a5ceace5c231}{eet\+\_\+data\+\_\+descriptor\+\_\+decode()}. This is useful for being able to transmit data structures across sockets, pipes, I\+P\+C or shared file mechanisms, without having to worry about memory space, machine type, endianness etc.

The parameter {\ttfamily edd} must point to a valid data descriptor, and {\ttfamily data\+\_\+in} must point to the right data structure to encode. If not, the encoding may fail.

On success a non N\+U\+L\+L valid pointer is returned and what {\ttfamily size\+\_\+ret} points to is set to the size of this decoded data, in bytes. When the encoded data is no longer needed, call free() on it. On failure N\+U\+L\+L is returned and what {\ttfamily size\+\_\+ret} points to is set to 0.

Please see \hyperlink{group__Eet__Data__Group_gac66d1c49e3490bc5d803982d833ff8aa}{eet\+\_\+data\+\_\+write()} for more information.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eet__Data__Cipher__Group_gab765474a660b0dfe5f00d99a960206db}{eet\+\_\+data\+\_\+descriptor\+\_\+encode\+\_\+cipher()}
\end{DoxySeeAlso}
\begin{DoxySince}{Since}
1.\+0.\+0 
\end{DoxySince}


References eet\+\_\+data\+\_\+descriptor\+\_\+encode\+\_\+cipher().

