Esempio n. 1
0
int main(int argc, char **argv)
{
   Eina_Value vtv, vtz;
   struct timeval tv;
   struct timezone tz;
   char *s;

   eina_init();

   eina_value_setup(&vtv, EINA_VALUE_TYPE_TIMEVAL);
   eina_value_setup(&vtz, &TZ_TYPE);

   gettimeofday(&tv, &tz);
   eina_value_set(&vtv, tv);
   eina_value_set(&vtz, tz);

   s = eina_value_to_string(&vtv);
   printf("time: %s\n", s);
   free(s);
   s = eina_value_to_string(&vtz);
   printf("timezone: %s\n", s);
   free(s);

   eina_value_flush(&vtz);
   eina_value_flush(&vtv);
}
Esempio n. 2
0
int main(void)
{
   Eina_Model *m;
   char *s;
   int i;

   eina_init();

   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);

   eina_model_event_callback_add(m, "deleted", _cb_on_deleted, NULL);

   //Adding properties to model
   for (i = 0; i < 5; i++)
     {
        Eina_Value val;
        char name[2] = {'a'+ i, 0};
        eina_value_setup(&val, EINA_VALUE_TYPE_INT);
        eina_value_set(&val, i);
        eina_model_property_set(m, name, &val);
        eina_value_flush(&val);
     }

   //Adding children to model
   for (i = 0; i < 5; i++)
     {
        Eina_Value val;
        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
        eina_value_setup(&val, EINA_VALUE_TYPE_INT);
        eina_value_set(&val, i);
        eina_model_property_set(c, "x", &val);

        eina_model_event_callback_add(c, "deleted", _cb_on_deleted, NULL);

        eina_model_child_append(m, c);
        //Now that the child has been appended to a model, it's parent will manage it's lifecycle
        eina_model_unref(c);
        eina_value_flush(&val);
     }

   s = eina_model_to_string(m);
   printf("model as string:\n%s\n", s);

   free(s);
   eina_model_unref(m);
   eina_shutdown();

   return 0;
}
Esempio n. 3
0
END_TEST

static Eina_Model *
eina_model_test_iterator_setup(unsigned int *count_del)
{
   Eina_Model *m;
   int i;

   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
   fail_unless(m != NULL);

   eina_model_event_callback_add
     (m, "deleted", _eina_test_model_cb_count, count_del);

   for (i = 0; i < 5; i++)
     {
        Eina_Value val;
        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
        fail_unless(c != NULL);
        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
        fail_unless(eina_value_set(&val, i));
        fail_unless(eina_model_property_set(c, "x", &val));

        eina_model_event_callback_add
          (c, "deleted", _eina_test_model_cb_count, count_del);

        fail_unless(eina_model_child_append(m, c) >= 0);
        eina_model_unref(c);
        eina_value_flush(&val);
     }

   return m;
}
Esempio n. 4
0
END_TEST

START_TEST(property_set)
{
   Eina_Value value;
   Efl_Future *future;

   // Nonexistent property must raise ERROR
   eina_value_setup(&value, EINA_VALUE_TYPE_INT);
   eina_value_set(&value, 1);
   future = efl_model_property_set(object, "nonexistent", &value);
   check_efl_model_future_error(future, &EFL_MODEL_ERROR_NOT_FOUND);

   // UNIQUE_NAME_PROPERTY is read-only
   future = efl_model_property_set(object, UNIQUE_NAME_PROPERTY, &value);
   check_efl_model_future_error(future, &EFL_MODEL_ERROR_READ_ONLY);

   eina_value_flush(&value);
}
Esempio n. 5
0
/**
 * @brief Convert result to a binary blob
 * @param res Result
 * @return Allocated binary blob (must be freed)
 */
unsigned char *
esql_res_to_blob(const Esql_Res *res, unsigned int *size)
{
   const Esql_Row *row;
   const Eina_Value_Struct_Member *member;
   Eina_Value tmp, conv;
   Eina_Value_Blob blob;
   unsigned char *ret = NULL;

   if (size) *size = 0;

   EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL);
   EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, NULL);
   if (!res->row_count) return NULL;
   row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row);

   member = row->res->desc->members;
   if (!eina_value_struct_value_get(&(row->value), member->name, &tmp))
     return NULL;

   if (!eina_value_setup(&conv, EINA_VALUE_TYPE_BLOB)) goto error_setup;
   if (!eina_value_convert(&tmp, &conv)) goto error;
   if (!eina_value_pget(&conv, &blob)) goto error;

   ret = malloc(blob.size);
   EINA_SAFETY_ON_NULL_GOTO(ret, error);

   memcpy(ret, blob.memory, blob.size);
   if (size) *size = blob.size;

 error:
   eina_value_flush(&conv);
 error_setup:
   eina_value_flush(&tmp);
   return ret;
}
Esempio n. 6
0
static void
esql_mysac_row_init(Esql_Row *r, MYSAC_ROW *row)
{
   MYSAC_RES *res;
   MYSAC_ROWS *rows;
   struct mysac_list_head *l;
   Eina_Value *sval;
   unsigned int i, cols;

   res = r->res->backend.res;
   rows = res->cr;
   l = res->data.next;
   cols = res->nb_cols;

   sval = &(r->value);
   eina_value_struct_setup(sval, r->res->desc);
   for (i = 0; i < cols; i++, l = l->next, rows = mysac_container_of(l, MYSAC_ROWS, link))
     {
        Eina_Value val;
        const Eina_Value_Struct_Member *m = r->res->desc->members + i;

        switch (res->cols[i].type)
          {
           case MYSQL_TYPE_TIME:
             eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE);
             eina_value_set(&val, (double)row[i].tv.tv_sec + (double)((double)row[i].tv.tv_usec / (double) 1000000));
             break;

           case MYSQL_TYPE_YEAR:
           case MYSQL_TYPE_TIMESTAMP:
           case MYSQL_TYPE_DATETIME:
           case MYSQL_TYPE_DATE:
             eina_value_setup(&val, EINA_VALUE_TYPE_TIMESTAMP);
             eina_value_set(&val, (long)mktime(row[i].tm));
             break;

           case MYSQL_TYPE_STRING:
           case MYSQL_TYPE_VARCHAR:
           case MYSQL_TYPE_VAR_STRING:
             eina_value_setup(&val, EINA_VALUE_TYPE_STRING);
             eina_value_set(&val, row[i].string);
             //cell->len = rows->lengths[i];
             break;

           case MYSQL_TYPE_TINY_BLOB:
           case MYSQL_TYPE_MEDIUM_BLOB:
           case MYSQL_TYPE_LONG_BLOB:
           case MYSQL_TYPE_BLOB:
             {
                Eina_Value_Blob blob;

                blob.ops = NULL;
                blob.memory = row[i].string;
                blob.size = rows->lengths[i];
                eina_value_setup(&val, EINA_VALUE_TYPE_BLOB);
                eina_value_set(&val, blob);
                break;
             }

           case MYSQL_TYPE_TINY:
             eina_value_setup(&val, EINA_VALUE_TYPE_CHAR);
             eina_value_set(&val, row[i].stiny);
             break;

           case MYSQL_TYPE_SHORT:
             eina_value_setup(&val, EINA_VALUE_TYPE_SHORT);
             eina_value_set(&val, row[i].ssmall);
             break;

           case MYSQL_TYPE_LONG:
           case MYSQL_TYPE_INT24:
             eina_value_setup(&val, EINA_VALUE_TYPE_LONG);
             eina_value_set(&val, row[i].sint);
             break;

           case MYSQL_TYPE_DECIMAL:
           case MYSQL_TYPE_NEWDECIMAL:
           case MYSQL_TYPE_LONGLONG:
             eina_value_setup(&val, EINA_VALUE_TYPE_INT64);
             eina_value_set(&val, row[i].sbigint);
             break;

           case MYSQL_TYPE_FLOAT:
             eina_value_setup(&val, EINA_VALUE_TYPE_FLOAT);
             eina_value_set(&val, row[i].mfloat);
             break;

           case MYSQL_TYPE_DOUBLE:
             eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE);
             eina_value_set(&val, row[i].mdouble);
             break;

           default:
             ERR("FIXME: Got unknown column type %u!", res->cols[i].type);
             break;
          }
        eina_value_struct_member_value_set(sval, m, &val);
        eina_value_flush(&val);
     }
}
Esempio n. 7
0
END_TEST

START_TEST(eina_model_test_deep_copy)
{
   unsigned int count_del = 0;
   Eina_Model *m, *cp;
   char *s1, *s2;
   int i;

   eina_init();

   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
   fail_unless(m != NULL);

   eina_model_event_callback_add
     (m, "deleted", _eina_test_model_cb_count, &count_del);

   for (i = 0; i < 5; i++)
     {
        Eina_Value val;
        char name[2] = {'a'+ i, 0};
        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
        fail_unless(eina_value_set(&val, i));
        fail_unless(eina_model_property_set(m, name, &val));
        eina_value_flush(&val);
     }

   for (i = 0; i < 5; i++)
     {
        Eina_Value val;
        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
        fail_unless(c != NULL);
        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
        fail_unless(eina_value_set(&val, i));
        fail_unless(eina_model_property_set(c, "x", &val));

        eina_model_event_callback_add
          (c, "deleted", _eina_test_model_cb_count, &count_del);

        fail_unless(eina_model_child_append(m, c) >= 0);
        eina_model_unref(c);
        eina_value_flush(&val);
     }

   s1 = eina_model_to_string(m);
   fail_unless(s1 != NULL);
   ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])");

   cp = eina_model_deep_copy(m);
   fail_unless(cp != NULL);
   fail_unless(cp != m);

   eina_model_event_callback_add
     (cp, "deleted", _eina_test_model_cb_count, &count_del);

   s2 = eina_model_to_string(cp);
   fail_unless(s2 != NULL);
   ck_assert_str_eq(s1, s2);

   for (i = 0; i < 5; i++)
     {
        Eina_Model *c1 = eina_model_child_get(m, i);
        Eina_Model *c2 = eina_model_child_get(cp, i);

        fail_unless(c1 != NULL);
        fail_unless(c1 != c2);
        ck_assert_int_eq(eina_model_refcount(c1), 2);
        ck_assert_int_eq(eina_model_refcount(c2), 2);

        eina_model_event_callback_add
          (c2, "deleted", _eina_test_model_cb_count, &count_del);

        eina_model_unref(c1);
        eina_model_unref(c2);
     }

   free(s1);
   free(s2);

   ck_assert_int_eq(eina_model_refcount(m), 1);
   eina_model_unref(m);

   ck_assert_int_eq(eina_model_refcount(cp), 1);
   eina_model_unref(cp);

   ck_assert_int_eq(count_del, 2 + 10);

   eina_shutdown();
}