enlightenment Compile "buddy" memory pool allocation. Compile "chained-pool" memory pool allocation. Compile "fixed-bitmap" memory pool allocation. Compile "one-big" memory pool allocation. Compile "pass-through" (system's malloc) memory pool allocation. By default use system's allocator (pass-through) instead of custom choice for Eina's own data structures. Compile in valgrind hints for smoother integration. Eina is a multi-platform library that provides optimized data types and useful tools for projects. Among its data types, Eina provides efficient implementation of: * double linked list with O(1) append and count; * double linked inlist (node is built in the data) with O(1) append; * stringshare, a pool of read-only strings that are shared in order to save memory (no copies!), fast referencing and pointer-comparison; * hash table with extensible key support, ships by default with string, stringshare, pointer and integer hashes by default; * array of pointers, with O(1) count and append, configurable step growing; * red-black tree; * sparse matrix; As for tools, it provides couple of convenience: * generic and extensible logging system; * easy to use dynamic module loading (on top of dlopen()) that makes it easy to change to static/built-in modules; * generic safety-checks system covering NULL pointers and other incorrect conditions with logging; * "magic" type checking that check and logs if expected magic number is incorrect; * easy to use and extensible memory allocators (mempools); * fixed-point arithmetic; * tile splitter and simplifier (merges); * generic iterator pattern (how to walk in one direction), just implement the given API; * generic accessor pattern (how to randomly access items), just implement the given API; * benchmark helpers.