forked from enlightenment/efl
Eo: Add eo_do_part.
This is a convenience macro to be used by the common pattern of getting a part and then immediately calling functions on it. For example, without this macro, you'd have to write code like: Eo *part; eo_do(obj, part = efl_part_name_get("partname")); eo_do(part, a_set(7)); while using the helper function trims it to: eo_do_part(obj, efl_part_name_get("partname"), a_set(7)); @feature
This commit is contained in:
parent
963fe509ca
commit
9570461440
|
@ -607,6 +607,13 @@ EAPI Eo * _eo_add_end(void);
|
||||||
|
|
||||||
#define eo_do_super_ret(eoid, clsid, ret_tmp, func) _eo_do_common_ret(eoid, clsid, EINA_TRUE, ret_tmp, func)
|
#define eo_do_super_ret(eoid, clsid, ret_tmp, func) _eo_do_common_ret(eoid, clsid, EINA_TRUE, ret_tmp, func)
|
||||||
|
|
||||||
|
#define eo_do_part(eoid, part_func, ...) \
|
||||||
|
do { \
|
||||||
|
Eo *__eo_part = eoid; \
|
||||||
|
eo_do(eoid, __eo_part = part_func); \
|
||||||
|
eo_do(__eo_part, __VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -45,6 +45,15 @@ _class_hi_print(Eo_Class *klass, void *data EINA_UNUSED)
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EO_FUNC_BODYV(simple_part_get, Eo *, NULL, EO_FUNC_CALL(name), const char *name);
|
||||||
|
|
||||||
|
static Eo *
|
||||||
|
_part_get(Eo *obj, void *class_data EINA_UNUSED, const char *name EINA_UNUSED)
|
||||||
|
{
|
||||||
|
/* A normal part get will do something saner, we just create objects. */
|
||||||
|
return eo_add(SIMPLE_CLASS, obj);
|
||||||
|
}
|
||||||
|
|
||||||
EO_VOID_FUNC_BODYV(simple_recursive, EO_FUNC_CALL(n), int n);
|
EO_VOID_FUNC_BODYV(simple_recursive, EO_FUNC_CALL(n), int n);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -83,6 +92,7 @@ static Eo_Op_Description op_descs[] = {
|
||||||
EO_OP_FUNC(simple_a_print, _a_print, "Print property a"),
|
EO_OP_FUNC(simple_a_print, _a_print, "Print property a"),
|
||||||
EO_OP_CLASS_FUNC(simple_class_hi_print, _class_hi_print, "Print property a"),
|
EO_OP_CLASS_FUNC(simple_class_hi_print, _class_hi_print, "Print property a"),
|
||||||
EO_OP_FUNC(simple_recursive, _recursive, "Recursive function"),
|
EO_OP_FUNC(simple_recursive, _recursive, "Recursive function"),
|
||||||
|
EO_OP_FUNC(simple_part_get, _part_get, "Part getter"),
|
||||||
EO_OP_FUNC(simple_pure_virtual, NULL, "Pure Virtual function"),
|
EO_OP_FUNC(simple_pure_virtual, NULL, "Pure Virtual function"),
|
||||||
EO_OP_SENTINEL
|
EO_OP_SENTINEL
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,7 @@ EAPI Eina_Bool simple_class_hi_print(void);
|
||||||
EAPI void simple_recursive(int n);
|
EAPI void simple_recursive(int n);
|
||||||
EAPI void simple_pure_virtual(void);
|
EAPI void simple_pure_virtual(void);
|
||||||
EAPI void simple_no_implementation(void);
|
EAPI void simple_no_implementation(void);
|
||||||
|
EAPI Eo *simple_part_get(const char *name);
|
||||||
|
|
||||||
extern const Eo_Event_Description _EV_A_CHANGED;
|
extern const Eo_Event_Description _EV_A_CHANGED;
|
||||||
#define EV_A_CHANGED (&(_EV_A_CHANGED))
|
#define EV_A_CHANGED (&(_EV_A_CHANGED))
|
||||||
|
|
|
@ -937,6 +937,39 @@ START_TEST(eo_add_failures)
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(eo_parts)
|
||||||
|
{
|
||||||
|
int a = 0;
|
||||||
|
|
||||||
|
eo_init();
|
||||||
|
|
||||||
|
Eo *obj = eo_add(SIMPLE_CLASS, NULL);
|
||||||
|
|
||||||
|
eo_do(obj, simple_a_set(3), a = simple_a_get());
|
||||||
|
ck_assert_int_eq(a, 3);
|
||||||
|
|
||||||
|
eo_do_part(obj, simple_part_get("test"),
|
||||||
|
simple_a_set(7),
|
||||||
|
a = simple_a_get()
|
||||||
|
);
|
||||||
|
ck_assert_int_eq(a, 7);
|
||||||
|
|
||||||
|
eo_do(obj, simple_a_set(3), a = simple_a_get());
|
||||||
|
ck_assert_int_eq(a, 3);
|
||||||
|
|
||||||
|
/* Faking a call, just asserting NULL as the part to check default values. */
|
||||||
|
eo_do_part(obj, NULL,
|
||||||
|
simple_a_set(7),
|
||||||
|
a = simple_a_get()
|
||||||
|
);
|
||||||
|
ck_assert_int_eq(a, 0);
|
||||||
|
|
||||||
|
eo_del(obj);
|
||||||
|
|
||||||
|
eo_shutdown();
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
void eo_test_general(TCase *tc)
|
void eo_test_general(TCase *tc)
|
||||||
{
|
{
|
||||||
tcase_add_test(tc, eo_simple);
|
tcase_add_test(tc, eo_simple);
|
||||||
|
@ -954,4 +987,5 @@ void eo_test_general(TCase *tc)
|
||||||
tcase_add_test(tc, eo_add_do_and_custom);
|
tcase_add_test(tc, eo_add_do_and_custom);
|
||||||
tcase_add_test(tc, eo_pointers_indirection);
|
tcase_add_test(tc, eo_pointers_indirection);
|
||||||
tcase_add_test(tc, eo_add_failures);
|
tcase_add_test(tc, eo_add_failures);
|
||||||
|
tcase_add_test(tc, eo_parts);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue