Marble

GeoDataSchemaData.cpp
1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2014 Abhinav Gangwar <[email protected]>
4 //
5 
6 #include "GeoDataSchemaData.h"
7 
8 // Qt
9 #include <QDataStream>
10 #include <QString>
11 #include <QHash>
12 
13 // Marble
14 #include "GeoDataSimpleData.h"
15 #include "GeoDataTypes.h"
16 
17 namespace Marble
18 {
19 
20 class GeoDataSchemaDataPrivate
21 {
22 public:
23  GeoDataSchemaDataPrivate()
24  : m_parent( nullptr )
25  {
26  // nothing to do
27  }
28 
29  QString m_schemaUrl;
30  QHash<QString, GeoDataSimpleData> m_simpleData; // Map for name and SimpleData
31  GeoDataExtendedData *m_parent;
32 };
33 
34 GeoDataSchemaData::GeoDataSchemaData()
35  : d( new GeoDataSchemaDataPrivate )
36 {
37 }
38 
39 GeoDataSchemaData::GeoDataSchemaData( const GeoDataSchemaData &other )
40  : d( new GeoDataSchemaDataPrivate( *other.d ) )
41 {
42 }
43 
44 GeoDataSchemaData &GeoDataSchemaData::operator=( const GeoDataSchemaData &rhs )
45 {
46  *d = *rhs.d;
47  return *this;
48 }
49 
50 bool GeoDataSchemaData::operator==( const GeoDataSchemaData &other ) const
51 {
52  if ( d->m_schemaUrl != other.d->m_schemaUrl ||
53  d->m_simpleData.size() != other.d->m_simpleData.size() )
54  {
55  return false;
56  }
57 
58  QHash<QString, GeoDataSimpleData>::iterator begin = d->m_simpleData.begin();
59  QHash<QString, GeoDataSimpleData>::iterator end = d->m_simpleData.end();
60  QHash<QString, GeoDataSimpleData>::iterator beginOther = other.d->m_simpleData.begin();
61 
62  for( ; begin != end; ++begin, ++beginOther ) {
63  if ( *begin != *beginOther ) {
64  return false;
65  }
66  }
67 
68  return true;
69 }
70 
71 bool GeoDataSchemaData::operator!=( const GeoDataSchemaData &other ) const
72 {
73  return !this->operator==(other);
74 }
75 
76 GeoDataSchemaData::~GeoDataSchemaData()
77 {
78  delete d;
79 }
80 
81 QString GeoDataSchemaData::schemaUrl() const
82 {
83  return d->m_schemaUrl;
84 }
85 
86 void GeoDataSchemaData::setSchemaUrl( const QString &schemaUrl )
87 {
88  d->m_schemaUrl = schemaUrl;
89 }
90 
91 GeoDataSimpleData &GeoDataSchemaData::simpleData( const QString &name ) const
92 {
93  return d->m_simpleData[ name ];
94 }
95 
96 void GeoDataSchemaData::addSimpleData( const GeoDataSimpleData &data )
97 {
98  d->m_simpleData.insert( data.name(), data );
99 }
100 
101 QList<GeoDataSimpleData> GeoDataSchemaData::simpleDataList() const
102 {
103  return d->m_simpleData.values();
104 }
105 
106 void GeoDataSchemaData::setParent(GeoDataExtendedData *parent)
107 {
108  d->m_parent = parent;
109 }
110 
111 const GeoDataExtendedData *GeoDataSchemaData::parent() const
112 {
113  return d->m_parent;
114 }
115 
116 GeoDataExtendedData *GeoDataSchemaData::parent()
117 {
118  return d->m_parent;
119 }
120 
121 const char* GeoDataSchemaData::nodeType() const
122 {
123  return GeoDataTypes::GeoDataSchemaDataType;
124 }
125 
126 void GeoDataSchemaData::pack( QDataStream &stream ) const
127 {
128  stream << d->m_schemaUrl;
129  stream << d->m_simpleData.size();
130 
132  QHash<QString, GeoDataSimpleData>::const_iterator end = d->m_simpleData.constEnd();
133 
134  for( ; iter != end; ++iter ) {
135  iter.value().pack( stream );
136  }
137 }
138 
139 void GeoDataSchemaData::unpack( QDataStream &stream )
140 {
141  stream >> d->m_schemaUrl;
142  int size = 0;
143  stream >> size;
144 
145  for( int i = 0; i < size; i++ ) {
146  GeoDataSimpleData simpleData;
147  simpleData.unpack( stream );
148  d->m_simpleData.insert( simpleData.name(), simpleData );
149  }
150 }
151 
152 } // namespace Marble
const T value(const Key &key) const const
QHash::iterator begin()
const QList< QKeySequence > & begin()
bool operator==(const Qt3DRender::QGraphicsApiFilter &reference, const Qt3DRender::QGraphicsApiFilter &sample)
QHash::const_iterator constBegin() const const
Binds a QML item to a specific geodetic location in screen coordinates.
QString & insert(int position, QChar ch)
const char * name(StandardAction id)
const QList< QKeySequence > & end()
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Oct 4 2023 04:09:41 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.