\hypertarget{group__Eina__Rbtree__Group}{}\section{Red-\/\+Black tree}
\label{group__Eina__Rbtree__Group}\index{Red-\/\+Black tree@{Red-\/\+Black tree}}


These functions provide Red-\/\+Black trees management.  


\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{struct__Eina__Rbtree}{\+\_\+\+Eina\+\_\+\+Rbtree}}
\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{group__Eina__Rbtree__Group_gae475680bfeddfae96f7b7ee3d805dd8a}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE}}~\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} \+\_\+\+\_\+rbtree
\begin{DoxyCompactList}\small\item\em recommended way to declare the inlined Eina\+\_\+\+Rbtree in your type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga83075a5d81b0eddfa2e27bec16b39187}\label{group__Eina__Rbtree__Group_ga83075a5d81b0eddfa2e27bec16b39187}} 
\#define \mbox{\hyperlink{group__Eina__Rbtree__Group_ga83075a5d81b0eddfa2e27bec16b39187}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+G\+ET}}(Rbtree)~(\&((Rbtree)-\/$>$\+\_\+\+\_\+rbtree))
\begin{DoxyCompactList}\small\item\em access the inlined node if it was created with \mbox{\hyperlink{group__Eina__Rbtree__Group_gae475680bfeddfae96f7b7ee3d805dd8a}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE}}. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga4b8d74e991e3d8cb2b4d0e46e9f34266}\label{group__Eina__Rbtree__Group_ga4b8d74e991e3d8cb2b4d0e46e9f34266}} 
\#define \mbox{\hyperlink{group__Eina__Rbtree__Group_ga4b8d74e991e3d8cb2b4d0e46e9f34266}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+C\+O\+N\+T\+A\+I\+N\+E\+R\+\_\+\+G\+ET}}(Ptr,  Type)~((Type $\ast$)((char $\ast$)Ptr -\/ offsetof(Type, \+\_\+\+\_\+rbtree)))
\begin{DoxyCompactList}\small\item\em find back the container of an red black tree. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga7290200e4688bdb1bc0211d938fd1dee}\label{group__Eina__Rbtree__Group_ga7290200e4688bdb1bc0211d938fd1dee}} 
\#define \mbox{\hyperlink{group__Eina__Rbtree__Group_ga7290200e4688bdb1bc0211d938fd1dee}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+C\+M\+P\+\_\+\+N\+O\+D\+E\+\_\+\+CB}}(Function)~((\mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}})Function)
\begin{DoxyCompactList}\small\item\em Cast using \mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}}. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga63dcb37d7929a2a73cb0239e9b53904b}\label{group__Eina__Rbtree__Group_ga63dcb37d7929a2a73cb0239e9b53904b}} 
\#define \mbox{\hyperlink{group__Eina__Rbtree__Group_ga63dcb37d7929a2a73cb0239e9b53904b}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+C\+M\+P\+\_\+\+K\+E\+Y\+\_\+\+CB}}(Function)~((\mbox{\hyperlink{group__Eina__Rbtree__Group_gae9b8fb600f7cd10a6e3a4a2def10ae0c}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Key\+\_\+\+Cb}})Function)
\begin{DoxyCompactList}\small\item\em Cast using \mbox{\hyperlink{group__Eina__Rbtree__Group_gae9b8fb600f7cd10a6e3a4a2def10ae0c}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Key\+\_\+\+Cb}}. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga13ce93addd398ea1884bee8e6c62a6b4}\label{group__Eina__Rbtree__Group_ga13ce93addd398ea1884bee8e6c62a6b4}} 
\#define \mbox{\hyperlink{group__Eina__Rbtree__Group_ga13ce93addd398ea1884bee8e6c62a6b4}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+F\+R\+E\+E\+\_\+\+CB}}(Function)~((\mbox{\hyperlink{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}{Eina\+\_\+\+Rbtree\+\_\+\+Free\+\_\+\+Cb}})Function)
\begin{DoxyCompactList}\small\item\em Cast using \mbox{\hyperlink{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}{Eina\+\_\+\+Rbtree\+\_\+\+Free\+\_\+\+Cb}}. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef struct \mbox{\hyperlink{struct__Eina__Rbtree}{\+\_\+\+Eina\+\_\+\+Rbtree}} \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}}
\begin{DoxyCompactList}\small\item\em Type for a Red-\/\+Black tree node. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}\label{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}} 
typedef \mbox{\hyperlink{group__Eina__Rbtree__Group_ga17e474e713fccc1a8909aa158e707a8d}{Eina\+\_\+\+Rbtree\+\_\+\+Direction}}($\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}}) (const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$left, const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$right, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Function used compare two nodes and see which direction to navigate. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gae9b8fb600f7cd10a6e3a4a2def10ae0c}\label{group__Eina__Rbtree__Group_gae9b8fb600f7cd10a6e3a4a2def10ae0c}} 
typedef int($\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_gae9b8fb600f7cd10a6e3a4a2def10ae0c}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Key\+\_\+\+Cb}}) (const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$node, const void $\ast$key, int length, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Function used compare node with a given key of specified length. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}\label{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}} 
typedef void($\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}{Eina\+\_\+\+Rbtree\+\_\+\+Free\+\_\+\+Cb}}) (\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$node, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Function used free a node. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gadd99cd6522173cd12cfb7001f8815751}\label{group__Eina__Rbtree__Group_gadd99cd6522173cd12cfb7001f8815751}} 
enum \mbox{\hyperlink{group__Eina__Rbtree__Group_gadd99cd6522173cd12cfb7001f8815751}{Eina\+\_\+\+Rbtree\+\_\+\+Color}} \{ \newline
{\bfseries E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+R\+ED}, 
\newline
{\bfseries E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+B\+L\+A\+CK}
 \}
\begin{DoxyCompactList}\small\item\em node color. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga17e474e713fccc1a8909aa158e707a8d}\label{group__Eina__Rbtree__Group_ga17e474e713fccc1a8909aa158e707a8d}} 
enum \mbox{\hyperlink{group__Eina__Rbtree__Group_ga17e474e713fccc1a8909aa158e707a8d}{Eina\+\_\+\+Rbtree\+\_\+\+Direction}} \{ \newline
{\bfseries E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+L\+E\+FT} = 0, 
\newline
{\bfseries E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+R\+I\+G\+HT} = 1
 \}
\begin{DoxyCompactList}\small\item\em walk direction. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_gabc714e2530e2169a35a2eb666653bd13}{eina\+\_\+rbtree\+\_\+inline\+\_\+insert}} (\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root, \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$node, \mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}} cmp, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Inserts a new node inside an existing red black tree. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_ga5f908888587facf1af373ff0484a81ad}{eina\+\_\+rbtree\+\_\+inline\+\_\+remove}} (\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root, \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$node, \mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}} cmp, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Removes a node from an existing red black tree. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{group__Eina__Rbtree__Group_gac27dbcc7fc8196c00a7c93dbae58f329}{eina\+\_\+rbtree\+\_\+delete}} (\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root, \mbox{\hyperlink{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}{Eina\+\_\+\+Rbtree\+\_\+\+Free\+\_\+\+Cb}} func, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Deletes all nodes from a valid red black tree. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gac309abaa1e268cc67279443068311fde}\label{group__Eina__Rbtree__Group_gac309abaa1e268cc67279443068311fde}} 
static \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$ {\bfseries eina\+\_\+rbtree\+\_\+inline\+\_\+lookup} (const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root, const void $\ast$key, int length, \mbox{\hyperlink{group__Eina__Rbtree__Group_gae9b8fb600f7cd10a6e3a4a2def10ae0c}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Key\+\_\+\+Cb}} cmp, const void $\ast$data)
\item 
\mbox{\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator}} $\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_ga5f6b5907defe228cc6995e6594aee55b}{eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix}} (const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root)
\begin{DoxyCompactList}\small\item\em Returns a new prefix iterator associated to a rbtree. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator}} $\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_ga3ac2c32d8c63ace63d0d75d20dec8ccd}{eina\+\_\+rbtree\+\_\+iterator\+\_\+infix}} (const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root)
\begin{DoxyCompactList}\small\item\em Returns a new prefix iterator associated to a rbtree. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator}} $\ast$ \mbox{\hyperlink{group__Eina__Rbtree__Group_gade021eeec2b67bdaf5b63744dbca9012}{eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix}} (const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$root)
\begin{DoxyCompactList}\small\item\em Returns a new prefix iterator associated to a rbtree. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
These functions provide Red-\/\+Black trees management. 

For a brief description look at \href{http://en.wikipedia.org/wiki/Red-black_tree}{\tt http\+://en.\+wikipedia.\+org/wiki/\+Red-\/black\+\_\+tree} . This code is largely inspired from a tutorial written by Julienne Walker at \+: \href{http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx}{\tt http\+://eternallyconfuzzled.\+com/tuts/datastructures/jsw\+\_\+tut\+\_\+rbtree.\+aspx} . The main difference is that this set of function never allocate any data, making them particularly useful for memory management. 

\subsection{Macro Definition Documentation}
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gae475680bfeddfae96f7b7ee3d805dd8a}\label{group__Eina__Rbtree__Group_gae475680bfeddfae96f7b7ee3d805dd8a}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE@{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE}}
\index{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE@{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE}{EINA\_RBTREE}}
{\footnotesize\ttfamily \#define E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+EE~\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} \+\_\+\+\_\+rbtree}



recommended way to declare the inlined Eina\+\_\+\+Rbtree in your type. 


\begin{DoxyCode}
\textcolor{keyword}{struct }my\_type \{
   \mbox{\hyperlink{group__Eina__Rbtree__Group_gae475680bfeddfae96f7b7ee3d805dd8a}{EINA\_RBTREE}};
   \textcolor{keywordtype}{int} my\_value;
   \textcolor{keywordtype}{char} *my\_name;
\};
\end{DoxyCode}


\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{group__Eina__Rbtree__Group_ga83075a5d81b0eddfa2e27bec16b39187}{E\+I\+N\+A\+\_\+\+R\+B\+T\+R\+E\+E\+\_\+\+G\+E\+T()}} 
\end{DoxySeeAlso}


\subsection{Typedef Documentation}
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}\label{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!Eina\+\_\+\+Rbtree@{Eina\+\_\+\+Rbtree}}
\index{Eina\+\_\+\+Rbtree@{Eina\+\_\+\+Rbtree}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{Eina\+\_\+\+Rbtree}{Eina\_Rbtree}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}}}



Type for a Red-\/\+Black tree node. 

It should be inlined into user\textquotesingle{}s type. 

\subsection{Function Documentation}
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gabc714e2530e2169a35a2eb666653bd13}\label{group__Eina__Rbtree__Group_gabc714e2530e2169a35a2eb666653bd13}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!eina\+\_\+rbtree\+\_\+inline\+\_\+insert@{eina\+\_\+rbtree\+\_\+inline\+\_\+insert}}
\index{eina\+\_\+rbtree\+\_\+inline\+\_\+insert@{eina\+\_\+rbtree\+\_\+inline\+\_\+insert}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{eina\+\_\+rbtree\+\_\+inline\+\_\+insert()}{eina\_rbtree\_inline\_insert()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}}$\ast$ eina\+\_\+rbtree\+\_\+inline\+\_\+insert (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{root,  }\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{node,  }\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}}}]{cmp,  }\item[{const void $\ast$}]{data }\end{DoxyParamCaption})}



Inserts a new node inside an existing red black tree. 


\begin{DoxyParams}{Parameters}
{\em root} & The root of an existing valid red black tree. \\
\hline
{\em node} & The new node to insert. \\
\hline
{\em cmp} & The callback that is able to compare two nodes. \\
\hline
{\em data} & Private data to help the compare function. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The new root of the red black tree.
\end{DoxyReturn}
This function insert a new node in a valid red black tree. {\ttfamily N\+U\+LL} is an empty valid red black tree. The resulting new tree is a valid red black tree. This function doesn\textquotesingle{}t allocate any data. 

Referenced by edje\+\_\+box\+\_\+layout\+\_\+register().

\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga5f908888587facf1af373ff0484a81ad}\label{group__Eina__Rbtree__Group_ga5f908888587facf1af373ff0484a81ad}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!eina\+\_\+rbtree\+\_\+inline\+\_\+remove@{eina\+\_\+rbtree\+\_\+inline\+\_\+remove}}
\index{eina\+\_\+rbtree\+\_\+inline\+\_\+remove@{eina\+\_\+rbtree\+\_\+inline\+\_\+remove}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{eina\+\_\+rbtree\+\_\+inline\+\_\+remove()}{eina\_rbtree\_inline\_remove()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}}$\ast$ eina\+\_\+rbtree\+\_\+inline\+\_\+remove (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{root,  }\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{node,  }\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_ga2d2361f39451ad005f1f2aa57091869f}{Eina\+\_\+\+Rbtree\+\_\+\+Cmp\+\_\+\+Node\+\_\+\+Cb}}}]{cmp,  }\item[{const void $\ast$}]{data }\end{DoxyParamCaption})}



Removes a node from an existing red black tree. 


\begin{DoxyParams}{Parameters}
{\em root} & The root of a valid red black tree. \\
\hline
{\em node} & The node to remove from the tree. \\
\hline
{\em cmp} & The callback that is able to compare two nodes. \\
\hline
{\em data} & Private data to help the compare function. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The new root of the red black tree.
\end{DoxyReturn}
This function remove a new node in a valid red black tree that should contain the node that you are removing. This function will return {\ttfamily N\+U\+LL} when the red black tree got empty. This function doesn\textquotesingle{}t free any data. 

Referenced by edje\+\_\+box\+\_\+layout\+\_\+register().

\mbox{\Hypertarget{group__Eina__Rbtree__Group_gac27dbcc7fc8196c00a7c93dbae58f329}\label{group__Eina__Rbtree__Group_gac27dbcc7fc8196c00a7c93dbae58f329}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!eina\+\_\+rbtree\+\_\+delete@{eina\+\_\+rbtree\+\_\+delete}}
\index{eina\+\_\+rbtree\+\_\+delete@{eina\+\_\+rbtree\+\_\+delete}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{eina\+\_\+rbtree\+\_\+delete()}{eina\_rbtree\_delete()}}
{\footnotesize\ttfamily void eina\+\_\+rbtree\+\_\+delete (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{root,  }\item[{\mbox{\hyperlink{group__Eina__Rbtree__Group_gafb59812628d25dc6b904438312e6051b}{Eina\+\_\+\+Rbtree\+\_\+\+Free\+\_\+\+Cb}}}]{func,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})}



Deletes all nodes from a valid red black tree. 


\begin{DoxyParams}{Parameters}
{\em root} & The root of a valid red black tree. \\
\hline
{\em func} & The callback that will free each node. \\
\hline
{\em data} & Private data to help the compare function. \\
\hline
\end{DoxyParams}


Referenced by eina\+\_\+hash\+\_\+free(), and eina\+\_\+hash\+\_\+free\+\_\+buckets().

\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga5f6b5907defe228cc6995e6594aee55b}\label{group__Eina__Rbtree__Group_ga5f6b5907defe228cc6995e6594aee55b}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix@{eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix}}
\index{eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix@{eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix()}{eina\_rbtree\_iterator\_prefix()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator}}$\ast$ eina\+\_\+rbtree\+\_\+iterator\+\_\+prefix (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{root }\end{DoxyParamCaption})}



Returns a new prefix iterator associated to a rbtree. 


\begin{DoxyParams}{Parameters}
{\em root} & The root of rbtree. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new iterator.
\end{DoxyReturn}
This function returns a newly allocated iterator associated to {\ttfamily root}. It will iterate the tree using prefix walk. If {\ttfamily root} is {\ttfamily N\+U\+LL}, this function still returns a valid iterator that will always return false on \mbox{\hyperlink{group__Eina__Iterator__Group_ga83346e93c32dbebc8fd66e4f278140c5}{eina\+\_\+iterator\+\_\+next()}}, thus keeping A\+PI sane.

If the memory can not be allocated, {\ttfamily N\+U\+LL} is returned. Otherwise, a valid iterator is returned.

\begin{DoxyWarning}{Warning}
if the rbtree structure changes then the iterator becomes invalid! That is, if you add or remove nodes this iterator behavior is undefined and your program may crash! 
\end{DoxyWarning}
\mbox{\Hypertarget{group__Eina__Rbtree__Group_ga3ac2c32d8c63ace63d0d75d20dec8ccd}\label{group__Eina__Rbtree__Group_ga3ac2c32d8c63ace63d0d75d20dec8ccd}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!eina\+\_\+rbtree\+\_\+iterator\+\_\+infix@{eina\+\_\+rbtree\+\_\+iterator\+\_\+infix}}
\index{eina\+\_\+rbtree\+\_\+iterator\+\_\+infix@{eina\+\_\+rbtree\+\_\+iterator\+\_\+infix}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{eina\+\_\+rbtree\+\_\+iterator\+\_\+infix()}{eina\_rbtree\_iterator\_infix()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator}}$\ast$ eina\+\_\+rbtree\+\_\+iterator\+\_\+infix (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{root }\end{DoxyParamCaption})}



Returns a new prefix iterator associated to a rbtree. 


\begin{DoxyParams}{Parameters}
{\em root} & The root of rbtree. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new iterator.
\end{DoxyReturn}
This function returns a newly allocated iterator associated to {\ttfamily root}. It will iterate the tree using infix walk. If {\ttfamily root} is {\ttfamily N\+U\+LL}, this function still returns a valid iterator that will always return false on \mbox{\hyperlink{group__Eina__Iterator__Group_ga83346e93c32dbebc8fd66e4f278140c5}{eina\+\_\+iterator\+\_\+next()}}, thus keeping A\+PI sane.

If the memory can not be allocated, {\ttfamily N\+U\+LL} is returned. Otherwise, a valid iterator is returned.

\begin{DoxyWarning}{Warning}
if the rbtree structure changes then the iterator becomes invalid! That is, if you add or remove nodes this iterator behavior is undefined and your program may crash! 
\end{DoxyWarning}
\mbox{\Hypertarget{group__Eina__Rbtree__Group_gade021eeec2b67bdaf5b63744dbca9012}\label{group__Eina__Rbtree__Group_gade021eeec2b67bdaf5b63744dbca9012}} 
\index{Red-\/\+Black tree@{Red-\/\+Black tree}!eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix@{eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix}}
\index{eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix@{eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix}!Red-\/\+Black tree@{Red-\/\+Black tree}}
\subsubsection{\texorpdfstring{eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix()}{eina\_rbtree\_iterator\_postfix()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator}}$\ast$ eina\+\_\+rbtree\+\_\+iterator\+\_\+postfix (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__Eina__Rbtree__Group_gafa6fe42bbf09c210d2ad96b6141bedb0}{Eina\+\_\+\+Rbtree}} $\ast$}]{root }\end{DoxyParamCaption})}



Returns a new prefix iterator associated to a rbtree. 


\begin{DoxyParams}{Parameters}
{\em root} & The root of rbtree. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new iterator.
\end{DoxyReturn}
This function returns a newly allocated iterator associated to {\ttfamily root}. It will iterate the tree using postfix walk. If {\ttfamily root} is {\ttfamily N\+U\+LL}, this function still returns a valid iterator that will always return false on \mbox{\hyperlink{group__Eina__Iterator__Group_ga83346e93c32dbebc8fd66e4f278140c5}{eina\+\_\+iterator\+\_\+next()}}, thus keeping A\+PI sane.

If the memory can not be allocated, {\ttfamily N\+U\+LL} is returned. Otherwise, a valid iterator is returned.

\begin{DoxyWarning}{Warning}
if the rbtree structure changes then the iterator becomes invalid! That is, if you add or remove nodes this iterator behavior is undefined and your program may crash! 
\end{DoxyWarning}
