On Tue, Dec 12, 2017 at 10:23 AM, Gustavo Sverzut Barbieri
<barbi...@gmail.com> wrote:
>>     efl_future_Eina_FutureXXX_then(data, f);
>
> now must rename these efl_future_Eina_FutureXXX_then() helpers to
> efl_future_then().
>
> Worth remembering: efl_future_then() is the one that links/binds an
> object to the future, if the object dies, then the futures are
> cancelled.
>
> After that we need to ping q66 to change future<Type> to the new Eina_Future:
>
>   - if <Type>, then provide a type to be checked by efl_future_then_easy()
>
>   - all properties/methods generated by eolian should apply
> efl_future_then() (or variant) to their result. This enforces the
> object is linked with the future. Maybe make this explicit (ie:
> @bound(future<Type>)) or explicitly disable (@unbond(future<Type>), my
> preference since it's less common).
>
> then you can remove those from code, I tried to mark all of them, see:
> https://git.enlightenment.org/core/efl.git/tree/src/lib/ecore/ecore_main.c#n3217
>
> In a next-usability step, we should have Eolian to generate
> Eina_Value_Struct_Desc for Type. This is required for validators AND
> for users of the struct, which could use the "mem" field with a cast
> OR use eina_value_struct_... method.
>
> and I just noticed that eina_future_then_easy() (and efl_... variant)
> will not check for the struct desc, just type comparison (which is
> "struct", but not "which struct"), so likely extend
> Eina_Future_Cb_Easy_Desc with:
>
>    union {
>       const Eina_Value_Struct_Desc *struct_desc;
>       const Eina_Value_Type *subtype; // array, list, hash
>    };

hum... maybe this can be converted to Eina_Value_Type callback
(bumping Eina_Value API), such as "eina_value_is(type, mem,
extra_data)". With "extra_data" being struct_desc/subtype... for those
stuff, but that would allow Eo to implement an extra type check, ie:

EAPI Eina_Bool
eina_value_is(const Eina_Value *value, const Eina_Value_Type
*desired_type, const void *extra_data)
{
   if (!eina_value_type_check(desired_type)) return EINA_FALSE; // checks ABI
   if (eina_value_type_get(value) != desired_type) return EINA_FALSE;
   if (!desired_type->is) return EINA_TRUE;
   return desired_type->is(desired_type, eina_value_mem_get(value), extra_data);
}

eina_value_type_eo_is(type, mem, extra_data) {
   if (!extra_data) return EINA_TRUE; // no class, just checks if an object
   return efl_class_get(mem) == extra_data;
}

this way, extra_data could be given an Efl_Class...

Sorry about the noise, but currently these types were not annotated by
.eo and type checking is done manually in code, so this "didn't show"
before :-(

-- 
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (16) 99354-9890

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to