Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
identifierrange.h
1 #ifndef IDENTIFIERRANGE_H
2 #define IDENTIFIERRANGE_H
3 
4 #include "Kernel_global.h"
5 #include <QVector>
6 #include <unordered_map>
7 
8 namespace Ilwis {
9 
10 class NamedIdentifier;
16 class KERNELSHARED_EXPORT IndexedIdentifierRange : public ItemRange
17 {
18 public:
19 
24 
32  IndexedIdentifierRange(const QString& prefix, quint32 count, quint32 start=0);
33 
41  bool contains(const QVariant& name, bool inclusive = true) const;
42 
48  bool isValid() const;
49 
56  bool operator==(const IndexedIdentifierRange& range);
57 
63  void remove(const QString& nm);
64 
70  Range *clone() const;
71 
78  SPDomainItem item(quint32 index) const;
79 
84  SPDomainItem item(const QString &nam) const;
85 
91  SPDomainItem itemByOrder(quint32 index) const;
92 
98  void add(DomainItem *item);
99 
105  void add(SPDomainItem item);
106 
113  QVariant impliedValue(const QVariant& v) const;
114 
120  QString toString() const;
121 
125  quint32 raw(const QString &item) const;
126 
132  quint32 count() const;
133 
139  void count(quint32 nr);
140 
146  virtual bool isContinuous() const;
147 
151  void interpolation(const QString&) {}
152 
161  qint32 gotoIndex(qint32 index, qint32 step) const;
162 
171  static IndexedIdentifierRange *merge(const QSharedPointer<IndexedIdentifierRange>& nr1, const QSharedPointer<IndexedIdentifierRange>& nr2,RenumberMap *rnm=0);
172 
173  void clear();
174 private:
175  bool alignWithParent(const IDomain& dom);
176  SPIndexedIdentifier _start;
177  quint32 _count;
178 };
179 
180 class KERNELSHARED_EXPORT NamedIdentifierRange : public ItemRange
181 {
182 public:
187 
189 
197  bool contains(const QVariant& name, bool inclusive = true) const;
198 
203  bool isValid() const;
204 
211  bool operator==(const ItemRange& range) const;
212 
218  void add(DomainItem *item);
219 
225  void add(SPDomainItem item);
226 
232  void remove(const QString& item);
233 
240  QVariant impliedValue(const QVariant& v) const;
241 
248  NamedIdentifierRange& operator<<(const QString& itemdef);
249 
255  SPDomainItem item(quint32 iraw) const;
256 
262  SPDomainItem item(const QString &nam) const;
263 
269  SPDomainItem itemByOrder(quint32 index) const;
270 
276  Range *clone() const;
277 
282  QString toString() const;
283 
288  virtual bool isContinuous() const;
289 
293  void interpolation(const QString&) {}
294 
303  qint32 gotoIndex(qint32 index, qint32 step) const;
304 
310  quint32 count() const;
311  void clear();
312 
321  static NamedIdentifierRange *merge(const QSharedPointer<NamedIdentifierRange>& nr1, const QSharedPointer<NamedIdentifierRange>& nr2,RenumberMap *rnm=0);
322 
323 protected:
324  template<typename T> static void addItems(ItemRange *items,
325  const QSharedPointer<NamedIdentifierRange>& nr1,
326  const QSharedPointer<NamedIdentifierRange>& nr2,
327  RenumberMap *rnm=0){
328  quint32 maxraw = 0;
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());
332  }
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());
337  if ( rnm)
338  newid->raw(maxraw);
339  items->add(newid);
340  }
341  if ( rnm)
342  (*rnm)[item->raw()] = maxraw;
343  ++maxraw;
344  }
345  }
346 
347 private:
348  bool alignWithParent(const IDomain& dom);
349  std::map<QString, SPNamedIdentifier> _byName;
350  std::vector<SPNamedIdentifier> _byRaw;
351  std::vector<SPNamedIdentifier> _byOrder;
352 };
353 
354 class KERNELSHARED_EXPORT ThematicRange : public NamedIdentifierRange {
355 public:
356  ThematicRange();
357  ~ThematicRange() {}
358  ThematicRange& operator<<(const QString& itemdef);
359  static ThematicRange *merge(const QSharedPointer<ThematicRange> &nr1, const QSharedPointer<ThematicRange> &nr2, Ilwis::RenumberMap *renumberer);
360 };
361 
362 }
363 
364 #endif // IDENTIFIERRANGE_H