From 07274513e984f0b5544586c74508ccd16e7dcafa Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Sun, 13 Jan 2013 17:29:19 +1000
Subject: Remove EFL, since it's been released now.
---
libraries/eina/src/include/eina_inline_value.x | 1790 ------------------------
1 file changed, 1790 deletions(-)
delete mode 100644 libraries/eina/src/include/eina_inline_value.x
(limited to 'libraries/eina/src/include/eina_inline_value.x')
diff --git a/libraries/eina/src/include/eina_inline_value.x b/libraries/eina/src/include/eina_inline_value.x
deleted file mode 100644
index 33c83f5..0000000
--- a/libraries/eina/src/include/eina_inline_value.x
+++ /dev/null
@@ -1,1790 +0,0 @@
-/* Eina - EFL data type library
- * Copyright (C) 2012 ProFUSION embedded systems
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library;
- * if not, see .
- */
-
-#ifndef EINA_INLINE_VALUE_X_
-#define EINA_INLINE_VALUE_X_
-
-#include
-#include
-
-#include "eina_stringshare.h"
-
-/* NOTE: most of value is implemented here for performance reasons */
-
-//#define EINA_VALUE_NO_OPTIMIZE 1
-#ifdef EINA_VALUE_NO_OPTIMIZE
-#define EINA_VALUE_TYPE_DEFAULT(type) (0)
-#else
-
-/**
- * @var _EINA_VALUE_TYPE_BASICS_START
- * pointer to the first basic type.
- * @since 1.2
- * @private
- */
-EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START;
-
-/**
- * @var _EINA_VALUE_TYPE_BASICS_END
- * pointer to the last (inclusive) basic type.
- * @since 1.2
- * @private
- */
-EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END;
-#define EINA_VALUE_TYPE_DEFAULT(type) \
- ((_EINA_VALUE_TYPE_BASICS_START <= type) && \
- (type <= _EINA_VALUE_TYPE_BASICS_END))
-#endif
-
-#define EINA_VALUE_TYPE_CHECK_RETURN(value) \
- EINA_SAFETY_ON_NULL_RETURN(value); \
- EINA_SAFETY_ON_FALSE_RETURN(eina_value_type_check(value->type))
-
-#define EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, retval) \
- EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type), retval)
-
-#define EINA_VALUE_TYPE_DISPATCH(type, method, no_method_err, ...) \
- do \
- { \
- if (type->method) \
- type->method(type, ##__VA_ARGS__); \
- else \
- eina_error_set(no_method_err); \
- } \
- while (0)
-
-#define EINA_VALUE_TYPE_DISPATCH_RETURN(value, method, no_method_err, def_ret, ...) \
- do \
- { \
- if (type->method) \
- return type->method(type, ##__VA_ARGS__); \
- eina_error_set(no_method_err); \
- return def_ret; \
- } \
- while (0)
-
-/**
- * @brief Get memory for given value (inline or allocated buffer).
- * @since 1.2
- * @private
- */
-static inline void *
-eina_value_memory_get(const Eina_Value *value)
-{
- if (value->type->value_size <= 8)
- return (void *)value->value.buf;
- return value->value.ptr;
-}
-
-/**
- * @brief Allocate memory for internal value types.
- * @since 1.2
- * @private
- */
-EAPI void *eina_value_inner_alloc(size_t size);
-/**
- * @brief Releases memory for internal value types.
- * @since 1.2
- * @private
- */
-EAPI void eina_value_inner_free(size_t size, void *mem);
-
-static inline Eina_Bool
-eina_value_setup(Eina_Value *value, const Eina_Value_Type *type)
-{
- void *mem;
-
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(type->value_size > 0, EINA_FALSE);
-
- value->type = type;
-
- if (type->value_size <= 8) mem = &value->value;
- else
- {
- mem = value->value.ptr = eina_value_inner_alloc(type->value_size);
- EINA_SAFETY_ON_NULL_RETURN_VAL(mem, EINA_FALSE);
- }
-
- memset(mem, 0, type->value_size);
-
- if (EINA_VALUE_TYPE_DEFAULT(type))
- {
- eina_error_set(0);
- return EINA_TRUE;
- }
-
- EINA_VALUE_TYPE_DISPATCH_RETURN(type, setup,
- EINA_ERROR_VALUE_FAILED, EINA_FALSE, mem);
-}
-
-static inline void
-eina_value_flush(Eina_Value *value)
-{
- const Eina_Value_Type *type;
- void *mem;
-
- EINA_VALUE_TYPE_CHECK_RETURN(value);
-
- type = value->type;
- mem = eina_value_memory_get(value);
-
- if (EINA_VALUE_TYPE_DEFAULT(type))
- {
- if (type == EINA_VALUE_TYPE_STRINGSHARE)
- {
- if (value->value.ptr) eina_stringshare_del((const char*) value->value.ptr);
- }
- else if (type == EINA_VALUE_TYPE_STRING)
- {
- if (value->value.ptr) free(value->value.ptr);
- }
- else if (type->value_size > 8)
- eina_value_inner_free(type->value_size, mem);
- eina_error_set(0);
- return;
- }
-
- EINA_VALUE_TYPE_DISPATCH(type, flush, EINA_ERROR_VALUE_FAILED, mem);
- if (type->value_size > 8)
- eina_value_inner_free(type->value_size, mem);
- value->type = NULL;
-}
-
-static inline int
-eina_value_compare(const Eina_Value *a, const Eina_Value *b)
-{
- const Eina_Value_Type *type;
- void *pa, *pb;
-
- EINA_VALUE_TYPE_CHECK_RETURN_VAL(a, -1);
- EINA_SAFETY_ON_NULL_RETURN_VAL(b, -1);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(a->type == b->type, -1);
-
- eina_error_set(0);
- type = a->type;
- pa = eina_value_memory_get(a);
- pb = eina_value_memory_get(b);
-
-#ifndef EINA_VALUE_NO_OPTIMIZE
- if (type == EINA_VALUE_TYPE_UCHAR)
- {
- unsigned char *ta = (unsigned char *) pa, *tb = (unsigned char *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_USHORT)
- {
- unsigned short *ta = (unsigned short *) pa, *tb = (unsigned short *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_UINT)
- {
- unsigned int *ta = (unsigned int *) pa, *tb = (unsigned int *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if ((type == EINA_VALUE_TYPE_ULONG) || (type == EINA_VALUE_TYPE_TIMESTAMP))
- {
- unsigned long *ta = (unsigned long *) pa, *tb = (unsigned long *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_UINT64)
- {
- uint64_t *ta = (uint64_t *) pa, *tb = (uint64_t *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_CHAR)
- {
- char *ta = (char *) pa, *tb = (char *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_SHORT)
- {
- short *ta = (short *) pa, *tb = (short *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_INT)
- {
- int *ta = (int *) pa, *tb = (int *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_LONG)
- {
- long *ta = (long *) pa, *tb = (long *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_INT64)
- {
- int64_t *ta = (int64_t *) pa, *tb = (int64_t *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_FLOAT)
- {
- float *ta = (float *) pa, *tb = (float *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_DOUBLE)
- {
- double *ta = (double *) pa, *tb = (double *) pb;
- if (*ta < *tb)
- return -1;
- else if (*ta > *tb)
- return 1;
- return 0;
- }
- else if (type == EINA_VALUE_TYPE_STRINGSHARE ||
- type == EINA_VALUE_TYPE_STRING)
- {
- const char *sa = *(const char **)pa;
- const char *sb = *(const char **)pb;
- if (sa == sb)
- return 0;
- if (sa == NULL)
- return -1;
- if (sb == NULL)
- return 1;
- return strcmp(sa, sb);
- }
-#endif
-
- EINA_VALUE_TYPE_DISPATCH_RETURN(type, compare, EINA_ERROR_VALUE_FAILED,
- EINA_FALSE, pa, pb);
-}
-
-static inline Eina_Bool
-eina_value_set(Eina_Value *value, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, value);
- ret = eina_value_vset(value, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_get(const Eina_Value *value, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, value);
- ret = eina_value_vget(value, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_vset(Eina_Value *value, va_list args)
-{
- const Eina_Value_Type *type;
- void *mem;
-
- EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
-
- type = value->type;
- mem = eina_value_memory_get(value);
- eina_error_set(0);
-#ifndef EINA_VALUE_NO_OPTIMIZE
- if (type == EINA_VALUE_TYPE_UCHAR)
- {
- unsigned char *tmem = (unsigned char *) mem;
- *tmem = va_arg(args, unsigned int); /* promoted by va_arg */
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_USHORT)
- {
- unsigned short *tmem = (unsigned short *) mem;
- *tmem = va_arg(args, unsigned int); /* promoted by va_arg */
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_UINT)
- {
- unsigned int *tmem = (unsigned int *) mem;
- *tmem = va_arg(args, unsigned int);
- return EINA_TRUE;
- }
- else if ((type == EINA_VALUE_TYPE_ULONG) || (type == EINA_VALUE_TYPE_TIMESTAMP))
- {
- unsigned long *tmem = (unsigned long *) mem;
- *tmem = va_arg(args, unsigned long);
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_UINT64)
- {
- uint64_t *tmem = (uint64_t *) mem;
- *tmem = va_arg(args, uint64_t);
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_CHAR)
- {
- char *tmem = (char *) mem;
- *tmem = va_arg(args, int); /* promoted by va_arg */
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_SHORT)
- {
- short *tmem = (short *) mem;
- *tmem = va_arg(args, int); /* promoted by va_arg */
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_INT)
- {
- int *tmem = (int *) mem;
- *tmem = va_arg(args, int);
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_LONG)
- {
- long *tmem = (long *) mem;
- *tmem = va_arg(args, long);
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_INT64)
- {
- int64_t *tmem = (int64_t *) mem;
- *tmem = va_arg(args, int64_t);
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_FLOAT)
- {
- float *tmem = (float *) mem;
- *tmem = va_arg(args, double); /* promoted by va_arg */
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_DOUBLE)
- {
- double *tmem = (double *) mem;
- *tmem = va_arg(args, double);
- return EINA_TRUE;
- }
- else if (type == EINA_VALUE_TYPE_STRINGSHARE)
- {
- const char *str = (const char *) va_arg(args, const char *);
- return eina_stringshare_replace((const char **)&value->value.ptr, str);
- }
- else if (type == EINA_VALUE_TYPE_STRING)
- {
- const char *str = (const char *) va_arg(args, const char *);
- if (value->value.ptr == str) return EINA_TRUE;
- if (!str)
- {
- free(value->value.ptr);
- value->value.ptr = NULL;
- }
- else
- {
- char *tmp = strdup(str);
- if (!tmp)
- {
- eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
- return EINA_FALSE;
- }
- free(value->value.ptr);
- value->value.ptr = tmp;
- }
- return EINA_TRUE;
- }
-#endif
-
- EINA_VALUE_TYPE_DISPATCH_RETURN(value, vset, EINA_ERROR_VALUE_FAILED,
- EINA_FALSE, mem, args);
-}
-
-static inline Eina_Bool
-eina_value_vget(const Eina_Value *value, va_list args)
-{
- const Eina_Value_Type *type;
- const void *mem;
- void *ptr;
-
- EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
-
- type = value->type;
- mem = eina_value_memory_get(value);
- ptr = va_arg(args, void *);
- eina_error_set(0);
- if (EINA_VALUE_TYPE_DEFAULT(type))
- {
- memcpy(ptr, mem, type->value_size);
- return EINA_TRUE;
- }
-
- EINA_VALUE_TYPE_DISPATCH_RETURN(value, pget, EINA_ERROR_VALUE_FAILED,
- EINA_FALSE, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_pset(Eina_Value *value, const void *ptr)
-{
- const Eina_Value_Type *type;
- void *mem;
-
- EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
-
- type = value->type;
- mem = eina_value_memory_get(value);
- eina_error_set(0);
-
- if (EINA_VALUE_TYPE_DEFAULT(type))
- {
- if (type == EINA_VALUE_TYPE_STRINGSHARE)
- {
- const char * const *pstr = (const char * const *) ptr;
- const char *str = *pstr;
-
- return eina_stringshare_replace((const char **)&value->value.ptr,
- str);
- }
- else if (type == EINA_VALUE_TYPE_STRING)
- {
- const char * const * pstr = (const char * const *) ptr;
- const char *str = *pstr;
- if (value->value.ptr == str) return EINA_TRUE;
- if (!str)
- {
- free(value->value.ptr);
- value->value.ptr = NULL;
- }
- else
- {
- char *tmp = strdup(str);
- if (!tmp)
- {
- eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
- return EINA_FALSE;
- }
- free(value->value.ptr);
- value->value.ptr = tmp;
- }
- return EINA_TRUE;
- }
- else
- memcpy(mem, ptr, type->value_size);
- return EINA_TRUE;
- }
-
- EINA_VALUE_TYPE_DISPATCH_RETURN(value, pset, EINA_ERROR_VALUE_FAILED,
- EINA_FALSE, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_pget(const Eina_Value *value, void *ptr)
-{
- const Eina_Value_Type *type;
- const void *mem;
-
- EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
-
- type = value->type;
- mem = eina_value_memory_get(value);
- eina_error_set(0);
- if (EINA_VALUE_TYPE_DEFAULT(type))
- {
- memcpy(ptr, mem, type->value_size);
- return EINA_TRUE;
- }
-
- EINA_VALUE_TYPE_DISPATCH_RETURN(value, pget, EINA_ERROR_VALUE_FAILED,
- EINA_FALSE, mem, ptr);
-}
-
-static inline const Eina_Value_Type *
-eina_value_type_get(const Eina_Value *value)
-{
- EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, NULL);
- return value->type;
-}
-
-#define EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, retval) \
- EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
- EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_ARRAY, retval)
-
-static inline Eina_Bool
-eina_value_array_setup(Eina_Value *value, const Eina_Value_Type *subtype, unsigned int step)
-{
- Eina_Value_Array desc = { subtype, step, NULL };
- if (!eina_value_setup(value, EINA_VALUE_TYPE_ARRAY))
- return EINA_FALSE;
- if (!eina_value_pset(value, &desc))
- {
- eina_value_flush(value);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static inline unsigned int
-eina_value_array_count(const Eina_Value *value)
-{
- Eina_Value_Array desc;
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return 0;
- return eina_inarray_count(desc.array);
-}
-
-static inline Eina_Bool
-eina_value_array_remove(Eina_Value *value, unsigned int position)
-{
- Eina_Value_Array desc;
- void *mem;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_nth(desc.array, position);
- if (!mem)
- return EINA_FALSE;
-
- eina_value_type_flush(desc.subtype, mem);
- return eina_inarray_remove_at(desc.array, position);
-}
-
-static inline Eina_Bool
-eina_value_array_vset(Eina_Value *value, unsigned int position, va_list args)
-{
- Eina_Value_Array desc;
- void *mem;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_nth(desc.array, position);
- if (!mem)
- return EINA_FALSE;
-
- return eina_value_type_vset(desc.subtype, mem, args);
-}
-
-static inline Eina_Bool
-eina_value_array_vget(const Eina_Value *value, unsigned int position, va_list args)
-{
- Eina_Value_Array desc;
- const void *mem;
- void *ptr;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_nth(desc.array, position);
- if (!mem)
- return EINA_FALSE;
-
- ptr = va_arg(args, void *);
- ret = eina_value_type_pget(desc.subtype, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_array_vinsert(Eina_Value *value, unsigned int position, va_list args)
-{
- Eina_Value_Array desc;
- void *mem;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_alloc_at(desc.array, position, 1);
- if (!mem)
- return EINA_FALSE;
-
- if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
- if (!eina_value_type_vset(desc.subtype, mem, args)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc.subtype, mem);
- error_setup:
- eina_inarray_remove_at(desc.array, position);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_array_vappend(Eina_Value *value, va_list args)
-{
- Eina_Value_Array desc;
- void *mem;
- int position;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- position = eina_inarray_count(desc.array);
- mem = eina_inarray_alloc_at(desc.array, position, 1);
- if (!mem)
- return EINA_FALSE;
-
- if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
- if (!eina_value_type_vset(desc.subtype, mem, args)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc.subtype, mem);
- error_setup:
- eina_inarray_remove_at(desc.array, position);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_array_set(Eina_Value *value, unsigned int position, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, position);
- ret = eina_value_array_vset(value, position, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_array_get(const Eina_Value *value, unsigned int position, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, position);
- ret = eina_value_array_vget(value, position, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_array_insert(Eina_Value *value, unsigned int position, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, position);
- ret = eina_value_array_vinsert(value, position, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool eina_value_array_append(Eina_Value *value, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, value);
- ret = eina_value_array_vappend(value, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_array_pset(Eina_Value *value, unsigned int position, const void *ptr)
-{
- Eina_Value_Array desc;
- void *mem;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_nth(desc.array, position);
- if (!mem)
- return EINA_FALSE;
-
- return eina_value_type_pset(desc.subtype, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_array_pget(const Eina_Value *value, unsigned int position, void *ptr)
-{
- Eina_Value_Array desc;
- const void *mem;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_nth(desc.array, position);
- if (!mem)
- return EINA_FALSE;
-
- ret = eina_value_type_pget(desc.subtype, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_array_pinsert(Eina_Value *value, unsigned int position, const void *ptr)
-{
- Eina_Value_Array desc;
- void *mem;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- mem = eina_inarray_alloc_at(desc.array, position, 1);
- if (!mem)
- return EINA_FALSE;
-
- if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
- if (!eina_value_type_pset(desc.subtype, mem, ptr)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc.subtype, mem);
- error_setup:
- eina_inarray_remove_at(desc.array, position);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_array_pappend(Eina_Value *value, const void *ptr)
-{
- Eina_Value_Array desc;
- void *mem;
- int position;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
- if (!eina_value_pget(value, &desc))
- return EINA_FALSE;
-
- position = eina_inarray_count(desc.array);
- mem = eina_inarray_alloc_at(desc.array, position, 1);
- if (!mem)
- return EINA_FALSE;
-
- if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
- if (!eina_value_type_pset(desc.subtype, mem, ptr)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc.subtype, mem);
- error_setup:
- eina_inarray_remove_at(desc.array, position);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_array_value_get(const Eina_Value *src, unsigned int position, Eina_Value *dst)
-{
- Eina_Value_Array desc;
-
- EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(src, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
-
- if (!eina_value_pget(src, &desc))
- return EINA_FALSE;
- if (position >= eina_inarray_count(desc.array))
- return EINA_FALSE;
- if (!eina_value_setup(dst, desc.subtype))
- return EINA_FALSE;
- if (!eina_value_pset(dst, eina_inarray_nth(desc.array, position)))
- {
- eina_value_flush(dst);
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-#undef EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL
-
-#define EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, retval) \
- EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
- EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_LIST, retval)
-
-static inline void *
-eina_value_list_node_memory_get(const Eina_Value_Type *type, const Eina_List *node)
-{
- if (node == NULL) return NULL;
- if (type->value_size <= sizeof(void*))
- return (void *)&(node->data);
- return node->data;
-}
-
-static inline void *
-eina_value_list_node_memory_setup(const Eina_Value_Type *type, Eina_List *node)
-{
- if (type->value_size <= sizeof(void*))
- return (void *)&(node->data);
- node->data = malloc(type->value_size);
- return node->data;
-}
-
-static inline void
-eina_value_list_node_memory_flush(const Eina_Value_Type *type, Eina_List *node)
-{
- if (type->value_size <= sizeof(void*))
- return;
- free(node->data);
-}
-
-static inline Eina_Bool
-eina_value_list_setup(Eina_Value *value, const Eina_Value_Type *subtype)
-{
- Eina_Value_List desc = { subtype, NULL };
- if (!eina_value_setup(value, EINA_VALUE_TYPE_LIST))
- return EINA_FALSE;
- if (!eina_value_pset(value, &desc))
- {
- eina_value_flush(value);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static inline unsigned int
-eina_value_list_count(const Eina_Value *value)
-{
- Eina_Value_List *desc;
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return 0;
- return eina_list_count(desc->list);
-}
-
-static inline Eina_Bool
-eina_value_list_remove(Eina_Value *value, unsigned int position)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- node = eina_list_nth_list(desc->list, position);
- mem = eina_value_list_node_memory_get(desc->subtype, node);
- if (!mem)
- return EINA_FALSE;
-
- eina_value_type_flush(desc->subtype, mem);
- eina_value_list_node_memory_flush(desc->subtype, node);
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-eina_value_list_vset(Eina_Value *value, unsigned int position, va_list args)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- node = eina_list_nth_list(desc->list, position);
- mem = eina_value_list_node_memory_get(desc->subtype, node);
- if (!mem)
- return EINA_FALSE;
-
- return eina_value_type_vset(desc->subtype, mem, args);
-}
-
-static inline Eina_Bool
-eina_value_list_vget(const Eina_Value *value, unsigned int position, va_list args)
-{
- const Eina_Value_List *desc;
- const Eina_List *node;
- const void *mem;
- void *ptr;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (const Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- node = eina_list_nth_list(desc->list, position);
- mem = eina_value_list_node_memory_get(desc->subtype, node);
- if (!mem)
- return EINA_FALSE;
-
- ptr = va_arg(args, void *);
- ret = eina_value_type_pget(desc->subtype, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_list_vinsert(Eina_Value *value, unsigned int position, va_list args)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- if (!desc->list)
- node = desc->list = eina_list_append(NULL, (void*)1L);
- else if (position == 0)
- node = desc->list = eina_list_prepend(desc->list, (void*)1L);
- else
- {
- Eina_List *rel = eina_list_nth_list(desc->list, position - 1);
- desc->list = eina_list_append_relative_list(desc->list, (void*)1L, rel);
- node = rel->next;
- }
- EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
-
- mem = eina_value_list_node_memory_setup(desc->subtype, node);
- if (!mem)
- {
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
- }
-
- if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
- if (!eina_value_type_vset(desc->subtype, mem, args)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc->subtype, mem);
- error_setup:
- eina_value_list_node_memory_flush(desc->subtype, node);
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_list_vappend(Eina_Value *value, va_list args)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- desc->list = eina_list_append(desc->list, (void*)1L);
- node = eina_list_last(desc->list);
- EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
-
- mem = eina_value_list_node_memory_setup(desc->subtype, node);
- if (!mem)
- {
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
- }
-
- if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
- if (!eina_value_type_vset(desc->subtype, mem, args)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc->subtype, mem);
- error_setup:
- eina_value_list_node_memory_flush(desc->subtype, node);
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_list_set(Eina_Value *value, unsigned int position, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, position);
- ret = eina_value_list_vset(value, position, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_list_get(const Eina_Value *value, unsigned int position, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, position);
- ret = eina_value_list_vget(value, position, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_list_insert(Eina_Value *value, unsigned int position, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, position);
- ret = eina_value_list_vinsert(value, position, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool eina_value_list_append(Eina_Value *value, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, value);
- ret = eina_value_list_vappend(value, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_list_pset(Eina_Value *value, unsigned int position, const void *ptr)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- node = eina_list_nth_list(desc->list, position);
- mem = eina_value_list_node_memory_get(desc->subtype, node);
- if (!mem)
- return EINA_FALSE;
-
- return eina_value_type_pset(desc->subtype, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_list_pget(const Eina_Value *value, unsigned int position, void *ptr)
-{
- const Eina_Value_List *desc;
- const Eina_List *node;
- const void *mem;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (const Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- node = eina_list_nth_list(desc->list, position);
- mem = eina_value_list_node_memory_get(desc->subtype, node);
- if (!mem)
- return EINA_FALSE;
-
- ret = eina_value_type_pget(desc->subtype, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_list_pinsert(Eina_Value *value, unsigned int position, const void *ptr)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- if (!desc->list)
- node = desc->list = eina_list_append(NULL, (void*)1L);
- else if (position == 0)
- node = desc->list = eina_list_prepend(desc->list, (void*)1L);
- else
- {
- Eina_List *rel = eina_list_nth_list(desc->list, position - 1);
- desc->list = eina_list_append_relative_list(desc->list, (void*)1L, rel);
- node = rel->next;
- }
- EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
-
- mem = eina_value_list_node_memory_setup(desc->subtype, node);
- if (!mem)
- {
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
- }
-
- if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
- if (!eina_value_type_pset(desc->subtype, mem, ptr)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc->subtype, mem);
- error_setup:
- eina_value_list_node_memory_flush(desc->subtype, node);
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-eina_value_list_pappend(Eina_Value *value, const void *ptr)
-{
- Eina_Value_List *desc;
- Eina_List *node;
- void *mem;
-
- EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_List *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- desc->list = eina_list_append(desc->list, (void*)1L);
- node = eina_list_last(desc->list);
- EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
-
- mem = eina_value_list_node_memory_setup(desc->subtype, node);
- if (!mem)
- {
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
- }
-
- if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
- if (!eina_value_type_pset(desc->subtype, mem, ptr)) goto error_set;
- return EINA_TRUE;
-
- error_set:
- eina_value_type_flush(desc->subtype, mem);
- error_setup:
- eina_value_list_node_memory_flush(desc->subtype, node);
- desc->list = eina_list_remove_list(desc->list, node);
- return EINA_FALSE;
-}
-#undef EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL
-
-#define EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, retval) \
- EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
- EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_HASH, retval)
-
-static inline Eina_Bool
-eina_value_hash_setup(Eina_Value *value, const Eina_Value_Type *subtype, unsigned int buckets_power_size)
-{
- Eina_Value_Hash desc = { subtype, buckets_power_size, NULL };
- if (!eina_value_setup(value, EINA_VALUE_TYPE_HASH))
- return EINA_FALSE;
- if (!eina_value_pset(value, &desc))
- {
- eina_value_flush(value);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static inline unsigned int
-eina_value_hash_population(const Eina_Value *value)
-{
- Eina_Value_Hash *desc;
- EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, 0);
- desc = (Eina_Value_Hash *)eina_value_memory_get(value);
- if (!desc)
- return 0;
- return eina_hash_population(desc->hash);
-}
-
-static inline Eina_Bool
-eina_value_hash_del(Eina_Value *value, const char *key)
-{
- Eina_Value_Hash *desc;
- void *mem;
-
- EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- desc = (Eina_Value_Hash *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- mem = eina_hash_find(desc->hash, key);
- if (!mem)
- return EINA_FALSE;
-
- eina_value_type_flush(desc->subtype, mem);
- free(mem);
- eina_hash_del_by_key(desc->hash, key);
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-eina_value_hash_vset(Eina_Value *value, const char *key, va_list args)
-{
- Eina_Value_Hash *desc;
- void *mem;
-
- EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- desc = (Eina_Value_Hash *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- mem = eina_hash_find(desc->hash, key);
- if (!mem)
- {
- mem = malloc(desc->subtype->value_size);
- if (!mem)
- {
- eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
- return EINA_FALSE;
- }
- if (!eina_hash_add(desc->hash, key, mem))
- {
- free(mem);
- return EINA_FALSE;
- }
- if (!eina_value_type_setup(desc->subtype, mem))
- {
- eina_value_type_flush(desc->subtype, mem);
- eina_hash_del_by_key(desc->hash, key);
- free(mem);
- }
- }
-
- return eina_value_type_vset(desc->subtype, mem, args);
-}
-
-static inline Eina_Bool
-eina_value_hash_vget(const Eina_Value *value, const char *key, va_list args)
-{
- const Eina_Value_Hash *desc;
- const void *mem;
- void *ptr;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- desc = (const Eina_Value_Hash *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- mem = eina_hash_find(desc->hash, key);
- if (!mem)
- return EINA_FALSE;
-
- ptr = va_arg(args, void *);
- ret = eina_value_type_pget(desc->subtype, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_hash_set(Eina_Value *value, const char *key, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, key);
- ret = eina_value_hash_vset(value, key, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_hash_get(const Eina_Value *value, const char *key, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, key);
- ret = eina_value_hash_vget(value, key, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_hash_pset(Eina_Value *value, const char *key, const void *ptr)
-{
- Eina_Value_Hash *desc;
- void *mem;
-
- EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, 0);
- EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- desc = (Eina_Value_Hash *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- mem = eina_hash_find(desc->hash, key);
- if (!mem)
- {
- mem = malloc(desc->subtype->value_size);
- if (!mem)
- {
- eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
- return EINA_FALSE;
- }
- if (!eina_hash_add(desc->hash, key, mem))
- {
- free(mem);
- return EINA_FALSE;
- }
- if (!eina_value_type_setup(desc->subtype, mem))
- {
- eina_value_type_flush(desc->subtype, mem);
- eina_hash_del_by_key(desc->hash, key);
- free(mem);
- }
- }
-
- return eina_value_type_pset(desc->subtype, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_hash_pget(const Eina_Value *value, const char *key, void *ptr)
-{
- const Eina_Value_Hash *desc;
- const void *mem;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, 0);
- EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- desc = (const Eina_Value_Hash *)eina_value_memory_get(value);
- if (!desc)
- return EINA_FALSE;
-
- mem = eina_hash_find(desc->hash, key);
- if (!mem)
- return EINA_FALSE;
-
- ret = eina_value_type_pget(desc->subtype, mem, ptr);
- return ret;
-}
-#undef EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL
-
-#define EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, retval) \
- EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
- EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_STRUCT, retval)
-
-/**
- * @brief Find member of struct
- * @since 1.2
- * @internal
- */
-EAPI const Eina_Value_Struct_Member *eina_value_struct_member_find(const Eina_Value_Struct *st, const char *name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
-
-static inline Eina_Bool
-eina_value_struct_setup(Eina_Value *value, const Eina_Value_Struct_Desc *sdesc)
-{
- Eina_Value_Struct desc = {sdesc, NULL};
- if (!eina_value_setup(value, EINA_VALUE_TYPE_STRUCT))
- return EINA_FALSE;
- if (!eina_value_pset(value, &desc))
- {
- eina_value_flush(value);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static inline void *
-eina_value_struct_member_memory_get(const Eina_Value_Struct *st, const Eina_Value_Struct_Member *member)
-{
- unsigned char *base = (unsigned char *)st->memory;
- if (!base) return NULL;
- return base + member->offset;
-}
-
-static inline Eina_Bool
-eina_value_struct_vset(Eina_Value *value, const char *name, va_list args)
-{
- const Eina_Value_Struct_Member *member;
- Eina_Value_Struct *st;
- void *mem;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
- st = (Eina_Value_Struct *)eina_value_memory_get(value);
- if (!st)
- return EINA_FALSE;
- member = eina_value_struct_member_find(st, name);
- if (!member)
- return EINA_FALSE;
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
-
- return eina_value_type_vset(member->type, mem, args);
-}
-
-static inline Eina_Bool
-eina_value_struct_vget(const Eina_Value *value, const char *name, va_list args)
-{
- const Eina_Value_Struct_Member *member;
- const Eina_Value_Struct *st;
- const void *mem;
- void *ptr;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
- st = (const Eina_Value_Struct *)eina_value_memory_get(value);
- if (!st)
- return EINA_FALSE;
- member = eina_value_struct_member_find(st, name);
- if (!member)
- return EINA_FALSE;
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
-
- ptr = va_arg(args, void *);
- ret = eina_value_type_pget(member->type, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_struct_set(Eina_Value *value, const char *name, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, name);
- ret = eina_value_struct_vset(value, name, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_struct_get(const Eina_Value *value, const char *name, ...)
-{
- va_list args;
- Eina_Bool ret;
- va_start(args, name);
- ret = eina_value_struct_vget(value, name, args);
- va_end(args);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_struct_pset(Eina_Value *value, const char *name, const void *ptr)
-{
- const Eina_Value_Struct_Member *member;
- Eina_Value_Struct *st;
- void *mem;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
- st = (Eina_Value_Struct *)eina_value_memory_get(value);
- if (!st)
- return EINA_FALSE;
- member = eina_value_struct_member_find(st, name);
- if (!member)
- return EINA_FALSE;
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
-
- return eina_value_type_pset(member->type, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_struct_pget(const Eina_Value *value, const char *name, void *ptr)
-{
- const Eina_Value_Struct_Member *member;
- const Eina_Value_Struct *st;
- const void *mem;
- Eina_Bool ret;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
- st = (const Eina_Value_Struct *)eina_value_memory_get(value);
- if (!st)
- return EINA_FALSE;
- member = eina_value_struct_member_find(st, name);
- if (!member)
- return EINA_FALSE;
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
-
- ret = eina_value_type_pget(member->type, mem, ptr);
- return ret;
-}
-
-static inline Eina_Bool
-eina_value_struct_value_get(const Eina_Value *src, const char *name, Eina_Value *dst)
-{
- const Eina_Value_Struct_Member *member;
- const Eina_Value_Struct *st;
- const void *mem;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(src, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
- st = (const Eina_Value_Struct *)eina_value_memory_get(src);
- if (!st)
- return EINA_FALSE;
- member = eina_value_struct_member_find(st, name);
- if (!member)
- return EINA_FALSE;
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
- if (!eina_value_setup(dst, member->type))
- return EINA_FALSE;
- if (!eina_value_pset(dst, mem))
- {
- eina_value_flush(dst);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-eina_value_struct_value_set(Eina_Value *dst, const char *name, const Eina_Value *src)
-{
- const Eina_Value_Struct_Member *member;
- Eina_Value_Struct *st;
- void *mem;
- const void *ptr;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(dst, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
-
- st = (Eina_Value_Struct *)eina_value_memory_get(dst);
- if (!st)
- return EINA_FALSE;
- member = eina_value_struct_member_find(st, name);
- if (!member)
- return EINA_FALSE;
- EINA_SAFETY_ON_FALSE_RETURN_VAL(src->type == member->type, EINA_FALSE);
-
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
-
- ptr = eina_value_memory_get(src);
- if (!ptr)
- return EINA_FALSE;
-
- return eina_value_type_pset(member->type, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_struct_member_value_get(const Eina_Value *src, const Eina_Value_Struct_Member *member, Eina_Value *dst)
-{
- const Eina_Value_Struct *st;
- const void *mem;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(src, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(member, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
- st = (const Eina_Value_Struct *)eina_value_memory_get(src);
- if (!st)
- return EINA_FALSE;
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
- if (!eina_value_setup(dst, member->type))
- return EINA_FALSE;
- if (!eina_value_pset(dst, mem))
- {
- eina_value_flush(dst);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-eina_value_struct_member_value_set(Eina_Value *dst, const Eina_Value_Struct_Member *member, const Eina_Value *src)
-{
- Eina_Value_Struct *st;
- void *mem;
- const void *ptr;
-
- EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(dst, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(member, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
-
- st = (Eina_Value_Struct *)eina_value_memory_get(dst);
- if (!st)
- return EINA_FALSE;
- EINA_SAFETY_ON_FALSE_RETURN_VAL(src->type == member->type, EINA_FALSE);
-
- mem = eina_value_struct_member_memory_get(st, member);
- if (!mem)
- return EINA_FALSE;
-
- ptr = eina_value_memory_get(src);
- if (!ptr)
- return EINA_FALSE;
-
- return eina_value_type_pset(member->type, mem, ptr);
-}
-
-#undef EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL
-
-
-static inline Eina_Bool
-eina_value_type_setup(const Eina_Value_Type *type, void *mem)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->setup)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->setup(type, mem);
-}
-
-static inline Eina_Bool
-eina_value_type_flush(const Eina_Value_Type *type, void *mem)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->flush)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->flush(type, mem);
-}
-
-static inline Eina_Bool
-eina_value_type_copy(const Eina_Value_Type *type, const void *src, void *dst)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->copy)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->copy(type, src, dst);
-}
-
-static inline int
-eina_value_type_compare(const Eina_Value_Type *type, const void *a, const void *b)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->compare)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->compare(type, a, b);
-}
-
-static inline Eina_Bool
-eina_value_type_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->convert_to)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->convert_to(type, convert, type_mem, convert_mem);
-}
-
-static inline Eina_Bool
-eina_value_type_convert_from(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->convert_from)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->convert_from(type, convert, type_mem, convert_mem);
-}
-
-static inline Eina_Bool
-eina_value_type_vset(const Eina_Value_Type *type, void *mem, va_list args)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->vset)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->vset(type, mem, args);
-}
-
-static inline Eina_Bool
-eina_value_type_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->pset)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->pset(type, mem, ptr);
-}
-
-static inline Eina_Bool
-eina_value_type_pget(const Eina_Value_Type *type, const void *mem, void *ptr)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
- if (!type->pget)
- {
- eina_error_set(EINA_ERROR_VALUE_FAILED);
- return EINA_FALSE;
- }
- return type->pget(type, mem, ptr);
-}
-
-#undef EINA_VALUE_TYPE_DEFAULT
-#undef EINA_VALUE_TYPE_CHECK_RETURN
-#undef EINA_VALUE_TYPE_CHECK_RETURN_VAL
-#undef EINA_VALUE_TYPE_DISPATCH
-#undef EINA_VALUE_TYPE_DISPATCH_RETURN
-#endif
--
cgit v1.1