* NOTE IFM and OFM are implicit. Only 4D kernel is explicit in this class
* TODO Decide source code layout policy and extract this class if necessary
*/
-class Conv2D : public Op, public Object::Use
+class Conv2D : public Op, public Object::Consumer
{
public:
explicit Conv2D(const PtrLink<Op, Instr> *, const PtrLink<Object, ObjectInfo> *);
class DefHook final
{
public:
- DefHook(const PtrLink<Object, ObjectInfo> *obj_link, Object::Def *def)
+ DefHook(const PtrLink<Object, ObjectInfo> *obj_link, Object::Producer *def)
: _obj_link{obj_link}, _def{def}
{
// DO NOTHING
private:
const PtrLink<Object, ObjectInfo> *const _obj_link;
- Object::Def *const _def;
+ // TODO Rename field
+ Object::Producer *const _def;
};
} // namespace coco
template <typename T> class DefSlot final
{
public:
- DefSlot(const PtrLink<Object, ObjectInfo> *obj_link, Object::Def *use)
+ DefSlot(const PtrLink<Object, ObjectInfo> *obj_link, Object::Producer *use)
: _hook{obj_link, use}, _value{nullptr}
{
}
namespace coco
{
-class FeatureInstr : public Instr, public Object::Def, public Object::Use
+class FeatureInstr : public Instr, public Object::Producer, public Object::Consumer
{
public:
FeatureInstr(const PtrLink<Object, ObjectInfo> *obj_link);
class Object
{
public:
- struct Def : public Bag::Updater
+ struct Producer : public Bag::Updater
{
- virtual ~Def() = default;
+ virtual ~Producer() = default;
};
- struct Use : public Bag::Reader
+ struct Consumer : public Bag::Reader
{
- virtual ~Use() = default;
+ virtual ~Consumer() = default;
};
- using User = std::set<Use *>;
+ using ConsumerSet = std::set<Consumer *>;
public:
Object();
ObjectInfo *info(void) const;
public:
- Def *def(void) const;
- const User *user(void) const;
+ Producer *def(void) const;
+ const ConsumerSet *user(void) const;
private:
Dep _dep;
virtual ~ObjectInfo() = default;
public:
- Object::Def *def(void) const { return _def; }
- void def(Object::Def *d);
+ Object::Producer *def(void) const { return _def; }
+ void def(Object::Producer *d);
public:
- Object::User *user(void) { return &_user; }
- const Object::User *user(void) const { return &_user; }
+ Object::ConsumerSet *user(void) { return &_user; }
+ const Object::ConsumerSet *user(void) const { return &_user; }
private:
- Object::Def *_def = nullptr;
- Object::User _user;
+ Object::Producer *_def = nullptr;
+ Object::ConsumerSet _user;
};
} // namespace coco
class UseHook final
{
public:
- UseHook(const PtrLink<Object, ObjectInfo> *obj_link, Object::Use *use)
+ UseHook(const PtrLink<Object, ObjectInfo> *obj_link, Object::Consumer *use)
: _obj_link{obj_link}, _use{use}
{
// DO NOTHING
private:
const PtrLink<Object, ObjectInfo> *const _obj_link;
- Object::Use *const _use;
+ // TODO Rename field
+ Object::Consumer *const _use;
};
} // namespace coco
template <typename T> class UseSlot final
{
public:
- UseSlot(const PtrLink<Object, ObjectInfo> *obj_link, Object::Use *use)
+ UseSlot(const PtrLink<Object, ObjectInfo> *obj_link, Object::Consumer *use)
: _hook{obj_link, use}, _value{nullptr}
{
// DO NOTHING
{
namespace mock
{
-struct Def final : public coco::Object::Def
+struct Def final : public coco::Object::Producer
{
coco::Instr *loc(void) override { return nullptr; }
};
return res;
}
-Object::Def *Object::def(void) const { return info()->def(); }
-const Object::User *Object::user(void) const { return info()->user(); }
+Object::Producer *Object::def(void) const { return info()->def(); }
+const Object::ConsumerSet *Object::user(void) const { return info()->user(); }
} // namespace coco
namespace coco
{
-void ObjectInfo::def(Object::Def *d)
+void ObjectInfo::def(Object::Producer *d)
{
// This assert ensures that object cannot have multiple def.
assert((_def == nullptr) || (d == nullptr));
{
namespace mock
{
-struct Use final : public coco::Object::Use
+// TODO Rename class
+struct Use final : public coco::Object::Consumer
{
coco::Instr *loc(void) override { return nullptr; }
};