[Ovmsdev] Duktape Persistent Function References

Michael Balzer dexter at expeedo.de
Sat Sep 12 14:26:56 HKT 2020


Steve,

std::function has constructors that accept function pointers, or NULL to
create an empty function object.

std::function of course has a little overhead over a simple pointer. But
that overhead isn't relevant for this use case. In fact, we use
std::function already in places that are more performance & memory
sensitive.

See: https://www.boost.org/doc/libs/1_45_0/doc/html/function/misc.html

Regards,
Michael


Am 11.09.20 um 23:31 schrieb Stephen Casner:
> Michael,
>
> Like Mark, I did not think the change would be simple.  I've used
> functional objects before, but was not aware of std::function.  I am
> still not quite sure how a vanilla function pointer matches this
> type; I need to think about that more carefully.
>
> Having the typedefs is a good idea even if we weren't using
> std:function.
>
>                                                         -- Steve
>
> On Fri, 11 Sep 2020, Michael Balzer wrote:
>
>> Mark,
>>
>> Am 11.09.20 um 18:11 schrieb Michael Balzer:
>>>> I agree it is not necessary; my suggestion is purely to clean it up
>>>> and enhance functionality. The problem at the moment is that
>>>> OvmsCommand execute callbacks can only be to function callbacks (not
>>>> objects). It doesn't even use the c++ bind function callback
>>>> mechanism (like notification, etc, for example). It is what it is,
>>>> and changing now is very hard.
>>> That slipped my attention, but upgrading OvmsCommand to accept any
>>> function type should be simply changing m_execute and m_validate to
>>> std::function, or do I miss something?
>> Just did this locally, works perfectly. Shall I push the change or have
>> you begun working on ovms_command?
>>
>> If so, it's really just exchanging the function signatures for these types:
>>
>> typedef std::function<void(int, OvmsWriter*, OvmsCommand*, int, const
>> char* const*)> OvmsCommandExecuteCallback_t;
>> typedef std::function<int(OvmsWriter*, OvmsCommand*, int, const char*
>> const*, bool)> OvmsCommandValidateCallback_t;
>>
>> Patch attached.
>>
>> Regards,
>> Michael
>>
>> --
>> Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
>> Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev

-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26





More information about the OvmsDev mailing list