libcamera: bound_method: Move sequence and generator to BoundMethodBase

The sequence and generator member types of BoundMethodArgs are not
dependent on the template arguments of BoundMethodArgs. To prepare for
template specialization of BoundMethodArgs and avoid code duplication,
move them to the BoundMethodBase class.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Laurent Pinchart
2020-01-04 00:23:42 +02:00
parent 9fe225a79f
commit d0cca54d4a

View File

@@ -39,19 +39,6 @@ public:
virtual void invokePack(void *pack) = 0;
protected:
void activatePack(void *pack, bool deleteMethod);
void *obj_;
Object *object_;
private:
ConnectionType connectionType_;
};
template<typename... Args>
class BoundMethodArgs : public BoundMethodBase
{
private:
#ifndef __DOXYGEN__
/*
* This is a cheap partial implementation of std::integer_sequence<>
@@ -71,10 +58,23 @@ private:
};
#endif
void activatePack(void *pack, bool deleteMethod);
void *obj_;
Object *object_;
private:
ConnectionType connectionType_;
};
template<typename... Args>
class BoundMethodArgs : public BoundMethodBase
{
private:
using PackType = std::tuple<typename std::remove_reference<Args>::type...>;
template<int... S>
void invokePack(void *pack, sequence<S...>)
void invokePack(void *pack, BoundMethodBase::sequence<S...>)
{
PackType *args = static_cast<PackType *>(pack);
invoke(std::get<S>(*args)...);
@@ -87,7 +87,7 @@ public:
void invokePack(void *pack) override
{
invokePack(pack, typename generator<sizeof...(Args)>::type());
invokePack(pack, typename BoundMethodBase::generator<sizeof...(Args)>::type());
}
virtual void activate(Args... args, bool deleteMethod = false) = 0;