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); }
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; }
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; }
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); }
/** * @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; }
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); } }
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(); }