\hypertarget{eina_magic_01_8c-example}{}\doxysection{eina\+\_\+magic\+\_\+01.\+c}

\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{//Compile with:}}
\DoxyCodeLine{\textcolor{comment}{//gcc -\/g eina\_magic\_01.c -\/o eina\_magic\_01 `pkg-\/config -\/-\/cflags -\/-\/libs eina`}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{Eina_8h}{Eina.h}}>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#define BASETYPE\_MAGIC 0x12345}}
\DoxyCodeLine{\textcolor{keyword}{struct }\_person \{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga4085afe8dc73c98ae626cc952c69c668}{EINA\_MAGIC}};}
\DoxyCodeLine{   \textcolor{keywordtype}{char} *name;}
\DoxyCodeLine{\};}
\DoxyCodeLine{\textcolor{keyword}{typedef} \textcolor{keyword}{struct }\_person person;}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#define SUBTYPE\_MAGIC 0x3333}}
\DoxyCodeLine{\textcolor{keyword}{struct }\_pilot \{}
\DoxyCodeLine{   person base;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga4085afe8dc73c98ae626cc952c69c668}{EINA\_MAGIC}};}
\DoxyCodeLine{   \textcolor{keywordtype}{char} *callsign;}
\DoxyCodeLine{\};}
\DoxyCodeLine{\textcolor{keyword}{typedef} \textcolor{keyword}{struct }\_pilot pilot;}
\DoxyCodeLine{}
\DoxyCodeLine{person *}
\DoxyCodeLine{person\_new(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *name)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   person *ptr = malloc(\textcolor{keyword}{sizeof}(person));}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga470f5ce28eaaf59ce80523be8471c5e0}{EINA\_MAGIC\_SET}}(ptr, BASETYPE\_MAGIC);}
\DoxyCodeLine{   ptr-\/>name = strdup(name);}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} ptr;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void}}
\DoxyCodeLine{person\_free(person *ptr) \{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Eina__Magic__Group_ga13317919a91b35412b6f40ca1166b373}{EINA\_MAGIC\_CHECK}}(ptr, BASETYPE\_MAGIC))}
\DoxyCodeLine{   \{}
\DoxyCodeLine{      \mbox{\hyperlink{group__Eina__Magic__Group_gad7411adf9ff7121ad2004046f1b08408}{EINA\_MAGIC\_FAIL}}(ptr, BASETYPE\_MAGIC);}
\DoxyCodeLine{      \textcolor{keywordflow}{return};}
\DoxyCodeLine{   \}}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga470f5ce28eaaf59ce80523be8471c5e0}{EINA\_MAGIC\_SET}}(ptr, \mbox{\hyperlink{group__Eina__Magic__Group_ga087a0d5a1e482da550b33fe4fcb0435f}{EINA\_MAGIC\_NONE}});}
\DoxyCodeLine{   free(ptr-\/>name);}
\DoxyCodeLine{   free(ptr);}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{pilot *}
\DoxyCodeLine{pilot\_new(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *name, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *callsign)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   pilot *ptr = malloc(\textcolor{keyword}{sizeof}(pilot));}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga470f5ce28eaaf59ce80523be8471c5e0}{EINA\_MAGIC\_SET}}(ptr, SUBTYPE\_MAGIC);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga470f5ce28eaaf59ce80523be8471c5e0}{EINA\_MAGIC\_SET}}(\&ptr-\/>base, BASETYPE\_MAGIC);}
\DoxyCodeLine{   ptr-\/>base.name = strdup(name);}
\DoxyCodeLine{   ptr-\/>callsign = strdup(callsign);}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} ptr;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void}}
\DoxyCodeLine{pilot\_free(pilot *ptr) \{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Eina__Magic__Group_ga13317919a91b35412b6f40ca1166b373}{EINA\_MAGIC\_CHECK}}(ptr, SUBTYPE\_MAGIC))}
\DoxyCodeLine{   \{}
\DoxyCodeLine{      \mbox{\hyperlink{group__Eina__Magic__Group_gad7411adf9ff7121ad2004046f1b08408}{EINA\_MAGIC\_FAIL}}(ptr, SUBTYPE\_MAGIC);}
\DoxyCodeLine{      \textcolor{keywordflow}{return};}
\DoxyCodeLine{   \}}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga470f5ce28eaaf59ce80523be8471c5e0}{EINA\_MAGIC\_SET}}(ptr, \mbox{\hyperlink{group__Eina__Magic__Group_ga087a0d5a1e482da550b33fe4fcb0435f}{EINA\_MAGIC\_NONE}});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga470f5ce28eaaf59ce80523be8471c5e0}{EINA\_MAGIC\_SET}}(\&ptr-\/>base, \mbox{\hyperlink{group__Eina__Magic__Group_ga087a0d5a1e482da550b33fe4fcb0435f}{EINA\_MAGIC\_NONE}});}
\DoxyCodeLine{   free(ptr-\/>base.name);}
\DoxyCodeLine{   free(ptr-\/>callsign);}
\DoxyCodeLine{   free(ptr);}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void}}
\DoxyCodeLine{print\_person(person *ptr)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Eina__Magic__Group_ga13317919a91b35412b6f40ca1166b373}{EINA\_MAGIC\_CHECK}}(ptr, BASETYPE\_MAGIC))\{}
\DoxyCodeLine{      \mbox{\hyperlink{group__Eina__Magic__Group_gad7411adf9ff7121ad2004046f1b08408}{EINA\_MAGIC\_FAIL}}(ptr, BASETYPE\_MAGIC);}
\DoxyCodeLine{      \textcolor{keywordflow}{return};}
\DoxyCodeLine{   \}}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"name: \%s\(\backslash\)n"}, ptr-\/>name);}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void}}
\DoxyCodeLine{print\_pilot(pilot *ptr)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Eina__Magic__Group_ga13317919a91b35412b6f40ca1166b373}{EINA\_MAGIC\_CHECK}}(ptr, SUBTYPE\_MAGIC)) \{}
\DoxyCodeLine{      \mbox{\hyperlink{group__Eina__Magic__Group_gad7411adf9ff7121ad2004046f1b08408}{EINA\_MAGIC\_FAIL}}(ptr, SUBTYPE\_MAGIC);}
\DoxyCodeLine{      \textcolor{keywordflow}{return};}
\DoxyCodeLine{   \}}
\DoxyCodeLine{   print\_person(\&ptr-\/>base);}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"callsign: \%s\(\backslash\)n"}, ptr-\/>callsign);}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int}}
\DoxyCodeLine{main(\textcolor{keywordtype}{int} argc \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{char} **argv \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   person *base;}
\DoxyCodeLine{   pilot *sub;}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Main__Group_gafee4bfc0e509b6ffed6598edf6f4b3de}{eina\_init}}();}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga0d77e61edf5b7b6c276a382d6bf191e7}{eina\_magic\_string\_set}}(BASETYPE\_MAGIC, \textcolor{stringliteral}{"person"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Magic__Group_ga5d202c69f78f9cb078efd3e798cb5a53}{eina\_magic\_string\_static\_set}}(SUBTYPE\_MAGIC, \textcolor{stringliteral}{"pilot"});}
\DoxyCodeLine{}
\DoxyCodeLine{   base = person\_new(\textcolor{stringliteral}{"Tyrol"});}
\DoxyCodeLine{   sub = pilot\_new(\textcolor{stringliteral}{"thrace"}, \textcolor{stringliteral}{"starbuck"});}
\DoxyCodeLine{}
\DoxyCodeLine{   print\_person(base);}
\DoxyCodeLine{   print\_person((person *)sub);}
\DoxyCodeLine{}
\DoxyCodeLine{   print\_pilot((pilot *)base); \textcolor{comment}{//BAD: fails (C cast prevents GCC warning)}}
\DoxyCodeLine{   print\_pilot(sub);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Main__Group_ga2c8b4020427108a30c44707af22c99d3}{eina\_shutdown}}();}
\DoxyCodeLine{\}}
\end{DoxyCodeInclude}
 