base: Make the Value stat's functor method accept lambdas.
authorGabe Black <gabeblack@google.com>
Wed, 19 Aug 2020 03:48:06 +0000 (20:48 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 1 Sep 2020 21:57:34 +0000 (21:57 +0000)
commite020184843e0e22d767c7562ec55f0c949b2c805
treeeb4a91ca3ff93a4ab5c7044812f15dfc2a4aa501
parentf0e63088abff8950303a2eb7a3674d07942fd56b
base: Make the Value stat's functor method accept lambdas.

This class can already accept a proxy variable and a "functor" which is
a pointer to either a function or an instance of a class with the ()
operator overloaded.

This change adds a FunctorProxy partial specialization which accepts
anything that can be used to construct a std::function<Result()>. The
constructor argument is copied and stored in the proxy which makes it
possible to define a lambda inline without having to keep a copy of it
around for the proxy to point to.

Also, the ValueBase stat's functor method now has a second version which
accepts a const reference rather than just a reference to its argument.
We need both because when accepting a reference to a lambda it needs to
be a const reference, but when accepting a pointer to a functor object,
we don't want it to be const because that would force the () operator to
also be const.

Change-Id: Icb1b3682d51b721f6e16614490ed0fe289cee094
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32901
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
src/base/statistics.hh
src/unittest/stattest.cc