#include "coco/IR/Bag.h"
#include "coco/IR/Dep.h"
#include "coco/IR/ObjectInfo.forward.h"
+#include "coco/IR/Def.forward.h"
#include "coco/IR/FeatureObject.forward.h"
#include "coco/IR/KernelObject.forward.h"
ObjectInfo *info(void) const;
public:
- // WARN These methods are deprecated. Please use 'producer' and 'consumers' instead.
- Producer *def(void) const;
+ Def *def(void) const;
+ // WARN user methods are deprecated. Please use below 'consumers' instead.
const ConsumerSet *user(void) const;
private:
for (auto obj : dependent_objects(b))
{
- if (obj->def())
+ if (auto p = producer(obj))
{
- res.insert(obj->def());
+ res.insert(p);
}
}
ASSERT_EQ(slot.value(), o);
- ASSERT_EQ(o->def(), &def);
+ ASSERT_EQ(o->def(), &slot);
slot.value(nullptr);
auto slot = make_unique<coco::Def>(&obj_link, &def);
slot->value(o);
- ASSERT_EQ(o->def(), &def);
+ ASSERT_EQ(o->def(), slot.get());
// Let's destruct the allocated slot
slot.reset(nullptr);
ins.ofm(obj);
ASSERT_EQ(ins.ofm(), obj);
- ASSERT_EQ(obj->def(), &ins);
+ ASSERT_EQ(coco::producer(obj), &ins);
}
// TODO Move these tests into UnitF.test.cpp
return res;
}
-Object::Producer *Object::def(void) const
+Def *Object::def(void) const { return info()->def(); }
+
+const Object::ConsumerSet *Object::user(void) const { return info()->user(); }
+
+Object::Producer *producer(const Object *obj)
{
- if (auto d = info()->def())
+ if (auto d = obj->def())
{
return d->producer();
}
return nullptr;
}
-const Object::ConsumerSet *Object::user(void) const { return info()->user(); }
-
-Object::Producer *producer(const Object *obj) { return obj->def(); }
Object::ConsumerSet consumers(const Object *obj) { return *(obj->user()); }
} // namespace coco