Data Structures | Macros | Typedefs | Functions | Variables
Generic Value Struct management

Data Structures

struct  _Eina_Value_Struct_Operations
 How to manage struct. More...
 
struct  _Eina_Value_Struct_Member
 Describes a single member of struct. More...
 
struct  _Eina_Value_Struct_Desc
 Describes the struct by listing its size, members and operations. More...
 
struct  _Eina_Value_Struct
 Used to store the memory and its description. More...
 

Macros

#define EINA_VALUE_STRUCT_OPERATIONS_VERSION   (1)
 Current API version, used to validate _Eina_Value_Struct_Operations.
 
#define EINA_VALUE_STRUCT_DESC_VERSION   (1)
 Current API version, used to validate _Eina_Value_Struct_Desc.
 
#define EINA_VALUE_STRUCT_MEMBER(eina_value_type, type, member)   {#member, eina_value_type, offsetof(type, member)}
 Helper to define Eina_Value_Struct_Member fields, uses offsetof() with type and member. More...
 
#define EINA_VALUE_STRUCT_MEMBER_SENTINEL   {NULL, NULL, 0}
 Helper to define Eina_Value_Struct_Member fields for sentinel (last item), useful if you did not define member_count. More...
 
#define EINA_VALUE_STRUCT_DESC_DEFINE(Name, Ops, Size, ...)
 

Typedefs

typedef struct _Eina_Value_Struct_Operations Eina_Value_Struct_Operations
 How to manage struct. More...
 
typedef struct _Eina_Value_Struct_Member Eina_Value_Struct_Member
 Describes a single member of struct. More...
 
typedef struct _Eina_Value_Struct_Desc Eina_Value_Struct_Desc
 Describes the struct by listing its size, members and operations. More...
 

Functions

EAPI Eina_Valueeina_value_struct_new (const Eina_Value_Struct_Desc *desc)
 Creates generic value storage of type struct. More...
 
static Eina_Bool eina_value_struct_setup (Eina_Value *value, const Eina_Value_Struct_Desc *desc)
 Initializes generic value storage of type struct. More...
 
static const Eina_Value_Struct_Desceina_value_struct_desc_get (const Eina_Value *value)
 Checks for a struct and get its description. More...
 
static Eina_Bool eina_value_struct_set (Eina_Value *value, const char *name,...)
 Sets the generic value in a struct member. More...
 
static Eina_Bool eina_value_struct_get (const Eina_Value *value, const char *name,...)
 Gets the generic value from a struct member. More...
 
static Eina_Bool eina_value_struct_vset (Eina_Value *value, const char *name, va_list args)
 Sets the generic value in a struct member. More...
 
static Eina_Bool eina_value_struct_vget (const Eina_Value *value, const char *name, va_list args)
 Gets the generic value from a struct member. More...
 
static Eina_Bool eina_value_struct_pset (Eina_Value *value, const char *name, const void *ptr)
 Sets the generic value in a struct member from pointer. More...
 
static Eina_Bool eina_value_struct_pget (const Eina_Value *value, const char *name, void *ptr)
 Gets the generic value to pointer from a struct member. More...
 
static Eina_Bool eina_value_struct_value_get (const Eina_Value *src, const char *name, Eina_Value *dst)
 Gets the member as Eina_Value copy. More...
 
static Eina_Bool eina_value_struct_value_set (Eina_Value *dst, const char *name, const Eina_Value *src)
 Sets the member from Eina_Value source. More...
 
static Eina_Bool eina_value_struct_member_value_get (const Eina_Value *src, const Eina_Value_Struct_Member *member, Eina_Value *dst)
 Gets the member as Eina_Value copy given its member description. More...
 
static Eina_Bool eina_value_struct_member_value_set (Eina_Value *dst, const Eina_Value_Struct_Member *member, const Eina_Value *src)
 Sets the member from Eina_Value source. More...
 

Variables

EAPI const Eina_Value_Struct_OperationsEINA_VALUE_STRUCT_OPERATIONS_BINSEARCH
 Assumes members is sorted by name and applies binary search for names. More...
 
EAPI const Eina_Value_Struct_OperationsEINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE
 Assumes members name are stringshared and can be compared for equality without using its contents (simple pointer comparison). More...
 
EAPI const Eina_Value_Struct_OperationsEINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = NULL
 Assumes members is sorted by name and applies binary search for names. More...
 
EAPI const Eina_Value_Struct_OperationsEINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = NULL
 Assumes members name are stringshared and can be compared for equality without using its contents (simple pointer comparison). More...
 

Detailed Description

Macro Definition Documentation

◆ EINA_VALUE_STRUCT_MEMBER

#define EINA_VALUE_STRUCT_MEMBER (   eina_value_type,
  type,
  member 
)    {#member, eina_value_type, offsetof(type, member)}

Helper to define Eina_Value_Struct_Member fields, uses offsetof() with type and member.

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

◆ EINA_VALUE_STRUCT_MEMBER_SENTINEL

#define EINA_VALUE_STRUCT_MEMBER_SENTINEL   {NULL, NULL, 0}

Helper to define Eina_Value_Struct_Member fields for sentinel (last item), useful if you did not define member_count.

Since
1.2

◆ EINA_VALUE_STRUCT_DESC_DEFINE

#define EINA_VALUE_STRUCT_DESC_DEFINE (   Name,
  Ops,
  Size,
  ... 
)
Value:
static inline Eina_Value_Struct_Desc * \
Name(void) \
{ \
Eina_Value_Struct_Member tmp[] = { __VA_ARGS__ }; \
static Eina_Value_Struct_Member members[EINA_C_ARRAY_LENGTH(tmp) + 1] = { { "", NULL, 0 } }; \
static Eina_Value_Struct_Desc r = { \
EINA_VALUE_STRUCT_DESC_VERSION, \
NULL, \
members, \
EINA_C_ARRAY_LENGTH(tmp), \
Size \
}; \
\
if (members[0].name) \
{ \
r.ops = Ops; \
memcpy(members, tmp, sizeof(tmp)); \
} \
return &r; \
}
Describes the struct by listing its size, members and operations.
Definition: eina_value.h:3143
#define EINA_C_ARRAY_LENGTH(arr)
Macro to return the array length of a standard c array.
Definition: eina_types.h:621
Describes a single member of struct.
Definition: eina_value.h:3120

Typedef Documentation

◆ Eina_Value_Struct_Operations

How to manage struct.

Any NULL callback is ignored.

A structure can specify alternative methods to allocate, free and copy itself. See structure definition for all methods.

See also
_Eina_Value_Struct_Operations explains fields.
Since
1.2

◆ Eina_Value_Struct_Member

Describes a single member of struct.

The member holds a name, type and its byte offset within the struct memory. Most Eina_Value_Struct functions takes the member name as parameter, as in eina_value_struct_set().

See also
_Eina_Value_Struct_Member explains fields.
Since
1.2

◆ Eina_Value_Struct_Desc

Describes the struct by listing its size, members and operations.

See also
_Eina_Value_Struct_Desc explains fields.
Since
1.2

Function Documentation

◆ eina_value_struct_new()

EAPI Eina_Value* eina_value_struct_new ( const Eina_Value_Struct_Desc desc)

Creates generic value storage of type struct.

Parameters
[in]descHow to manage this struct members.
Returns
The new value, or NULL on failure.

Create a new generic value storage of type struct. The members are managed using the description specified by desc.

On failure, NULL is returned.

Note
this creates from mempool and then uses eina_value_struct_setup().
See also
eina_value_free()
eina_value_struct_setup()
Since
1.2

References eina_mempool_free(), eina_mempool_malloc(), and eina_value_struct_setup().

◆ eina_value_struct_setup()

static Eina_Bool eina_value_struct_setup ( Eina_Value value,
const Eina_Value_Struct_Desc desc 
)
inlinestatic

Initializes generic value storage of type struct.

Parameters
[out]valueValue object
[in]descHow to manage this struct members.
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

Initializes new generic value storage of type struct with the given desc.

This is the same as calling eina_value_set() with EINA_VALUE_TYPE_STRUCT followed by eina_value_pset() with the Eina_Value_Struct description configured.

Note
Existing contents are ignored! If the value was previously used, then use eina_value_flush() first.

On failure, EINA_FALSE is returned.

See also
eina_value_flush()
Since
1.2

Referenced by eina_value_struct_new().

◆ eina_value_struct_desc_get()

static const Eina_Value_Struct_Desc* eina_value_struct_desc_get ( const Eina_Value value)
inlinestatic

Checks for a struct and get its description.

Parameters
[in]valueValue object
Returns
structure description, with all members and size. on failure, NULL is returned.
Since
1.21

◆ eina_value_struct_set()

static Eina_Bool eina_value_struct_set ( Eina_Value value,
const char *  name,
  ... 
)
inlinestatic

Sets the generic value in a struct member.

Parameters
[in,out]valueSource value object
[in]nameName to find the member
[in]...Variable arguments
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The variable argument is dependent on chosen member type. The list for basic types:

  • EINA_VALUE_TYPE_VALUE: Eina_Value
  • EINA_VALUE_TYPE_ERROR: Eina_Error
  • EINA_VALUE_TYPE_UCHAR: unsigned char
  • EINA_VALUE_TYPE_USHORT: unsigned short
  • EINA_VALUE_TYPE_UINT: unsigned int
  • EINA_VALUE_TYPE_ULONG: unsigned long
  • EINA_VALUE_TYPE_UINT64: uint64_t
  • EINA_VALUE_TYPE_CHAR: char
  • EINA_VALUE_TYPE_SHORT: short
  • EINA_VALUE_TYPE_INT: int
  • EINA_VALUE_TYPE_LONG: long
  • EINA_VALUE_TYPE_INT64: int64_t
  • EINA_VALUE_TYPE_FLOAT: float
  • EINA_VALUE_TYPE_DOUBLE: double
  • EINA_VALUE_TYPE_STRINGSHARE: const char *
  • EINA_VALUE_TYPE_STRING: const char *
  • EINA_VALUE_TYPE_HASH: Eina_Value_Hash
  • EINA_VALUE_TYPE_TIMEVAL: struct timeval*
  • EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
  • EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
  • EINA_VALUE_TYPE_TM: struct tm*
struct myst {
int i;
char c;
};
const Eina_Value_Struct_Member myst_members[] = {
{NULL, NULL, 0}
};
const Eina_Value_Struct_Desc myst_desc = {
NULL, myst_members, 2, sizeof(struct myst)
};
Eina_Value *value = eina_value_struct_new(&my_desc);
int x;
char y;
eina_value_struct_set(value, "i", 5678);
eina_value_struct_get(value, "i", &x);
eina_value_struct_set(value, "c", 0xf);
eina_value_struct_get(value, "c", &y);
See also
eina_value_struct_get()
eina_value_struct_vset()
eina_value_struct_pset()
Since
1.2
Examples
complex-types-client-eina-value.c, and eina_value_02.c.

◆ eina_value_struct_get()

static Eina_Bool eina_value_struct_get ( const Eina_Value value,
const char *  name,
  ... 
)
inlinestatic

Gets the generic value from a struct member.

Parameters
[in]valueSource value object
[in]nameName to find the member
[out]...Variable arguments
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The value is returned in the variable argument parameter, the actual value is type-dependent, but usually it will be what is stored inside the object. There shouldn't be any memory allocation, thus the contents should not be freed.

The variable argument is dependent on chosen member type. The list for basic types:

  • EINA_VALUE_TYPE_VALUE: Eina_Value*
  • EINA_VALUE_TYPE_ERROR: Eina_Error*
  • EINA_VALUE_TYPE_UCHAR: unsigned char*
  • EINA_VALUE_TYPE_USHORT: unsigned short*
  • EINA_VALUE_TYPE_UINT: unsigned int*
  • EINA_VALUE_TYPE_ULONG: unsigned long*
  • EINA_VALUE_TYPE_UINT64: uint64_t*
  • EINA_VALUE_TYPE_CHAR: char*
  • EINA_VALUE_TYPE_SHORT: short*
  • EINA_VALUE_TYPE_INT: int*
  • EINA_VALUE_TYPE_LONG: long*
  • EINA_VALUE_TYPE_INT64: int64_t*
  • EINA_VALUE_TYPE_FLOAT: float*
  • EINA_VALUE_TYPE_DOUBLE: double*
  • EINA_VALUE_TYPE_STRINGSHARE: const char **
  • EINA_VALUE_TYPE_STRING: const char **
  • EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
  • EINA_VALUE_TYPE_TIMEVAL: struct timeval*
  • EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
  • EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
  • EINA_VALUE_TYPE_TM: struct tm*
struct myst {
int i;
char c;
};
const Eina_Value_Struct_Member myst_members[] = {
{NULL, NULL, 0}
};
const Eina_Value_Struct_Desc myst_desc = {
NULL, myst_members, 2, sizeof(struct myst)
};
Eina_Value *value = eina_value_struct_new(&my_desc);
int x;
char y;
eina_value_struct_set(value, "i", 5678);
eina_value_struct_get(value, "i", &x);
eina_value_struct_set(value, "c", 0xf);
eina_value_struct_get(value, "c", &y);
See also
eina_value_struct_set()
eina_value_struct_vset()
eina_value_struct_pset()
Since
1.2
Examples
complex-types-client-eina-value.c, and eina_value_02.c.

◆ eina_value_struct_vset()

static Eina_Bool eina_value_struct_vset ( Eina_Value value,
const char *  name,
va_list  args 
)
inlinestatic

Sets the generic value in a struct member.

Parameters
[in,out]valueSource value object
[in]nameName to find the member
[in]argsVariable argument
Returns
EINA_TRUE on success, EINA_FALSE otherwise.
See also
eina_value_struct_set()
eina_value_struct_get()
eina_value_struct_pset()
Since
1.2

◆ eina_value_struct_vget()

static Eina_Bool eina_value_struct_vget ( const Eina_Value value,
const char *  name,
va_list  args 
)
inlinestatic

Gets the generic value from a struct member.

Parameters
[in]valueSource value object
[in]nameName to find the member
[in,out]argsVariable argument
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The value is returned in the variable argument parameter, the actual value is type-dependent, but usually it will be what is stored inside the object. There shouldn't be any memory allocation, thus the contents should not be freed.

See also
eina_value_struct_vset()
eina_value_struct_get()
eina_value_struct_pget()
Since
1.2

◆ eina_value_struct_pset()

static Eina_Bool eina_value_struct_pset ( Eina_Value value,
const char *  name,
const void *  ptr 
)
inlinestatic

Sets the generic value in a struct member from pointer.

Parameters
[in,out]valueSource value object
[in]nameName to find the member
[in]ptrPointer to specify the contents.
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The pointer type is dependent on chosen value type. The list for basic types:

  • EINA_VALUE_TYPE_VALUE: Eina_Value*
  • EINA_VALUE_TYPE_ERROR: Eina_Error*
  • EINA_VALUE_TYPE_UCHAR: unsigned char*
  • EINA_VALUE_TYPE_USHORT: unsigned short*
  • EINA_VALUE_TYPE_UINT: unsigned int*
  • EINA_VALUE_TYPE_ULONG: unsigned long*
  • EINA_VALUE_TYPE_UINT64: uint64_t*
  • EINA_VALUE_TYPE_CHAR: char*
  • EINA_VALUE_TYPE_SHORT: short*
  • EINA_VALUE_TYPE_INT: int*
  • EINA_VALUE_TYPE_LONG: long*
  • EINA_VALUE_TYPE_INT64: int64_t*
  • EINA_VALUE_TYPE_FLOAT: float*
  • EINA_VALUE_TYPE_DOUBLE: double*
  • EINA_VALUE_TYPE_STRINGSHARE: const char **
  • EINA_VALUE_TYPE_STRING: const char **
  • EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
  • EINA_VALUE_TYPE_TIMEVAL: struct timeval*
  • EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
  • EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
  • EINA_VALUE_TYPE_TM: struct tm*
Note
the pointer contents are written using the size defined by type. It can be larger than void* or uint64_t.
struct myst {
int i;
char c;
};
const Eina_Value_Struct_Member myst_members[] = {
{NULL, NULL, 0}
};
const Eina_Value_Struct_Desc myst_desc = {
NULL, myst_members, 2, sizeof(struct myst)
};
Eina_Value *value = eina_value_struct_new(&my_desc);
int x = 5678;
char y = 0xf;
eina_value_struct_pset(value, "i", &x);
eina_value_struct_pget(value, "i", &x);
eina_value_struct_pset(value, "c", &y);
eina_value_struct_pget(value, "c", &y);
See also
eina_value_struct_set()
eina_value_struct_get()
eina_value_struct_vset()
Since
1.2

◆ eina_value_struct_pget()

static Eina_Bool eina_value_struct_pget ( const Eina_Value value,
const char *  name,
void *  ptr 
)
inlinestatic

Gets the generic value to pointer from a struct member.

Parameters
[in]valueSource value object
[in]nameName to find the member
[out]ptrPointer to receive the contents.
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The value is returned in pointer contents, the actual value is type-dependent, but usually it will be what is stored inside the object. There shouldn't be any memory allocation, thus the contents should not be freed.

The pointer type is dependent on chosen value type. The list for basic types:

  • EINA_VALUE_TYPE_VALUE: Eina_Value*
  • EINA_VALUE_TYPE_ERROR: Eina_Error*
  • EINA_VALUE_TYPE_UCHAR: unsigned char*
  • EINA_VALUE_TYPE_USHORT: unsigned short*
  • EINA_VALUE_TYPE_UINT: unsigned int*
  • EINA_VALUE_TYPE_ULONG: unsigned long*
  • EINA_VALUE_TYPE_UINT64: uint64_t*
  • EINA_VALUE_TYPE_CHAR: char*
  • EINA_VALUE_TYPE_SHORT: short*
  • EINA_VALUE_TYPE_INT: int*
  • EINA_VALUE_TYPE_LONG: long*
  • EINA_VALUE_TYPE_INT64: int64_t*
  • EINA_VALUE_TYPE_FLOAT: float*
  • EINA_VALUE_TYPE_DOUBLE: double*
  • EINA_VALUE_TYPE_STRINGSHARE: const char **
  • EINA_VALUE_TYPE_STRING: const char **
  • EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
  • EINA_VALUE_TYPE_TIMEVAL: struct timeval*
  • EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
  • EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
  • EINA_VALUE_TYPE_TM: struct tm*
struct myst {
int i;
char c;
};
const Eina_Value_Struct_Member myst_members[] = {
{NULL, NULL, 0}
};
const Eina_Value_Struct_Desc myst_desc = {
NULL, myst_members, 2, sizeof(struct myst)
};
Eina_Value *value = eina_value_struct_new(&my_desc);
int x = 5678;
char y = 0xf;
eina_value_struct_pset(value, "i", &);
eina_value_struct_pget(value, "i", &x);
eina_value_struct_pset(value, "c", &y);
eina_value_struct_pget(value, "c", &y);
See also
eina_value_struct_set()
eina_value_struct_vset()
eina_value_struct_pset()
Since
1.2

◆ eina_value_struct_value_get()

static Eina_Bool eina_value_struct_value_get ( const Eina_Value src,
const char *  name,
Eina_Value dst 
)
inlinestatic

Gets the member as Eina_Value copy.

Parameters
[in]srcSource value object
[in]nameName to find the member
[out]dstWhere to return the member value.
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The argument dst is considered uninitialized and it's setup to the type of the member.

Since
1.2
Examples
complex-types-client-eina-value.c.

◆ eina_value_struct_value_set()

static Eina_Bool eina_value_struct_value_set ( Eina_Value dst,
const char *  name,
const Eina_Value src 
)
inlinestatic

Sets the member from Eina_Value source.

Parameters
[in,out]dstdestination value object
[in]namename to find the member
[in]srcsource value
Returns
EINA_TRUE on success, EINA_FALSE on failure.
Since
1.2
Examples
complex-types-client-eina-value.c.

◆ eina_value_struct_member_value_get()

static Eina_Bool eina_value_struct_member_value_get ( const Eina_Value src,
const Eina_Value_Struct_Member member,
Eina_Value dst 
)
inlinestatic

Gets the member as Eina_Value copy given its member description.

Parameters
[in]srcSource value object
[in]memberThe member description to use
[out]dstWhere to return the member value.
Returns
EINA_TRUE on success, EINA_FALSE otherwise.

The argument dst is considered uninitialized and it's setup to the type of the member.

Since
1.2

◆ eina_value_struct_member_value_set()

static Eina_Bool eina_value_struct_member_value_set ( Eina_Value dst,
const Eina_Value_Struct_Member member,
const Eina_Value src 
)
inlinestatic

Sets the member from Eina_Value source.

Parameters
[out]dstdestination value object
[in]memberthe member description to use
[in]srcsource value
Returns
EINA_TRUE on success, EINA_FALSE on failure.
Since
1.2

Variable Documentation

◆ EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH [1/2]

EAPI const Eina_Value_Struct_Operations* EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH

Assumes members is sorted by name and applies binary search for names.

Ideally the member_count field is set to speed it up.

No other methods are set (alloc, free, copy, compare), then it uses the default operations.

◆ EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE [1/2]

EAPI const Eina_Value_Struct_Operations* EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE

Assumes members name are stringshared and can be compared for equality without using its contents (simple pointer comparison).

Ideally the search name will be stringshared as well, but it will do a second loop with a forced stringshare if it did not find the member.

No other methods are set (alloc, free, copy, compare), then it uses the default operations.

◆ EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH [2/2]

EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = NULL

Assumes members is sorted by name and applies binary search for names.

Ideally the member_count field is set to speed it up.

No other methods are set (alloc, free, copy, compare), then it uses the default operations.

◆ EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE [2/2]

EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = NULL

Assumes members name are stringshared and can be compared for equality without using its contents (simple pointer comparison).

Ideally the search name will be stringshared as well, but it will do a second loop with a forced stringshare if it did not find the member.

No other methods are set (alloc, free, copy, compare), then it uses the default operations.