7#include "attributestorage_p.h"
19 AttributeStoragePrivate() =
default;
20 AttributeStoragePrivate(AttributeStoragePrivate &other)
22 , atributes(other.atributes)
23 , modifiedAttributes(other.modifiedAttributes)
24 , deletedAttributes(other.deletedAttributes)
27 atributes.insert(attr->type(), attr->clone());
31 ~AttributeStoragePrivate()
33 qDeleteAll(atributes);
37 std::set<QByteArray> modifiedAttributes;
43AttributeStorage::AttributeStorage()
44 : d(new AttributeStoragePrivate)
48AttributeStorage::AttributeStorage(
const AttributeStorage &other)
53AttributeStorage::AttributeStorage(AttributeStorage &&other)
noexcept
58AttributeStorage &AttributeStorage::operator=(
const AttributeStorage &other)
64AttributeStorage &AttributeStorage::operator=(AttributeStorage &&other)
noexcept
70AttributeStorage::~AttributeStorage() =
default;
72void AttributeStorage::addAttribute(
Attribute *attr)
76 Attribute *existing = d->atributes.value(type);
78 if (attr == existing) {
81 d->atributes.remove(type);
84 d->atributes.insert(type, attr);
85 markAttributeModified(type);
88void AttributeStorage::removeAttribute(
const QByteArray &type)
90 d->modifiedAttributes.erase(type);
91 d->deletedAttributes.insert(type);
92 delete d->atributes.take(type);
95bool AttributeStorage::hasAttribute(
const QByteArray &type)
const
97 return d->atributes.contains(type);
102 return d->atributes.values();
105void AttributeStorage::clearAttributes()
111 d->atributes.clear();
112 d->modifiedAttributes.clear();
117 return d->atributes.value(type);
122 Attribute *attr = d->atributes.value(type);
124 markAttributeModified(type);
129void AttributeStorage::markAttributeModified(
const QByteArray &type)
131 if (d->atributes.contains(type)) {
132 d->deletedAttributes.remove(type);
133 d->modifiedAttributes.insert(type);
137void AttributeStorage::resetChangeLog()
139 d->modifiedAttributes.clear();
140 d->deletedAttributes.clear();
145 return d->deletedAttributes;
148bool AttributeStorage::hasModifiedAttributes()
const
150 return !d->modifiedAttributes.
empty();
153std::vector<Attribute *> AttributeStorage::modifiedAttributes()
const
155 std::vector<Attribute *> ret;
156 ret.reserve(d->modifiedAttributes.size());
157 for (
const auto &type : d->modifiedAttributes) {
158 Attribute *attr = d->atributes.value(type);
Provides interface for custom attributes for Entity.
virtual QByteArray type() const =0
Returns the type of the attribute.
Helper integration between Akonadi and Qt.
VehicleSection::Type type(QStringView coachNumber, QStringView coachClassification)
A glue between Qt and the standard library.
iterator insert(const_iterator before, parameter_type value)