GRASS GIS 8 Programmer's Manual
8.5.0dev(2024)-d6dec75dd4
shapefil_private.h
Go to the documentation of this file.
1
#ifndef SHAPEFILE_PRIVATE_H_INCLUDED
2
#define SHAPEFILE_PRIVATE_H_INCLUDED
3
4
/******************************************************************************
5
*
6
* Project: Shapelib
7
* Purpose: Private include file for Shapelib.
8
* Author: Frank Warmerdam, warmerdam@pobox.com
9
*
10
******************************************************************************
11
* Copyright (c) 1999, Frank Warmerdam
12
* Copyright (c) 2012-2016, Even Rouault <even dot rouault at spatialys.com>
13
*
14
* SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
15
******************************************************************************
16
*
17
*/
18
19
#ifdef __cplusplus
20
#define STATIC_CAST(type, x) static_cast<type>(x)
21
#define REINTERPRET_CAST(type, x) reinterpret_cast<type>(x)
22
#define CONST_CAST(type, x) const_cast<type>(x)
23
#define SHPLIB_NULLPTR nullptr
24
#else
25
#define STATIC_CAST(type, x) ((type)(x))
26
#define REINTERPRET_CAST(type, x) ((type)(x))
27
#define CONST_CAST(type, x) ((type)(x))
28
#define SHPLIB_NULLPTR NULL
29
#endif
30
31
#if !defined(SHP_BIG_ENDIAN)
32
#if defined(CPL_MSB)
33
#define SHP_BIG_ENDIAN 1
34
#elif (defined(__GNUC__) && __GNUC__ >= 5) || \
35
(defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 4 && \
36
__GNUC_MINOR__ >= 6)
37
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
38
#define SHP_BIG_ENDIAN 1
39
#endif
40
#elif defined(__GLIBC__)
41
#if __BYTE_ORDER == __BIG_ENDIAN
42
#define SHP_BIG_ENDIAN 1
43
#endif
44
#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
45
#define SHP_BIG_ENDIAN 1
46
#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
47
#elif defined(__sparc) || defined(__sparc__) || defined(_POWER) || \
48
defined(__powerpc__) || defined(__ppc__) || defined(__hpux) || \
49
defined(_MIPSEB) || defined(_POWER) || defined(__s390__)
50
#define SHP_BIG_ENDIAN 1
51
#endif
52
#endif
53
54
#include "
shapefil.h
"
55
#include <stdint.h>
56
#include <stdlib.h>
57
58
/************************************************************************/
59
/* Little endian <==> big endian byte swap macros. */
60
/************************************************************************/
61
62
#if (defined(__GNUC__) && __GNUC__ >= 5) || \
63
(defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 4 && \
64
__GNUC_MINOR__ >= 8)
65
#define _SHP_SWAP32(x) \
66
STATIC_CAST(uint32_t, __builtin_bswap32(STATIC_CAST(uint32_t, x)))
67
#define _SHP_SWAP64(x) \
68
STATIC_CAST(uint64_t, __builtin_bswap64(STATIC_CAST(uint64_t, x)))
69
#elif defined(_MSC_VER)
70
#define _SHP_SWAP32(x) \
71
STATIC_CAST(uint32_t, _byteswap_ulong(STATIC_CAST(uint32_t, x)))
72
#define _SHP_SWAP64(x) \
73
STATIC_CAST(uint64_t, _byteswap_uint64(STATIC_CAST(uint64_t, x)))
74
#else
75
#define _SHP_SWAP32(x) \
76
STATIC_CAST(uint32_t, \
77
((STATIC_CAST(uint32_t, x) & 0x000000ffU) << 24) | \
78
((STATIC_CAST(uint32_t, x) & 0x0000ff00U) << 8) | \
79
((STATIC_CAST(uint32_t, x) & 0x00ff0000U) >> 8) | \
80
((STATIC_CAST(uint32_t, x) & 0xff000000U) >> 24))
81
#define _SHP_SWAP64(x) \
82
((STATIC_CAST(uint64_t, _SHP_SWAP32(STATIC_CAST(uint32_t, x))) << 32) | \
83
(STATIC_CAST(uint64_t, _SHP_SWAP32(STATIC_CAST( \
84
uint32_t, STATIC_CAST(uint64_t, x) >> 32)))))
85
86
#endif
87
88
/* in-place uint32_t* swap */
89
#define SHP_SWAP32(p) \
90
*REINTERPRET_CAST(uint32_t *, p) = \
91
_SHP_SWAP32(*REINTERPRET_CAST(uint32_t *, p))
92
/* in-place uint64_t* swap */
93
#define SHP_SWAP64(p) \
94
*REINTERPRET_CAST(uint64_t *, p) = \
95
_SHP_SWAP64(*REINTERPRET_CAST(uint64_t *, p))
96
/* in-place double* swap */
97
#define SHP_SWAPDOUBLE(x) \
98
do { \
99
uint64_t _n64; \
100
void *_lx = x; \
101
memcpy(&_n64, _lx, 8); \
102
_n64 = _SHP_SWAP64(_n64); \
103
memcpy(_lx, &_n64, 8); \
104
} while (0)
105
/* copy double* swap*/
106
#define SHP_SWAPDOUBLE_CPY(dst, src) \
107
do { \
108
uint64_t _n64; \
109
const void *_ls = src; \
110
void *_ld = dst; \
111
memcpy(&_n64, _ls, 8); \
112
_n64 = _SHP_SWAP64(_n64); \
113
memcpy(_ld, &_n64, 8); \
114
} while (0)
115
#endif
/* ndef SHAPEFILE_PRIVATE_H_INCLUDED */
shapefil.h
lib
external
shapelib
shapefil_private.h
Generated on Sun Dec 22 2024 07:38:20 for GRASS GIS 8 Programmer's Manual by
1.9.1