151 lines
5.5 KiB
C++
151 lines
5.5 KiB
C++
#include "dataprototype.h"
|
|
|
|
RuntimeItem::RuntimeItem(AssembleType t) : type_store(t) {}
|
|
|
|
RuntimeItem::RuntimeItem(const RuntimeItem &other) : RuntimeItem(other.baseType()) {
|
|
this->listener_collection.append(other.listener_collection);
|
|
}
|
|
|
|
std::shared_ptr<const RuntimeItem> RuntimeItem::add(std::shared_ptr<ItemListener> inst) const
|
|
{
|
|
if(this->listener_collection.contains(inst))
|
|
return this->shared_from_this();
|
|
|
|
auto ninst = std::const_pointer_cast<RuntimeItem>(this->clone());
|
|
ninst->listener_collection.append(inst);
|
|
itemNotify([ninst, this](std::shared_ptr<ItemListener> p) { p->itemHasbeenUpdated(ninst, this->shared_from_this()); });
|
|
return ninst;
|
|
}
|
|
|
|
std::shared_ptr<const RuntimeItem> RuntimeItem::del(std::shared_ptr<ItemListener> inst) const
|
|
{
|
|
if(!this->listener_collection.contains(inst))
|
|
return this->shared_from_this();
|
|
|
|
auto ninst = std::const_pointer_cast<RuntimeItem>(this->clone());
|
|
ninst->listener_collection.removeAll(inst);
|
|
itemNotify([ninst, this](std::shared_ptr<ItemListener> p) { p->itemHasbeenUpdated(ninst, this->shared_from_this()); });
|
|
return ninst;
|
|
}
|
|
|
|
void RuntimeItem::itemNotify(std::function<void (std::shared_ptr<ItemListener>)> proc) const
|
|
{
|
|
for(auto < : listener_collection)
|
|
proc(lt);
|
|
}
|
|
|
|
AssembleType RuntimeItem::baseType() const { return type_store; }
|
|
|
|
qulonglong RuntimeItem::hashCode() const { return (qulonglong)this; }
|
|
|
|
std::shared_ptr<const RuntimeItem> RuntimeItem::clone() const{
|
|
return std::make_shared<RuntimeItem>(*this);
|
|
}
|
|
|
|
TypeTemplate::TypeTemplate() : RuntimeItem(AssembleType::DATAS_ASSEMBLE) {}
|
|
|
|
TypeTemplate::TypeTemplate(const TypeTemplate &other)
|
|
: RuntimeItem(other)
|
|
{
|
|
this->name_store = other.name_store;
|
|
this->type_store = other.type_store;
|
|
this->io_type = other.io_type;
|
|
this->comps_store = other.comps_store;
|
|
}
|
|
|
|
QString TypeTemplate::name() const { return this->name_store; }
|
|
|
|
std::shared_ptr<const TypeTemplate> TypeTemplate::setName(const QString &val) const{
|
|
auto ninst = std::static_pointer_cast<TypeTemplate>(std::const_pointer_cast<RuntimeItem>(this->clone()));
|
|
ninst->name_store = val;
|
|
ninst->itemNotify([ninst, this](std::shared_ptr<ItemListener> p) { p->itemHasbeenUpdated(ninst, this->shared_from_this()); });
|
|
return ninst;
|
|
}
|
|
|
|
QString TypeTemplate::type() const { return this->type_store; }
|
|
|
|
std::shared_ptr<const TypeTemplate> TypeTemplate::setType(const QString &val) const
|
|
{
|
|
auto ninst = std::static_pointer_cast<TypeTemplate>(std::const_pointer_cast<RuntimeItem>(this->clone()));
|
|
ninst->name_store = val;
|
|
ninst->itemNotify([ninst, this](std::shared_ptr<ItemListener> p) { p->itemHasbeenUpdated(ninst, this->shared_from_this()); });
|
|
return ninst;
|
|
}
|
|
|
|
DataOritation TypeTemplate::oritation() const { return io_type; }
|
|
|
|
std::shared_ptr<const TypeTemplate> TypeTemplate::setOritation(DataOritation t) const
|
|
{
|
|
auto ninst = std::static_pointer_cast<TypeTemplate>(std::const_pointer_cast<RuntimeItem>(this->clone()));
|
|
ninst->io_type = t;
|
|
ninst->itemNotify([ninst, this](std::shared_ptr<ItemListener> p) { p->itemHasbeenUpdated(ninst, this->shared_from_this()); });
|
|
return ninst;
|
|
}
|
|
|
|
std::shared_ptr<const RuntimeItem> TypeTemplate::clone() const
|
|
{
|
|
return std::make_shared<TypeTemplate>(*this);
|
|
}
|
|
|
|
DownAccess::DownAccess(std::shared_ptr<const RuntimeItem> peer) : runtime_item(peer) {}
|
|
|
|
DownAccess::DownAccess(const DownAccess &other)
|
|
{
|
|
this->runtime_item = other.runtime_item;
|
|
this->children_store = other.children_store;
|
|
}
|
|
|
|
std::shared_ptr<const RuntimeItem> DownAccess::itemPeer() const { return this->runtime_item; }
|
|
|
|
QList<std::shared_ptr<const DownAccess> > DownAccess::members() const { return this->children_store; }
|
|
|
|
std::shared_ptr<const DownAccess> DownAccess::append(std::shared_ptr<const DownAccess> child_inst) const{
|
|
if(this->children_store.contains(child_inst))
|
|
return this->shared_from_this();
|
|
|
|
auto ninst = std::const_pointer_cast<DownAccess>(this->clone());
|
|
ninst->children_store.append(child_inst);
|
|
itemPeer()->itemNotify(
|
|
[this, child_inst](std::shared_ptr<ItemListener> inst) {
|
|
inst->memberHasbeenAppended(*this->itemPeer(), child_inst->itemPeer());
|
|
});
|
|
|
|
return ninst;
|
|
}
|
|
|
|
std::shared_ptr<const DownAccess> DownAccess::remove(std::shared_ptr<const DownAccess> child_inst) const {
|
|
if(!this->children_store.contains(child_inst))
|
|
return this->shared_from_this();
|
|
|
|
auto ninst = std::const_pointer_cast<DownAccess>(this->clone());
|
|
itemPeer()->itemNotify(
|
|
[this, child_inst](std::shared_ptr<ItemListener> inst) {
|
|
inst->memberAboutToBeRemove(*this->itemPeer(), child_inst->itemPeer());
|
|
});
|
|
|
|
ninst->children_store.removeAll(child_inst);
|
|
return ninst;
|
|
}
|
|
|
|
std::shared_ptr<const DownAccess> DownAccess::replace(std::shared_ptr<const DownAccess> current, std::shared_ptr<const DownAccess> previous) const
|
|
{
|
|
return this->remove(previous)->append(current);
|
|
}
|
|
|
|
std::shared_ptr<const DownAccess> DownAccess::clone() const {
|
|
return std::make_shared<DownAccess>(*this);
|
|
}
|
|
|
|
UpAccess::UpAccess(std::shared_ptr<const UpAccess> parent, std::shared_ptr<const DownAccess> down):runtime_downward(down), parent_ptr(parent){}
|
|
|
|
UpAccess::UpAccess(const UpAccess &other) { runtime_downward = other.runtime_downward; }
|
|
|
|
std::shared_ptr<const DownAccess> UpAccess::downwardPeers() const
|
|
{
|
|
return this->runtime_downward;
|
|
}
|
|
|
|
std::shared_ptr<const UpAccess> UpAccess::parent() const { return parent_ptr; }
|
|
|
|
std::shared_ptr<const UpAccess> UpAccess::clone() const { return std::make_shared<const UpAccess>(*this); }
|