\doxysubsubsubsection{Eina Future Callbacks}
\hypertarget{group__Eina__Future__Callbacks}{}\label{group__Eina__Future__Callbacks}\index{Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{struct__Eina__Future__Schedule__Entry}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Schedule\+\_\+\+Entry}}
\begin{DoxyCompactList}\small\item\em A struct that represents an scheduled event. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{struct__Eina__Future__Scheduler}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Scheduler}}
\begin{DoxyCompactList}\small\item\em This struct is used as a bridge between Eina and the future scheduler. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{struct__Eina__Future__Cb__Easy__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc}}
\begin{DoxyCompactList}\small\item\em A struct with callbacks to be used by \doxylink{group__Eina__Future_ga8efd2e10698d893468026e1eaf9e5948}{eina\+\_\+future\+\_\+cb\+\_\+easy\+\_\+from\+\_\+desc()} and \doxylink{group__Eina__Future_ga57f56d13f3f3bb13651ea3b81b59e8f1}{eina\+\_\+future\+\_\+cb\+\_\+easy()} \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{struct__Eina__Future__Cb__Console__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Console\+\_\+\+Desc}}
\begin{DoxyCompactList}\small\item\em A struct used to define the prefix and suffix to be printed along side the a future value. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{struct__Eina__Future__Cb__Log__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Log\+\_\+\+Desc}}
\begin{DoxyCompactList}\small\item\em This struct is used by \doxylink{group__Eina__Future_ga25abdeb653ee9056a33288874d8d7111}{eina\+\_\+future\+\_\+cb\+\_\+log\+\_\+from\+\_\+desc()} and its contents will be routed to eina\+\_\+log\+\_\+print() along side the future value. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{group__Eina__Future__Callbacks_ga2c756a80e0b4a4a39737c5e3a8d0f2e6}\label{group__Eina__Future__Callbacks_ga2c756a80e0b4a4a39737c5e3a8d0f2e6} 
typedef struct \mbox{\hyperlink{struct__Eina__Future__Cb__Easy__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc}} {\bfseries Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc}
\begin{DoxyCompactList}\small\item\em Convenience wrapper over \doxylink{struct__Eina__Future__Cb__Easy__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc}. \end{DoxyCompactList}\item 
\Hypertarget{group__Eina__Future__Callbacks_gaf5fa825519a3d7f8e084aba309316bc4}\label{group__Eina__Future__Callbacks_gaf5fa825519a3d7f8e084aba309316bc4} 
typedef struct \mbox{\hyperlink{struct__Eina__Future__Cb__Console__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Console\+\_\+\+Desc}} {\bfseries Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Console\+\_\+\+Desc}
\begin{DoxyCompactList}\small\item\em Convenience wrapper over \doxylink{struct__Eina__Future__Cb__Console__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Console\+\_\+\+Desc}. \end{DoxyCompactList}\item 
\Hypertarget{group__Eina__Future__Callbacks_ga190fb0e75b86d093db85b05abfd21ebd}\label{group__Eina__Future__Callbacks_ga190fb0e75b86d093db85b05abfd21ebd} 
typedef struct \mbox{\hyperlink{struct__Eina__Future__Scheduler}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Scheduler}} {\bfseries Eina\+\_\+\+Future\+\_\+\+Scheduler}
\begin{DoxyCompactList}\small\item\em Convenience wrapper over \doxylink{struct__Eina__Future__Scheduler}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Scheduler}. \end{DoxyCompactList}\item 
\Hypertarget{group__Eina__Future__Callbacks_ga8ecbf4d4816b354fad992cd5874c656a}\label{group__Eina__Future__Callbacks_ga8ecbf4d4816b354fad992cd5874c656a} 
typedef struct \mbox{\hyperlink{struct__Eina__Future__Schedule__Entry}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Schedule\+\_\+\+Entry}} {\bfseries Eina\+\_\+\+Future\+\_\+\+Schedule\+\_\+\+Entry}
\begin{DoxyCompactList}\small\item\em Convenience wrapper over \doxylink{struct__Eina__Future__Schedule__Entry}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Schedule\+\_\+\+Entry}. \end{DoxyCompactList}\item 
\Hypertarget{group__Eina__Future__Callbacks_ga6d17eda361b40db4ebaf034a993a03fe}\label{group__Eina__Future__Callbacks_ga6d17eda361b40db4ebaf034a993a03fe} 
typedef struct \mbox{\hyperlink{struct__Eina__Future__Cb__Log__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Log\+\_\+\+Desc}} {\bfseries Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Log\+\_\+\+Desc}
\begin{DoxyCompactList}\small\item\em Convenience wrapper over \doxylink{struct__Eina__Future__Cb__Log__Desc}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Log\+\_\+\+Desc}. \end{DoxyCompactList}\item 
typedef \mbox{\hyperlink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value}}(\texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group__Eina__Future__Callbacks_ga43d2d4c20a2f7aee2a25ada34a9cc675}{Eina\+\_\+\+Future\+\_\+\+Cb}}) (void \texorpdfstring{$\ast$}{*}data, const \mbox{\hyperlink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value}} value, const \mbox{\hyperlink{structEina__Future}{Eina\+\_\+\+Future}} \texorpdfstring{$\ast$}{*}dead\+\_\+future)
\begin{DoxyCompactList}\small\item\em A callback used to inform that a future was resolved. \end{DoxyCompactList}\item 
typedef void(\texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group__Eina__Future__Callbacks_gac685b488df7948131b6405451d0b4fb5}{Eina\+\_\+\+Future\+\_\+\+Scheduler\+\_\+\+Cb}}) (\mbox{\hyperlink{structEina__Future}{Eina\+\_\+\+Future}} \texorpdfstring{$\ast$}{*}f, \mbox{\hyperlink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value}} value)
\begin{DoxyCompactList}\small\item\em A callback used by the \doxylink{group__Eina__Future__Callbacks_ga190fb0e75b86d093db85b05abfd21ebd}{Eina\+\_\+\+Future\+\_\+\+Scheduler} to deliver the future operation result. \end{DoxyCompactList}\item 
typedef void(\texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group__Eina__Future__Callbacks_gab618b4d7aef449893108219332d8a85e}{Eina\+\_\+\+Promise\+\_\+\+Cancel\+\_\+\+Cb}}) (void \texorpdfstring{$\ast$}{*}data, const \mbox{\hyperlink{structEina__Promise}{Eina\+\_\+\+Promise}} \texorpdfstring{$\ast$}{*}dead\+\_\+promise)
\begin{DoxyCompactList}\small\item\em A callback used to inform that a promise was canceled. \end{DoxyCompactList}\item 
typedef \mbox{\hyperlink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value}}(\texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group__Eina__Future__Callbacks_ga9dfebda67e96766ede62d657c1991655}{Eina\+\_\+\+Future\+\_\+\+Success\+\_\+\+Cb}}) (void \texorpdfstring{$\ast$}{*}data, const \mbox{\hyperlink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value}} value)
\begin{DoxyCompactList}\small\item\em A callback used to inform that the future completed with success. \end{DoxyCompactList}\item 
typedef \mbox{\hyperlink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value}}(\texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group__Eina__Future__Callbacks_ga88b867eea465fb367d4974d9cf8d3866}{Eina\+\_\+\+Future\+\_\+\+Error\+\_\+\+Cb}}) (void \texorpdfstring{$\ast$}{*}data, const \mbox{\hyperlink{group__Eina__Error__Group_ga95b3cbb33e987e7d92a81ea785001686}{Eina\+\_\+\+Error}} error)
\begin{DoxyCompactList}\small\item\em A callback used to inform that the future completed with failure. \end{DoxyCompactList}\item 
typedef void(\texorpdfstring{$\ast$}{*} \mbox{\hyperlink{group__Eina__Future__Callbacks_ga3e4a9200b8e67906bf1b1514bc0d93ff}{Eina\+\_\+\+Future\+\_\+\+Free\+\_\+\+Cb}}) (void \texorpdfstring{$\ast$}{*}data, const \mbox{\hyperlink{structEina__Future}{Eina\+\_\+\+Future}} \texorpdfstring{$\ast$}{*}dead\+\_\+future)
\begin{DoxyCompactList}\small\item\em A callback used to inform that the future was freed and the user should also {\ttfamily free} the {\ttfamily data}. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsubsubsubsection{Detailed Description}


Methods and structures dealing with \doxylink{structEina__Future}{Eina\+\_\+\+Future} callbacks 

\doxysubsubsubsubsection{Typedef Documentation}
\Hypertarget{group__Eina__Future__Callbacks_ga43d2d4c20a2f7aee2a25ada34a9cc675}\label{group__Eina__Future__Callbacks_ga43d2d4c20a2f7aee2a25ada34a9cc675} 
\index{Eina Future Callbacks@{Eina Future Callbacks}!Eina\_Future\_Cb@{Eina\_Future\_Cb}}
\index{Eina\_Future\_Cb@{Eina\_Future\_Cb}!Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection{\texorpdfstring{Eina\_Future\_Cb}{Eina\_Future\_Cb}}
{\footnotesize\ttfamily Eina\+\_\+\+Future\+\_\+\+Cb}



A callback used to inform that a future was resolved. 

Usually this callback is called from a clean context, that is, from the main loop or some platform defined safe context. However there are 2 exceptions\+:

\begin{DoxyItemize}
\item \doxylink{group__Eina__Future_ga5462a38eabc060b163d24c9d7395ae3b}{eina\+\_\+future\+\_\+cancel()} was used, it\textquotesingle{}s called immediately in the context that called cancel using {\ttfamily ECANCELED} as error.\end{DoxyItemize}
\begin{DoxyItemize}
\item \doxylink{group__Eina__Future_ga9f4948790f1f84de93ba8195520d4a92}{eina\+\_\+future\+\_\+then()}, \doxylink{group__Eina__Future_ga201dc23d7509f2953e5cd654e8cf601f}{eina\+\_\+future\+\_\+then\+\_\+from\+\_\+desc()}, \doxylink{group__Eina__Future_gaeb721d890aa5eac3103a982edde76e9a}{eina\+\_\+future\+\_\+chain()}, \doxylink{group__Eina__Future_gaf64b3969ac3a86afe47da820c625a416}{eina\+\_\+future\+\_\+chain\+\_\+array()} or similar failed due to invalid pointer or memory allocation. Then the callback is called from the failed context using {\ttfamily EINVAL} or {\ttfamily ENOMEM} as errors and {\ttfamily dead\+\_\+future} will be {\ttfamily NULL}.\end{DoxyItemize}

\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em data} & The data provided by the user\\
\hline
\mbox{\texttt{ in}}  & {\em value} & An \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} which contains the operation result. Before using the {\ttfamily value}, its type must be checked in order to avoid errors. This is needed because if an operation fails the \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} type will be \doxylink{group__Eina__Value__Group_ga28f6fb160baf3068e7c67ffba0a29c20}{EINA\+\_\+\+VALUE\+\_\+\+TYPE\+\_\+\+ERROR} which is a different type than the expected operation result.\\
\hline
\mbox{\texttt{ in}}  & {\em dead\+\_\+future} & A pointer to the future that was completed.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
An \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} to pass to the next \doxylink{structEina__Future}{Eina\+\_\+\+Future} in the chain (if any). If there is no need to convert the received value, it\textquotesingle{}s {\bfseries{recommended}} to passthrough the {\ttfamily value} argument. If you need to convert to a different type or generate a new value, use {\ttfamily eina\+\_\+value\+\_\+setup()} on {\bfseries{another}} \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} and return it. By returning a promise \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} (\doxylink{group__Eina__Future_gab966fb4259f6c1d0f18840e31213a26a}{eina\+\_\+promise\+\_\+as\+\_\+value()}) the whole chain will wait until the promise is resolved in order to continue its execution. Note that the value contents must survive this function scope, that is, do {\bfseries{not}} use stack allocated blobs, arrays, structures or types that keep references to memory you give. Values will be automatically cleaned up using {\ttfamily eina\+\_\+value\+\_\+flush()} once they are unused (no more future or futures returned a new value).
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The returned value {\bfseries{can}} be an \doxylink{group__Eina__Promise_ga20f8b1103ee569060834d1dc3ab5f401}{EINA\+\_\+\+VALUE\+\_\+\+TYPE\+\_\+\+PROMISE}! (see \doxylink{group__Eina__Future_gab966fb4259f6c1d0f18840e31213a26a}{eina\+\_\+promise\+\_\+as\+\_\+value()} and \doxylink{group__Eina__Future_ga59277c714beab7a5231f014d4eed2670}{eina\+\_\+future\+\_\+as\+\_\+value()}) In this case the future chain will wait until the promise is resolved.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\doxylink{group__Eina__Future_ga5462a38eabc060b163d24c9d7395ae3b}{eina\+\_\+future\+\_\+cancel()} 

\doxylink{group__Eina__Future_ga9f4948790f1f84de93ba8195520d4a92}{eina\+\_\+future\+\_\+then()} 

\doxylink{group__Eina__Future_ga201dc23d7509f2953e5cd654e8cf601f}{eina\+\_\+future\+\_\+then\+\_\+from\+\_\+desc()} 

\doxylink{group__Eina__Future_ga1125fb075daa2ac3548ee4a55d69190c}{eina\+\_\+future\+\_\+then\+\_\+easy()} 

\doxylink{group__Eina__Future_gaeb721d890aa5eac3103a982edde76e9a}{eina\+\_\+future\+\_\+chain()} 

\doxylink{group__Eina__Future_gaf64b3969ac3a86afe47da820c625a416}{eina\+\_\+future\+\_\+chain\+\_\+array()} 

\doxylink{group__Eina__Future_ga59277c714beab7a5231f014d4eed2670}{eina\+\_\+future\+\_\+as\+\_\+value()} 

\doxylink{group__Eina__Future_gab966fb4259f6c1d0f18840e31213a26a}{eina\+\_\+promise\+\_\+as\+\_\+value()} 
\end{DoxySeeAlso}
\Hypertarget{group__Eina__Future__Callbacks_gac685b488df7948131b6405451d0b4fb5}\label{group__Eina__Future__Callbacks_gac685b488df7948131b6405451d0b4fb5} 
\index{Eina Future Callbacks@{Eina Future Callbacks}!Eina\_Future\_Scheduler\_Cb@{Eina\_Future\_Scheduler\_Cb}}
\index{Eina\_Future\_Scheduler\_Cb@{Eina\_Future\_Scheduler\_Cb}!Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection{\texorpdfstring{Eina\_Future\_Scheduler\_Cb}{Eina\_Future\_Scheduler\_Cb}}
{\footnotesize\ttfamily Eina\+\_\+\+Future\+\_\+\+Scheduler\+\_\+\+Cb}



A callback used by the \doxylink{group__Eina__Future__Callbacks_ga190fb0e75b86d093db85b05abfd21ebd}{Eina\+\_\+\+Future\+\_\+\+Scheduler} to deliver the future operation result. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em f} & The delivered future. \\
\hline
\mbox{\texttt{ in}}  & {\em value} & The future result\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\doxylink{group__Eina__Promise_gaabcdc9f302644a86f2cca80e3a0fb049}{eina\+\_\+promise\+\_\+new()}

\doxylink{group__Eina__Future__Callbacks_ga8ecbf4d4816b354fad992cd5874c656a}{Eina\+\_\+\+Future\+\_\+\+Schedule\+\_\+\+Entry} 

\doxylink{group__Eina__Future__Callbacks_ga190fb0e75b86d093db85b05abfd21ebd}{Eina\+\_\+\+Future\+\_\+\+Scheduler} 
\end{DoxySeeAlso}
\Hypertarget{group__Eina__Future__Callbacks_gab618b4d7aef449893108219332d8a85e}\label{group__Eina__Future__Callbacks_gab618b4d7aef449893108219332d8a85e} 
\index{Eina Future Callbacks@{Eina Future Callbacks}!Eina\_Promise\_Cancel\_Cb@{Eina\_Promise\_Cancel\_Cb}}
\index{Eina\_Promise\_Cancel\_Cb@{Eina\_Promise\_Cancel\_Cb}!Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection{\texorpdfstring{Eina\_Promise\_Cancel\_Cb}{Eina\_Promise\_Cancel\_Cb}}
{\footnotesize\ttfamily void(\texorpdfstring{$\ast$}{*} Eina\+\_\+\+Promise\+\_\+\+Cancel\+\_\+\+Cb)(void \texorpdfstring{$\ast$}{*}data, const \mbox{\hyperlink{structEina__Promise}{Eina\+\_\+\+Promise}} \texorpdfstring{$\ast$}{*}dead\+\_\+promise)}



A callback used to inform that a promise was canceled. 

A promise may be canceled by the user calling {\ttfamily \doxylink{group__Eina__Future_ga5462a38eabc060b163d24c9d7395ae3b}{eina\+\_\+future\+\_\+cancel()}} on any \doxylink{structEina__Future}{Eina\+\_\+\+Future} that is part of the chain that uses an \doxylink{structEina__Promise}{Eina\+\_\+\+Promise}, that will cancel the whole chain and then the promise.

It should stop all asynchronous operations or at least mark them to be discarded instead of resolved. Actually it can\textquotesingle{}t be resolved once canceled since the given pointer {\ttfamily dead\+\_\+promise} is now invalid.

\begin{DoxyNote}{Note}
\begin{DoxyItemize}
\item This callback is {\bfseries{mandatory}} for a reason, do not provide an empty callback as it\textquotesingle{}ll likely result in memory corruption and invalid access. If impossible to cancel an asynchronous task, then create an intermediate memory to hold \doxylink{structEina__Promise}{Eina\+\_\+\+Promise} and make it {\ttfamily NULL}, in this callback. Then prior to resolution check if the pointer is set.\end{DoxyItemize}


\begin{DoxyItemize}
\item This callback is {\bfseries{not}} called if \doxylink{group__Eina__Promise_ga231f1e09741f0cb0e9ceeef15cf4e4ee}{eina\+\_\+promise\+\_\+resolve()} or \doxylink{group__Eina__Promise_ga33c04f489c071e795839cbf6e60566ba}{eina\+\_\+promise\+\_\+reject()} are used. If any cleanup is needed, then call yourself. It\textquotesingle{}s only meant as cancellation, not a general "{}free callback"{}.\end{DoxyItemize}

\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em data} & The data provided by the user. \\
\hline
\mbox{\texttt{ in}}  & {\em dead\+\_\+promise} & The canceled promise. \\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\doxylink{group__Eina__Promise_ga33c04f489c071e795839cbf6e60566ba}{eina\+\_\+promise\+\_\+reject()} 

\doxylink{group__Eina__Promise_ga231f1e09741f0cb0e9ceeef15cf4e4ee}{eina\+\_\+promise\+\_\+resolve()} 

\doxylink{group__Eina__Future_ga5462a38eabc060b163d24c9d7395ae3b}{eina\+\_\+future\+\_\+cancel()} 
\end{DoxySeeAlso}
\Hypertarget{group__Eina__Future__Callbacks_ga9dfebda67e96766ede62d657c1991655}\label{group__Eina__Future__Callbacks_ga9dfebda67e96766ede62d657c1991655} 
\index{Eina Future Callbacks@{Eina Future Callbacks}!Eina\_Future\_Success\_Cb@{Eina\_Future\_Success\_Cb}}
\index{Eina\_Future\_Success\_Cb@{Eina\_Future\_Success\_Cb}!Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection{\texorpdfstring{Eina\_Future\_Success\_Cb}{Eina\_Future\_Success\_Cb}}
{\footnotesize\ttfamily Eina\+\_\+\+Future\+\_\+\+Success\+\_\+\+Cb}



A callback used to inform that the future completed with success. 

Unlike \doxylink{group__Eina__Future__Callbacks_ga43d2d4c20a2f7aee2a25ada34a9cc675}{Eina\+\_\+\+Future\+\_\+\+Cb} this callback is only called if the future operation was successful, this is, no errors occurred ({\ttfamily value} type differs from \doxylink{group__Eina__Value__Group_ga28f6fb160baf3068e7c67ffba0a29c20}{EINA\+\_\+\+VALUE\+\_\+\+TYPE\+\_\+\+ERROR}) and the {\ttfamily value} matches \doxylink{struct__Eina__Future__Cb__Easy__Desc_a5112a2ccff7f8b1c48c242763a948d05}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc\+::success\+\_\+type} (if given). In case \doxylink{struct__Eina__Future__Cb__Easy__Desc_a5112a2ccff7f8b1c48c242763a948d05}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc\+::success\+\_\+type} was not supplied (it\textquotesingle{}s {\ttfamily NULL}) the {\ttfamily value} type must be checked before using it.

\begin{DoxyNote}{Note}
This function is always called from a safe context (main loop or some platform defined safe context).
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em data} & The data provided by the user. \\
\hline
\mbox{\texttt{ in}}  & {\em value} & The operation result \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
An Eina\+\_\+\+Value to pass to the next \doxylink{structEina__Future}{Eina\+\_\+\+Future} in the chain (if any). If there is no need to convert the received value, it\textquotesingle{}s {\bfseries{recommended}} to passthrough {\ttfamily value} argument. If you need to convert to a different type or generate a new value, use {\ttfamily eina\+\_\+value\+\_\+setup()} on {\bfseries{another}} Eina\+\_\+\+Value and return it. By returning a promise Eina\+\_\+\+Value (\doxylink{group__Eina__Future_gab966fb4259f6c1d0f18840e31213a26a}{eina\+\_\+promise\+\_\+as\+\_\+value()}) the whole chain will wait until the promise is resolved in order to continue its execution. Note that the value contents must survive this function scope, that is, do {\bfseries{not}} use stack allocated blobs, arrays, structures or types that keep references to memory you give. Values will be automatically cleaned up using {\ttfamily eina\+\_\+value\+\_\+flush()} once they are unused (no more future or futures returned a new value). 
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\doxylink{group__Eina__Future_ga8efd2e10698d893468026e1eaf9e5948}{eina\+\_\+future\+\_\+cb\+\_\+easy\+\_\+from\+\_\+desc()} 

\doxylink{group__Eina__Future_ga57f56d13f3f3bb13651ea3b81b59e8f1}{eina\+\_\+future\+\_\+cb\+\_\+easy()} 
\end{DoxySeeAlso}
\Hypertarget{group__Eina__Future__Callbacks_ga88b867eea465fb367d4974d9cf8d3866}\label{group__Eina__Future__Callbacks_ga88b867eea465fb367d4974d9cf8d3866} 
\index{Eina Future Callbacks@{Eina Future Callbacks}!Eina\_Future\_Error\_Cb@{Eina\_Future\_Error\_Cb}}
\index{Eina\_Future\_Error\_Cb@{Eina\_Future\_Error\_Cb}!Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection{\texorpdfstring{Eina\_Future\_Error\_Cb}{Eina\_Future\_Error\_Cb}}
{\footnotesize\ttfamily Eina\+\_\+\+Future\+\_\+\+Error\+\_\+\+Cb}



A callback used to inform that the future completed with failure. 

Unlike \doxylink{group__Eina__Future__Callbacks_ga9dfebda67e96766ede62d657c1991655}{Eina\+\_\+\+Future\+\_\+\+Success\+\_\+\+Cb} this function is only called when an error occurs during the future process or when \doxylink{struct__Eina__Future__Cb__Easy__Desc_a5112a2ccff7f8b1c48c242763a948d05}{\+\_\+\+Eina\+\_\+\+Future\+\_\+\+Cb\+\_\+\+Easy\+\_\+\+Desc\+::success\+\_\+type} differs from the future result. On future creation errors and future cancellation this function will be called from the current context with the following errors\+: {\ttfamily EINVAL}, {\ttfamily ENOMEM} and {\ttfamily ECANCELED}. Otherwise this function is called from a safe context.

If it was possible to recover from an error this function should return an empty value \doxylink{group__Eina__Value__Group_ga06540fbaf4a53dd90133deb813d4f102}{EINA\+\_\+\+VALUE\+\_\+\+EMPTY} or any other \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} type that differs from \doxylink{group__Eina__Value__Group_ga28f6fb160baf3068e7c67ffba0a29c20}{EINA\+\_\+\+VALUE\+\_\+\+TYPE\+\_\+\+ERROR}. In this case the error will not be reported by the other futures in the chain (if any), otherwise if an \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} type \doxylink{group__Eina__Value__Group_ga28f6fb160baf3068e7c67ffba0a29c20}{EINA\+\_\+\+VALUE\+\_\+\+TYPE\+\_\+\+ERROR} is returned the error will continue to be reported to the other futures in the chain.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em data} & The data provided by the user. \\
\hline
\mbox{\texttt{ in}}  & {\em error} & The operation error \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
An \doxylink{group__Eina__Value__Group_ga7985e8af6e956ae31b381bf829173cc0}{Eina\+\_\+\+Value} to pass to the next \doxylink{structEina__Future}{Eina\+\_\+\+Future} in the chain (if any). If you need to convert to a different type or generate a new value, use eina\+\_\+value\+\_\+setup() on {\bfseries{another}} Eina\+\_\+\+Value and return it. By returning a promise Eina\+\_\+\+Value (\doxylink{group__Eina__Future_gab966fb4259f6c1d0f18840e31213a26a}{eina\+\_\+promise\+\_\+as\+\_\+value()}) the whole chain will wait until the promise is resolved in order to continue its execution. Note that the value contents must survive this function scope, that is, do {\bfseries{not}} use stack allocated blobs, arrays, structures or types that keep references to memory you give. Values will be automatically cleaned up using eina\+\_\+value\+\_\+flush() once they are unused (no more future or futures returned a new value). 
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\doxylink{group__Eina__Future_ga8efd2e10698d893468026e1eaf9e5948}{eina\+\_\+future\+\_\+cb\+\_\+easy\+\_\+from\+\_\+desc()} 

\doxylink{group__Eina__Future_ga57f56d13f3f3bb13651ea3b81b59e8f1}{eina\+\_\+future\+\_\+cb\+\_\+easy()} 
\end{DoxySeeAlso}
\Hypertarget{group__Eina__Future__Callbacks_ga3e4a9200b8e67906bf1b1514bc0d93ff}\label{group__Eina__Future__Callbacks_ga3e4a9200b8e67906bf1b1514bc0d93ff} 
\index{Eina Future Callbacks@{Eina Future Callbacks}!Eina\_Future\_Free\_Cb@{Eina\_Future\_Free\_Cb}}
\index{Eina\_Future\_Free\_Cb@{Eina\_Future\_Free\_Cb}!Eina Future Callbacks@{Eina Future Callbacks}}
\doxysubsubsubsubsubsection{\texorpdfstring{Eina\_Future\_Free\_Cb}{Eina\_Future\_Free\_Cb}}
{\footnotesize\ttfamily Eina\+\_\+\+Future\+\_\+\+Free\+\_\+\+Cb}



A callback used to inform that the future was freed and the user should also {\ttfamily free} the {\ttfamily data}. 

This callback may be called from an unsafe context if the future was canceled or an error occurred.

\begin{DoxyNote}{Note}
This callback is always called, even if \doxylink{group__Eina__Future__Callbacks_ga88b867eea465fb367d4974d9cf8d3866}{Eina\+\_\+\+Future\+\_\+\+Error\+\_\+\+Cb} and/or \doxylink{group__Eina__Future__Callbacks_ga9dfebda67e96766ede62d657c1991655}{Eina\+\_\+\+Future\+\_\+\+Success\+\_\+\+Cb} were not provided, which can also be used to monitor when a future ends.
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em data} & The data provided by the user. \\
\hline
\mbox{\texttt{ in}}  & {\em dead\+\_\+future} & The future that was freed.\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\doxylink{group__Eina__Future_ga8efd2e10698d893468026e1eaf9e5948}{eina\+\_\+future\+\_\+cb\+\_\+easy\+\_\+from\+\_\+desc()} 

\doxylink{group__Eina__Future_ga57f56d13f3f3bb13651ea3b81b59e8f1}{eina\+\_\+future\+\_\+cb\+\_\+easy()} 
\end{DoxySeeAlso}
