\hypertarget{group__Eina__List__Group}{\section{List}
\label{group__Eina__List__Group}\index{List@{List}}
}


These functions provide double linked list management.  


\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{struct__Eina__List}{\+\_\+\+Eina\+\_\+\+List}
\begin{DoxyCompactList}\small\item\em Type for a generic double linked list. \end{DoxyCompactList}\item 
struct \hyperlink{struct__Eina__List__Accounting}{\+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting}
\begin{DoxyCompactList}\small\item\em Cache used to store the last element of a list and the number of elements, for fast access. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \hyperlink{group__Eina__List__Group_gad02f746a08ee0b12b7ed66d4bc0d71d8}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H}(list, l, data)
\begin{DoxyCompactList}\small\item\em Macro to iterate over a list. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eina__List__Group_ga8a98f0f44dba13749d27337837b3cfb1}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H}(list, l, data)
\begin{DoxyCompactList}\small\item\em Macro to iterate over a list in the reverse order. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eina__List__Group_ga5b4d2aac696cd2558aaed03e3929d873}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}(list, l, l\+\_\+next, data)
\begin{DoxyCompactList}\small\item\em Macro to iterate over a list with support for node deletion. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eina__List__Group_gad1bdb753e4c9eca59a6da87094d516b0}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}(list, l, l\+\_\+prev, data)
\begin{DoxyCompactList}\small\item\em Macro to iterate over a list in the reverse order with support for deletion. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eina__List__Group_gae27a2c686a0a11693f9b06957c9bba83}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E}(list, data)
\begin{DoxyCompactList}\small\item\em Macro to remove each list node while having access to each node's data. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{typedef struct \hyperlink{struct__Eina__List}{\+\_\+\+Eina\+\_\+\+List} \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List}}\label{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}

\begin{DoxyCompactList}\small\item\em Type for a generic double linked list. \end{DoxyCompactList}\item 
\hypertarget{group__Eina__List__Group_gae6fd9c3d1d8d2c9dd01ef647494f5862}{typedef struct \\*
\hyperlink{struct__Eina__List__Accounting}{\+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting} \hyperlink{group__Eina__List__Group_gae6fd9c3d1d8d2c9dd01ef647494f5862}{Eina\+\_\+\+List\+\_\+\+Accounting}}\label{group__Eina__List__Group_gae6fd9c3d1d8d2c9dd01ef647494f5862}

\begin{DoxyCompactList}\small\item\em Cache used to store the last element of a list and the number of elements, for fast access. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga92ec14d1a1040a361c4d8cd0ab7b0ecc}{eina\+\_\+list\+\_\+append} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Append the given data to the given linked list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga9f35bfc7c5b798014c3e0a74bc6f39ad}{eina\+\_\+list\+\_\+prepend} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Prepends the given data to the given linked list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga4676c189ca4bcfa22d7ecfbcd00200ae}{eina\+\_\+list\+\_\+append\+\_\+relative} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data, const void $\ast$relative)
\begin{DoxyCompactList}\small\item\em Insert the given data into the given linked list after the specified data. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gafa705d4483487e53d1be93a30e43c66d}{eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$relative)
\begin{DoxyCompactList}\small\item\em Append a list node to a linked list after the specified member. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gad44370d18554ff250d2e9ddac4653caf}{eina\+\_\+list\+\_\+prepend\+\_\+relative} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data, const void $\ast$relative)
\begin{DoxyCompactList}\small\item\em Prepend a data pointer to a linked list before the specified member. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga03a77b1579ee83bcab4bc3d67375d4b1}{eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$relative)
\begin{DoxyCompactList}\small\item\em Prepend a list node to a linked list before the specified member. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga00740e04bfb71ad5c9ac145f766de3a4}{eina\+\_\+list\+\_\+sorted\+\_\+insert} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Insert a new node into a sorted list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga7c0c6e07aa592a1cb2e010049a718035}{eina\+\_\+list\+\_\+remove} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Remove the first instance of the specified data from the given list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga7edefe0975beecc76c02525fb9200f5a}{eina\+\_\+list\+\_\+remove\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$remove\+\_\+list)
\begin{DoxyCompactList}\small\item\em Remove the specified list node. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga1037e7ab9d39bece24d864526332828c}{eina\+\_\+list\+\_\+promote\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$move\+\_\+list)
\begin{DoxyCompactList}\small\item\em Move the specified data to the head of the list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga082644881a2333bd16208c00931703cd}{eina\+\_\+list\+\_\+demote\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$move\+\_\+list)
\begin{DoxyCompactList}\small\item\em Move the specified data to the tail of the list. \end{DoxyCompactList}\item 
void $\ast$ \hyperlink{group__Eina__List__Group_ga48e7356e1e0975bcabfce6f5c4ec9160}{eina\+\_\+list\+\_\+data\+\_\+find} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Find a member of a list and return the member. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga860144725b63d93b8f84cdf1d816bda8}{eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Find a member of a list and return the list node containing that member. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__List__Group_ga46a38e2bf6b9a52b7a5dd17c63ca5f60}{eina\+\_\+list\+\_\+move} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$$\ast$to, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$$\ast$from, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Move a data pointer from one list to another. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__List__Group_ga7e8227ff134ddf5c70fa0a0ede35fe64}{eina\+\_\+list\+\_\+move\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$$\ast$to, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$$\ast$from, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$data)
\begin{DoxyCompactList}\small\item\em Move a list node from one list to another. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}{eina\+\_\+list\+\_\+free} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Free an entire list and all the nodes, ignoring the data contained. \end{DoxyCompactList}\item 
void $\ast$ \hyperlink{group__Eina__List__Group_ga4bd18d6ffc9920cd904bb7769f2fad8e}{eina\+\_\+list\+\_\+nth} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, unsigned int n)
\begin{DoxyCompactList}\small\item\em Get the nth member's data pointer in a list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gad4a1e3b0fdecd8ed4cb2ff592ceeb553}{eina\+\_\+list\+\_\+nth\+\_\+list} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, unsigned int n)
\begin{DoxyCompactList}\small\item\em Get the nth member's list node in a list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga2f0c56af6f6ae8f149c317d4152b407d}{eina\+\_\+list\+\_\+reverse} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Reverse all the elements in the list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga67cb29eef0bf0a3cb2cc160ae506a07f}{eina\+\_\+list\+\_\+reverse\+\_\+clone} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Clone (copy) all the elements in the list in reverse order. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gae26360b939fc874e7ae4fab705bd3ac3}{eina\+\_\+list\+\_\+clone} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Clone (copy) all the elements in the list in exactly same order. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, unsigned int limit, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func)
\begin{DoxyCompactList}\small\item\em Sort a list according to the ordering func will return. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga2b03712f212a6557885b11ea382f5459}{eina\+\_\+list\+\_\+shuffle} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga7331c88690f77b217b19cc5678cbdc24}{Eina\+\_\+\+Random\+\_\+\+Cb} func)
\begin{DoxyCompactList}\small\item\em Shuffle list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga743c5a32e64f227059d2baa4dba63a6b}{eina\+\_\+list\+\_\+merge} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$left, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$right)
\begin{DoxyCompactList}\small\item\em Merge two list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga66747ee5bad3c35ea268385f6c5e174b}{eina\+\_\+list\+\_\+sorted\+\_\+merge} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$left, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$right, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func)
\begin{DoxyCompactList}\small\item\em Merge two sorted list according to the ordering func will return. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gaf45625cf0f450aae2a4e949539b22374}{eina\+\_\+list\+\_\+split\+\_\+list} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$relative, \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$$\ast$right)
\begin{DoxyCompactList}\small\item\em Split a list into 2 lists. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func, const void $\ast$data, int $\ast$result\+\_\+cmp)
\begin{DoxyCompactList}\small\item\em Returns node nearest to data is in the sorted list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga6a0564d119664930b3a41657c1551e09}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Returns node if data is in the sorted list. \end{DoxyCompactList}\item 
void $\ast$ \hyperlink{group__Eina__List__Group_gae18055abaafef1714bd9f2fd3fd0cc45}{eina\+\_\+list\+\_\+search\+\_\+sorted} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Returns node data if it is in the sorted list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Returns node if data is in the unsorted list. \end{DoxyCompactList}\item 
void $\ast$ \hyperlink{group__Eina__List__Group_ga2c093bfd321df8f286fcfeb3d13d675f}{eina\+\_\+list\+\_\+search\+\_\+unsorted} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, \hyperlink{group__Eina__Types__Group_ga1b31ffcc0d46eed63a2381c5a011b486}{Eina\+\_\+\+Compare\+\_\+\+Cb} func, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Returns node data if it is in the unsorted list. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_ga4c3a9eb5062f3b44c5dcef845cc7a72a}{eina\+\_\+list\+\_\+last} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Get the last list node in the list. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gac264188a790dda0761d587578605bfd1}{eina\+\_\+list\+\_\+next} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Get the next list node after the specified list node. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$ \hyperlink{group__Eina__List__Group_gacd8294cbab7b4e053bcf754a92dd68e3}{eina\+\_\+list\+\_\+prev} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Get the previous list node before the specified list node. \end{DoxyCompactList}\item 
static void $\ast$ \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\+\_\+list\+\_\+data\+\_\+get} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Get the list node data member. \end{DoxyCompactList}\item 
static void $\ast$ \hyperlink{group__Eina__List__Group_ga213776ffa28b780440da26f673917687}{eina\+\_\+list\+\_\+data\+\_\+set} (\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Set the list node data member. \end{DoxyCompactList}\item 
static unsigned int \hyperlink{group__Eina__List__Group_ga301729054a498a2df09a5f1dd760697e}{eina\+\_\+list\+\_\+count} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Get the count of the number of items in a list. \end{DoxyCompactList}\item 
static void $\ast$ \hyperlink{group__Eina__List__Group_ga2527a7564e99615a6d0d87bc1a988592}{eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Returns the last list node's data. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator} $\ast$ \hyperlink{group__Eina__List__Group_gabcfb6a861aa7c0db0ee36252ac2a254d}{eina\+\_\+list\+\_\+iterator\+\_\+new} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Returned a new iterator associated to a list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Iterator__Group_ga15b975bb881d955249ce13d4ebc96948}{Eina\+\_\+\+Iterator} $\ast$ \hyperlink{group__Eina__List__Group_gaaa11ab61d3d86c9350cb0757468a9089}{eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Returned a new reversed iterator associated to a list. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Accessor__Group_ga65199ea5201a1867471028477dc26744}{Eina\+\_\+\+Accessor} $\ast$ \hyperlink{group__Eina__List__Group_ga6901b2ea29c9bc34a486dae00d3cf608}{eina\+\_\+list\+\_\+accessor\+\_\+new} (const \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} $\ast$list)
\begin{DoxyCompactList}\small\item\em Returned a new accessor associated to a list. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
These functions provide double linked list management. 

Eina\+\_\+\+List is a doubly linked list. It can store data of any type in the form of void pointers. It has convenience functions to do all the common operations which means it should rarely if ever be necessary to directly access the struct's fields. Nevertheless it can be useful to understand the inner workings of the data structure being used.

\hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} nodes keep references to the previous node, the next node, its data and to an accounting structure.

  
\begin{DoxyImage}
\includegraphics{eina_list}
\caption{width=5cm}
\end{DoxyImage}


\hyperlink{group__Eina__List__Group_gae6fd9c3d1d8d2c9dd01ef647494f5862}{Eina\+\_\+\+List\+\_\+\+Accounting} is used to improve the performance of some functions. It is private and {\bfseries should not} be modified. It contains a reference to the end of the list and the number of elements in the list.

\begin{DoxyNote}{Note}
Every function that modifies the contents of the list returns a pointer to the head of the list and it is essential that this be pointer be used in any future references to the list.
\end{DoxyNote}
Most functions have two versions that have the same effect but operate on different arguments, the {\itshape plain} functions operate over data(eg.\+: \hyperlink{group__Eina__List__Group_ga4676c189ca4bcfa22d7ecfbcd00200ae}{eina\+\_\+list\+\_\+append\+\_\+relative}, \hyperlink{group__Eina__List__Group_ga7c0c6e07aa592a1cb2e010049a718035}{eina\+\_\+list\+\_\+remove}, \hyperlink{group__Eina__List__Group_ga48e7356e1e0975bcabfce6f5c4ec9160}{eina\+\_\+list\+\_\+data\+\_\+find}), the {\itshape list} versions of these functions operate on \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} nodes.

\begin{DoxyWarning}{Warning}
You must {\bfseries always} use the pointer to the first element of the list as the list! 

You must {\bfseries never} use a pointer to an element in the middle of the list as the list!
\end{DoxyWarning}
Here are some examples of \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} usage\+: \begin{DoxyItemize}
\item \hyperlink{eina_list_01_example_page}{Adding elements to Eina\+\_\+\+List} \item \hyperlink{eina_list_02_example_page}{Sorting Eina\+\_\+\+List elements} \item \hyperlink{eina_list_03_example_page}{Reordering Eina\+\_\+\+List elements} \item \hyperlink{eina_list_04_example_page}{Eina\+\_\+\+List and memory allocation} \end{DoxyItemize}


\subsection{Macro Definition Documentation}
\hypertarget{group__Eina__List__Group_gad02f746a08ee0b12b7ed66d4bc0d71d8}{\index{List@{List}!E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H}}
\index{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H}!List@{List}}
\subsubsection[{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H(
\begin{DoxyParamCaption}
\item[{}]{list, }
\item[{}]{l, }
\item[{}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gad02f746a08ee0b12b7ed66d4bc0d71d8}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{for} (l = list,                         \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l);     \(\backslash\)
       l;                                \(\backslash\)
       l = \hyperlink{group__Eina__List__Group_gac264188a790dda0761d587578605bfd1}{eina\_list\_next}(l),            \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l))
\end{DoxyCode}


Macro to iterate over a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to iterate over. \\
\hline
{\em l} & A list that is used as an iterator and points to the current node. \\
\hline
{\em data} & Current item's data.\\
\hline
\end{DoxyParams}
This macro iterates over {\ttfamily list} from the first element to the last. {\ttfamily data} is the data related to the current element. {\ttfamily l} is an \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} used as the list iterator.

The following diagram illustrates this macro iterating over a list of four elements(\char`\"{}one\char`\"{}, \char`\"{}two\char`\"{}, \char`\"{}three\char`\"{} and \char`\"{}four\char`\"{})\+:  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{eina-list-foreach}}
\end{DoxyImageNoCaption}


It can be used to free list data, as in the following example\+:


\begin{DoxyCode}
1 Eina\_List *list;
2 Eina\_List *l;
3 char      *data;
4 
5 // list is already filled,
6 // its elements are just duplicated strings,
7 // EINA\_LIST\_FOREACH will be used to free those strings
8 
9 EINA\_LIST\_FOREACH(list, l, data)
10   free(data);
11 eina\_list\_free(list);
\end{DoxyCode}


\begin{DoxyNote}{Note}
This is not the optimal way to release memory allocated to a list, since it iterates over the list twice. For an optimized algorithm, use \hyperlink{group__Eina__List__Group_gae27a2c686a0a11693f9b06957c9bba83}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E()}.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.

Be careful when deleting list nodes. If you remove the current node and continue iterating, the code will fail because the macro will not be able to get the next node. Notice that it's O\+K to remove any node if you stop the loop after that. For destructive operations such as this, consider using \hyperlink{group__Eina__List__Group_ga5b4d2aac696cd2558aaed03e3929d873}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E()}. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_con_server_simple_example_8c-example}{ecore\+\_\+con\+\_\+server\+\_\+simple\+\_\+example.\+c}, \hyperlink{ecore_con_url_cookies_example_8c-example}{ecore\+\_\+con\+\_\+url\+\_\+cookies\+\_\+example.\+c}, \hyperlink{ecore_con_url_headers_example_8c-example}{ecore\+\_\+con\+\_\+url\+\_\+headers\+\_\+example.\+c}, \hyperlink{ecore_evas_basics_example_8c-example}{ecore\+\_\+evas\+\_\+basics\+\_\+example.\+c}, \hyperlink{ecore_imf_example_8c-example}{ecore\+\_\+imf\+\_\+example.\+c}, \hyperlink{edje-box2_8c-example}{edje-\/box2.\+c}, \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}, \hyperlink{eina_inlist_02_8c-example}{eina\+\_\+inlist\+\_\+02.\+c}, \hyperlink{eina_list_01_8c-example}{eina\+\_\+list\+\_\+01.\+c}, \hyperlink{evas-box_8c-example}{evas-\/box.\+c}, \hyperlink{evas-buffer-simple_8c-example}{evas-\/buffer-\/simple.\+c}, \hyperlink{evas-events_8c-example}{evas-\/events.\+c}, \hyperlink{evas-init-shutdown_8c-example}{evas-\/init-\/shutdown.\+c}, and \hyperlink{test_growing_balls_8c-example}{test\+\_\+growing\+\_\+balls.\+c}.\end{Desc}


Referenced by ecore\+\_\+con\+\_\+eet\+\_\+client\+\_\+connect\+\_\+callback\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+client\+\_\+disconnect\+\_\+callback\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+connect\+\_\+callback\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+disconnect\+\_\+callback\+\_\+del(), ecore\+\_\+drm\+\_\+device\+\_\+find(), ecore\+\_\+drm\+\_\+outputs\+\_\+geometry\+\_\+get(), ecore\+\_\+evas\+\_\+aux\+\_\+hint\+\_\+add(), ecore\+\_\+evas\+\_\+aux\+\_\+hint\+\_\+del(), ecore\+\_\+evas\+\_\+aux\+\_\+hint\+\_\+val\+\_\+set(), ecore\+\_\+evas\+\_\+aux\+\_\+hints\+\_\+allowed\+\_\+get(), ecore\+\_\+file\+\_\+app\+\_\+installed(), ecore\+\_\+file\+\_\+app\+\_\+list(), ecore\+\_\+file\+\_\+path\+\_\+dir\+\_\+exists(), ecore\+\_\+fork\+\_\+reset(), ecore\+\_\+fork\+\_\+reset\+\_\+callback\+\_\+del(), ecore\+\_\+getopt\+\_\+callback\+\_\+ecore\+\_\+evas\+\_\+list\+\_\+engines(), ecore\+\_\+imf\+\_\+context\+\_\+event\+\_\+callback\+\_\+call(), ecore\+\_\+imf\+\_\+context\+\_\+input\+\_\+panel\+\_\+event\+\_\+callback\+\_\+call(), ecore\+\_\+thread\+\_\+cancel(), edje\+\_\+available\+\_\+modules\+\_\+get(), edje\+\_\+collection\+\_\+cache\+\_\+flush(), edje\+\_\+collection\+\_\+cache\+\_\+set(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+add(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+colors\+\_\+get(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+colors\+\_\+set(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+del(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+name\+\_\+set(), edje\+\_\+edit\+\_\+color\+\_\+classes\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+group\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+after\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+target\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+transition\+\_\+state\+\_\+set(), edje\+\_\+edit\+\_\+source\+\_\+generate(), edje\+\_\+edit\+\_\+state\+\_\+color\+\_\+class\+\_\+set(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+bool\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+choice\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+double\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+int\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+set(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+string\+\_\+get(), edje\+\_\+edit\+\_\+style\+\_\+tags\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+styles\+\_\+list\+\_\+get(), edje\+\_\+external\+\_\+param\+\_\+find(), edje\+\_\+freeze(), edje\+\_\+perspective\+\_\+global\+\_\+set(), edje\+\_\+perspective\+\_\+set(), edje\+\_\+scale\+\_\+set(), edje\+\_\+thaw(), eeze\+\_\+udev\+\_\+find\+\_\+similar\+\_\+from\+\_\+syspath(), eeze\+\_\+udev\+\_\+find\+\_\+unlisted\+\_\+similar(), efreet\+\_\+desktop\+\_\+command\+\_\+local\+\_\+get(), efreet\+\_\+desktop\+\_\+command\+\_\+progress\+\_\+get(), efreet\+\_\+desktop\+\_\+string\+\_\+list\+\_\+join(), efreet\+\_\+icon\+\_\+list\+\_\+find(), efreet\+\_\+menu\+\_\+async\+\_\+get(), efreet\+\_\+menu\+\_\+dump(), efreet\+\_\+menu\+\_\+get(), efreet\+\_\+menu\+\_\+ref(), efreet\+\_\+mime\+\_\+globs\+\_\+type\+\_\+get(), efreet\+\_\+trash\+\_\+ls(), efreet\+\_\+util\+\_\+menus\+\_\+find(), eina\+\_\+file\+\_\+common\+\_\+map\+\_\+free(), eina\+\_\+file\+\_\+flush(), eina\+\_\+file\+\_\+map\+\_\+faulted(), eina\+\_\+list\+\_\+append\+\_\+relative(), eina\+\_\+list\+\_\+clone(), eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list(), eina\+\_\+list\+\_\+prepend\+\_\+relative(), eina\+\_\+list\+\_\+reverse\+\_\+clone(), eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list(), evas\+\_\+gl\+\_\+current\+\_\+context\+\_\+get(), evas\+\_\+gl\+\_\+current\+\_\+surface\+\_\+get(), evas\+\_\+object\+\_\+box\+\_\+children\+\_\+get(), evas\+\_\+post\+\_\+event\+\_\+callback\+\_\+remove(), evas\+\_\+post\+\_\+event\+\_\+callback\+\_\+remove\+\_\+full(), evas\+\_\+textblock\+\_\+cursor\+\_\+geometry\+\_\+bidi\+\_\+get(), and evas\+\_\+textblock\+\_\+style\+\_\+set().

\hypertarget{group__Eina__List__Group_ga8a98f0f44dba13749d27337837b3cfb1}{\index{List@{List}!E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H}}
\index{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H}!List@{List}}
\subsubsection[{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H(
\begin{DoxyParamCaption}
\item[{}]{list, }
\item[{}]{l, }
\item[{}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga8a98f0f44dba13749d27337837b3cfb1}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{for} (l = \hyperlink{group__Eina__List__Group_ga4c3a9eb5062f3b44c5dcef845cc7a72a}{eina\_list\_last}(list),                 \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l);             \(\backslash\)
       l;                                        \(\backslash\)
       l = \hyperlink{group__Eina__List__Group_gacd8294cbab7b4e053bcf754a92dd68e3}{eina\_list\_prev}(l),                    \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l))
\end{DoxyCode}


Macro to iterate over a list in the reverse order. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to iterate over. \\
\hline
{\em l} & A list that is used as an iterator and points to the current node. \\
\hline
{\em data} & Current item's data.\\
\hline
\end{DoxyParams}
This macro works like E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H, but iterates from the last element of a list to the first. {\ttfamily data} is the data related to the current element, while {\ttfamily l} is an \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} that is used as the list iterator.

The following diagram illustrates this macro iterating over a list of four elements(\char`\"{}one\char`\"{}, \char`\"{}two\char`\"{}, \char`\"{}three\char`\"{} and \char`\"{}four\char`\"{})\+:  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{eina-list-reverse-foreach}}
\end{DoxyImageNoCaption}


It can be used to free list data, as in the following example\+:


\begin{DoxyCode}
1 Eina\_List *list;
2 Eina\_List *l;
3 char      *data;
4 
5 // list is already filled,
6 // its elements are just duplicated strings,
7 // EINA\_LIST\_REVERSE\_FOREACH will be used to free those strings
8 
9 EINA\_LIST\_REVERSE\_FOREACH(list, l, data)
10   free(data);
11 eina\_list\_free(list);
\end{DoxyCode}


\begin{DoxyNote}{Note}
This is not the optimal way to release memory allocated to a list, since it iterates over the list twice. For an optimized algorithm, use \hyperlink{group__Eina__List__Group_gae27a2c686a0a11693f9b06957c9bba83}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E()}.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.

Be careful when deleting list nodes. If you remove the current node and continue iterating, the code will fail because the macro will not be able to get the next node. Notice that it's O\+K to remove any node if you stop the loop after that. For destructive operations such as this, consider using \hyperlink{group__Eina__List__Group_gad1bdb753e4c9eca59a6da87094d516b0}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E()}. 
\end{DoxyWarning}
\hypertarget{group__Eina__List__Group_ga5b4d2aac696cd2558aaed03e3929d873}{\index{List@{List}!E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}}
\index{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}!List@{List}}
\subsubsection[{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E(
\begin{DoxyParamCaption}
\item[{}]{list, }
\item[{}]{l, }
\item[{}]{l\+\_\+next, }
\item[{}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga5b4d2aac696cd2558aaed03e3929d873}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{for} (l = list,                                      \(\backslash\)
       l\_next = \hyperlink{group__Eina__List__Group_gac264188a790dda0761d587578605bfd1}{eina\_list\_next}(l),                    \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l);                  \(\backslash\)
       l;                                             \(\backslash\)
       l = l\_next,                                    \(\backslash\)
       l\_next = \hyperlink{group__Eina__List__Group_gac264188a790dda0761d587578605bfd1}{eina\_list\_next}(l),                    \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l))
\end{DoxyCode}


Macro to iterate over a list with support for node deletion. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to iterate over. \\
\hline
{\em l} & A list that is used as an iterator and points to the current node. \\
\hline
{\em l\+\_\+next} & A list that is used as an iterator and points to the next node. \\
\hline
{\em data} & Current item's data.\\
\hline
\end{DoxyParams}
This macro iterates over {\ttfamily list} from the first element to the last. {\ttfamily data} is the data related to the current element. {\ttfamily l} is an \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} used as the list iterator.

Since this macro stores a pointer to the next list node in {\ttfamily l\+\_\+next}, deleting the current node and continuing looping is safe.

The following diagram illustrates this macro iterating over a list of four elements(\char`\"{}one\char`\"{}, \char`\"{}two\char`\"{}, \char`\"{}three\char`\"{} and \char`\"{}four\char`\"{})\+:  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{eina-list-foreach-safe}}
\end{DoxyImageNoCaption}


This macro can be used to free list nodes, as in the following example\+:


\begin{DoxyCode}
1 Eina\_List *list;
2 Eina\_List *l;
3 Eina\_List *l\_next;
4 char      *data;
5 
6 // list is already filled,
7 // its elements are just duplicated strings,
8 // EINA\_LIST\_FOREACH\_SAFE will be used to free elements that match "key".
9 
10 EINA\_LIST\_FOREACH\_SAFE(list, l, l\_next, data)
11   if (strcmp(data, "key") == 0)
12     \{
13        free(data);
14        list = eina\_list\_remove\_list(list, l);
15     \}
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eina_inlist_02_8c-example}{eina\+\_\+inlist\+\_\+02.\+c}.\end{Desc}


Referenced by ecore\+\_\+con\+\_\+shutdown(), ecore\+\_\+fork\+\_\+reset(), ecore\+\_\+imf\+\_\+context\+\_\+event\+\_\+callback\+\_\+del(), ecore\+\_\+imf\+\_\+context\+\_\+input\+\_\+panel\+\_\+event\+\_\+callback\+\_\+del(), ecore\+\_\+ipc\+\_\+shutdown(), edje\+\_\+edit\+\_\+program\+\_\+del(), and edje\+\_\+edit\+\_\+program\+\_\+stop\+\_\+all().

\hypertarget{group__Eina__List__Group_gad1bdb753e4c9eca59a6da87094d516b0}{\index{List@{List}!E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}}
\index{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}!List@{List}}
\subsubsection[{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+R\+E\+V\+E\+R\+S\+E\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E(
\begin{DoxyParamCaption}
\item[{}]{list, }
\item[{}]{l, }
\item[{}]{l\+\_\+prev, }
\item[{}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gad1bdb753e4c9eca59a6da87094d516b0}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{for} (l = \hyperlink{group__Eina__List__Group_ga4c3a9eb5062f3b44c5dcef845cc7a72a}{eina\_list\_last}(list),                              \(\backslash\)
       l\_prev = \hyperlink{group__Eina__List__Group_gacd8294cbab7b4e053bcf754a92dd68e3}{eina\_list\_prev}(l),                            \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l);                          \(\backslash\)
       l;                                                     \(\backslash\)
       l = l\_prev,                                            \(\backslash\)
       l\_prev = \hyperlink{group__Eina__List__Group_gacd8294cbab7b4e053bcf754a92dd68e3}{eina\_list\_prev}(l),                            \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(l))
\end{DoxyCode}


Macro to iterate over a list in the reverse order with support for deletion. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to iterate over. \\
\hline
{\em l} & A list that is used as an iterator and points to the current node. \\
\hline
{\em l\+\_\+prev} & A list that is used as an iterator and points to the previous node. \\
\hline
{\em data} & Current item's data.\\
\hline
\end{DoxyParams}
This macro works like E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E, but iterates from the last element of a list to the first. {\ttfamily data} is the data related to the current element, while {\ttfamily l} is an \hyperlink{group__Eina__List__Group_ga3295e1210efea1fb0fd6acbf3cbc1f29}{Eina\+\_\+\+List} that is used as the list iterator.

Since this macro stores a pointer to the previous list node in {\ttfamily l\+\_\+prev}, deleting the current node and continuing looping is safe.

The following diagram illustrates this macro iterating over a list of four elements(\char`\"{}one\char`\"{}, \char`\"{}two\char`\"{}, \char`\"{}three\char`\"{} and \char`\"{}four\char`\"{})\+:  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{eina-list-reverse-foreach-safe}}
\end{DoxyImageNoCaption}


This macro can be used to free list nodes, as in the following example\+:


\begin{DoxyCode}
1 Eina\_List *list;
2 Eina\_List *l;
3 Eina\_List *l\_prev;
4 char       *data;
5 
6 // list is already filled,
7 // its elements are just duplicated strings,
8 // EINA\_LIST\_REVERSE\_FOREACH\_SAFE will be used to free elements that match "key".
9 
10 EINA\_LIST\_REVERSE\_FOREACH\_SAFE(list, l, l\_prev, data)
11   if (strcmp(data, "key") == 0)
12     \{
13        free(data);
14        list = eina\_list\_remove\_list(list, l);
15     \}
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\hypertarget{group__Eina__List__Group_gae27a2c686a0a11693f9b06957c9bba83}{\index{List@{List}!E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E}}
\index{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E@{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E}!List@{List}}
\subsubsection[{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E(
\begin{DoxyParamCaption}
\item[{}]{list, }
\item[{}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gae27a2c686a0a11693f9b06957c9bba83}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keywordflow}{for} (data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(list);          \(\backslash\)
       list;                                     \(\backslash\)
       list = \hyperlink{group__Eina__List__Group_ga7edefe0975beecc76c02525fb9200f5a}{eina\_list\_remove\_list}(list, list), \(\backslash\)
       data = \hyperlink{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{eina\_list\_data\_get}(list))
\end{DoxyCode}


Macro to remove each list node while having access to each node's data. 


\begin{DoxyParams}{Parameters}
{\em list} & The list that will be cleared. \\
\hline
{\em data} & Current node's data.\\
\hline
\end{DoxyParams}
This macro will call \hyperlink{group__Eina__List__Group_ga7edefe0975beecc76c02525fb9200f5a}{eina\+\_\+list\+\_\+remove\+\_\+list} for each list node, and store the data contained in the current node in {\ttfamily data}.

The following diagram illustrates this macro iterating over a list of four elements(\char`\"{}one\char`\"{}, \char`\"{}two\char`\"{}, \char`\"{}three\char`\"{} and \char`\"{}four\char`\"{})\+:  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{eina-list-free}}
\end{DoxyImageNoCaption}


If you do not need to release node data, it is easier to call \hyperlink{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}{eina\+\_\+list\+\_\+free()}.


\begin{DoxyCode}
1 Eina\_List *list;
2 char      *data;
3 
4 // list is already filled,
5 // its elements are just duplicated strings,
6 
7 EINA\_LIST\_FREE(list, data)
8   free(data);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}{eina\+\_\+list\+\_\+free()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_imf_example_8c-example}{ecore\+\_\+imf\+\_\+example.\+c}, \hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}, \hyperlink{edje-color-class_8c-example}{edje-\/color-\/class.\+c}, \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}, \hyperlink{eina_list_04_8c-example}{eina\+\_\+list\+\_\+04.\+c}, and \hyperlink{eina_tiler_01_8c-example}{eina\+\_\+tiler\+\_\+01.\+c}.\end{Desc}


Referenced by ecore\+\_\+avahi\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+free(), ecore\+\_\+con\+\_\+shutdown(), ecore\+\_\+con\+\_\+url\+\_\+additional\+\_\+headers\+\_\+clear(), ecore\+\_\+con\+\_\+url\+\_\+shutdown(), ecore\+\_\+drm\+\_\+device\+\_\+find(), ecore\+\_\+drm\+\_\+device\+\_\+free(), ecore\+\_\+file\+\_\+app\+\_\+list(), ecore\+\_\+file\+\_\+download\+\_\+abort\+\_\+all(), ecore\+\_\+getopt\+\_\+list\+\_\+free(), ecore\+\_\+imf\+\_\+context\+\_\+default\+\_\+id\+\_\+by\+\_\+canvas\+\_\+type\+\_\+get(), ecore\+\_\+imf\+\_\+context\+\_\+del(), ecore\+\_\+ipc\+\_\+server\+\_\+del(), ecore\+\_\+timer\+\_\+dump(), edje\+\_\+available\+\_\+modules\+\_\+get(), edje\+\_\+edit\+\_\+image\+\_\+usage\+\_\+list\+\_\+free(), edje\+\_\+edit\+\_\+limits\+\_\+list\+\_\+free(), edje\+\_\+edit\+\_\+program\+\_\+del(), edje\+\_\+thaw(), efreet\+\_\+desktop\+\_\+free(), efreet\+\_\+icon\+\_\+list\+\_\+find(), efreet\+\_\+menu\+\_\+free(), eina\+\_\+benchmark\+\_\+free(), eina\+\_\+rectangle\+\_\+pool\+\_\+free(), ethumb\+\_\+client\+\_\+generate\+\_\+cancel\+\_\+all(), evas\+\_\+device\+\_\+del(), evas\+\_\+render\+\_\+method\+\_\+list\+\_\+free(), and evas\+\_\+render\+\_\+updates\+\_\+free().



\subsection{Function Documentation}
\hypertarget{group__Eina__List__Group_ga92ec14d1a1040a361c4d8cd0ab7b0ecc}{\index{List@{List}!eina\+\_\+list\+\_\+append@{eina\+\_\+list\+\_\+append}}
\index{eina\+\_\+list\+\_\+append@{eina\+\_\+list\+\_\+append}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+append}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+append (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga92ec14d1a1040a361c4d8cd0ab7b0ecc}


Append the given data to the given linked list. 


\begin{DoxyParams}{Parameters}
{\em list} & The given list. \\
\hline
{\em data} & The data to append. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function appends {\ttfamily data} to {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, a new list is returned. On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

The following example code demonstrates how to ensure that the given data has been successfully appended.


\begin{DoxyCode}
1 Eina\_List *list = NULL;
2 extern void *my\_data;
3 
4 list = eina\_list\_append(list, my\_data);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list(or N\+U\+L\+L). 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+::data, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by ecore\+\_\+con\+\_\+eet\+\_\+client\+\_\+connect\+\_\+callback\+\_\+add(), ecore\+\_\+con\+\_\+eet\+\_\+client\+\_\+disconnect\+\_\+callback\+\_\+add(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+connect\+\_\+callback\+\_\+add(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+disconnect\+\_\+callback\+\_\+add(), ecore\+\_\+con\+\_\+socks4\+\_\+remote\+\_\+add(), ecore\+\_\+con\+\_\+socks5\+\_\+remote\+\_\+add(), ecore\+\_\+con\+\_\+url\+\_\+additional\+\_\+header\+\_\+add(), ecore\+\_\+drm\+\_\+outputs\+\_\+create(), ecore\+\_\+evas\+\_\+aux\+\_\+hint\+\_\+add(), ecore\+\_\+evas\+\_\+aux\+\_\+hints\+\_\+allowed\+\_\+get(), ecore\+\_\+evas\+\_\+ecore\+\_\+evas\+\_\+list\+\_\+get(), ecore\+\_\+evas\+\_\+ews\+\_\+new(), ecore\+\_\+evas\+\_\+object\+\_\+image\+\_\+new(), ecore\+\_\+fb\+\_\+input\+\_\+device\+\_\+open(), ecore\+\_\+file\+\_\+app\+\_\+list(), ecore\+\_\+file\+\_\+ls(), ecore\+\_\+fork\+\_\+reset\+\_\+callback\+\_\+add(), ecore\+\_\+imf\+\_\+context\+\_\+event\+\_\+callback\+\_\+add(), ecore\+\_\+imf\+\_\+context\+\_\+input\+\_\+panel\+\_\+event\+\_\+callback\+\_\+add(), ecore\+\_\+ipc\+\_\+server\+\_\+add(), ecore\+\_\+ipc\+\_\+server\+\_\+connect(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+file\+\_\+add(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+prepare\+\_\+callback\+\_\+set(), ecore\+\_\+thread\+\_\+feedback\+\_\+run(), ecore\+\_\+thread\+\_\+run(), edje\+\_\+available\+\_\+modules\+\_\+get(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+add(), edje\+\_\+edit\+\_\+color\+\_\+classes\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+data\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+externals\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+fonts\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+group\+\_\+aliases\+\_\+get(), edje\+\_\+edit\+\_\+group\+\_\+data\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+images\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+part\+\_\+items\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+part\+\_\+states\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+parts\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+program\+\_\+after\+\_\+add(), edje\+\_\+edit\+\_\+program\+\_\+target\+\_\+add(), edje\+\_\+edit\+\_\+programs\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+sound\+\_\+samples\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+sound\+\_\+tones\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+add(), edje\+\_\+edit\+\_\+state\+\_\+external\+\_\+param\+\_\+set(), edje\+\_\+edit\+\_\+state\+\_\+tweens\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+style\+\_\+add(), edje\+\_\+edit\+\_\+style\+\_\+tag\+\_\+add(), edje\+\_\+edit\+\_\+style\+\_\+tags\+\_\+list\+\_\+get(), edje\+\_\+edit\+\_\+styles\+\_\+list\+\_\+get(), edje\+\_\+mmap\+\_\+collection\+\_\+list(), edje\+\_\+mmap\+\_\+group\+\_\+exists(), eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set(), eet\+\_\+node\+\_\+hash\+\_\+new(), eet\+\_\+node\+\_\+list\+\_\+append(), eeze\+\_\+disk\+\_\+eject(), eeze\+\_\+disk\+\_\+mount(), eeze\+\_\+disk\+\_\+new(), eeze\+\_\+disk\+\_\+new\+\_\+from\+\_\+mount(), eeze\+\_\+disk\+\_\+unmount(), eeze\+\_\+net\+\_\+list(), eeze\+\_\+udev\+\_\+find\+\_\+by\+\_\+filter(), eeze\+\_\+udev\+\_\+find\+\_\+by\+\_\+sysattr(), eeze\+\_\+udev\+\_\+find\+\_\+by\+\_\+type(), eeze\+\_\+udev\+\_\+syspath\+\_\+get\+\_\+parents(), eeze\+\_\+udev\+\_\+syspath\+\_\+get\+\_\+sysattr\+\_\+list(), efreet\+\_\+desktop\+\_\+category\+\_\+add(), efreet\+\_\+desktop\+\_\+command\+\_\+local\+\_\+get(), efreet\+\_\+desktop\+\_\+command\+\_\+progress\+\_\+get(), efreet\+\_\+desktop\+\_\+string\+\_\+list\+\_\+parse(), efreet\+\_\+desktop\+\_\+type\+\_\+add(), efreet\+\_\+icon\+\_\+list\+\_\+find(), efreet\+\_\+menu\+\_\+desktop\+\_\+insert(), efreet\+\_\+menu\+\_\+kde\+\_\+legacy\+\_\+init(), efreet\+\_\+mime\+\_\+type\+\_\+icon\+\_\+get(), efreet\+\_\+util\+\_\+desktop\+\_\+categories\+\_\+list(), efreet\+\_\+util\+\_\+desktop\+\_\+environments\+\_\+list(), efreet\+\_\+util\+\_\+desktop\+\_\+exec\+\_\+glob\+\_\+list(), eina\+\_\+benchmark\+\_\+run(), eina\+\_\+file\+\_\+flush(), eina\+\_\+hash\+\_\+list\+\_\+append(), eina\+\_\+hash\+\_\+list\+\_\+prepend(), eina\+\_\+list\+\_\+append\+\_\+relative(), eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list(), eina\+\_\+list\+\_\+clone(), eina\+\_\+list\+\_\+move(), eina\+\_\+list\+\_\+move\+\_\+list(), eina\+\_\+list\+\_\+sorted\+\_\+insert(), eina\+\_\+rectangle\+\_\+pool\+\_\+new(), eldbus\+\_\+connection\+\_\+event\+\_\+callback\+\_\+del(), eldbus\+\_\+name\+\_\+owner\+\_\+changed\+\_\+callback\+\_\+del(), eldbus\+\_\+object\+\_\+event\+\_\+callback\+\_\+del(), eldbus\+\_\+object\+\_\+signal\+\_\+handler\+\_\+add(), eldbus\+\_\+proxy\+\_\+event\+\_\+callback\+\_\+del(), eldbus\+\_\+proxy\+\_\+signal\+\_\+handler\+\_\+add(), ethumb\+\_\+client\+\_\+generate\+\_\+cancel(), ethumb\+\_\+client\+\_\+thumb\+\_\+exists(), evas\+\_\+device\+\_\+add(), evas\+\_\+device\+\_\+parent\+\_\+set(), evas\+\_\+font\+\_\+path\+\_\+global\+\_\+append(), evas\+\_\+object\+\_\+box\+\_\+children\+\_\+get(), evas\+\_\+textblock\+\_\+cursor\+\_\+range\+\_\+formats\+\_\+get(), evas\+\_\+textblock\+\_\+cursor\+\_\+range\+\_\+geometry\+\_\+get(), and efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::push\+\_\+back().

\hypertarget{group__Eina__List__Group_ga9f35bfc7c5b798014c3e0a74bc6f39ad}{\index{List@{List}!eina\+\_\+list\+\_\+prepend@{eina\+\_\+list\+\_\+prepend}}
\index{eina\+\_\+list\+\_\+prepend@{eina\+\_\+list\+\_\+prepend}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+prepend}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+prepend (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga9f35bfc7c5b798014c3e0a74bc6f39ad}


Prepends the given data to the given linked list. 


\begin{DoxyParams}{Parameters}
{\em list} & The given list. \\
\hline
{\em data} & The data to prepend. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function prepends {\ttfamily data} to {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, a new list is returned. On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

The following example code demonstrates how to ensure that the given data has been successfully prepended.

Example\+: 
\begin{DoxyCode}
1 Eina\_List *list = NULL;
2 extern void *my\_data;
3 
4 list = eina\_list\_prepend(list, my\_data);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::data, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by edje\+\_\+edit\+\_\+group\+\_\+add(), edje\+\_\+edit\+\_\+group\+\_\+copy(), eet\+\_\+node\+\_\+struct\+\_\+child\+\_\+new(), eeze\+\_\+udev\+\_\+find\+\_\+similar\+\_\+from\+\_\+syspath(), efreet\+\_\+icon\+\_\+extension\+\_\+add(), eina\+\_\+hash\+\_\+list\+\_\+prepend(), eina\+\_\+list\+\_\+prepend\+\_\+relative(), eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list(), eina\+\_\+list\+\_\+reverse\+\_\+clone(), evas\+\_\+font\+\_\+path\+\_\+global\+\_\+prepend(), evas\+\_\+gl\+\_\+context\+\_\+version\+\_\+create(), evas\+\_\+gl\+\_\+pbuffer\+\_\+surface\+\_\+create(), evas\+\_\+gl\+\_\+surface\+\_\+create(), evas\+\_\+post\+\_\+event\+\_\+callback\+\_\+push(), and efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::push\+\_\+front().

\hypertarget{group__Eina__List__Group_ga4676c189ca4bcfa22d7ecfbcd00200ae}{\index{List@{List}!eina\+\_\+list\+\_\+append\+\_\+relative@{eina\+\_\+list\+\_\+append\+\_\+relative}}
\index{eina\+\_\+list\+\_\+append\+\_\+relative@{eina\+\_\+list\+\_\+append\+\_\+relative}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+append\+\_\+relative}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+append\+\_\+relative (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data, }
\item[{const void $\ast$}]{relative}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga4676c189ca4bcfa22d7ecfbcd00200ae}


Insert the given data into the given linked list after the specified data. 


\begin{DoxyParams}{Parameters}
{\em list} & The given linked list. \\
\hline
{\em data} & The data to insert. \\
\hline
{\em relative} & The data to insert after. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function inserts {\ttfamily data} to {\ttfamily list} after {\ttfamily relative}. If {\ttfamily relative} is not in the list, {\ttfamily data} is appended to the end of the list. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, a new list is returned. If there are multiple instances of {\ttfamily relative} in the list, {\ttfamily data} is inserted after the first instance.\+On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

The following example code demonstrates how to ensure that the given data has been successfully inserted.


\begin{DoxyCode}
1 Eina\_List *list = NULL;
2 extern void *my\_data;
3 extern void *relative\_member;
4 
5 list = eina\_list\_append(list, relative\_member);
6 list = eina\_list\_append\_relative(list, my\_data, relative\_member);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References eina\+\_\+list\+\_\+append(), eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list(), and E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H.



Referenced by efreet\+\_\+menu\+\_\+desktop\+\_\+insert().

\hypertarget{group__Eina__List__Group_gafa705d4483487e53d1be93a30e43c66d}{\index{List@{List}!eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list@{eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list}}
\index{eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list@{eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{relative}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gafa705d4483487e53d1be93a30e43c66d}


Append a list node to a linked list after the specified member. 


\begin{DoxyParams}{Parameters}
{\em list} & The given linked list. \\
\hline
{\em data} & The data to insert. \\
\hline
{\em relative} & The list node to insert after. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function inserts {\ttfamily data} to {\ttfamily list} after the list node {\ttfamily relative}. If {\ttfamily list} or {\ttfamily relative} are {\ttfamily N\+U\+L\+L}, {\ttfamily data} is just appended to {\ttfamily list} using \hyperlink{group__Eina__List__Group_ga92ec14d1a1040a361c4d8cd0ab7b0ecc}{eina\+\_\+list\+\_\+append()}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, a new list is returned. If there are multiple instances of {\ttfamily relative} in the list, {\ttfamily data} is inserted after the first instance. On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+::data, eina\+\_\+list\+\_\+append(), \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by eina\+\_\+list\+\_\+append\+\_\+relative(), and eina\+\_\+list\+\_\+sorted\+\_\+insert().

\hypertarget{group__Eina__List__Group_gad44370d18554ff250d2e9ddac4653caf}{\index{List@{List}!eina\+\_\+list\+\_\+prepend\+\_\+relative@{eina\+\_\+list\+\_\+prepend\+\_\+relative}}
\index{eina\+\_\+list\+\_\+prepend\+\_\+relative@{eina\+\_\+list\+\_\+prepend\+\_\+relative}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+prepend\+\_\+relative}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+prepend\+\_\+relative (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data, }
\item[{const void $\ast$}]{relative}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gad44370d18554ff250d2e9ddac4653caf}


Prepend a data pointer to a linked list before the specified member. 


\begin{DoxyParams}{Parameters}
{\em list} & The given linked list. \\
\hline
{\em data} & The data to insert. \\
\hline
{\em relative} & The data to insert before. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function inserts {\ttfamily data} to {\ttfamily list} before {\ttfamily relative}. If {\ttfamily relative} is not in the list, {\ttfamily data} is prepended to the list with \hyperlink{group__Eina__List__Group_ga9f35bfc7c5b798014c3e0a74bc6f39ad}{eina\+\_\+list\+\_\+prepend()}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, a new list is returned. If there are multiple instances of {\ttfamily relative} in the list, {\ttfamily data} is inserted before the first instance. On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

The following code example demonstrates how to ensure that the given data has been successfully inserted.


\begin{DoxyCode}
1 Eina\_List *list = NULL;
2 extern void *my\_data;
3 extern void *relative\_member;
4 
5 list = eina\_list\_append(list, relative\_member);
6 list = eina\_list\_prepend\_relative(list, my\_data, relative\_member);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H, eina\+\_\+list\+\_\+prepend(), and eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list().

\hypertarget{group__Eina__List__Group_ga03a77b1579ee83bcab4bc3d67375d4b1}{\index{List@{List}!eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list@{eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list}}
\index{eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list@{eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{relative}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga03a77b1579ee83bcab4bc3d67375d4b1}


Prepend a list node to a linked list before the specified member. 


\begin{DoxyParams}{Parameters}
{\em list} & The given linked list. \\
\hline
{\em data} & The data to insert. \\
\hline
{\em relative} & The list node to insert before. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function inserts {\ttfamily data} to {\ttfamily list} before the list node {\ttfamily relative}. If {\ttfamily list} or {\ttfamily relative} are {\ttfamily N\+U\+L\+L}, {\ttfamily data} is just prepended to {\ttfamily list} using \hyperlink{group__Eina__List__Group_ga9f35bfc7c5b798014c3e0a74bc6f39ad}{eina\+\_\+list\+\_\+prepend()}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, a new list is returned. If there are multiple instances of {\ttfamily relative} in the list, {\ttfamily data} is inserted before the first instance. On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::data, eina\+\_\+list\+\_\+prepend(), \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by eina\+\_\+list\+\_\+prepend\+\_\+relative(), and eina\+\_\+list\+\_\+sorted\+\_\+insert().

\hypertarget{group__Eina__List__Group_ga00740e04bfb71ad5c9ac145f766de3a4}{\index{List@{List}!eina\+\_\+list\+\_\+sorted\+\_\+insert@{eina\+\_\+list\+\_\+sorted\+\_\+insert}}
\index{eina\+\_\+list\+\_\+sorted\+\_\+insert@{eina\+\_\+list\+\_\+sorted\+\_\+insert}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+sorted\+\_\+insert}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+sorted\+\_\+insert (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga00740e04bfb71ad5c9ac145f766de3a4}


Insert a new node into a sorted list. 


\begin{DoxyParams}{Parameters}
{\em list} & The given linked list, {\bfseries must} be sorted. \\
\hline
{\em func} & The function called for the sort. \\
\hline
{\em data} & The data to insert sorted. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function inserts values into a linked list assuming it was sorted and the result will be sorted. If {\ttfamily list} is {\ttfamily N\+U\+L\+L\+L}, a new list is returned. On success, a new list pointer that should be used in place of the one given to this function is returned. Otherwise, the old pointer is returned.

\begin{DoxyNote}{Note}
O(log2(n)) comparisons (calls to {\ttfamily func}) average/worst case performance as it uses \hyperlink{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list()} and thus is bounded to that. As said in \hyperlink{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list()}, lists do not have O(1) access time, so walking to the correct node can be costly, consider worst case to be almost O(n) pointer dereference (list walk).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References eina\+\_\+list\+\_\+append(), eina\+\_\+list\+\_\+append\+\_\+relative\+\_\+list(), eina\+\_\+list\+\_\+prepend\+\_\+relative\+\_\+list(), and eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list().



Referenced by ecore\+\_\+timer\+\_\+dump().

\hypertarget{group__Eina__List__Group_ga7c0c6e07aa592a1cb2e010049a718035}{\index{List@{List}!eina\+\_\+list\+\_\+remove@{eina\+\_\+list\+\_\+remove}}
\index{eina\+\_\+list\+\_\+remove@{eina\+\_\+list\+\_\+remove}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+remove}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+remove (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga7c0c6e07aa592a1cb2e010049a718035}


Remove the first instance of the specified data from the given list. 


\begin{DoxyParams}{Parameters}
{\em list} & The given list. \\
\hline
{\em data} & The specified data. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function removes the first instance of {\ttfamily data} from {\ttfamily list}. If the specified data is not in the given list (this includes the case where {\ttfamily data} is {\ttfamily N\+U\+L\+L}), nothing is done and the specified {\ttfamily list} returned. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, {\ttfamily N\+U\+L\+L} is returned, otherwise a new list pointer that should be used in place of the one passed to this function.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list(), and eina\+\_\+list\+\_\+remove\+\_\+list().



Referenced by ecore\+\_\+con\+\_\+socks4\+\_\+remote\+\_\+del(), ecore\+\_\+con\+\_\+socks5\+\_\+remote\+\_\+del(), ecore\+\_\+con\+\_\+socks\+\_\+remote\+\_\+del(), ecore\+\_\+evas\+\_\+aux\+\_\+hint\+\_\+del(), ecore\+\_\+fb\+\_\+input\+\_\+device\+\_\+close(), ecore\+\_\+file\+\_\+download\+\_\+abort(), ecore\+\_\+imf\+\_\+context\+\_\+input\+\_\+panel\+\_\+event\+\_\+callback\+\_\+clear(), ecore\+\_\+ipc\+\_\+client\+\_\+del(), ecore\+\_\+ipc\+\_\+server\+\_\+del(), ecore\+\_\+thread\+\_\+feedback\+\_\+run(), ecore\+\_\+thread\+\_\+run(), edje\+\_\+edit\+\_\+color\+\_\+class\+\_\+del(), edje\+\_\+edit\+\_\+string\+\_\+list\+\_\+free(), edje\+\_\+edit\+\_\+style\+\_\+del(), edje\+\_\+edit\+\_\+style\+\_\+tag\+\_\+del(), edje\+\_\+file\+\_\+collection\+\_\+list\+\_\+free(), eeze\+\_\+disk\+\_\+free(), efreet\+\_\+desktop\+\_\+category\+\_\+del(), efreet\+\_\+menu\+\_\+desktop\+\_\+remove(), eina\+\_\+hash\+\_\+list\+\_\+remove(), ethumb\+\_\+client\+\_\+thumb\+\_\+exists\+\_\+cancel(), evas\+\_\+device\+\_\+parent\+\_\+set(), evas\+\_\+font\+\_\+path\+\_\+global\+\_\+clear(), evas\+\_\+gl\+\_\+context\+\_\+destroy(), evas\+\_\+gl\+\_\+surface\+\_\+destroy(), and evas\+\_\+textblock\+\_\+cursor\+\_\+free().

\hypertarget{group__Eina__List__Group_ga7edefe0975beecc76c02525fb9200f5a}{\index{List@{List}!eina\+\_\+list\+\_\+remove\+\_\+list@{eina\+\_\+list\+\_\+remove\+\_\+list}}
\index{eina\+\_\+list\+\_\+remove\+\_\+list@{eina\+\_\+list\+\_\+remove\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+remove\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+remove\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{remove\+\_\+list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga7edefe0975beecc76c02525fb9200f5a}


Remove the specified list node. 


\begin{DoxyParams}{Parameters}
{\em list} & The given linked list. \\
\hline
{\em remove\+\_\+list} & The list node which is to be removed. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A list pointer.
\end{DoxyReturn}
This function removes the list node {\ttfamily remove\+\_\+list} from {\ttfamily list} and frees the list node structure {\ttfamily remove\+\_\+list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, this function returns {\ttfamily N\+U\+L\+L}. If {\ttfamily remove\+\_\+list} is {\ttfamily N\+U\+L\+L}, it returns {\ttfamily list}, otherwise, a new list pointer that should be used in place of the one passed to this function.

The following code gives an example (notice we use E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H instead of E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H\+\_\+\+S\+A\+F\+E because we stop the loop after removing the current node).


\begin{DoxyCode}
1 extern Eina\_List *list;
2 Eina\_List *l;
3 extern void *my\_data;
4 void *data
5 
6 EINA\_LIST\_FOREACH(list, l, data)
7   \{
8      if (data == my\_data)
9        \{
10           list = eina\_list\_remove\_list(list, l);
11           break;
12        \}
13   \}
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by ecore\+\_\+con\+\_\+eet\+\_\+client\+\_\+connect\+\_\+callback\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+client\+\_\+disconnect\+\_\+callback\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+connect\+\_\+callback\+\_\+del(), ecore\+\_\+con\+\_\+eet\+\_\+server\+\_\+disconnect\+\_\+callback\+\_\+del(), ecore\+\_\+fork\+\_\+reset(), ecore\+\_\+fork\+\_\+reset\+\_\+callback\+\_\+del(), ecore\+\_\+imf\+\_\+context\+\_\+event\+\_\+callback\+\_\+del(), ecore\+\_\+imf\+\_\+context\+\_\+input\+\_\+panel\+\_\+event\+\_\+callback\+\_\+del(), ecore\+\_\+thread\+\_\+cancel(), edje\+\_\+edit\+\_\+group\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+after\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+afters\+\_\+clear(), edje\+\_\+edit\+\_\+program\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+target\+\_\+del(), edje\+\_\+edit\+\_\+program\+\_\+targets\+\_\+clear(), efreet\+\_\+mime\+\_\+type\+\_\+icon\+\_\+get(), eina\+\_\+file\+\_\+common\+\_\+map\+\_\+free(), eina\+\_\+list\+\_\+move(), eina\+\_\+list\+\_\+move\+\_\+list(), eina\+\_\+list\+\_\+remove(), efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::erase(), ethumb\+\_\+client\+\_\+generate\+\_\+cancel(), efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::pop\+\_\+back(), and efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::pop\+\_\+front().

\hypertarget{group__Eina__List__Group_ga1037e7ab9d39bece24d864526332828c}{\index{List@{List}!eina\+\_\+list\+\_\+promote\+\_\+list@{eina\+\_\+list\+\_\+promote\+\_\+list}}
\index{eina\+\_\+list\+\_\+promote\+\_\+list@{eina\+\_\+list\+\_\+promote\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+promote\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+promote\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{move\+\_\+list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga1037e7ab9d39bece24d864526332828c}


Move the specified data to the head of the list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list handle to move the data. \\
\hline
{\em move\+\_\+list} & The list node to move. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new list handle to replace the old one
\end{DoxyReturn}
This function move {\ttfamily move\+\_\+list} to the front of {\ttfamily list}. If list is {\ttfamily N\+U\+L\+L}, {\ttfamily N\+U\+L\+L} is returned. If {\ttfamily move\+\_\+list} is {\ttfamily N\+U\+L\+L}, {\ttfamily list} is returned. Otherwise, a new list pointer that should be used in place of the one passed to this function.

Example\+: 
\begin{DoxyCode}
1 extern Eina\_List *list;
2 Eina\_List *l;
3 extern void *my\_data;
4 void *data;
5 
6 EINA\_LIST\_FOREACH(list, l, data)
7   \{
8      if (data == my\_data)
9        \{
10           list = eina\_list\_promote\_list(list, l);
11           break;
12        \}
13   \}
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by efreet\+\_\+icon\+\_\+extension\+\_\+add().

\hypertarget{group__Eina__List__Group_ga082644881a2333bd16208c00931703cd}{\index{List@{List}!eina\+\_\+list\+\_\+demote\+\_\+list@{eina\+\_\+list\+\_\+demote\+\_\+list}}
\index{eina\+\_\+list\+\_\+demote\+\_\+list@{eina\+\_\+list\+\_\+demote\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+demote\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+demote\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{move\+\_\+list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga082644881a2333bd16208c00931703cd}


Move the specified data to the tail of the list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list handle to move the data. \\
\hline
{\em move\+\_\+list} & The list node to move. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new list handle to replace the old one
\end{DoxyReturn}
This function move {\ttfamily move\+\_\+list} to the back of {\ttfamily list}. If list is {\ttfamily N\+U\+L\+L}, {\ttfamily N\+U\+L\+L} is returned. If {\ttfamily move\+\_\+list} is {\ttfamily N\+U\+L\+L}, {\ttfamily list} is returned. Otherwise, a new list pointer that should be used in place of the one passed to this function.

Example\+: 
\begin{DoxyCode}
1 extern Eina\_List *list;
2 Eina\_List *l;
3 extern void *my\_data;
4 void *data;
5 
6 EINA\_LIST\_FOREACH(list, l, data)
7   \{
8      if (data == my\_data)
9        \{
10           list = eina\_list\_demote\_list(list, l);
11           break;
12        \}
13   \}
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.

\hypertarget{group__Eina__List__Group_ga48e7356e1e0975bcabfce6f5c4ec9160}{\index{List@{List}!eina\+\_\+list\+\_\+data\+\_\+find@{eina\+\_\+list\+\_\+data\+\_\+find}}
\index{eina\+\_\+list\+\_\+data\+\_\+find@{eina\+\_\+list\+\_\+data\+\_\+find}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+data\+\_\+find}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ eina\+\_\+list\+\_\+data\+\_\+find (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga48e7356e1e0975bcabfce6f5c4ec9160}


Find a member of a list and return the member. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for a data. \\
\hline
{\em data} & The data pointer to find in the list. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The found member data pointer if found, {\ttfamily N\+U\+L\+L} otherwise.
\end{DoxyReturn}
This function searches in {\ttfamily list} from beginning to end for the first member whose data pointer is {\ttfamily data}. If it is found, {\ttfamily data} will be returned, otherwise {\ttfamily N\+U\+L\+L} will be returned.

Example\+: 
\begin{DoxyCode}
1 extern Eina\_List *list;
2 extern void *my\_data;
3 
4 if (eina\_list\_data\_find(list, my\_data) == my\_data)
5   \{
6      printf("Found member %p\(\backslash\)n", my\_data);
7   \}
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list().



Referenced by ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+prepare\+\_\+callback\+\_\+set().

\hypertarget{group__Eina__List__Group_ga860144725b63d93b8f84cdf1d816bda8}{\index{List@{List}!eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list@{eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list}}
\index{eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list@{eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga860144725b63d93b8f84cdf1d816bda8}


Find a member of a list and return the list node containing that member. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for data. \\
\hline
{\em data} & The data pointer to find in the list. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The found members list node on success, {\ttfamily N\+U\+L\+L} otherwise.
\end{DoxyReturn}
This function searches in {\ttfamily list} from beginning to end for the first member whose data pointer is {\ttfamily data}. If it is found, the list node containing the specified member is returned, otherwise {\ttfamily N\+U\+L\+L} is returned.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H.



Referenced by efreet\+\_\+icon\+\_\+extension\+\_\+add(), eina\+\_\+list\+\_\+data\+\_\+find(), eina\+\_\+list\+\_\+move(), and eina\+\_\+list\+\_\+remove().

\hypertarget{group__Eina__List__Group_ga46a38e2bf6b9a52b7a5dd17c63ca5f60}{\index{List@{List}!eina\+\_\+list\+\_\+move@{eina\+\_\+list\+\_\+move}}
\index{eina\+\_\+list\+\_\+move@{eina\+\_\+list\+\_\+move}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+move}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Bool} eina\+\_\+list\+\_\+move (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$$\ast$}]{to, }
\item[{{\bf Eina\+\_\+\+List} $\ast$$\ast$}]{from, }
\item[{void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga46a38e2bf6b9a52b7a5dd17c63ca5f60}


Move a data pointer from one list to another. 


\begin{DoxyParams}{Parameters}
{\em to} & The list to move the data to \\
\hline
{\em from} & The list to move from \\
\hline
{\em data} & The data to move \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} on success, else \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E}
\end{DoxyReturn}
This function is a shortcut for doing the following\+: to = eina\+\_\+list\+\_\+append(to, data); from = eina\+\_\+list\+\_\+remove(from, data);

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, eina\+\_\+list\+\_\+append(), eina\+\_\+list\+\_\+data\+\_\+find\+\_\+list(), eina\+\_\+list\+\_\+remove\+\_\+list(), and E\+I\+N\+A\+\_\+\+T\+R\+U\+E.

\hypertarget{group__Eina__List__Group_ga7e8227ff134ddf5c70fa0a0ede35fe64}{\index{List@{List}!eina\+\_\+list\+\_\+move\+\_\+list@{eina\+\_\+list\+\_\+move\+\_\+list}}
\index{eina\+\_\+list\+\_\+move\+\_\+list@{eina\+\_\+list\+\_\+move\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+move\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Bool} eina\+\_\+list\+\_\+move\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$$\ast$}]{to, }
\item[{{\bf Eina\+\_\+\+List} $\ast$$\ast$}]{from, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga7e8227ff134ddf5c70fa0a0ede35fe64}


Move a list node from one list to another. 


\begin{DoxyParams}{Parameters}
{\em to} & The list to move the data to \\
\hline
{\em from} & The list to move from \\
\hline
{\em data} & The list node containing the data to move \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} on success, else \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E}
\end{DoxyReturn}
This function is a shortcut for doing the following\+: to = eina\+\_\+list\+\_\+append(to, data-\/$>$data); from = eina\+\_\+list\+\_\+remove\+\_\+list(from, data);

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::data, E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, eina\+\_\+list\+\_\+append(), eina\+\_\+list\+\_\+remove\+\_\+list(), and E\+I\+N\+A\+\_\+\+T\+R\+U\+E.

\hypertarget{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}{\index{List@{List}!eina\+\_\+list\+\_\+free@{eina\+\_\+list\+\_\+free}}
\index{eina\+\_\+list\+\_\+free@{eina\+\_\+list\+\_\+free}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+free (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}


Free an entire list and all the nodes, ignoring the data contained. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to free \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A {\ttfamily N\+U\+L\+L} pointer
\end{DoxyReturn}
This function frees all the nodes of {\ttfamily list}. It does not free the data of the nodes. To free them, use \hyperlink{group__Eina__List__Group_gae27a2c686a0a11693f9b06957c9bba83}{E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+R\+E\+E}. 

References \+\_\+\+Eina\+\_\+\+List\+::next.



Referenced by efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::clear(), ecore\+\_\+audio\+\_\+shutdown(), ecore\+\_\+evas\+\_\+engines\+\_\+free(), edje\+\_\+mmap\+\_\+group\+\_\+exists(), eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set(), efreet\+\_\+desktop\+\_\+command\+\_\+progress\+\_\+get(), and efreet\+\_\+icon\+\_\+list\+\_\+find().

\hypertarget{group__Eina__List__Group_ga4bd18d6ffc9920cd904bb7769f2fad8e}{\index{List@{List}!eina\+\_\+list\+\_\+nth@{eina\+\_\+list\+\_\+nth}}
\index{eina\+\_\+list\+\_\+nth@{eina\+\_\+list\+\_\+nth}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+nth}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ eina\+\_\+list\+\_\+nth (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{unsigned int}]{n}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga4bd18d6ffc9920cd904bb7769f2fad8e}


Get the nth member's data pointer in a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to get the specified member number from. \\
\hline
{\em n} & The number of the element (0 being the first). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The data pointer stored in the specified element.
\end{DoxyReturn}
This function returns the data pointer of element number {\ttfamily n}, in the {\ttfamily list}. The first element in the array is element number 0. If the element number {\ttfamily n} does not exist, {\ttfamily N\+U\+L\+L} is returned. Otherwise, the data of the found element is returned.

\begin{DoxyNote}{Note}
Worst case is O(n).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::data, and eina\+\_\+list\+\_\+nth\+\_\+list().



Referenced by efreet\+\_\+desktop\+\_\+free(), efreet\+\_\+desktop\+\_\+get(), efreet\+\_\+desktop\+\_\+save(), efreet\+\_\+desktop\+\_\+type\+\_\+alias(), and efreet\+\_\+menu\+\_\+desktop\+\_\+insert().

\hypertarget{group__Eina__List__Group_gad4a1e3b0fdecd8ed4cb2ff592ceeb553}{\index{List@{List}!eina\+\_\+list\+\_\+nth\+\_\+list@{eina\+\_\+list\+\_\+nth\+\_\+list}}
\index{eina\+\_\+list\+\_\+nth\+\_\+list@{eina\+\_\+list\+\_\+nth\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+nth\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+nth\+\_\+list (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{unsigned int}]{n}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gad4a1e3b0fdecd8ed4cb2ff592ceeb553}


Get the nth member's list node in a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to get the specfied member number from. \\
\hline
{\em n} & The number of the element (0 being the first). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The list node stored in the numbered element.
\end{DoxyReturn}
This function returns the list node of element number {\ttfamily n}, in {\ttfamily list}. The first element in the array is element number 0. If the element number {\ttfamily n} does not exist or {\ttfamily list} is {\ttfamily N\+U\+L\+L} or {\ttfamily n} is greater than the count of elements in {\ttfamily list} minus 1, {\ttfamily N\+U\+L\+L} is returned. Otherwise the list node stored in the numbered element is returned.

\begin{DoxyNote}{Note}
Worst case is O(n).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by eina\+\_\+list\+\_\+nth(), and eina\+\_\+list\+\_\+sort().

\hypertarget{group__Eina__List__Group_ga2f0c56af6f6ae8f149c317d4152b407d}{\index{List@{List}!eina\+\_\+list\+\_\+reverse@{eina\+\_\+list\+\_\+reverse}}
\index{eina\+\_\+list\+\_\+reverse@{eina\+\_\+list\+\_\+reverse}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+reverse}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+reverse (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga2f0c56af6f6ae8f149c317d4152b407d}


Reverse all the elements in the list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to reverse. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The list head after it has been reversed.
\end{DoxyReturn}
This function reverses the order of all elements in {\ttfamily list}, so the last member is now first, and so on. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, this functon returns {\ttfamily N\+U\+L\+L}.

\begin{DoxyNote}{Note}
{\bfseries in-\/place}\+: this will change the given list, so you should now point to the new list head that is returned by this function.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga67cb29eef0bf0a3cb2cc160ae506a07f}{eina\+\_\+list\+\_\+reverse\+\_\+clone()} 

\hyperlink{group__Eina__List__Group_gaaa11ab61d3d86c9350cb0757468a9089}{eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new()} 
\end{DoxySeeAlso}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+::data, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.

\hypertarget{group__Eina__List__Group_ga67cb29eef0bf0a3cb2cc160ae506a07f}{\index{List@{List}!eina\+\_\+list\+\_\+reverse\+\_\+clone@{eina\+\_\+list\+\_\+reverse\+\_\+clone}}
\index{eina\+\_\+list\+\_\+reverse\+\_\+clone@{eina\+\_\+list\+\_\+reverse\+\_\+clone}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+reverse\+\_\+clone}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+reverse\+\_\+clone (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga67cb29eef0bf0a3cb2cc160ae506a07f}


Clone (copy) all the elements in the list in reverse order. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to reverse. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The new list that has been reversed.
\end{DoxyReturn}
This function reverses the order of all elements in {\ttfamily list}, so the last member is now first, and so on. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, this functon returns {\ttfamily N\+U\+L\+L}. This returns a copy of the given list.

\begin{DoxyNote}{Note}
{\bfseries copy\+:} this will copy the list and you should then \hyperlink{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}{eina\+\_\+list\+\_\+free()} when it is not required anymore.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga2f0c56af6f6ae8f149c317d4152b407d}{eina\+\_\+list\+\_\+reverse()} 

\hyperlink{group__Eina__List__Group_gae26360b939fc874e7ae4fab705bd3ac3}{eina\+\_\+list\+\_\+clone()} 
\end{DoxySeeAlso}


References E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H, and eina\+\_\+list\+\_\+prepend().

\hypertarget{group__Eina__List__Group_gae26360b939fc874e7ae4fab705bd3ac3}{\index{List@{List}!eina\+\_\+list\+\_\+clone@{eina\+\_\+list\+\_\+clone}}
\index{eina\+\_\+list\+\_\+clone@{eina\+\_\+list\+\_\+clone}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+clone}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+clone (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gae26360b939fc874e7ae4fab705bd3ac3}


Clone (copy) all the elements in the list in exactly same order. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to clone. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The new list that has been cloned.
\end{DoxyReturn}
This function clone in order of all elements in {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, this functon returns {\ttfamily N\+U\+L\+L}. This returns a copy of the given list.

\begin{DoxyNote}{Note}
{\bfseries copy\+:} this will copy the list and you should then \hyperlink{group__Eina__List__Group_ga608bd2fbf06293a1b794648990703ab4}{eina\+\_\+list\+\_\+free()} when it is not required anymore.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga67cb29eef0bf0a3cb2cc160ae506a07f}{eina\+\_\+list\+\_\+reverse\+\_\+clone()} 
\end{DoxySeeAlso}


References eina\+\_\+list\+\_\+append(), and E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H.



Referenced by ecore\+\_\+evas\+\_\+engines\+\_\+get().

\hypertarget{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{\index{List@{List}!eina\+\_\+list\+\_\+sort@{eina\+\_\+list\+\_\+sort}}
\index{eina\+\_\+list\+\_\+sort@{eina\+\_\+list\+\_\+sort}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+sort}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+sort (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{unsigned int}]{limit, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}


Sort a list according to the ordering func will return. 


\begin{DoxyParams}{Parameters}
{\em list} & The list handle to sort. \\
\hline
{\em limit} & The maximum number of list elements to sort. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the new head of list.
\end{DoxyReturn}
This function sorts {\ttfamily list}. If {\ttfamily limit} is 0 or greater than the number of elements in {\ttfamily list}, all the elements are sorted. {\ttfamily func} is used to compare two elements of {\ttfamily list}. If {\ttfamily func} is {\ttfamily N\+U\+L\+L}, this function returns {\ttfamily list}.

\begin{DoxyNote}{Note}
{\bfseries in-\/place}\+: this will change the given list, so you should now point to the new list head that is returned by this function.

Worst case is O(n $\ast$ log2(n)) comparisons (calls to func()). That means that for 1,000,000 list sort will do 20,000,000 comparisons.
\end{DoxyNote}
Example\+: 
\begin{DoxyCode}
1 int
2 sort\_cb(const void *d1, const void *d2)
3 \{
4    const char *txt = d1;
5    const char *txt2 = d2;
6 
7    if(!txt) return(1);
8    if(!txt2) return(-1);
9 
10    return(strcmp(txt, txt2));
11 \}
12 extern Eina\_List *list;
13 
14 list = eina\_list\_sort(list, eina\_list\_count(list), sort\_cb);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, \+\_\+\+Eina\+\_\+\+List\+::data, eina\+\_\+list\+\_\+nth\+\_\+list(), \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by ecore\+\_\+file\+\_\+ls(), and eina\+\_\+rectangle\+\_\+pool\+\_\+request().

\hypertarget{group__Eina__List__Group_ga2b03712f212a6557885b11ea382f5459}{\index{List@{List}!eina\+\_\+list\+\_\+shuffle@{eina\+\_\+list\+\_\+shuffle}}
\index{eina\+\_\+list\+\_\+shuffle@{eina\+\_\+list\+\_\+shuffle}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+shuffle}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+shuffle (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Random\+\_\+\+Cb}}]{func}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga2b03712f212a6557885b11ea382f5459}


Shuffle list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list handle to shuffle. \\
\hline
{\em func} & A function pointer that can return an int between 2 inclusives values \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the new head of list.
\end{DoxyReturn}
This function shuffles {\ttfamily list}. {\ttfamily func} is used to generate random list indexes within the range of unshuffled list items. If {\ttfamily func} is {\ttfamily N\+U\+L\+L}, rand is used.

\begin{DoxyNote}{Note}
{\bfseries in-\/place}\+: this will change the given list, so you should now point to the new list head that is returned by this function.
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+8
\end{DoxySince}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.

\hypertarget{group__Eina__List__Group_ga743c5a32e64f227059d2baa4dba63a6b}{\index{List@{List}!eina\+\_\+list\+\_\+merge@{eina\+\_\+list\+\_\+merge}}
\index{eina\+\_\+list\+\_\+merge@{eina\+\_\+list\+\_\+merge}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+merge}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+merge (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{left, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{right}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga743c5a32e64f227059d2baa4dba63a6b}


Merge two list. 


\begin{DoxyParams}{Parameters}
{\em left} & Head list to merge. \\
\hline
{\em right} & Tail list to merge. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new merged list.
\end{DoxyReturn}
This function puts right at the end of left and returns the head.

Both left and right do not exist anymore after the merge.

\begin{DoxyNote}{Note}
merge cost is O(n), being {\bfseries n} the size of the smallest list. This is due the need to fix accounting of that segment, making count and last access O(1).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.



Referenced by eina\+\_\+file\+\_\+flush(), and evas\+\_\+textblock\+\_\+cursor\+\_\+range\+\_\+geometry\+\_\+get().

\hypertarget{group__Eina__List__Group_ga66747ee5bad3c35ea268385f6c5e174b}{\index{List@{List}!eina\+\_\+list\+\_\+sorted\+\_\+merge@{eina\+\_\+list\+\_\+sorted\+\_\+merge}}
\index{eina\+\_\+list\+\_\+sorted\+\_\+merge@{eina\+\_\+list\+\_\+sorted\+\_\+merge}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+sorted\+\_\+merge}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+sorted\+\_\+merge (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{left, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{right, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga66747ee5bad3c35ea268385f6c5e174b}


Merge two sorted list according to the ordering func will return. 


\begin{DoxyParams}{Parameters}
{\em left} & First list to merge. \\
\hline
{\em right} & Second list to merge. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new sorted list.
\end{DoxyReturn}
This function compares the head of {\ttfamily left} and {\ttfamily right}, and choose the smallest one to be head of the returned list. It will continue this process for all entry of both list.

Both left and right lists are not vailid anymore after the merge and should not be used. If {\ttfamily func} is {\ttfamily N\+U\+L\+L}, it will return {\ttfamily N\+U\+L\+L}.

Example\+: 
\begin{DoxyCode}
1 int
2 sort\_cb(void *d1, void *d2)
3 \{
4   const char *txt = NULL;
5    const char *txt2 = NULL;
6 
7    if(!d1) return(1);
8    if(!d2) return(-1);
9 
10    return(strcmp((const char*)d1, (const char*)d2));
11 \}
12 extern Eina\_List *sorted1;
13 extern Eina\_List *sorted2;
14 
15 list = eina\_list\_sorted\_merge(sorted1, sorted2, sort\_cb);
\end{DoxyCode}


\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, \+\_\+\+Eina\+\_\+\+List\+::data, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.

\hypertarget{group__Eina__List__Group_gaf45625cf0f450aae2a4e949539b22374}{\index{List@{List}!eina\+\_\+list\+\_\+split\+\_\+list@{eina\+\_\+list\+\_\+split\+\_\+list}}
\index{eina\+\_\+list\+\_\+split\+\_\+list@{eina\+\_\+list\+\_\+split\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+split\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+split\+\_\+list (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{relative, }
\item[{{\bf Eina\+\_\+\+List} $\ast$$\ast$}]{right}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gaf45625cf0f450aae2a4e949539b22374}


Split a list into 2 lists. 


\begin{DoxyParams}{Parameters}
{\em list} & List to split. \\
\hline
{\em relative} & The list will be split after {\ttfamily relative}. \\
\hline
{\em right} & The head of the new right list. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The new left list
\end{DoxyReturn}
This function splits {\ttfamily list} into two lists ( left and right ) after the node {\ttfamily relative}. {\ttfamily Relative} will become the last node of the left list. If {\ttfamily list} or {\ttfamily right} are {\ttfamily N\+U\+L\+L} list is returns. If {\ttfamily relative} is N\+U\+L\+L right is set to {\ttfamily list} and {\ttfamily N\+U\+L\+L} is returns. If {\ttfamily relative} is the last node of {\ttfamily list} list is returns and {\ttfamily right} is set to {\ttfamily N\+U\+L\+L}.

list does not exist anymore after the split.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, eina\+\_\+list\+\_\+last(), eina\+\_\+list\+\_\+next(), \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, \+\_\+\+Eina\+\_\+\+List\+::next, and \+\_\+\+Eina\+\_\+\+List\+::prev.

\hypertarget{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{\index{List@{List}!eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list@{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list}}
\index{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list@{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func, }
\item[{const void $\ast$}]{data, }
\item[{int $\ast$}]{result\+\_\+cmp}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}


Returns node nearest to data is in the sorted list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for data, {\bfseries must} be sorted. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
{\em data} & reference value to search. \\
\hline
{\em result\+\_\+cmp} & if provided returns the result of func(node-\/$>$data, data) node being the last (returned) node. If node was found (exact match), then it is 0. If returned node is smaller than requested data, it is less than 0 and if it's bigger it's greater than 0. It is the last value returned by func(). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the nearest node, {\ttfamily N\+U\+L\+L} if not found.
\end{DoxyReturn}
This function searches for a node containing {\ttfamily data} as its data in {\ttfamily list}, if such a node exists it will be returned and {\ttfamily result\+\_\+cmp} will be {\ttfamily 0}. If the data of no node in {\ttfamily list} is equal to {\ttfamily data}, the node with the nearest value to that will be returned and {\ttfamily result\+\_\+cmp} will be the return value of {\ttfamily func} with {\ttfamily data} and the returned node's data as arguments.

This function is useful for inserting an element in the list only in case it isn't already present in the list, the naive way of doing this would be\+: 
\begin{DoxyCode}
1 void *ptr = eina\_list\_data\_find(list, "my data");
2 if (!ptr)
3   eina\_list\_sorted\_insert(list, "my data");
\end{DoxyCode}


However this has the downside of walking through the list twice, once to check if the data is already present and another to insert the element in the corret position. This can be done more eficiently\+: 
\begin{DoxyCode}
1 int cmp\_result;
2 l = eina\_list\_search\_sorted\_near\_list(list, cmp\_func, "my data",
3                                       &cmp\_result);
4 if (cmp\_result > 0)
5   list = eina\_list\_prepend\_relative\_list(list, "my data", l);
6 else if (cmp\_result < 0)
7   list = eina\_list\_append\_relative\_list(list, "my data", l);
\end{DoxyCode}


If {\itshape cmp\+\_\+result} is 0 the element is already in the list and we need not insert it, if {\itshape cmp\+\_\+result} is greater than zero {\itshape \char`\"{}my @a data\char`\"{}} needs to come after {\itshape l(the nearest node present)}, if less than zero before.

\begin{DoxyNote}{Note}
O(log2(n)) average/worst case performance, for 1,000,000 elements it will do a maximum of 20 comparisons. This is much faster than the 1,000,000 comparisons made naively walking the list from head to tail, so depending on the number of searches and insertions, it may be worth to \hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort()} the list and do the searches later. As lists do not have O(1) access time, walking to the correct node can be costly, consider worst case to be almost O(n) pointer dereference (list walk).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga6a0564d119664930b3a41657c1551e09}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list()} 

\hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort()} 

\hyperlink{group__Eina__List__Group_ga66747ee5bad3c35ea268385f6c5e174b}{eina\+\_\+list\+\_\+sorted\+\_\+merge()} 
\end{DoxySeeAlso}


References \+\_\+\+Eina\+\_\+\+List\+::accounting, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::count, \+\_\+\+Eina\+\_\+\+List\+::data, \+\_\+\+Eina\+\_\+\+List\+\_\+\+Accounting\+::last, and \+\_\+\+Eina\+\_\+\+List\+::next.



Referenced by eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list(), and eina\+\_\+list\+\_\+sorted\+\_\+insert().

\hypertarget{group__Eina__List__Group_ga6a0564d119664930b3a41657c1551e09}{\index{List@{List}!eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list@{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list}}
\index{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list@{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga6a0564d119664930b3a41657c1551e09}


Returns node if data is in the sorted list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for data, {\bfseries must} be sorted. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
{\em data} & reference value to search. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the node if func(node-\/$>$data, data) == 0, {\ttfamily N\+U\+L\+L} if not found.
\end{DoxyReturn}
This can be used to check if some value is inside the list and get the container node in this case. It should be used when list is known to be sorted as it will do binary search for results.

Example\+: imagine user gives a string, you check if it's in the list before duplicating its contents.

\begin{DoxyNote}{Note}
O(log2(n)) average/worst case performance, for 1,000,000 elements it will do a maximum of 20 comparisons. This is much faster than the 1,000,000 comparisons made by \hyperlink{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list()}, so depending on the number of searches and insertions, it may be worth to \hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort()} the list and do the searches later. As said in \hyperlink{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list()}, lists do not have O(1) access time, so walking to the correct node can be costly, consider worst case to be almost O(n) pointer dereference (list walk).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_gae18055abaafef1714bd9f2fd3fd0cc45}{eina\+\_\+list\+\_\+search\+\_\+sorted()} 

\hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort()} 

\hyperlink{group__Eina__List__Group_ga66747ee5bad3c35ea268385f6c5e174b}{eina\+\_\+list\+\_\+sorted\+\_\+merge()} 

\hyperlink{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list()} 

\hyperlink{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list()} 
\end{DoxySeeAlso}


References eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list().



Referenced by eina\+\_\+list\+\_\+search\+\_\+sorted().

\hypertarget{group__Eina__List__Group_gae18055abaafef1714bd9f2fd3fd0cc45}{\index{List@{List}!eina\+\_\+list\+\_\+search\+\_\+sorted@{eina\+\_\+list\+\_\+search\+\_\+sorted}}
\index{eina\+\_\+list\+\_\+search\+\_\+sorted@{eina\+\_\+list\+\_\+search\+\_\+sorted}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+search\+\_\+sorted}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ eina\+\_\+list\+\_\+search\+\_\+sorted (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gae18055abaafef1714bd9f2fd3fd0cc45}


Returns node data if it is in the sorted list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for data, {\bfseries must} be sorted. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
{\em data} & reference value to search. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the node value ({\ttfamily node-\/$>$data}) if func(node-\/$>$data, data) == 0, N\+U\+L\+L if not found.
\end{DoxyReturn}
This can be used to check if some value is inside the list and get the existing instance in this case. It should be used when list is known to be sorted as it will do binary search for results.

Example\+: imagine user gives a string, you check if it's in the list before duplicating its contents.

\begin{DoxyNote}{Note}
O(log2(n)) average/worst case performance, for 1,000,000 elements it will do a maximum of 20 comparisons. This is much faster than the 1,000,000 comparisons made by \hyperlink{group__Eina__List__Group_ga2c093bfd321df8f286fcfeb3d13d675f}{eina\+\_\+list\+\_\+search\+\_\+unsorted()}, so depending on the number of searches and insertions, it may be worth to \hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort()} the list and do the searches later. As said in \hyperlink{group__Eina__List__Group_ga44af3419fd1f66ffefc4998e54c4ca70}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+near\+\_\+list()}, lists do not have O(1) access time, so walking to the correct node can be costly, consider worst case to be almost O(n) pointer dereference (list walk).
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga6a0564d119664930b3a41657c1551e09}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list()} 

\hyperlink{group__Eina__List__Group_gaa634ce6790e626fd057ecdcfdc841d47}{eina\+\_\+list\+\_\+sort()} 

\hyperlink{group__Eina__List__Group_ga66747ee5bad3c35ea268385f6c5e174b}{eina\+\_\+list\+\_\+sorted\+\_\+merge()} 

\hyperlink{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list()} 
\end{DoxySeeAlso}


References eina\+\_\+list\+\_\+data\+\_\+get(), and eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list().

\hypertarget{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}{\index{List@{List}!eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list@{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list}}
\index{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list@{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}


Returns node if data is in the unsorted list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for data, may be unsorted. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
{\em data} & reference value to search. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the node if func(node-\/$>$data, data) == 0, {\ttfamily N\+U\+L\+L} if not found.
\end{DoxyReturn}
This can be used to check if some value is inside the list and get the container node in this case.

Example\+: imagine user gives a string, you check if it's in the list before duplicating its contents.

\begin{DoxyNote}{Note}
this is expensive and may walk the whole list, it's order-\/\+N, that is for 1,000,000 elements list it may walk and compare 1,000,000 nodes.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_ga6a0564d119664930b3a41657c1551e09}{eina\+\_\+list\+\_\+search\+\_\+sorted\+\_\+list()} 

\hyperlink{group__Eina__List__Group_ga2c093bfd321df8f286fcfeb3d13d675f}{eina\+\_\+list\+\_\+search\+\_\+unsorted()} 
\end{DoxySeeAlso}


References E\+I\+N\+A\+\_\+\+L\+I\+S\+T\+\_\+\+F\+O\+R\+E\+A\+C\+H.



Referenced by eina\+\_\+list\+\_\+search\+\_\+unsorted().

\hypertarget{group__Eina__List__Group_ga2c093bfd321df8f286fcfeb3d13d675f}{\index{List@{List}!eina\+\_\+list\+\_\+search\+\_\+unsorted@{eina\+\_\+list\+\_\+search\+\_\+unsorted}}
\index{eina\+\_\+list\+\_\+search\+\_\+unsorted@{eina\+\_\+list\+\_\+search\+\_\+unsorted}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+search\+\_\+unsorted}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ eina\+\_\+list\+\_\+search\+\_\+unsorted (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{{\bf Eina\+\_\+\+Compare\+\_\+\+Cb}}]{func, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga2c093bfd321df8f286fcfeb3d13d675f}


Returns node data if it is in the unsorted list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to search for data, may be unsorted. \\
\hline
{\em func} & A function pointer that can handle comparing the list data nodes. \\
\hline
{\em data} & reference value to search. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the node value ({\ttfamily node-\/$>$data}) if func(node-\/$>$data, data) == 0, {\ttfamily N\+U\+L\+L} if not found.
\end{DoxyReturn}
This can be used to check if some value is inside the list and get the existing instance in this case.

Example\+: imagine user gives a string, you check if it's in the list before duplicating its contents.

\begin{DoxyNote}{Note}
this is expensive and may walk the whole list, it's order-\/\+N, that is for 1,000,000 elements list it may walk and compare 1,000,000 nodes.
\end{DoxyNote}
\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.
\end{DoxyWarning}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__List__Group_gae18055abaafef1714bd9f2fd3fd0cc45}{eina\+\_\+list\+\_\+search\+\_\+sorted()} 

\hyperlink{group__Eina__List__Group_ga326ba1ce720272160559fcca1abb100d}{eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list()} 
\end{DoxySeeAlso}


References eina\+\_\+list\+\_\+data\+\_\+get(), and eina\+\_\+list\+\_\+search\+\_\+unsorted\+\_\+list().



Referenced by efreet\+\_\+desktop\+\_\+category\+\_\+add(), efreet\+\_\+desktop\+\_\+category\+\_\+del(), and efreet\+\_\+menu\+\_\+desktop\+\_\+remove().

\hypertarget{group__Eina__List__Group_ga4c3a9eb5062f3b44c5dcef845cc7a72a}{\index{List@{List}!eina\+\_\+list\+\_\+last@{eina\+\_\+list\+\_\+last}}
\index{eina\+\_\+list\+\_\+last@{eina\+\_\+list\+\_\+last}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+last}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+last (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_ga4c3a9eb5062f3b44c5dcef845cc7a72a}


Get the last list node in the list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list to get the last list node from. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The last list node in the list.
\end{DoxyReturn}
This function returns the last list node in the list {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L} or empty, {\ttfamily N\+U\+L\+L} is returned.

This is a order-\/1 operation (it takes the same short time regardless of the length of the list).

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eina_list_04_8c-example}{eina\+\_\+list\+\_\+04.\+c}.\end{Desc}


Referenced by eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new(), eina\+\_\+list\+\_\+split\+\_\+list(), efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::insert(), and efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::pop\+\_\+back().

\hypertarget{group__Eina__List__Group_gac264188a790dda0761d587578605bfd1}{\index{List@{List}!eina\+\_\+list\+\_\+next@{eina\+\_\+list\+\_\+next}}
\index{eina\+\_\+list\+\_\+next@{eina\+\_\+list\+\_\+next}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+next}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+next (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_gac264188a790dda0761d587578605bfd1}


Get the next list node after the specified list node. 


\begin{DoxyParams}{Parameters}
{\em list} & The list node to get the next list node from \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The next list node on success, {\ttfamily N\+U\+L\+L} otherwise.
\end{DoxyReturn}
This function returns the next list node after the current one in {\ttfamily list}. It is equivalent to list-\/$>$next. If {\ttfamily list} is {\ttfamily N\+U\+L\+L} or if no next list node exists, it returns {\ttfamily N\+U\+L\+L}.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eina_list_04_8c-example}{eina\+\_\+list\+\_\+04.\+c}.\end{Desc}


Referenced by eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set(), eina\+\_\+list\+\_\+split\+\_\+list(), and efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::erase().

\hypertarget{group__Eina__List__Group_gacd8294cbab7b4e053bcf754a92dd68e3}{\index{List@{List}!eina\+\_\+list\+\_\+prev@{eina\+\_\+list\+\_\+prev}}
\index{eina\+\_\+list\+\_\+prev@{eina\+\_\+list\+\_\+prev}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+prev}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+List}$\ast$ eina\+\_\+list\+\_\+prev (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_gacd8294cbab7b4e053bcf754a92dd68e3}


Get the previous list node before the specified list node. 


\begin{DoxyParams}{Parameters}
{\em list} & The list node to get the previous list node from. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The previous list node o success, {\ttfamily N\+U\+L\+L} otherwise. if no previous list node exists
\end{DoxyReturn}
This function returns the previous list node before the current one in {\ttfamily list}. It is equivalent to list-\/$>$prev. If {\ttfamily list} is {\ttfamily N\+U\+L\+L} or if no previous list node exists, it returns {\ttfamily N\+U\+L\+L}.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eina_list_04_8c-example}{eina\+\_\+list\+\_\+04.\+c}.\end{Desc}


Referenced by efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::insert().

\hypertarget{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}{\index{List@{List}!eina\+\_\+list\+\_\+data\+\_\+get@{eina\+\_\+list\+\_\+data\+\_\+get}}
\index{eina\+\_\+list\+\_\+data\+\_\+get@{eina\+\_\+list\+\_\+data\+\_\+get}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+data\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}static void$\ast$ eina\+\_\+list\+\_\+data\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_gaec845f0bfb16a14e8d7f0cd508ca7e9c}


Get the list node data member. 


\begin{DoxyParams}{Parameters}
{\em list} & The list node to get the data member of. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The data member from the list node.
\end{DoxyReturn}
This function returns the data member of the specified list node {\ttfamily list}. It is equivalent to list-\/$>$data. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, this function returns {\ttfamily N\+U\+L\+L}.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eina_list_04_8c-example}{eina\+\_\+list\+\_\+04.\+c}.\end{Desc}


Referenced by edje\+\_\+edit\+\_\+limits\+\_\+list\+\_\+free(), edje\+\_\+edit\+\_\+program\+\_\+afters\+\_\+clear(), edje\+\_\+edit\+\_\+program\+\_\+targets\+\_\+clear(), edje\+\_\+edit\+\_\+state\+\_\+name\+\_\+set(), edje\+\_\+edit\+\_\+string\+\_\+list\+\_\+free(), edje\+\_\+file\+\_\+collection\+\_\+list\+\_\+free(), eet\+\_\+eina\+\_\+stream\+\_\+data\+\_\+descriptor\+\_\+class\+\_\+set(), efreet\+\_\+mime\+\_\+type\+\_\+icon\+\_\+get(), eina\+\_\+list\+\_\+search\+\_\+sorted(), and eina\+\_\+list\+\_\+search\+\_\+unsorted().

\hypertarget{group__Eina__List__Group_ga213776ffa28b780440da26f673917687}{\index{List@{List}!eina\+\_\+list\+\_\+data\+\_\+set@{eina\+\_\+list\+\_\+data\+\_\+set}}
\index{eina\+\_\+list\+\_\+data\+\_\+set@{eina\+\_\+list\+\_\+data\+\_\+set}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+data\+\_\+set}]{\setlength{\rightskip}{0pt plus 5cm}static void$\ast$ eina\+\_\+list\+\_\+data\+\_\+set (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+List} $\ast$}]{list, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_ga213776ffa28b780440da26f673917687}


Set the list node data member. 


\begin{DoxyParams}{Parameters}
{\em list} & The list node to get the data member of. \\
\hline
{\em data} & The data member to the list node. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The previous data value.
\end{DoxyReturn}
This function set the data member {\ttfamily data} of the specified list node {\ttfamily list}. It returns the previous data of the node. If {\ttfamily list} is {\ttfamily N\+U\+L\+L}, this function returns {\ttfamily N\+U\+L\+L}.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{eina_list_03_8c-example}{eina\+\_\+list\+\_\+03.\+c}.\end{Desc}
\hypertarget{group__Eina__List__Group_ga301729054a498a2df09a5f1dd760697e}{\index{List@{List}!eina\+\_\+list\+\_\+count@{eina\+\_\+list\+\_\+count}}
\index{eina\+\_\+list\+\_\+count@{eina\+\_\+list\+\_\+count}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+count}]{\setlength{\rightskip}{0pt plus 5cm}static unsigned int eina\+\_\+list\+\_\+count (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_ga301729054a498a2df09a5f1dd760697e}


Get the count of the number of items in a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list whose count to return. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The number of members in the list.
\end{DoxyReturn}
This function returns how many members {\ttfamily list} contains. If the list is {\ttfamily N\+U\+L\+L}, {\ttfamily 0} is returned.

N\+B\+: This is an order-\/1 operation and takes the same time regardless of the length of the list.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_con_server_simple_example_8c-example}{ecore\+\_\+con\+\_\+server\+\_\+simple\+\_\+example.\+c}, \hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}, \hyperlink{edje-box2_8c-example}{edje-\/box2.\+c}, \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{eina_inlist_02_8c-example}{eina\+\_\+inlist\+\_\+02.\+c}, \hyperlink{eina_list_03_8c-example}{eina\+\_\+list\+\_\+03.\+c}, and \hyperlink{evas-box_8c-example}{evas-\/box.\+c}.\end{Desc}


Referenced by ecore\+\_\+drm\+\_\+outputs\+\_\+create(), ecore\+\_\+file\+\_\+ls(), ecore\+\_\+thread\+\_\+pending\+\_\+feedback\+\_\+get(), ecore\+\_\+thread\+\_\+pending\+\_\+get(), ecore\+\_\+thread\+\_\+pending\+\_\+total\+\_\+get(), edje\+\_\+edit\+\_\+state\+\_\+name\+\_\+set(), eet\+\_\+node\+\_\+var\+\_\+array\+\_\+new(), efreet\+\_\+desktop\+\_\+category\+\_\+count\+\_\+get(), efreet\+\_\+desktop\+\_\+type\+\_\+add(), efreet\+\_\+menu\+\_\+desktop\+\_\+insert(), and ethumb\+\_\+client\+\_\+thumb\+\_\+exists\+\_\+cancel().

\hypertarget{group__Eina__List__Group_ga2527a7564e99615a6d0d87bc1a988592}{\index{List@{List}!eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get@{eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get}}
\index{eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get@{eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}static void$\ast$ eina\+\_\+list\+\_\+last\+\_\+data\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{group__Eina__List__Group_ga2527a7564e99615a6d0d87bc1a988592}


Returns the last list node's data. 


\begin{DoxyParams}{Parameters}
{\em list} & The list \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The node's data, or {\ttfamily N\+U\+L\+L} on being passed a {\ttfamily N\+U\+L\+L} pointer
\end{DoxyReturn}
This macro is a shortcut for typing eina\+\_\+list\+\_\+data\+\_\+get(eina\+\_\+list\+\_\+last()) \begin{DoxySince}{Since}
1.\+8 
\end{DoxySince}
\hypertarget{group__Eina__List__Group_gabcfb6a861aa7c0db0ee36252ac2a254d}{\index{List@{List}!eina\+\_\+list\+\_\+iterator\+\_\+new@{eina\+\_\+list\+\_\+iterator\+\_\+new}}
\index{eina\+\_\+list\+\_\+iterator\+\_\+new@{eina\+\_\+list\+\_\+iterator\+\_\+new}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+iterator\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Iterator}$\ast$ eina\+\_\+list\+\_\+iterator\+\_\+new (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gabcfb6a861aa7c0db0ee36252ac2a254d}


Returned a new iterator associated to a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new iterator.
\end{DoxyReturn}
This function returns a newly allocated iterator associated to {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L} or the count member of {\ttfamily list} is less or equal than 0, this function still returns a valid iterator that will always return false on \hyperlink{group__Eina__Iterator__Group_ga83346e93c32dbebc8fd66e4f278140c5}{eina\+\_\+iterator\+\_\+next()}, thus keeping A\+P\+I sane.

If the memory can not be allocated, N\+U\+L\+L is returned. Otherwise, a valid iterator is returned.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.

if the list 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}


References E\+I\+N\+A\+\_\+\+M\+A\+G\+I\+C\+\_\+\+S\+E\+T, F\+U\+N\+C\+\_\+\+I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+F\+R\+E\+E, F\+U\+N\+C\+\_\+\+I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+G\+E\+T\+\_\+\+C\+O\+N\+T\+A\+I\+N\+E\+R, and F\+U\+N\+C\+\_\+\+I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+N\+E\+X\+T.

\hypertarget{group__Eina__List__Group_gaaa11ab61d3d86c9350cb0757468a9089}{\index{List@{List}!eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new@{eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new}}
\index{eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new@{eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Iterator}$\ast$ eina\+\_\+list\+\_\+iterator\+\_\+reversed\+\_\+new (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_gaaa11ab61d3d86c9350cb0757468a9089}


Returned a new reversed iterator associated to a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new iterator.
\end{DoxyReturn}
This function returns a newly allocated iterator associated to {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L} or the count member of {\ttfamily list} is less or equal than 0, this function still returns a valid iterator that will always return false on \hyperlink{group__Eina__Iterator__Group_ga83346e93c32dbebc8fd66e4f278140c5}{eina\+\_\+iterator\+\_\+next()}, thus keeping A\+P\+I sane.

Unlike \hyperlink{group__Eina__List__Group_gabcfb6a861aa7c0db0ee36252ac2a254d}{eina\+\_\+list\+\_\+iterator\+\_\+new()}, this will walk the list backwards.

If the memory can not be allocated, N\+U\+L\+L is returned. Otherwise, a valid iterator is returned.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list.

if the list 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}


References eina\+\_\+list\+\_\+last(), E\+I\+N\+A\+\_\+\+M\+A\+G\+I\+C\+\_\+\+S\+E\+T, F\+U\+N\+C\+\_\+\+I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+F\+R\+E\+E, F\+U\+N\+C\+\_\+\+I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+G\+E\+T\+\_\+\+C\+O\+N\+T\+A\+I\+N\+E\+R, and F\+U\+N\+C\+\_\+\+I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+N\+E\+X\+T.

\hypertarget{group__Eina__List__Group_ga6901b2ea29c9bc34a486dae00d3cf608}{\index{List@{List}!eina\+\_\+list\+\_\+accessor\+\_\+new@{eina\+\_\+list\+\_\+accessor\+\_\+new}}
\index{eina\+\_\+list\+\_\+accessor\+\_\+new@{eina\+\_\+list\+\_\+accessor\+\_\+new}!List@{List}}
\subsubsection[{eina\+\_\+list\+\_\+accessor\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Accessor}$\ast$ eina\+\_\+list\+\_\+accessor\+\_\+new (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+List} $\ast$}]{list}
\end{DoxyParamCaption}
)}}\label{group__Eina__List__Group_ga6901b2ea29c9bc34a486dae00d3cf608}


Returned a new accessor associated to a list. 


\begin{DoxyParams}{Parameters}
{\em list} & The list. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new accessor.
\end{DoxyReturn}
This function returns a newly allocated accessor associated to {\ttfamily list}. If {\ttfamily list} is {\ttfamily N\+U\+L\+L} or the count member of {\ttfamily list} is less or equal than 0, this function returns {\ttfamily N\+U\+L\+L}. If the memory can not be allocated, {\ttfamily N\+U\+L\+L} is returned Otherwise, a valid accessor is returned.

\begin{DoxyWarning}{Warning}
{\ttfamily list} must be a pointer to the first element of the list. 
\end{DoxyWarning}


References E\+I\+N\+A\+\_\+\+M\+A\+G\+I\+C\+\_\+\+S\+E\+T, F\+U\+N\+C\+\_\+\+A\+C\+C\+E\+S\+S\+O\+R\+\_\+\+C\+L\+O\+N\+E, F\+U\+N\+C\+\_\+\+A\+C\+C\+E\+S\+S\+O\+R\+\_\+\+F\+R\+E\+E, F\+U\+N\+C\+\_\+\+A\+C\+C\+E\+S\+S\+O\+R\+\_\+\+G\+E\+T\+\_\+\+A\+T, and F\+U\+N\+C\+\_\+\+A\+C\+C\+E\+S\+S\+O\+R\+\_\+\+G\+E\+T\+\_\+\+C\+O\+N\+T\+A\+I\+N\+E\+R.



Referenced by efl\+::eina\+::ptr\+\_\+list$<$ Eo, std\+::conditional$<$ std\+::is\+\_\+same$<$ Clone\+Allocator, default\+\_\+clone\+\_\+allocator\+\_\+placeholder $>$\+::value, eo\+\_\+clone\+\_\+allocator, Clone\+Allocator $>$\+::type $>$\+::accessor().

