static void
_fill_receive_array_of_string_int_with_size(Eldbus_Message *msg, int size, const char *array[])
{
   Eina_Value *value_struct, *value_array;
   int i;
   unsigned offset;
   Eina_Value_Struct_Member main_members[2];
   Eina_Value_Struct_Member sub_members[] = {
      EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_STRING, sub_struct, txt),
      EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, sub_struct, num)
   };
   Eina_Value_Struct_Desc desc_sub_struct = {
      EINA_VALUE_STRUCT_DESC_VERSION,
      NULL, // no special operations
      sub_members,
      2,
      sizeof(sub_struct)
   };
   Eina_Value_Struct_Desc desc_struct = {
      EINA_VALUE_STRUCT_DESC_VERSION,
      NULL, // no special operations
      main_members,
      2,
      0//will be set below
   };

   offset = _type_offset(sizeof(int), sizeof(Eina_Value_Array));
   main_members[0].name = "size";
   main_members[0].type = EINA_VALUE_TYPE_INT, 0;
   main_members[0].offset = 0;
   main_members[1].name = "array";
   main_members[1].type = EINA_VALUE_TYPE_ARRAY;
   main_members[1].offset = offset;
   desc_struct.size = offset + sizeof(Eina_Value_Array);

   value_struct = eina_value_struct_new(&desc_struct);
   eina_value_struct_set(value_struct, "size", size);

   value_array = eina_value_array_new(EINA_VALUE_TYPE_STRUCT, size);
   for (i = 0; i < size; i++)
     {
        Eina_Value *value_sub_struct = eina_value_struct_new(&desc_sub_struct);
        Eina_Value_Struct st;
        eina_value_struct_set(value_sub_struct, "txt", array[i]);
        eina_value_struct_set(value_sub_struct, "num", i);
        eina_value_get(value_sub_struct, &st);
        eina_value_array_append(value_array, st);
        eina_value_free(value_sub_struct);
     }
   eina_value_struct_value_set(value_struct, "array", value_array);

   eldbus_message_from_eina_value("ia(si)", msg, value_struct);

   eina_value_free(value_struct);
   eina_value_free(value_array);
}
static void
cb_mpris_media_player2_supported_uri_schemes(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
{
   void *user_data = eldbus_pending_data_del(pending, "__user_data");
   const char *error, *error_msg;
   Eldbus_Codegen_Property_Complex_Get_Cb cb = data;
   Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, "__proxy");
   Eldbus_Message_Iter *variant;
   Eina_Value *v, stack_value;
   if (eldbus_message_error_get(msg, &error, &error_msg))
     {
        Eldbus_Error_Info error_info = {error, error_msg};
        cb(user_data, pending, "SupportedUriSchemes", proxy, &error_info, NULL);
        return;
     }
   if (!eldbus_message_arguments_get(msg, "v", &variant))
     {
        Eldbus_Error_Info error_info = {"", ""};
        cb(user_data, pending, "SupportedUriSchemes", proxy, &error_info, NULL);
        return;
     }
   v = eldbus_message_iter_struct_like_to_eina_value(variant);
   eina_value_struct_value_get(v, "arg0", &stack_value);
   cb(user_data, pending, "SupportedUriSchemes", proxy, NULL, &stack_value);
   eina_value_flush(&stack_value);
   eina_value_free(v);
}
예제 #3
0
파일: eina_value_02.c 프로젝트: Limsik/e17
int main(int argc, char **argv)
{
   Eina_Value *v1, *v2;

   eina_init();
   value_init();
   srand(time(NULL));

   v1 = eina_value_struct_new(V1_DESC);
   v2 = eina_value_struct_new(V2_DESC);

   rand_init(v1);
   my_struct_use(v1);

   rand_init(v2);
   my_struct_use(v2);

   eina_value_free(v1);
   eina_value_free(v2);
   eina_shutdown();
}
예제 #4
0
static Eina_Value *
azy_value_deserialize_array_json(cJSON *object)
{
   Eina_Value *arr;
   const Eina_Value_Type *type;
   int x = 0;
   cJSON *child;

   child = cJSON_GetArrayItem(object, 0);
   if (!child)
     return eina_value_array_new(EINA_VALUE_TYPE_STRING, 0);

   type = _azy_value_type_get(child);
   arr = eina_value_array_new(type, 0);
   for (; x < cJSON_GetArraySize(object); x++)
     {
        if (x)
          {
             child = cJSON_GetArrayItem(object, x);
             if(_azy_value_type_get(child) != type)
               {
                  EINA_LOG_ERR("We have different type of data in array.");
                  continue;
               }
          }
        if (type == EINA_VALUE_TYPE_ARRAY)
          {
             Eina_Value_Array inner_array;
             Eina_Value *data = azy_value_deserialize_array_json(child);
             if (!data) goto error;
             eina_value_get(data, &inner_array);
             eina_value_array_append(arr, inner_array);
          }
        else if (type == EINA_VALUE_TYPE_STRUCT)
          {
             Eina_Value_Struct st;
             Eina_Value *data = azy_value_deserialize_struct_json(child);
             if (!data) goto error;
             eina_value_get(data, &st);
             eina_value_array_append(arr, st);
          }
        else
          {
             if (!azy_value_deserialize_basic_json(child, arr)) goto error;
          }
     }
   return arr;
error:
   eina_value_free(arr);
   return NULL;
}
예제 #5
0
static Eina_Value *
azy_value_deserialize_struct_json(cJSON *object)
{
   Eina_Array *st_members, *st_values;
   unsigned int offset = 0, z = 0;
   Eina_Value *value_st = NULL;
   Eina_Value_Struct_Member *members;
   Eina_Value_Struct_Desc *st_desc;
   const char *name;
   cJSON *child;

   st_desc = azy_value_util_struct_desc_new();
   st_members = eina_array_new(1);
   st_values = eina_array_new(1);

   for (child = object->child; child; child = child->next)
     {
        Eina_Value_Struct_Member *m;
        const Eina_Value_Type *type;
        Eina_Value *v;

        type = _azy_value_type_get(child);
        if (!type) goto end;
        name = child->string;
        m = (Eina_Value_Struct_Member*)calloc(1, sizeof(Eina_Value_Struct_Member));
        m->name = eina_stringshare_add(name);
        offset = azy_value_util_type_offset(type, offset);
        m->offset = offset;
        offset += azy_value_util_type_size(type);
        m->type = type;
        eina_array_push(st_members, m);

        v = azy_value_deserialize_json(child);
        if (!v) goto end;
        eina_array_push(st_values, v);
        z++;
     }
   if (!z)
     {
        free(st_desc);
        goto end;
     }

   members = (Eina_Value_Struct_Member*)malloc(eina_array_count(st_members) * sizeof(Eina_Value_Struct_Member));
   for (z = 0; z < eina_array_count(st_members); z++)
     {
        Eina_Value_Struct_Member *m = (Eina_Value_Struct_Member*)eina_array_data_get(st_members, z);
        members[z].name = m->name;
        members[z].offset = m->offset;
        members[z].type = m->type;
        free(m);
     }

   //setup
   st_desc->members = members;
   st_desc->member_count = eina_array_count(st_members);
   st_desc->size = offset;
   value_st = eina_value_struct_new(st_desc);

   //filling with data
   for (z = 0; z < eina_array_count(st_values); z++)
     {
        Eina_Value *v = (Eina_Value*)eina_array_data_get(st_values, z);
        eina_value_struct_value_set(value_st, members[z].name, v);
        eina_value_free(v);
     }

end:
   eina_array_free(st_members);
   eina_array_free(st_values);
   return value_st;
}
예제 #6
0
static void
_eldbus_model_arguments_hash_free(Eina_Value *value)
{
   eina_value_free(value);
}