 |
NAVTOR SDK
v.3.0
Software Development Kit for fast and efficient development of ECDIS, ECS and generic marine applications
|
|
Go to the documentation of this file. 1 #ifndef SDK_BASE_BASE_TYPES_H_
11 #define SDK_BASE_BASE_TYPES_H_
15 #if !defined(SDK_CC_MSVC)
18 #if defined(SDK_CC_CLANG) || defined(_PUSHPOP_SUPPORTED)
19 # pragma GCC diagnostic push
20 # pragma GCC diagnostic ignored "-Wpragma-pack"
22 #include "sdk_pshpack1.h"
30 #define SDK_NAMESPACE sdk
31 #endif // SDK_NAMESPACE
33 #ifndef SDK_BEGIN_NAMESPACE
34 #define SDK_BEGIN_NAMESPACE namespace SDK_NAMESPACE {
35 #endif // SDK_BEGIN_NAMESPACE
37 #ifndef SDK_END_NAMESPACE
38 #define SDK_END_NAMESPACE }
39 #endif // SDK_END_NAMESPACE
41 #ifndef SDK_BASE_NAMESPACE
42 #define SDK_BASE_NAMESPACE SDK_NAMESPACE::base
43 #endif // SDK_BASE_NAMESPACE
45 #ifndef SDK_BASE_BEGIN_NAMESPACE
46 #define SDK_BASE_BEGIN_NAMESPACE namespace SDK_NAMESPACE { \
48 #endif // SDK_BASE_BEGIN_NAMESPACE
50 #ifndef SDK_BASE_END_NAMESPACE
51 #define SDK_BASE_END_NAMESPACE SDK_END_NAMESPACE }
52 #endif // SDK_BASE_END_NAMESPACE
117 #if defined(__cplusplus)
119 return (str.data == NULL);
122 #define IsNullSDKString(str) (str.data == NULL)
124 #if defined(__cplusplus)
128 return ((str.data == NULL) || (str.length == 0));
131 #define IsEmptySDKString(str) ((str.data == NULL) || (str.length == 0))
132 #endif // #if defined(__cplusplus)
166 typedef SDKUInt16 SDKAnyType16;
167 typedef SDKUInt32 SDKAnyType;
191 sdk::ISDKComponent* obj;
194 SDKUInt64 time_packed;
202 SDKUInt64 millisec: 10;
209 #define ANY_UNION(X, Y) ((X)->Y)
210 #define ANY_TYPE(X) ((X)->any_type)
211 #define ANY_EMPTY(X) (ANY_TYPE(X) == kSDKAnyType_Empty)
212 #define ANY_IS_EMPTY(X) (ANY_TYPE(X) == kSDKAnyType_Empty)
213 #define ANY_IS_NULL(X) (ANY_TYPE(X) == kSDKAnyType_Null)
214 #define ANY_IS_STR(X) ((ANY_TYPE(X) == kSDKAnyType_SDKStringPtr) && \
216 #define ANY_IS_ARRAY(X) ((ANY_TYPE(X) == kSDKAnyType_SDKArrayPtr) && \
218 #define ANY_IS_COMPONENT(X) ((ANY_TYPE(X) == kSDKAnyType_SDKComponentPtr) && \
220 #define ANY_IS_TIME(X) ((ANY_TYPE(X) == kSDKAnyType_SDKTime) || \
221 (ANY_TYPE(X) == kSDKAnyType_Int64))
222 #define ANY_IS_TIME_DELTA(X) ((ANY_TYPE(X) == kSDKAnyType_SDKTimeDelta) || \
223 (ANY_TYPE(X) == kSDKAnyType_Int64))
224 #define ANY_IS_TIME_PACKED(X) (ANY_TYPE(X) == kSDKAnyType_SDKTimePacked)
226 #define ANY_IS_SCALAR(X) ((ANY_TYPE(X) == kSDKAnyType_Uint8) || \
227 (ANY_TYPE(X) == kSDKAnyType_Uint16) || \
228 (ANY_TYPE(X) == kSDKAnyType_Uint32) || \
229 (ANY_TYPE(X) == kSDKAnyType_Uint64) || \
230 (ANY_TYPE(X) == kSDKAnyType_Int8) || \
231 (ANY_TYPE(X) == kSDKAnyType_Int16) || \
232 (ANY_TYPE(X) == kSDKAnyType_Int32) || \
233 (ANY_TYPE(X) == kSDKAnyType_Int64) || \
234 (ANY_TYPE(X) == kSDKAnyType_Float) || \
235 (ANY_TYPE(X) == kSDKAnyType_Double) || \
236 (ANY_TYPE(X) == kSDKAnyType_Bool) || \
237 (ANY_TYPE(X) == kSDKAnyType_SDKTime) || \
238 (ANY_TYPE(X) == kSDKAnyType_SDKTimeDelta))
240 #define ANY_UI8(X) ANY_UNION(X, ui8)
241 #define ANY_UI16(X) ANY_UNION(X, ui16)
242 #define ANY_UI32(X) ANY_UNION(X, ui32)
243 #define ANY_UI64(X) ANY_UNION(X, ui64)
244 #define ANY_I8(X) ANY_UNION(X, i8)
245 #define ANY_I16(X) ANY_UNION(X, i16)
246 #define ANY_I32(X) ANY_UNION(X, i32)
247 #define ANY_I64(X) ANY_UNION(X, i64)
248 #define ANY_FLOAT(X) ANY_UNION(X, flt)
249 #define ANY_DOUBLE(X) ANY_UNION(X, dbl)
250 #define ANY_BOOL(X) ANY_UNION(X, bl)
251 #define ANY_bool(X) (ANY_UNION(X, bl) ? true : false)
252 #define ANY_DATE(X) ANY_UNION(X, time)
253 #define ANY_TIME(X) ANY_UNION(X, time)
254 #define ANY_TIME_DELTA(X) ANY_UNION(X, dtime)
255 #define ANY_STR(X) ANY_UNION(X, str)
256 #define ANY_ANY(X) ANY_UNION(X, any)
257 #define ANY_ARRAY(X) ANY_UNION(X, arr)
258 #define ANY_COMPONENT(X) ANY_UNION(X, obj)
259 #define ANY_PTR(X) ANY_UNION(X, vd)
260 #define ANY_TIME_PACKED(X) ANY_UNION(X, time_packed)
261 #define ANY_TIME_PACKED_YEAR(X) ANY_UNION(X, year)
262 #define ANY_TIME_PACKED_MONTH(X) ANY_UNION(X, month)
263 #define ANY_TIME_PACKED_MDAY(X) ANY_UNION(X, mday)
264 #define ANY_TIME_PACKED_HOUR(X) ANY_UNION(X, hour)
265 #define ANY_TIME_PACKED_MINUTE(X) ANY_UNION(X, minute)
266 #define ANY_TIME_PACKED_SECOND(X) ANY_UNION(X, second)
267 #define ANY_TIME_PACKED_MILLISEC(X) ANY_UNION(X, millisec)
268 #define ANY_IS_NUMERIC(X) \
269 (ANY_TYPE(X) >= kSDKAnyType_Uint8 && ANY_TYPE(X) <= kSDKAnyType_Bool)
271 #ifndef SDKAnyTimePackedDateToSDKTimeStruct
272 #define SDKAnyTimePackedDateToSDKTimeStruct(T,V) \
273 T.year = ANY_TIME_PACKED_YEAR(&V); \
274 T.month = ANY_TIME_PACKED_MONTH(&V); \
275 T.mday = ANY_TIME_PACKED_MDAY(&V);
276 #endif // SDKAnyTimePackedDateToSDKTimeStruct
277 #ifndef SDKAnyTimePackedTimeToSDKTimeStruct
278 #define SDKAnyTimePackedTimeToSDKTimeStruct(T,V) \
279 T.hour = ANY_TIME_PACKED_HOUR(&V); \
280 T.minute = ANY_TIME_PACKED_MINUTE(&V); \
281 T.second = ANY_TIME_PACKED_SECOND(&V); \
282 T.millisec = ANY_TIME_PACKED_MILLISEC(&V);
283 #endif // SDKAnyTimePackedTimeToSDKTimeStruct
284 #ifndef SDKAnyTimePackedToSDKTimeStruct
285 #define SDKAnyTimePackedToSDKTimeStruct(T,V) \
286 SDKAnyTimePackedDateToSDKTimeStruct(T,V) \
287 SDKAnyTimePackedTimeToSDKTimeStruct(T,V)
288 #endif // SDKAnyTimePackedToSDKTimeStruct
290 #ifndef SDKAnyTimePackedDateFromSDKTimeStruct
291 #define SDKAnyTimePackedDateFromSDKTimeStruct(V,T) \
292 ANY_TIME_PACKED_YEAR(&V) = T.year; \
293 ANY_TIME_PACKED_MONTH(&V) = T.month; \
294 ANY_TIME_PACKED_MDAY(&V) = T.mday;
295 #endif // SDKAnyTimePackedDateFromSDKTimeStruct
296 #ifndef SDKAnyTimePackedTimeFromSDKTimeStruct
297 #define SDKAnyTimePackedTimeFromSDKTimeStruct(V,T) \
298 ANY_TIME_PACKED_HOUR(&V) = T.hour; \
299 ANY_TIME_PACKED_MINUTE(&V) = T.minute; \
300 ANY_TIME_PACKED_SECOND(&V) = T.second; \
301 ANY_TIME_PACKED_MILLISEC(&V) = T.millisec;
302 #endif // SDKAnyTimePackedTimeFromSDKTimeStruct
303 #ifndef SDKAnyTimePackedFromSDKTimeStruct
304 #define SDKAnyTimePackedFromSDKTimeStruct(V,T) \
305 SDKAnyTimePackedDateFromSDKTimeStruct(V,T) \
306 SDKAnyTimePackedTimeFromSDKTimeStruct(V,T)
307 #endif // SDKAnyTimePackedFromSDKTimeStruct
312 #ifndef kSDK_PACKED_TIME_INVALID_YEAR
313 #define kSDK_PACKED_TIME_INVALID_YEAR 0
314 #endif // kSDK_PACKED_TIME_INVALID_YEAR
315 #ifndef kSDK_PACKED_TIME_INVALID_MONTH
316 #define kSDK_PACKED_TIME_INVALID_MONTH 0
317 #endif // kSDK_PACKED_TIME_INVALID_MONTH
318 #ifndef kSDK_PACKED_TIME_INVALID_MDAY
319 #define kSDK_PACKED_TIME_INVALID_MDAY 0
320 #endif // kSDK_PACKED_TIME_INVALID_MDAY
321 #ifndef kSDK_PACKED_TIME_INVALID_HOUR
322 #define kSDK_PACKED_TIME_INVALID_HOUR (kSDKTimeStruct_Hour_Max + 1)
323 #endif // kSDK_PACKED_TIME_INVALID_HOUR
324 #ifndef kSDK_PACKED_TIME_INVALID_MINUTE
325 #define kSDK_PACKED_TIME_INVALID_MINUTE (kSDKTimeStruct_Minute_Max + 1)
326 #endif // kSDK_PACKED_TIME_INVALID_MINUTE
327 #ifndef kSDK_PACKED_TIME_INVALID_SECOND
328 #define kSDK_PACKED_TIME_INVALID_SECOND (kSDKTimeStruct_Second_Max + 1)
329 #endif // kSDK_PACKED_TIME_INVALID_SECOND
330 #ifndef kSDK_PACKED_TIME_INVALID_MILLISEC
331 #define kSDK_PACKED_TIME_INVALID_MILLISEC (kSDKTimeStruct_Millisec_Max + 1)
332 #endif // kSDK_PACKED_TIME_INVALID_MILLISEC
334 #ifndef SDK_TIME_IS_VALID
335 #define SDK_TIME_IS_VALID(T) (T != kInvalidSDKTime)
336 #endif // SDK_TIME_IS_VALID
337 #ifndef SDK_TIME_IS_INVALID
338 #define SDK_TIME_IS_INVALID(T) !SDK_TIME_IS_VALID(T)
339 #endif // SDK_TIME_IS_INVALID
340 #ifndef SDK_TIME_IS_VALID_YEAR
341 #define SDK_TIME_IS_VALID_YEAR(Y) (Y > 0)
342 #endif // SDK_TIME_IS_VALID_YEAR
343 #define SDK_TIME_IS_INVALID_YEAR(Y) !SDK_TIME_IS_VALID_YEAR(Y)
344 #ifndef SDK_TIME_IS_VALID_MONTH
345 #define SDK_TIME_IS_VALID_MONTH(M) ((M > 0) && (M <= 12))
346 #endif // SDK_TIME_IS_VALID_MONTH
347 #define SDK_TIME_IS_INVALID_MONTH(M) !SDK_TIME_IS_VALID_MONTH(M)
348 #ifndef SDK_TIME_IS_VALID_MDAY
349 #define SDK_TIME_IS_VALID_MDAY(D) ((D > 0) && (D <= 31))
350 #endif // SDK_TIME_IS_VALID_MDAY
351 #define SDK_TIME_IS_INVALID_MDAY(D) !SDK_TIME_IS_VALID_MDAY(D)
352 #ifndef SDK_TIME_IS_VALID_WDAY
353 #define SDK_TIME_IS_VALID_WDAY(D) ((D > 0) && (D <= 7))
354 #endif // SDK_TIME_IS_VALID_WDAY
355 #define SDK_TIME_IS_INVALID_WDAY(D) !SDK_TIME_IS_VALID_WDAY(D)
356 #ifndef ANY_TIME_IS_VALID_DATE
357 #define ANY_TIME_IS_VALID_DATE(D) ( \
358 SDK_TIME_IS_VALID_YEAR(ANY_TIME_PACKED_YEAR(D)) && \
359 SDK_TIME_IS_VALID_MONTH(ANY_TIME_PACKED_MONTH(D)) && \
360 SDK_TIME_IS_VALID_MDAY(ANY_TIME_PACKED_MDAY(D)))
361 #endif // ANY_TIME_IS_VALID_DATE
362 #define ANY_TIME_IS_INVALID_DATE(D) !ANY_TIME_IS_VALID_DATE(D)
364 #ifndef SDK_TIME_IS_VALID_HOUR
365 #define SDK_TIME_IS_VALID_HOUR(H) (H < 24)
366 #endif // SDK_TIME_IS_VALID_HOUR
367 #define SDK_TIME_IS_INVALID_HOUR(H) !SDK_TIME_IS_VALID_HOUR(H)
368 #ifndef SDK_TIME_IS_VALID_MINUTE
369 #define SDK_TIME_IS_VALID_MINUTE(M) (M < 60)
370 #endif // SDK_TIME_IS_VALID_MINUTE
371 #define SDK_TIME_IS_INVALID_MINUTE(M) !SDK_TIME_IS_VALID_MINUTE(M)
372 #ifndef SDK_TIME_IS_VALID_SECOND
373 #define SDK_TIME_IS_VALID_SECOND(S) (S < 60)
374 #endif // SDK_TIME_IS_VALID_SECOND
375 #define SDK_TIME_IS_INVALID_SECOND(S) !SDK_TIME_IS_VALID_SECOND(S)
376 #ifndef SDK_TIME_IS_VALID_MILLISECOND
377 #define SDK_TIME_IS_VALID_MILLISECOND(S) (S < 1000)
378 #endif // SDK_TIME_IS_VALID_MILLISECOND
379 #define SDK_TIME_IS_INVALID_MILLISECOND(S) !SDK_TIME_IS_VALID_MILLISECOND(S)
380 #ifndef ANY_TIME_IS_VALID_TIME
381 #define ANY_TIME_IS_VALID_TIME(D) ( \
382 SDK_TIME_IS_VALID_HOUR(ANY_TIME_PACKED_HOUR(D)) && \
383 SDK_TIME_IS_VALID_MINUTE(ANY_TIME_PACKED_MINUTE(D)) && \
384 SDK_TIME_IS_VALID_SECOND(ANY_TIME_PACKED_SECOND(D)))
385 #endif // SDK_TIME_IS_VALID_TIME
386 #define ANY_TIME_IS_INVALID_TIME(D) !ANY_TIME_IS_VALID_TIME(D)
395 SDKUInt64 num_of_elements;
397 SDKUInt32 element_size;
406 # define membsize(s, m) (sizeof((s *)0)->m)
409 template <
typename Int,
typename Rnd>
410 static inline Int RoundUp(Int N, Rnd R) {
411 return Int(N + R - 1) & ~Int(R - 1);
414 template <
typename Int,
typename Rnd>
415 static inline Int RoundToNearest(Rnd V) {
416 static double D[2] = {-0.5, +0.5};
417 return static_cast<Int
>(V + D[V >= 0]);
420 template <
typename T>
421 inline T RoundToNearest(T r,
double precision) {
422 double res = (r >= 0.0) ? floor(r * precision + 0.5) : ceil(r * precision - 0.5);
423 res = res / precision;
424 return static_cast<T
>(res);
430 #define DENY_COPY_AND_ASSIGN(T) \
432 void operator=(const T&)
440 #define DENY_IMPLICIT_CONSTRUCTORS(T) \
442 DENY_COPY_AND_ASSIGN(T)
445 template<
class _InIt,
class _OutIt,
class _Fn1>
446 inline _OutIt unsafe_transform(_InIt _First, _InIt _Last,
447 _OutIt _Dest, _Fn1 _Func) {
448 for (; _First != _Last; ++_First, ++_Dest)
449 *_Dest = _Func(*_First);
454 template<
class _B
idIt,
class _OutIt,
class _Fn1>
455 inline _OutIt unsafe_reverse_copy(
456 _BidIt _First, _BidIt _Last, _OutIt _Dest) {
457 for (; _First != _Last; ++_Dest)
462 template<
class _B
idIt,
class _OutIt,
class _Fn1>
463 inline _OutIt unsafe_reverse_copy_pred(
464 _BidIt _First, _BidIt _Last, _OutIt _Dest, _Fn1 _Func) {
465 for (; _First != _Last; ++_Dest)
466 *_Dest = _Func(*--_Last);
479 inline void ignore_result_t(
const T&) {
482 #include "sdk_poppack.h"
483 #if defined(SDK_CC_CLANG) || defined(_PUSHPOP_SUPPORTED)
484 # pragma GCC diagnostic pop
487 #endif // SDK_BASE_BASE_TYPES_H_
static const SDKInt64 SDK_MAX_INT64
Max limit of 64-bit signed integer.
Definition: platform.h:188
static const SDKUInt16 kSDKTimeStruct_Millisec_Min
Minimum millisecond value.
Definition: base_types.h:102
static const SDKUInt16 kSDKTimeStruct_Yday_Max
Maximum day of year value.
Definition: base_types.h:91
static const SDKTime kInvalidSDKTime
SDKTime invalid value.
Definition: base_types.h:64
@ kSDKAnyType_Uint16
unsigned integer 16 bit value
Definition: base_types.h:141
@ kSDKAnyType_Bool
boolean value
Definition: base_types.h:152
@ kSDKAnyType_3DGeo
3D Geo coordinate - Double
Definition: base_types.h:161
#define IsEmptySDKString(str)
Return true if a string is an empty string.
Definition: base_types.h:131
SDK_PACK(struct SDKTimeStruct { SDKInt16 year;SDKUInt8 month;SDKUInt16 yday;SDKUInt8 mday;SDKUInt8 wday;SDKUInt8 hour;SDKUInt8 minute;SDKUInt8 second;SDKUInt16 millisec;})
Represents the exploded SDKTime.
@ kSDKAnyType_Uint64
unsigned integer 64 bit value
Definition: base_types.h:143
@ kSDKAnyType_Uint8
unsigned integer 8 bit value
Definition: base_types.h:140
@ kSDKAnyType_GeoInt
GeoInt.
Definition: base_types.h:147
@ kSDKAnyType_Int32
signed integer 32 bit value
Definition: base_types.h:146
static const SDKUInt8 kSDKTimeStruct_Mday_Min
Minimum day of month value.
Definition: base_types.h:92
@ kSDKAnyType_3DGeoInt
3D Geo coordinate - Int32
Definition: base_types.h:160
#define IsNullSDKString(str)
Returns true is a string is a null string.
Definition: base_types.h:122
@ kSDKAnyType_Float
single precision real value
Definition: base_types.h:149
static const SDKUInt16 kSDKTimeStruct_Year_Max
Maximum year value.
Definition: base_types.h:87
@ kSDKAnyType_Null
null value or no value
Definition: base_types.h:139
static const SDKUInt8 kSDKTimeStruct_Month_Min
Minimum month value.
Definition: base_types.h:88
@ kSDKAnyType_Empty
variable is empty
Definition: base_types.h:138
static const SDKUInt8 kSDKTimeStruct_Minute_Min
Minimum minute value.
Definition: base_types.h:98
static const SDKUInt8 kSDKTimeStruct_Month_Max
Maximum month value.
Definition: base_types.h:89
SDKUInt32 SDKCRC32
CRC32 value.
Definition: base_types.h:403
static const SDKUInt8 kSDKTimeStruct_Second_Min
Minimum second value.
Definition: base_types.h:100
static const SDKUInt16 kUnixEpoch
Unix epoch definition.
Definition: base_types.h:66
SDKInt64 SDKTimeDelta
Time delta in Milliseconds.
Definition: base_types.h:63
static const SDKUInt8 kSDKTimeStruct_Mday_Max
Maximum day of month value.
Definition: base_types.h:93
@ kSDKAnyType_Uint32
unsigned integer 32 bit value
Definition: base_types.h:142
@ kSDKAnyType_UserPtr
user defined type of any size
Definition: base_types.h:163
static const SDKUInt8 kSDKTimeStruct_Wday_Min
Minimum day of week value.
Definition: base_types.h:94
static const SDKUInt16 kSDKTimeStruct_Millisec_Max
Maximum millisecond value.
Definition: base_types.h:103
static const SDKUInt8 kSDKTimeStruct_Wday_Max
Maximum day of week value.
Definition: base_types.h:95
@ kSDKAnyType_Int8
signed integer 8 bit value
Definition: base_types.h:144
@ kSDKAnyType_SDKArrayPtr
pointer to SDKArray
Definition: base_types.h:156
SDKUInt16 SDKArrayElementType
Basic type for one dimensional array of any values, use SDKArray* functions from base library.
Definition: base_types.h:393
@ kSDKAnyType_SDKTimeDelta
Time delta.
Definition: base_types.h:159
@ kSDKAnyType_SDKComponentPtr
pointer to ISDKComponent
Definition: base_types.h:157
Base interface for all SDK interfaces.
Definition: sdk_component_interface.h:41
static const SDKTimeDelta kInvalidSDKTimeDelta
SDKTimeDelta invalid value.
Definition: base_types.h:65
@ kSDKAnyType_SDKAnyPtr
pointer to SDKAny
Definition: base_types.h:155
static const SDKUInt8 kSDKTimeStruct_Minute_Max
Maximum minute value.
Definition: base_types.h:99
@ kSDKAnyType_Double
double precision real value
Definition: base_types.h:150
@ kSDKAnyType_Int64
signed integer 64 bit value
Definition: base_types.h:148
@ kSDKAnyType_3DFloat
3D Geo coordinate - Float
Definition: base_types.h:162
@ kSDKAnyType_SDKTimePacked
SDKTime packed structure.
Definition: base_types.h:158
static const SDKUInt16 kMillisecondsInSecond
Milliseconds in second.
Definition: base_types.h:67
@ kSDKAnyType_Int16
signed integer 16 bit value
Definition: base_types.h:145
static const SDKUInt8 kSDKTimeStruct_Hour_Min
Minimum hour value.
Definition: base_types.h:96
SDK_END_NAMESPACE typedef SDKInt64 SDKTime
Milliseconds from Unix epoch.
Definition: base_types.h:56
@ kSDKAnyType_SDKStringPtr
pointer to SDKString
Definition: base_types.h:154
static const SDKUInt8 kSDKTimeStruct_Hour_Max
Maximum hour value.
Definition: base_types.h:97
static const SDKUInt16 kSDKTimeStruct_Yday_Min
Minimum day of year value.
Definition: base_types.h:90
@ kSDKAnyType_Geo
Geo coordinate.
Definition: base_types.h:151
SDKAnyTypeEnum
Enumeration of supported types of data.
Definition: base_types.h:137
@ kSDKAnyType_SDKTime
SDKTime.
Definition: base_types.h:153
static const SDKUInt8 kSDKTimeStruct_Second_Max
Maximum second value.
Definition: base_types.h:101
static const SDKUInt16 kSDKTimeStruct_Year_Min
Minimum year value.
Definition: base_types.h:86