private:
void get(ObjectInfo **) const override;
- void get(const PtrLink<Bag, BagInfo> **out) const override;
public:
FeatureObject *asFeature(void) override { return this; }
private:
std::unique_ptr<FeatureObjectInfo> _info;
- const PtrLink<Bag, BagInfo> *const _link;
std::vector<ElemID> _map;
};
private:
void get(ObjectInfo **) const override;
- void get(const PtrLink<Bag, BagInfo> **out) const override;
public:
KernelObject *asKernel(void) override { return this; }
private:
std::unique_ptr<KernelObjectInfo> _info;
- const PtrLink<Bag, BagInfo> *const _link;
std::vector<ElemID> _map;
};
protected:
virtual void get(ObjectInfo **) const = 0;
- virtual void get(const PtrLink<Bag, BagInfo> **) const = 0;
+ void setBagLink(const PtrLink<Bag, BagInfo> *);
private:
coco::Bag *_bag;
public:
Def *def(void) const;
const User *user(void) const;
+
+private:
+ const PtrLink<Bag, BagInfo> *_bag_link;
};
} // namespace coco
FeatureObject::FeatureObject(std::unique_ptr<FeatureObjectInfo> &&info,
const PtrLink<Bag, BagInfo> *link)
- : _info(std::move(info)), _link{link}
+ : _info(std::move(info))
{
+ setBagLink(link);
_map.resize(nncc::core::ADT::feature::num_elements(shape()));
}
}
void FeatureObject::get(ObjectInfo **out) const { *out = _info.get(); }
-void FeatureObject::get(const PtrLink<Bag, BagInfo> **out) const { *out = _link; }
const nncc::core::ADT::feature::Shape &FeatureObject::shape(void) const { return _info->shape(); }
KernelObject::KernelObject(std::unique_ptr<KernelObjectInfo> &&info,
const PtrLink<Bag, BagInfo> *link)
- : _info{std::move(info)}, _link{link}
+ : _info{std::move(info)}
{
+ setBagLink(link);
_map.resize(nncc::core::ADT::kernel::num_elements(shape()));
}
}
void KernelObject::get(ObjectInfo **out) const { *out = _info.get(); }
-void KernelObject::get(const PtrLink<Bag, BagInfo> **out) const { *out = _link; }
const nncc::core::ADT::kernel::Shape &KernelObject::shape(void) const { return _info->shape(); }
// DO NOTHING
}
+void Object::setBagLink(const PtrLink<Bag, BagInfo> *bag_link) { _bag_link = bag_link; }
+
void Object::bag(coco::Bag *bag)
{
if (_bag != nullptr)
BagInfo *Object::info(const Bag *bag) const
{
- const PtrLink<Bag, BagInfo> *link = nullptr;
- get(&link);
- assert(link != nullptr);
-
- return link->find(bag);
+ assert(_bag_link != nullptr);
+ return _bag_link->find(bag);
}
Object::Def *Object::def(void) const { return info()->def(); }
public:
std::unique_ptr<coco::ObjectInfo> info;
- const coco::PtrLink<coco::Bag, coco::BagInfo> *link;
+
+public:
+ void link(const coco::PtrLink<coco::Bag, coco::BagInfo> *link) { setBagLink(link); }
private:
void get(coco::ObjectInfo **out) const override { *out = info.get(); }
- void get(const coco::PtrLink<coco::Bag, coco::BagInfo> **out) const override { *out = link; }
};
} // namespace mock
} // namespace
::mock::Object obj;
obj.info = make_unique<coco::ObjectInfo>();
- obj.link = &link;
+ obj.link(&link);
obj.bag(bag);