Generic Value Storage

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files
- Examples

Modules | Data Structures | Typedefs | Variables
Generic Value Storage
Eina » Data Types » Containers

Abstracts generic data storage and access to it in an extensible and efficient way. More...

## Modules
| Generic Value management
| Generic Value Array management
| Generic Value List management
| Generic Value Hash management
| Generic Value Blob management
| Generic Value Struct management
| Generic Value Type management
| Generic Value Optional management

## Data Structures
union | _Eina_Value_Union
| All possible value types. More...

## Typedefs
typedef struct _Eina_Value | Eina_Value
| Store generic values. More...
typedef struct _Eina_Value_Type | Eina_Value_Type
| Describes the data contained by the value. More...
typedef union _Eina_Value_Union | Eina_Value_Union
| Union of all known value types. More...

## Variables
const Eina_Value_Type * | EINA_VALUE_TYPE_UCHAR
| manages unsigned char type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_USHORT
| manages unsigned short type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_UINT
| manages unsigned int type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_ULONG
| manages unsigned long type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_TIMESTAMP
| manages unsigned long type used for timestamps. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_UINT64
| manages unsigned integer of 64 bits type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_CHAR
| manages char type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_SHORT
| manages short type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_INT
| manages int type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_LONG
| manages long type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_INT64
| manages integer of 64 bits type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_FLOAT
| manages float type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_DOUBLE
| manages double type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_STRINGSHARE
| manages stringshared string type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_STRING
| manages string type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_ARRAY
| manages array type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_LIST
| manages list type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_HASH
| manages hash type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_TIMEVAL
| manages 'struct timeval' type More...
const Eina_Value_Type * | EINA_VALUE_TYPE_BLOB
| manages blob of bytes type, see Eina_Value_Blob More...
const Eina_Value_Type * | EINA_VALUE_TYPE_STRUCT
| manages struct type. More...
Eina_Error | EINA_ERROR_VALUE_FAILED
const Eina_Value_Type * | EINA_VALUE_TYPE_UCHAR = NULL
| manages unsigned char type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_USHORT = NULL
| manages unsigned short type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_UINT = NULL
| manages unsigned int type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_ULONG = NULL
| manages unsigned long type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_TIMESTAMP = NULL
| manages unsigned long type used for timestamps. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_UINT64 = NULL
| manages unsigned integer of 64 bits type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_CHAR = NULL
| manages char type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_SHORT = NULL
| manages short type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_INT = NULL
| manages int type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_LONG = NULL
| manages long type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_INT64 = NULL
| manages integer of 64 bits type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_FLOAT = NULL
| manages float type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_DOUBLE = NULL
| manages double type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_STRINGSHARE = NULL
| manages stringshared string type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_STRING = NULL
| manages string type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_ARRAY = NULL
| manages array type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_LIST = NULL
| manages list type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_HASH = NULL
| manages hash type. More...
const Eina_Value_Type * | EINA_VALUE_TYPE_TIMEVAL = NULL
| manages 'struct timeval' type More...
const Eina_Value_Type * | EINA_VALUE_TYPE_BLOB = NULL
| manages blob of bytes type, see Eina_Value_Blob More...
const Eina_Value_Type * | EINA_VALUE_TYPE_STRUCT = NULL
| manages struct type. More...

## Detailed Description

Abstracts generic data storage and access to it in an extensible and efficient way.

It comes with pre-defined types for numbers, array, list, hash, blob and structs. It is able to convert between data types, including to string.

It is meant for simple data types, providing uniform access and release functions, useful to exchange data preserving their types. For more complex hierarchical data, with properties and children, reference counting, inheritance and interfaces,

Examples of usage of the Eina_Value API:

- Eina_Value usage
- Eina_Value struct usage
- Eina value custom type example

## Typedef Documentation

Eina_Value

Store generic values.

Since
  1.2

Eina_Value_Type

Describes the data contained by the value.

Since
  1.2

Eina_Value_Union

Union of all known value types.

This is only used to specify the minimum payload memory for Eina_Value.

## Variable Documentation

const Eina_Value_Type* EINA_VALUE_TYPE_UCHAR

manages unsigned char type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_USHORT

manages unsigned short type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_UINT

manages unsigned int type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_ULONG

manages unsigned long type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_TIMESTAMP

manages unsigned long type used for timestamps.

Note
  this is identical in function to EINA_VALUE_TYPE_ULONG

Since
  1.2

Referenced by eina_value_util_time_string_new().

const Eina_Value_Type* EINA_VALUE_TYPE_UINT64

manages unsigned integer of 64 bits type.

Since
  1.2

Referenced by evas_object_color_get(), and evas_object_image_source_unset().

const Eina_Value_Type* EINA_VALUE_TYPE_CHAR

manages char type.

Since
  1.2

Referenced by evas_object_color_get().

const Eina_Value_Type* EINA_VALUE_TYPE_SHORT

manages short type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_INT

manages int type.

Since
  1.2

Referenced by evas_object_color_get(), evas_object_text_add(), evas_object_textblock_clear(), and evas_object_textgrid_add().

const Eina_Value_Type* EINA_VALUE_TYPE_LONG

manages long type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_INT64

manages integer of 64 bits type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_FLOAT

manages float type.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_DOUBLE

manages double type.

Since
  1.2

Referenced by evas_object_color_get().

const Eina_Value_Type* EINA_VALUE_TYPE_STRINGSHARE

manages stringshared string type.

Since
  1.2

Referenced by eo_dbg_info_free().

const Eina_Value_Type* EINA_VALUE_TYPE_STRING

manages string type.

Since
  1.2

Referenced by eo_dbg_info_free(), evas_object_color_get(), evas_object_image_source_unset(), evas_object_text_add(), evas_object_textblock_clear(), and evas_object_textgrid_add().

const Eina_Value_Type* EINA_VALUE_TYPE_ARRAY

manages array type.

Use the value get/set for arrays:

- eina_value_array_get() and eina_value_array_set()
- eina_value_array_vget() and eina_value_array_vset()
- eina_value_array_pget() and eina_value_array_pset()

eina_value_set() takes an Eina_Value_Array where just `subtype` and `step` are used. If there is an `array`, it will be copied (including each item) and its contents must be properly configurable as `subtype` expects. eina_value_pset() takes a pointer to an Eina_Value_Array. For your convenience, use eina_value_array_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Array, it's an exact copy of the current structure in use by value, no copies are done.

Since
  1.2

Referenced by eldbus_message_from_eina_value().

const Eina_Value_Type* EINA_VALUE_TYPE_LIST

manages list type.

Use the value get/set for lists:

- eina_value_list_get() and eina_value_list_set()
- eina_value_list_vget() and eina_value_list_vset()
- eina_value_list_pget() and eina_value_list_pset()

eina_value_set() takes an Eina_Value_List where just `subtype` is used. If there is an `list`, it will be copied (including each item) and its contents must be properly configurable as `subtype` expects. eina_value_pset() takes a pointer to an Eina_Value_List. For your convenience, use eina_value_list_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_List, it's an exact copy of the current structure in use by value, no copies are done.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_HASH

manages hash type.

Use the value get/set for hashes:

- eina_value_hash_get() and eina_value_hash_set()
- eina_value_hash_vget() and eina_value_hash_vset()
- eina_value_hash_pget() and eina_value_hash_pset()

eina_value_set() takes an Eina_Value_Hash where just `subtype` and `buckets_power_size` are used. If there is an `hash`, it will be copied (including each item) and its contents must be properly configurable as `subtype` expects. eina_value_pset() takes a pointer to an Eina_Value_Hash. For your convenience, use eina_value_hash_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Hash, it's an exact copy of the current structure in use by value, no copies are done.

Note
  be aware that hash data is always an allocated memory of size defined by `subtype->value_size`. If your `subtype` is an integer, add as data malloc(sizeof(int)). If your `subtype` is an string, add as data malloc(sizeof(char*)) and this data value must point to strdup(string)!

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_TIMEVAL

manages 'struct timeval' type

eina_value_set() takes a "struct timeval" from sys/time.h. eina_value_pset() takes a pointer to "struct timeval".

eina_value_get() and eina_value_pget() takes a pointer to "struct timeval" and it's an exact copy of value.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_BLOB

manages blob of bytes type, see Eina_Value_Blob

eina_value_set() takes an Eina_Value_Blob eina_value_pset() takes a pointer to Eina_Value_Blob.

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Blob and it's an exact copy of value, no allocations are made.

Memory is untouched unless you provide `ops` (operations) pointer.

Since
  1.2

const Eina_Value_Type* EINA_VALUE_TYPE_STRUCT

manages struct type.

Use the value get/set for structs:

- eina_value_struct_get() and eina_value_struct_set()
- eina_value_struct_vget() and eina_value_struct_vset()
- eina_value_struct_pget() and eina_value_struct_pset()

eina_value_set() takes an Eina_Value_Struct where just `desc` is used. If there is an `memory`, it will be copied (including each member) and its contents must be properly configurable as `desc` expects. eina_value_pset() takes a pointer to an Eina_Value_Struct. For your convenience, use eina_value_struct_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Struct, it's an exact copy of the current structure in use by value, no copies are done.

Since
  1.2

Referenced by eldbus_message_from_eina_value().

EINA_VALUE_TYPE_UCHAR = NULL

manages unsigned char type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_USHORT = NULL

manages unsigned short type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_UINT = NULL

manages unsigned int type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_ULONG = NULL

manages unsigned long type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_TIMESTAMP = NULL

manages unsigned long type used for timestamps.

Note
  this is identical in function to EINA_VALUE_TYPE_ULONG

Since
  1.2

Examples:
  eina_value_03.c.

Referenced by eina_value_util_time_string_new().

EINA_VALUE_TYPE_UINT64 = NULL

manages unsigned integer of 64 bits type.

Since
  1.2

Examples:
  eina_value_03.c.

Referenced by evas_object_color_get(), and evas_object_image_source_unset().

EINA_VALUE_TYPE_CHAR = NULL

manages char type.

Since
  1.2

Examples:
  eina_value_02.c, and eina_value_03.c.

Referenced by evas_object_color_get().

EINA_VALUE_TYPE_SHORT = NULL

manages short type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_INT = NULL

manages int type.

Since
  1.2

Examples:
  complex-types-client-eina-value.c, eina_value_01.c, eina_value_02.c, and eina_value_03.c.

Referenced by evas_object_color_get(), evas_object_text_add(), evas_object_textblock_clear(), and evas_object_textgrid_add().

EINA_VALUE_TYPE_LONG = NULL

manages long type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_INT64 = NULL

manages integer of 64 bits type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_FLOAT = NULL

manages float type.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_DOUBLE = NULL

manages double type.

Since
  1.2

Examples:
  eina_value_03.c.

Referenced by evas_object_color_get().

EINA_VALUE_TYPE_STRINGSHARE = NULL

manages stringshared string type.

Since
  1.2

Examples:
  eina_value_03.c.

Referenced by eo_dbg_info_free().

EINA_VALUE_TYPE_STRING = NULL

manages string type.

Since
  1.2

Examples:
  complex-types-client-eina-value.c, eina_value_01.c, and eina_value_03.c.

Referenced by eo_dbg_info_free(), evas_object_color_get(), evas_object_image_source_unset(), evas_object_text_add(), evas_object_textblock_clear(), and evas_object_textgrid_add().

EINA_VALUE_TYPE_ARRAY = NULL

manages array type.

Use the value get/set for arrays:

- eina_value_array_get() and eina_value_array_set()
- eina_value_array_vget() and eina_value_array_vset()
- eina_value_array_pget() and eina_value_array_pset()

eina_value_set() takes an Eina_Value_Array where just `subtype` and `step` are used. If there is an `array`, it will be copied (including each item) and its contents must be properly configurable as `subtype` expects. eina_value_pset() takes a pointer to an Eina_Value_Array. For your convenience, use eina_value_array_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Array, it's an exact copy of the current structure in use by value, no copies are done.

Since
  1.2

Examples:
  complex-types-client-eina-value.c.

Referenced by eldbus_message_from_eina_value().

EINA_VALUE_TYPE_LIST = NULL

manages list type.

Use the value get/set for lists:

- eina_value_list_get() and eina_value_list_set()
- eina_value_list_vget() and eina_value_list_vset()
- eina_value_list_pget() and eina_value_list_pset()

eina_value_set() takes an Eina_Value_List where just `subtype` is used. If there is an `list`, it will be copied (including each item) and its contents must be properly configurable as `subtype` expects. eina_value_pset() takes a pointer to an Eina_Value_List. For your convenience, use eina_value_list_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_List, it's an exact copy of the current structure in use by value, no copies are done.

Since
  1.2

EINA_VALUE_TYPE_HASH = NULL

manages hash type.

Use the value get/set for hashes:

- eina_value_hash_get() and eina_value_hash_set()
- eina_value_hash_vget() and eina_value_hash_vset()
- eina_value_hash_pget() and eina_value_hash_pset()

eina_value_set() takes an Eina_Value_Hash where just `subtype` and `buckets_power_size` are used. If there is an `hash`, it will be copied (including each item) and its contents must be properly configurable as `subtype` expects. eina_value_pset() takes a pointer to an Eina_Value_Hash. For your convenience, use eina_value_hash_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Hash, it's an exact copy of the current structure in use by value, no copies are done.

Note
  be aware that hash data is always an allocated memory of size defined by `subtype->value_size`. If your `subtype` is an integer, add as data malloc(sizeof(int)). If your `subtype` is an string, add as data malloc(sizeof(char*)) and this data value must point to strdup(string)!

Since
  1.2

EINA_VALUE_TYPE_TIMEVAL = NULL

manages 'struct timeval' type

eina_value_set() takes a "struct timeval" from sys/time.h. eina_value_pset() takes a pointer to "struct timeval".

eina_value_get() and eina_value_pget() takes a pointer to "struct timeval" and it's an exact copy of value.

Since
  1.2

Examples:
  eina_value_03.c.

EINA_VALUE_TYPE_BLOB = NULL

manages blob of bytes type, see Eina_Value_Blob

eina_value_set() takes an Eina_Value_Blob eina_value_pset() takes a pointer to Eina_Value_Blob.

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Blob and it's an exact copy of value, no allocations are made.

Memory is untouched unless you provide `ops` (operations) pointer.

Since
  1.2

EINA_VALUE_TYPE_STRUCT = NULL

manages struct type.

Use the value get/set for structs:

- eina_value_struct_get() and eina_value_struct_set()
- eina_value_struct_vget() and eina_value_struct_vset()
- eina_value_struct_pget() and eina_value_struct_pset()

eina_value_set() takes an Eina_Value_Struct where just `desc` is used. If there is an `memory`, it will be copied (including each member) and its contents must be properly configurable as `desc` expects. eina_value_pset() takes a pointer to an Eina_Value_Struct. For your convenience, use eina_value_struct_setup().

eina_value_get() and eina_value_pget() takes a pointer to Eina_Value_Struct, it's an exact copy of the current structure in use by value, no copies are done.

Since
  1.2

Examples:
  complex-types-client-eina-value.c, and eina_value_02.c.

Referenced by eldbus_message_from_eina_value().