QGIS API Documentation  2.12.0-Lyon
qgswkbptr.h
Go to the documentation of this file.
1 #ifndef QGSWKBPTR_H
2 #define QGSWKBPTR_H
3 
4 #include "qgswkbtypes.h"
5 #include "qgsapplication.h"
6 #include "qgis.h"
7 
8 class CORE_EXPORT QgsWkbPtr
9 {
10  mutable unsigned char *mP;
11 
12  public:
13  QgsWkbPtr( unsigned char *p ): mP( p ) {}
14 
15  inline const QgsWkbPtr &operator>>( double &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; }
16  inline const QgsWkbPtr &operator>>( int &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; }
17  inline const QgsWkbPtr &operator>>( unsigned int &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; }
18  inline const QgsWkbPtr &operator>>( char &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; }
19  inline const QgsWkbPtr &operator>>( QgsWKBTypes::Type &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; }
20  inline const QgsWkbPtr &operator>>( QGis::WkbType &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; }
21 #ifdef QT_ARCH_ARM
22  inline const QgsWkbPtr &operator>>( qreal &r ) const { double v; memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); r = v; return *this; }
23 #endif
24 
25  inline QgsWkbPtr &operator<<( const double &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
26  inline QgsWkbPtr &operator<<( const int &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
27  inline QgsWkbPtr &operator<<( const unsigned int &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
28  inline QgsWkbPtr &operator<<( const char &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
29  inline QgsWkbPtr &operator<<( const QgsWKBTypes::Type &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
30  inline QgsWkbPtr &operator<<( const QGis::WkbType &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
31 #ifdef QT_ARCH_ARM
32  inline QgsWkbPtr &operator<<( const qreal &r ) { double v = r; memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; }
33 #endif
34 
35  inline void operator+=( int n ) { mP += n; }
36 
37  inline operator unsigned char *() const { return mP; }
38 };
39 
40 class CORE_EXPORT QgsConstWkbPtr
41 {
42  mutable unsigned char *mP;
43  mutable bool mEndianSwap;
44 
45  public:
46  QgsConstWkbPtr( const unsigned char *p );
47  QgsWKBTypes::Type readHeader() const;
48 
49  inline const QgsConstWkbPtr &operator>>( double &v ) const { read( v ); return *this; }
50  inline const QgsConstWkbPtr &operator>>( float &r ) const { double v; read( v ); r = v; return *this; }
51  inline const QgsConstWkbPtr &operator>>( int &v ) const { read( v ); return *this; }
52  inline const QgsConstWkbPtr &operator>>( unsigned int &v ) const { read( v ); return *this; }
53  inline const QgsConstWkbPtr &operator>>( char &v ) const { read( v ); return *this; }
54  inline const QgsConstWkbPtr &operator>>( QGis::WkbType &v ) const { read( v ); return *this; }
55  inline const QgsConstWkbPtr &operator>>( QgsWKBTypes::Type &v ) const { read( v ); return *this; }
56 
57  inline void operator+=( int n ) { mP += n; }
58  inline void operator-=( int n ) { mP -= n; }
59 
60  inline operator const unsigned char *() const { return mP; }
61 
62  template<typename T> void read( T& v ) const
63  {
64  memcpy( &v, mP, sizeof( v ) );
65  mP += sizeof( v );
66  if ( mEndianSwap )
67  {
69  }
70  }
71 };
72 
73 #endif // QGSWKBPTR_H
static void endian_swap(T &value)
Swap the endianness of the specified value.
QgsWkbPtr(unsigned char *p)
Definition: qgswkbptr.h:13
const QgsConstWkbPtr & operator>>(char &v) const
Definition: qgswkbptr.h:53
const QgsConstWkbPtr & operator>>(double &v) const
Definition: qgswkbptr.h:49
const QgsWkbPtr & operator>>(int &v) const
Definition: qgswkbptr.h:16
void operator+=(int n)
Definition: qgswkbptr.h:35
WkbType
Used for symbology operations.
Definition: qgis.h:56
QDataStream & operator>>(QDataStream &in, QgsFeature &feature)
Reads a feature from stream in into feature.
Definition: qgsfeature.cpp:269
const QgsConstWkbPtr & operator>>(unsigned int &v) const
Definition: qgswkbptr.h:52
QgsWkbPtr & operator<<(const int &v)
Definition: qgswkbptr.h:26
const QgsConstWkbPtr & operator>>(QgsWKBTypes::Type &v) const
Definition: qgswkbptr.h:55
const QgsConstWkbPtr & operator>>(QGis::WkbType &v) const
Definition: qgswkbptr.h:54
QgsWkbPtr & operator<<(const QgsWKBTypes::Type &v)
Definition: qgswkbptr.h:29
QgsWkbPtr & operator<<(const double &v)
Definition: qgswkbptr.h:25
QgsWkbPtr & operator<<(const QGis::WkbType &v)
Definition: qgswkbptr.h:30
const QgsWkbPtr & operator>>(double &v) const
Definition: qgswkbptr.h:15
std::ostream & operator<<(std::ostream &os, const QgsCoordinateReferenceSystem &r)
Output stream operator.
const QgsWkbPtr & operator>>(char &v) const
Definition: qgswkbptr.h:18
const QgsWkbPtr & operator>>(QGis::WkbType &v) const
Definition: qgswkbptr.h:20
const QgsConstWkbPtr & operator>>(int &v) const
Definition: qgswkbptr.h:51
QgsWkbPtr & operator<<(const unsigned int &v)
Definition: qgswkbptr.h:27
const QgsWkbPtr & operator>>(unsigned int &v) const
Definition: qgswkbptr.h:17
void operator+=(int n)
Definition: qgswkbptr.h:57
const QgsConstWkbPtr & operator>>(float &r) const
Definition: qgswkbptr.h:50
void operator-=(int n)
Definition: qgswkbptr.h:58
QgsWkbPtr & operator<<(const char &v)
Definition: qgswkbptr.h:28
const QgsWkbPtr & operator>>(QgsWKBTypes::Type &v) const
Definition: qgswkbptr.h:19
void read(T &v) const
Definition: qgswkbptr.h:62