Eina

What is Eina?

Eina is a multi-platform library that provides optimized data types and useful tools for projects.

Features

Data Types

There are two main data types groups: containers and non-containers.

Containers

Array
an array
Hash Table
a hash table
Inlined List
a list with functions inlined
List
a double-linked list
Red-Black Tree
a tree

Non-containers

Accessor
can access items of a container randomly
Iterator
can access items of a container sequentially
Stringshare
a shared string

Tools

  • Eina Log: customizable facility for logging. Supports multiple domains, colors and log leveling
  • Eina Benchmark: set of functions that provide an easy way to add benchmark tests to a project. Used in Eina for its own benchmark tests.
  • Eina Convert: set of functions for basic data types conversion
  • Eina Counter: set of functions for evaluating time spent by a function 1
  • Eina Error: set of functions for error handling. Supports error messages and setting the last error (replacement for errno)
  • Eina Fixed Point Functions: set of functions which deal with real number numbers in a fixed-point format
  • Eina File: To be described.
  • Eina Magic Macros: To be described.
  • Eina Mempool: To be described.
  • Eina Module: To be described.
  • Eina Rectangle: To be described.

1 Special note for Windows users: a high resolution counter is used, which means that the precision is higher than the mili-second (the mili-second is the precision of the functions that return the date or other classic timers).

TODO

  • Test if a "string" allocator could make stringshare faster
  • Provide thread safe list and "search" data type (perhaps use inlist and rbtree with a special allocator and a lock around lookup, insertion, removal)
  • Finish the Doxygen doc:
    • Log: API, tutorial
    • Array : tutorial
    • Hash : API, main doc and tutorial
    • Inlined List : API, main doc and tutorial
    • List : API, main doc and tutorial
    • Red-Black Tree : API, main doc and tutorial
    • Stringshare : main doc and tutorial
    • Benchmark : main doc and tutorial
    • Fixed Point : API, main doc and tutorial
    • Magic Macros : API, main doc and tutorial
    • Mempool : API, main doc and tutorial
    • Module : API, main doc and tutorial
    • Rectangle : API, main doc and tutorial
  • Add some Binary space partitioning algorithm that could be used to find collision and neighbor in an environment with high insertion, removal and queries.
  • Add double pointer garbage collector (to reduce memory fragmentation over time).

Attachments