[Ovmsdev] Duktape Persistent Function References

Mark Webb-Johnson mark at webb-johnson.net
Sun Sep 13 18:50:01 HKT 2020


Michael,

This looks good, and works for me.

In for-3.3 branch, I am only working on the plugin code at the moment. Please commit this change to the branch.

Thanks, Mark.

> On 12 Sep 2020, at 2:26 PM, Michael Balzer <dexter at expeedo.de> wrote:
> 
> 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
> 
> 
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev



More information about the OvmsDev mailing list