\hypertarget{interface_8h}{
\section{include/interface.h File Reference}
\label{interface_8h}\index{include/interface.h@{include/interface.h}}
}
{\ttfamily \#include $<$sys/types.h$>$}\par
Include dependency graph for interface.h:
This graph shows which files directly or indirectly include this file:
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structinterface}{interface}
\item 
struct \hyperlink{structiface__impl}{iface\_\-impl}
\end{DoxyCompactItemize}
\subsection*{Defines}
\begin{DoxyCompactItemize}
\item 
\#define \hyperlink{interface_8h_ad620a89e939b586d6a025cf342da8e55}{MAX\_\-IFACE}~32
\item 
\#define \hyperlink{interface_8h_a02255665665c91d905ec32d00d9a4a85}{IFACE}(name)~((const struct i\_\-\#\#name const$\ast$)\&i\_\-\#\#name\#\#\_\-impl)
\item 
\#define \hyperlink{interface_8h_a446cc7d7282f8a0b8e62a371671ea605}{INIT\_\-IFACE}(name,...)~static const struct i\_\-\#\#name i\_\-\#\#name\#\#\_\-impl = \{\&i\_\-\#\#name,\_\-\_\-VA\_\-ARGS\_\-\_\-\}
\item 
\#define \hyperlink{interface_8h_a9dda4d034150e3159927f83d9d15d840}{NUMARGS}(...)~(sizeof((const void$\ast$\mbox{[}$\,$\mbox{]})\{\_\-\_\-VA\_\-ARGS\_\-\_\-\})/sizeof(void$\ast$))
\item 
\#define \hyperlink{interface_8h_a6e8015282e5aac5747daff5bb71d8601}{INIT\_\-IMPL}(...)~\{NUMARGS(\_\-\_\-VA\_\-ARGS\_\-\_\-), 0, \{\_\-\_\-VA\_\-ARGS\_\-\_\-\}\}
\item 
\#define \hyperlink{interface_8h_a855b98f3119c2d64e7dd4c2c910bd5b5}{CREATE\_\-IMPL}(...)~static struct \hyperlink{structiface__impl}{iface\_\-impl} \hyperlink{structiface__impl}{iface\_\-impl} = INIT\_\-IMPL(\_\-\_\-VA\_\-ARGS\_\-\_\-)
\item 
\#define \hyperlink{interface_8h_a12243bdd01e5366fecc15f395f09221a}{METHOD\_\-GET}(iface, method)~(iface-\/$>$method)
\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef struct \hyperlink{structinterface}{interface} $\ast$ \hyperlink{interface_8h_afaa63cd951f41a496111e88acf36dc40}{iface\_\-ptr}
\item 
typedef struct \hyperlink{structiface__impl}{iface\_\-impl} $\ast$ \hyperlink{interface_8h_a998b025a5015049fd824424d6983f2df}{iface\_\-impl\_\-ptr}
\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structinterface}{interface} $\ast$ \hyperlink{interface_8h_ae4bb16dde691d2513d444ce772f48718}{interfaceGet} (\hyperlink{structiface__impl}{iface\_\-impl\_\-ptr}, const \hyperlink{structinterface}{iface\_\-ptr})
\end{DoxyCompactItemize}


\subsection{Define Documentation}
\hypertarget{interface_8h_a855b98f3119c2d64e7dd4c2c910bd5b5}{
\index{interface.h@{interface.h}!CREATE\_\-IMPL@{CREATE\_\-IMPL}}
\index{CREATE\_\-IMPL@{CREATE\_\-IMPL}!interface.h@{interface.h}}
\subsubsection[{CREATE\_\-IMPL}]{\setlength{\rightskip}{0pt plus 5cm}\#define CREATE\_\-IMPL(
\begin{DoxyParamCaption}
\item[{}]{...}
\end{DoxyParamCaption}
)~static struct {\bf iface\_\-impl} {\bf iface\_\-impl} = INIT\_\-IMPL(\_\-\_\-VA\_\-ARGS\_\-\_\-)}}
\label{interface_8h_a855b98f3119c2d64e7dd4c2c910bd5b5}


Definition at line 16 of file interface.h.

\hypertarget{interface_8h_a02255665665c91d905ec32d00d9a4a85}{
\index{interface.h@{interface.h}!IFACE@{IFACE}}
\index{IFACE@{IFACE}!interface.h@{interface.h}}
\subsubsection[{IFACE}]{\setlength{\rightskip}{0pt plus 5cm}\#define IFACE(
\begin{DoxyParamCaption}
\item[{}]{name}
\end{DoxyParamCaption}
)~((const struct i\_\-\#\#name const$\ast$)\&i\_\-\#\#name\#\#\_\-impl)}}
\label{interface_8h_a02255665665c91d905ec32d00d9a4a85}


Definition at line 8 of file interface.h.

\hypertarget{interface_8h_a446cc7d7282f8a0b8e62a371671ea605}{
\index{interface.h@{interface.h}!INIT\_\-IFACE@{INIT\_\-IFACE}}
\index{INIT\_\-IFACE@{INIT\_\-IFACE}!interface.h@{interface.h}}
\subsubsection[{INIT\_\-IFACE}]{\setlength{\rightskip}{0pt plus 5cm}\#define INIT\_\-IFACE(
\begin{DoxyParamCaption}
\item[{}]{name, }
\item[{}]{...}
\end{DoxyParamCaption}
)~static const struct i\_\-\#\#name i\_\-\#\#name\#\#\_\-impl = \{\&i\_\-\#\#name,\_\-\_\-VA\_\-ARGS\_\-\_\-\}}}
\label{interface_8h_a446cc7d7282f8a0b8e62a371671ea605}


Definition at line 10 of file interface.h.

\hypertarget{interface_8h_a6e8015282e5aac5747daff5bb71d8601}{
\index{interface.h@{interface.h}!INIT\_\-IMPL@{INIT\_\-IMPL}}
\index{INIT\_\-IMPL@{INIT\_\-IMPL}!interface.h@{interface.h}}
\subsubsection[{INIT\_\-IMPL}]{\setlength{\rightskip}{0pt plus 5cm}\#define INIT\_\-IMPL(
\begin{DoxyParamCaption}
\item[{}]{...}
\end{DoxyParamCaption}
)~\{NUMARGS(\_\-\_\-VA\_\-ARGS\_\-\_\-), 0, \{\_\-\_\-VA\_\-ARGS\_\-\_\-\}\}}}
\label{interface_8h_a6e8015282e5aac5747daff5bb71d8601}


Definition at line 15 of file interface.h.

\hypertarget{interface_8h_ad620a89e939b586d6a025cf342da8e55}{
\index{interface.h@{interface.h}!MAX\_\-IFACE@{MAX\_\-IFACE}}
\index{MAX\_\-IFACE@{MAX\_\-IFACE}!interface.h@{interface.h}}
\subsubsection[{MAX\_\-IFACE}]{\setlength{\rightskip}{0pt plus 5cm}\#define MAX\_\-IFACE~32}}
\label{interface_8h_ad620a89e939b586d6a025cf342da8e55}


Definition at line 6 of file interface.h.

\hypertarget{interface_8h_a12243bdd01e5366fecc15f395f09221a}{
\index{interface.h@{interface.h}!METHOD\_\-GET@{METHOD\_\-GET}}
\index{METHOD\_\-GET@{METHOD\_\-GET}!interface.h@{interface.h}}
\subsubsection[{METHOD\_\-GET}]{\setlength{\rightskip}{0pt plus 5cm}\#define METHOD\_\-GET(
\begin{DoxyParamCaption}
\item[{}]{iface, }
\item[{}]{method}
\end{DoxyParamCaption}
)~(iface-\/$>$method)}}
\label{interface_8h_a12243bdd01e5366fecc15f395f09221a}


Definition at line 19 of file interface.h.

\hypertarget{interface_8h_a9dda4d034150e3159927f83d9d15d840}{
\index{interface.h@{interface.h}!NUMARGS@{NUMARGS}}
\index{NUMARGS@{NUMARGS}!interface.h@{interface.h}}
\subsubsection[{NUMARGS}]{\setlength{\rightskip}{0pt plus 5cm}\#define NUMARGS(
\begin{DoxyParamCaption}
\item[{}]{...}
\end{DoxyParamCaption}
)~(sizeof((const void$\ast$\mbox{[}$\,$\mbox{]})\{\_\-\_\-VA\_\-ARGS\_\-\_\-\})/sizeof(void$\ast$))}}
\label{interface_8h_a9dda4d034150e3159927f83d9d15d840}


Definition at line 13 of file interface.h.



\subsection{Typedef Documentation}
\hypertarget{interface_8h_a998b025a5015049fd824424d6983f2df}{
\index{interface.h@{interface.h}!iface\_\-impl\_\-ptr@{iface\_\-impl\_\-ptr}}
\index{iface\_\-impl\_\-ptr@{iface\_\-impl\_\-ptr}!interface.h@{interface.h}}
\subsubsection[{iface\_\-impl\_\-ptr}]{\setlength{\rightskip}{0pt plus 5cm}typedef struct {\bf iface\_\-impl}$\ast$ {\bf iface\_\-impl\_\-ptr}}}
\label{interface_8h_a998b025a5015049fd824424d6983f2df}


Definition at line 33 of file interface.h.

\hypertarget{interface_8h_afaa63cd951f41a496111e88acf36dc40}{
\index{interface.h@{interface.h}!iface\_\-ptr@{iface\_\-ptr}}
\index{iface\_\-ptr@{iface\_\-ptr}!interface.h@{interface.h}}
\subsubsection[{iface\_\-ptr}]{\setlength{\rightskip}{0pt plus 5cm}typedef struct {\bf interface}$\ast$ {\bf iface\_\-ptr}}}
\label{interface_8h_afaa63cd951f41a496111e88acf36dc40}


Definition at line 26 of file interface.h.



\subsection{Function Documentation}
\hypertarget{interface_8h_ae4bb16dde691d2513d444ce772f48718}{
\index{interface.h@{interface.h}!interfaceGet@{interfaceGet}}
\index{interfaceGet@{interfaceGet}!interface.h@{interface.h}}
\subsubsection[{interfaceGet}]{\setlength{\rightskip}{0pt plus 5cm}struct {\bf interface}$\ast$ interfaceGet (
\begin{DoxyParamCaption}
\item[{{\bf iface\_\-impl\_\-ptr}}]{iface\_\-impl, }
\item[{const {\bf iface\_\-ptr}}]{\_\-iface}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}read\mbox{]}}}}
\label{interface_8h_ae4bb16dde691d2513d444ce772f48718}
this one is important in selector functions to get the correct interface implementation of a class. 

Definition at line 25 of file interface.c.


\begin{DoxyCode}
{
        const iface_ptr * iface = &_iface;
        void *            dummy;

    if (! iface_impl->simpl) {
        qsort((void**)(iface_impl->impl), iface_impl->nimpl, sizeof(iface_ptr), c
      omp);
        iface_impl->simpl=TRUE;
    }

    dummy = bsearch(
                        &iface,
                        iface_impl->impl,
                        iface_impl->nimpl,
                        sizeof(iface_ptr),
                        comp);

        return dummy? *(struct interface **)dummy : dummy;
}
\end{DoxyCode}
