Instr *loc(void) override { return parent(); }
private:
- UseSlot<KernelObject> _ker;
+ UseSlot _ker;
public:
- KernelObject *ker(void) const { return _ker.value(); }
+ KernelObject *ker(void) const;
void ker(KernelObject *ker);
public:
virtual ~FeatureInstr() = default;
private:
- UseSlot<FeatureObject> _ifm;
+ UseSlot _ifm;
public:
- FeatureObject *ifm(void) const { return _ifm.value(); }
+ FeatureObject *ifm(void) const;
void ifm(FeatureObject *ifm);
private:
namespace coco
{
-template <typename T> class UseSlot final
+class UseSlot final
{
public:
UseSlot(const PtrLink<Object, ObjectInfo> *obj_link, Object::Consumer *use)
}
public:
- T *value(void) const { return _value; }
+ Object *value(void) const { return _value; }
public:
- void value(T *value)
+ void value(Object *value)
{
if (_value)
{
private:
UseHook _hook;
- T *_value;
+ Object *_value;
};
} // namespace coco
#include "coco/IR/Conv2D.h"
+#include <cassert>
+
namespace coco
{
void Conv2D::ker(KernelObject *ker) { _ker.value(ker); }
+KernelObject *Conv2D::ker(void) const
+{
+ if (auto obj = _ker.value())
+ {
+ assert(obj->asKernel() != nullptr);
+ return obj->asKernel();
+ }
+
+ return nullptr;
+}
+
} // namespace coco
}
void FeatureInstr::ifm(FeatureObject *ifm) { _ifm.value(ifm); }
+
+FeatureObject *FeatureInstr::ifm(void) const
+{
+ if (auto obj = _ifm.value())
+ {
+ assert(obj->asFeature() != nullptr);
+ return obj->asFeature();
+ }
+
+ return nullptr;
+}
+
void FeatureInstr::ofm(FeatureObject *ofm) { _ofm.value(ofm); }
FeatureObject *FeatureInstr::ofm(void) const
::mock::Use use;
- coco::UseSlot<coco::FeatureObject> slot{&obj_link, &use};
+ coco::UseSlot slot{&obj_link, &use};
ASSERT_EQ(slot.value(), nullptr);
}
::mock::Use use;
- coco::UseSlot<coco::FeatureObject> slot{&obj_link, &use};
+ coco::UseSlot slot{&obj_link, &use};
slot.value(o);