namespace coco
{
-template <typename T> class DefSlot final
+class DefSlot final
{
public:
DefSlot(const PtrLink<Object, ObjectInfo> *obj_link, Object::Producer *use)
~DefSlot() { value(nullptr); }
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:
DefHook _hook;
- T *_value;
+ Object *_value;
};
} // namespace coco
void ifm(FeatureObject *ifm);
private:
- DefSlot<FeatureObject> _ofm;
+ DefSlot _ofm;
public:
- FeatureObject *ofm(void) const { return _ofm.value(); }
+ FeatureObject *ofm(void) const;
void ofm(FeatureObject *ofm);
};
::mock::Def def;
- coco::DefSlot<coco::FeatureObject> slot{&obj_link, &def};
+ coco::DefSlot slot{&obj_link, &def};
ASSERT_EQ(slot.value(), nullptr);
}
::mock::Def def;
- coco::DefSlot<coco::FeatureObject> slot{&obj_link, &def};
+ coco::DefSlot slot{&obj_link, &def};
slot.value(o);
::mock::Def def;
- auto slot = make_unique<coco::DefSlot<coco::FeatureObject>>(&obj_link, &def);
+ auto slot = make_unique<coco::DefSlot>(&obj_link, &def);
slot->value(o);
ASSERT_EQ(o->def(), &def);
#include "coco/IR/Instr.h"
#include "coco/IR/Block.h"
+#include <cassert>
+
namespace coco
{
void FeatureInstr::ifm(FeatureObject *ifm) { _ifm.value(ifm); }
void FeatureInstr::ofm(FeatureObject *ofm) { _ofm.value(ofm); }
+FeatureObject *FeatureInstr::ofm(void) const
+{
+ if (auto obj = _ofm.value())
+ {
+ assert(obj->asFeature() != nullptr);
+ return obj->asFeature();
+ }
+
+ return nullptr;
+}
+
} // namespace coco