1 #ifndef IDENTIFIERRANGE_H
2 #define IDENTIFIERRANGE_H
4 #include "Kernel_global.h"
6 #include <unordered_map>
10 class NamedIdentifier;
41 bool contains(
const QVariant& name,
bool inclusive =
true)
const;
63 void remove(
const QString& nm);
78 SPDomainItem item(quint32 index)
const;
84 SPDomainItem item(
const QString &nam)
const;
91 SPDomainItem itemByOrder(quint32 index)
const;
105 void add(SPDomainItem item);
113 QVariant impliedValue(
const QVariant& v)
const;
120 QString toString()
const;
125 quint32 raw(
const QString &item)
const;
132 quint32 count()
const;
139 void count(quint32 nr);
146 virtual bool isContinuous()
const;
161 qint32 gotoIndex(qint32 index, qint32 step)
const;
171 static IndexedIdentifierRange *merge(
const QSharedPointer<IndexedIdentifierRange>& nr1,
const QSharedPointer<IndexedIdentifierRange>& nr2,RenumberMap *rnm=0);
175 bool alignWithParent(
const IDomain& dom);
176 SPIndexedIdentifier _start;
197 bool contains(
const QVariant& name,
bool inclusive =
true)
const;
203 bool isValid()
const;
211 bool operator==(
const ItemRange& range)
const;
225 void add(SPDomainItem item);
232 void remove(
const QString& item);
240 QVariant impliedValue(
const QVariant& v)
const;
255 SPDomainItem item(quint32 iraw)
const;
262 SPDomainItem item(
const QString &nam)
const;
269 SPDomainItem itemByOrder(quint32 index)
const;
276 Range *clone()
const;
282 QString toString()
const;
288 virtual bool isContinuous()
const;
303 qint32 gotoIndex(qint32 index, qint32 step)
const;
310 quint32 count()
const;
321 static NamedIdentifierRange *merge(
const QSharedPointer<NamedIdentifierRange>& nr1,
const QSharedPointer<NamedIdentifierRange>& nr2,RenumberMap *rnm=0);
324 template<
typename T>
static void addItems(
ItemRange *items,
325 const QSharedPointer<NamedIdentifierRange>& nr1,
326 const QSharedPointer<NamedIdentifierRange>& nr2,
329 for(
int i=0; i < nr1->count(); ++i) {
330 maxraw = std::max(nr1->itemByOrder(i)->raw(), maxraw);
331 items->
add(nr1->itemByOrder(i)->clone());
333 for(
int i=0; i < nr2->count(); ++i) {
334 SPDomainItem item = nr2->item(i);
335 if (!items->
contains(item->name())) {
336 QSharedPointer<T> newid((T*)item->clone());
342 (*rnm)[item->raw()] = maxraw;
348 bool alignWithParent(
const IDomain& dom);
349 std::map<QString, SPNamedIdentifier> _byName;
350 std::vector<SPNamedIdentifier> _byRaw;
351 std::vector<SPNamedIdentifier> _byOrder;
359 static ThematicRange *merge(
const QSharedPointer<ThematicRange> &nr1,
const QSharedPointer<ThematicRange> &nr2, Ilwis::RenumberMap *renumberer);
364 #endif // IDENTIFIERRANGE_H