\hypertarget{group__Eina__Tools__Group}{}\doxysection{Tools}
\label{group__Eina__Tools__Group}\index{Tools@{Tools}}


Eina tools aims to help application development, providing ways to make it safer, log errors, manage memory more efficiently and more.  


\doxysubsection*{Modules}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{group__Eina__Benchmark__Group}{Benchmark}}
\begin{DoxyCompactList}\small\item\em These functions allow you to add a benchmark framework to a project for timing critical parts and detecting slow parts of code. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Bezier__Group}{Bezier Curve}}
\item 
\mbox{\hyperlink{group__Eina__Convert__Group}{Convert}}
\begin{DoxyCompactList}\small\item\em These functions allow you to convert integer or real numbers to string or conversely. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Counter__Group}{Counter}}
\begin{DoxyCompactList}\small\item\em This group discusses the functions that allow you to get the time spent in a part of a code. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Cow__Group}{Copy On Write}}
\begin{DoxyCompactList}\small\item\em These functions provide some helper for a pseudo Copy-\/\+On-\/\+Write mechanism. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Cpu__Group}{Cpu}}
\begin{DoxyCompactList}\small\item\em Cpu and architecture related helpers. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Error__Group}{Error}}
\begin{DoxyCompactList}\small\item\em This group discusses the functions that provide error management for projects. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__File__Group}{File}}
\begin{DoxyCompactList}\small\item\em This group discusses the functions to handle files and directories. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Lalloc__Group}{Lazy allocator}}
\item 
\mbox{\hyperlink{group__Eina__Lock__Group}{Lock}}
\begin{DoxyCompactList}\small\item\em This group provides thread locking and synchronization capabilities. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Log__Group}{Log}}
\begin{DoxyCompactList}\small\item\em Full-\/featured logging system. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Magic__Group}{Magic}}
\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{group__Eina__Magic__Group_ga979d40af6182a8ec32890ba85df88f1d}{Eina\+\_\+\+Magic}} provides run-\/time type-\/checking. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Memory__Pool__Group}{Memory Pool}}
\begin{DoxyCompactList}\small\item\em This group discusses the functions that provide memory pool management. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Module__Group}{Module}}
\begin{DoxyCompactList}\small\item\em These functions provide module management. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Prefix__Group}{Prefix}}
\begin{DoxyCompactList}\small\item\em This group discusses the functions that provide the ability to determine the runtime location of a software package. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Rectangle__Group}{Rectangle}}
\begin{DoxyCompactList}\small\item\em These functions provide rectangle management. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Safety__Checks__Group}{Safety Checks}}
\begin{DoxyCompactList}\small\item\em Safety checks are a set of macros to check for parameters or values that should never happen, it is similar in concept to assert(), but will log and return instead of abort() your program. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Simple__XML__Group}{Simple\+\_\+\+XML}}
\begin{DoxyCompactList}\small\item\em Simplistic relaxed SAX-\/like XML parser. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__String__Group}{String}}
\begin{DoxyCompactList}\small\item\em Provides useful functions for C string manipulation. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Thread__Group}{Thread}}
\begin{DoxyCompactList}\small\item\em Abstracts platform threads, providing a uniform API. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Xattr__Group}{Xattrs}}
\begin{DoxyCompactList}\small\item\em Extended Attributes handling. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{group__Eina__Tools__Group_ga67d74b61939da29afc78e0100a2bb534}{EINA\+\_\+\+FLT\+\_\+\+EQ}}(a,  b)~(!!(fabsf((float)(a) -\/ (float)(b)) $<$= FLT\+\_\+\+EPSILON))
\begin{DoxyCompactList}\small\item\em Safe comparison of float. \end{DoxyCompactList}\item 
\#define \mbox{\hyperlink{group__Eina__Tools__Group_gad4eb3fc9655b9ceb274dd8b0a7baa5d7}{EINA\+\_\+\+FLT\+\_\+\+NONZERO}}(a)~(!!(fpclassify((float)(a)) != FP\+\_\+\+ZERO))
\begin{DoxyCompactList}\small\item\em Determines if a float is not zero. \end{DoxyCompactList}\item 
\#define \mbox{\hyperlink{group__Eina__Tools__Group_ga6bee37244b675b83d6a4f044a7a3d1e8}{EINA\+\_\+\+DBL\+\_\+\+EQ}}(a,  b)~(!!(fabs((double)(a) -\/ (double)(b)) $<$= DBL\+\_\+\+EPSILON))
\begin{DoxyCompactList}\small\item\em Safe comparison of double. \end{DoxyCompactList}\item 
\#define \mbox{\hyperlink{group__Eina__Tools__Group_gacff7543938fee3ca0ad4caf78bb561bd}{EINA\+\_\+\+DBL\+\_\+\+NONZERO}}(a)~(!!(fpclassify((double)(a)) != FP\+\_\+\+ZERO))
\begin{DoxyCompactList}\small\item\em Determines if a double is not zero. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga6ac08753ba12bc9c7a0390cf67868f4f}{EINA\+\_\+\+API}} const char $\ast$ \mbox{\hyperlink{group__Eina__Tools__Group_ga358b0d604ad29672a7ae31a4ce975a40}{eina\+\_\+environment\+\_\+home\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Returns the content of the environment referred by HOME on this system. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__Eina__Types__Group_ga6ac08753ba12bc9c7a0390cf67868f4f}{EINA\+\_\+\+API}} const char $\ast$ \mbox{\hyperlink{group__Eina__Tools__Group_gad2748011998106088d3a54e3d1115715}{eina\+\_\+environment\+\_\+tmp\+\_\+get}} (void)
\begin{DoxyCompactList}\small\item\em Returns the content of the environment referred as TMPDIR on this system. \end{DoxyCompactList}\item 
static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Tools__Group_ga2eff9dff88bf972e43961d1a746fe7c4}{eina\+\_\+dbl\+\_\+exact}} (double a, double b)
\begin{DoxyCompactList}\small\item\em Warningless comparison of doubles using ==. \end{DoxyCompactList}\item 
static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Eina__Tools__Group_ga067b67f9f7a9c83f26abd15a45203c33}{eina\+\_\+flt\+\_\+exact}} (float a, float b)
\begin{DoxyCompactList}\small\item\em Warningless comparison of floats using ==. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Eina tools aims to help application development, providing ways to make it safer, log errors, manage memory more efficiently and more. 

For more information refer to the \mbox{\hyperlink{tutorial_eina_string}{string example}}.

\doxysubsection{Macro Definition Documentation}
\mbox{\Hypertarget{group__Eina__Tools__Group_ga67d74b61939da29afc78e0100a2bb534}\label{group__Eina__Tools__Group_ga67d74b61939da29afc78e0100a2bb534}} 
\index{Tools@{Tools}!EINA\_FLT\_EQ@{EINA\_FLT\_EQ}}
\index{EINA\_FLT\_EQ@{EINA\_FLT\_EQ}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{EINA\_FLT\_EQ}{EINA\_FLT\_EQ}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+FLT\+\_\+\+EQ(\begin{DoxyParamCaption}\item[{}]{a,  }\item[{}]{b }\end{DoxyParamCaption})~(!!(fabsf((float)(a) -\/ (float)(b)) $<$= FLT\+\_\+\+EPSILON))}



Safe comparison of float. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & First member to compare \\
\hline
\mbox{\texttt{ in}}  & {\em b} & Second member to compare \\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+19
\end{DoxySince}
\begin{DoxyReturn}{Returns}
{\ttfamily true} if two floats match 
\end{DoxyReturn}
\mbox{\Hypertarget{group__Eina__Tools__Group_gad4eb3fc9655b9ceb274dd8b0a7baa5d7}\label{group__Eina__Tools__Group_gad4eb3fc9655b9ceb274dd8b0a7baa5d7}} 
\index{Tools@{Tools}!EINA\_FLT\_NONZERO@{EINA\_FLT\_NONZERO}}
\index{EINA\_FLT\_NONZERO@{EINA\_FLT\_NONZERO}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{EINA\_FLT\_NONZERO}{EINA\_FLT\_NONZERO}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+FLT\+\_\+\+NONZERO(\begin{DoxyParamCaption}\item[{}]{a }\end{DoxyParamCaption})~(!!(fpclassify((float)(a)) != FP\+\_\+\+ZERO))}



Determines if a float is not zero. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & The float\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\ttfamily true} if float is not zero 
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+19 
\end{DoxySince}
\mbox{\Hypertarget{group__Eina__Tools__Group_ga6bee37244b675b83d6a4f044a7a3d1e8}\label{group__Eina__Tools__Group_ga6bee37244b675b83d6a4f044a7a3d1e8}} 
\index{Tools@{Tools}!EINA\_DBL\_EQ@{EINA\_DBL\_EQ}}
\index{EINA\_DBL\_EQ@{EINA\_DBL\_EQ}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{EINA\_DBL\_EQ}{EINA\_DBL\_EQ}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+DBL\+\_\+\+EQ(\begin{DoxyParamCaption}\item[{}]{a,  }\item[{}]{b }\end{DoxyParamCaption})~(!!(fabs((double)(a) -\/ (double)(b)) $<$= DBL\+\_\+\+EPSILON))}



Safe comparison of double. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & First member to compare \\
\hline
\mbox{\texttt{ in}}  & {\em b} & Second member to compare \\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+19
\end{DoxySince}
\begin{DoxyReturn}{Returns}
{\ttfamily true} if two double match 
\end{DoxyReturn}
\begin{Desc}
\item[Examples]\par
\mbox{\hyperlink{bg_example_03_8c-example}{bg\+\_\+example\+\_\+03.\+c}}, \mbox{\hyperlink{client_8c-example}{client.\+c}}, \mbox{\hyperlink{edje-basic_8c-example}{edje-\/basic.\+c}}, \mbox{\hyperlink{evas-box_8c-example}{evas-\/box.\+c}}, \mbox{\hyperlink{progressbar_example_8c-example}{progressbar\+\_\+example.\+c}}, and \mbox{\hyperlink{transit_example_03_8c-example}{transit\+\_\+example\+\_\+03.\+c}}.\end{Desc}
\mbox{\Hypertarget{group__Eina__Tools__Group_gacff7543938fee3ca0ad4caf78bb561bd}\label{group__Eina__Tools__Group_gacff7543938fee3ca0ad4caf78bb561bd}} 
\index{Tools@{Tools}!EINA\_DBL\_NONZERO@{EINA\_DBL\_NONZERO}}
\index{EINA\_DBL\_NONZERO@{EINA\_DBL\_NONZERO}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{EINA\_DBL\_NONZERO}{EINA\_DBL\_NONZERO}}
{\footnotesize\ttfamily \#define EINA\+\_\+\+DBL\+\_\+\+NONZERO(\begin{DoxyParamCaption}\item[{}]{a }\end{DoxyParamCaption})~(!!(fpclassify((double)(a)) != FP\+\_\+\+ZERO))}



Determines if a double is not zero. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & The double\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\ttfamily true} if double is not zero 
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+19 
\end{DoxySince}


\doxysubsection{Function Documentation}
\mbox{\Hypertarget{group__Eina__Tools__Group_ga358b0d604ad29672a7ae31a4ce975a40}\label{group__Eina__Tools__Group_ga358b0d604ad29672a7ae31a4ce975a40}} 
\index{Tools@{Tools}!eina\_environment\_home\_get@{eina\_environment\_home\_get}}
\index{eina\_environment\_home\_get@{eina\_environment\_home\_get}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{eina\_environment\_home\_get()}{eina\_environment\_home\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga6ac08753ba12bc9c7a0390cf67868f4f}{EINA\+\_\+\+API}} const char $\ast$ eina\+\_\+environment\+\_\+home\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Returns the content of the environment referred by HOME on this system. 

\begin{DoxyReturn}{Returns}
A temporary string to the content referred by HOME on this system.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The result of this call is highly system dependent and you better use it instead of the naive getenv(\char`\"{}\+HOME\char`\"{}).
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+15 
\end{DoxySince}


Referenced by \mbox{\hyperlink{group__Ecore__File__Group_gab01d35474ff7390e41e19609712f6923}{ecore\+\_\+file\+\_\+app\+\_\+exe\+\_\+get()}}, \mbox{\hyperlink{group__Elm__Theme_gab2a2a47fff7c32691e308c7c9c45aba7}{elm\+\_\+theme\+\_\+list\+\_\+item\+\_\+path\+\_\+get()}}, \mbox{\hyperlink{group__Elm__Theme_ga02474d8fd11ce6d00b9790c971509f5b}{elm\+\_\+theme\+\_\+name\+\_\+available\+\_\+list\+\_\+new()}}, \mbox{\hyperlink{group__Elm__Theme_ga833da0d6203b1aeceb51ca08883b5304}{elm\+\_\+theme\+\_\+user\+\_\+dir\+\_\+get()}}, and \mbox{\hyperlink{group__Ethumb__Basics_ga3faacfc1fcfc59f18caa6696996633c8}{ethumb\+\_\+init()}}.

\mbox{\Hypertarget{group__Eina__Tools__Group_gad2748011998106088d3a54e3d1115715}\label{group__Eina__Tools__Group_gad2748011998106088d3a54e3d1115715}} 
\index{Tools@{Tools}!eina\_environment\_tmp\_get@{eina\_environment\_tmp\_get}}
\index{eina\_environment\_tmp\_get@{eina\_environment\_tmp\_get}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{eina\_environment\_tmp\_get()}{eina\_environment\_tmp\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__Eina__Types__Group_ga6ac08753ba12bc9c7a0390cf67868f4f}{EINA\+\_\+\+API}} const char $\ast$ eina\+\_\+environment\+\_\+tmp\+\_\+get (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Returns the content of the environment referred as TMPDIR on this system. 

\begin{DoxyReturn}{Returns}
A temporary string to the content referred by TMPDIR on this system.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The result of this call is highly system dependent and you better use it instead of the naive getenv(\char`\"{}\+TMPDIR\char`\"{}).
\end{DoxyNote}
\begin{DoxySince}{Since}
1.\+15 
\end{DoxySince}


Referenced by \mbox{\hyperlink{group__Ecore__Con__Server__Group_ga06c138783b4658b9e7304b5e3cbb0bb3}{ecore\+\_\+con\+\_\+local\+\_\+path\+\_\+new()}}, \mbox{\hyperlink{group__Eina__File__Group_gaa4571fad8d5e94f3a1936bb09beae16c}{eina\+\_\+file\+\_\+mkdtemp()}}, and \mbox{\hyperlink{group__Eina__File__Group_gac77efa39c12ba6880a5bbdca004080fb}{eina\+\_\+file\+\_\+mkstemp()}}.

\mbox{\Hypertarget{group__Eina__Tools__Group_ga2eff9dff88bf972e43961d1a746fe7c4}\label{group__Eina__Tools__Group_ga2eff9dff88bf972e43961d1a746fe7c4}} 
\index{Tools@{Tools}!eina\_dbl\_exact@{eina\_dbl\_exact}}
\index{eina\_dbl\_exact@{eina\_dbl\_exact}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{eina\_dbl\_exact()}{eina\_dbl\_exact()}}
{\footnotesize\ttfamily static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+dbl\+\_\+exact (\begin{DoxyParamCaption}\item[{double}]{a,  }\item[{double}]{b }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Warningless comparison of doubles using ==. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & First member to compare \\
\hline
\mbox{\texttt{ in}}  & {\em b} & Second member to compare\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\ttfamily true} if two doubles match 
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+19 
\end{DoxySince}
\mbox{\Hypertarget{group__Eina__Tools__Group_ga067b67f9f7a9c83f26abd15a45203c33}\label{group__Eina__Tools__Group_ga067b67f9f7a9c83f26abd15a45203c33}} 
\index{Tools@{Tools}!eina\_flt\_exact@{eina\_flt\_exact}}
\index{eina\_flt\_exact@{eina\_flt\_exact}!Tools@{Tools}}
\doxysubsubsection{\texorpdfstring{eina\_flt\_exact()}{eina\_flt\_exact()}}
{\footnotesize\ttfamily static \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} eina\+\_\+flt\+\_\+exact (\begin{DoxyParamCaption}\item[{float}]{a,  }\item[{float}]{b }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Warningless comparison of floats using ==. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & First member to compare \\
\hline
\mbox{\texttt{ in}}  & {\em b} & Second member to compare\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\ttfamily true} if two floats match 
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+19 
\end{DoxySince}
