LibreOffice
LibreOffice 4.4 SDK C/C++ API Reference
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
sal
types.h
Go to the documentation of this file.
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
* This file is part of the LibreOffice project.
4
*
5
* This Source Code Form is subject to the terms of the Mozilla Public
6
* License, v. 2.0. If a copy of the MPL was not distributed with this
7
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
*
9
* This file incorporates work covered by the following license notice:
10
*
11
* Licensed to the Apache Software Foundation (ASF) under one or more
12
* contributor license agreements. See the NOTICE file distributed
13
* with this work for additional information regarding copyright
14
* ownership. The ASF licenses this file to you under the Apache
15
* License, Version 2.0 (the "License"); you may not use this file
16
* except in compliance with the License. You may obtain a copy of
17
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
*/
19
20
#ifndef INCLUDED_SAL_TYPES_H
21
#define INCLUDED_SAL_TYPES_H
22
23
#include <
sal/config.h
>
24
25
#include <stddef.h>
26
27
#include <
sal/macros.h
>
28
#include <
sal/typesizes.h
>
29
30
#ifdef __cplusplus
31
extern
"C"
{
32
#endif
33
34
#if defined ( __MINGW32__ ) && !defined ( __USE_MINGW_ANSI_STDIO )
35
/* Define to use the C99 formatting string for coherence reasons.
36
* In mingw-w64 some functions are ported to the ms formatting string
37
* some are not yet. This is the only way to make the formatting
38
* strings work all the time
39
*/
40
#define __USE_MINGW_ANSI_STDIO 1
41
#endif
42
43
/********************************************************************************/
44
/* Data types
45
*/
46
47
/* Boolean */
48
typedef
unsigned
char
sal_Bool
;
49
# define sal_False ((sal_Bool)0)
50
# define sal_True ((sal_Bool)1)
51
52
/* char is assumed to always be 1 byte long */
53
typedef
signed
char
sal_Int8
;
54
typedef
unsigned
char
sal_uInt8
;
55
56
#if SAL_TYPES_SIZEOFSHORT == 2
57
typedef
signed
short
sal_Int16;
58
typedef
unsigned
short
sal_uInt16;
59
#else
60
#error "Could not find 16-bit type, add support for your architecture"
61
#endif
62
63
#if SAL_TYPES_SIZEOFLONG == 4
64
typedef
signed
long
sal_Int32;
65
typedef
unsigned
long
sal_uInt32;
66
#define SAL_PRIdINT32 "ld"
67
#define SAL_PRIuUINT32 "lu"
68
#define SAL_PRIxUINT32 "lx"
69
#define SAL_PRIXUINT32 "lX"
70
#elif SAL_TYPES_SIZEOFINT == 4
71
typedef
signed
int
sal_Int32;
72
typedef
unsigned
int
sal_uInt32;
73
#define SAL_PRIdINT32 "d"
74
#define SAL_PRIuUINT32 "u"
75
#define SAL_PRIxUINT32 "x"
76
#define SAL_PRIXUINT32 "X"
77
#else
78
#error "Could not find 32-bit type, add support for your architecture"
79
#endif
80
81
#ifdef _MSC_VER
82
typedef
__int64 sal_Int64;
83
typedef
unsigned
__int64 sal_uInt64;
84
85
/* The following are macros that will add the 64 bit constant suffix. */
86
#define SAL_CONST_INT64(x) x##i64
87
#define SAL_CONST_UINT64(x) x##ui64
88
89
#define SAL_PRIdINT64 "I64d"
90
#define SAL_PRIuUINT64 "I64u"
91
#define SAL_PRIxUINT64 "I64x"
92
#define SAL_PRIXUINT64 "I64X"
93
#elif defined (__GNUC__)
94
#if SAL_TYPES_SIZEOFLONG == 8
95
typedef
signed
long
int
sal_Int64;
96
typedef
unsigned
long
int
sal_uInt64;
97
98
99
/* The following are macros that will add the 64 bit constant suffix. */
100
#define SAL_CONST_INT64(x) x##l
101
#define SAL_CONST_UINT64(x) x##ul
102
103
#define SAL_PRIdINT64 "ld"
104
#define SAL_PRIuUINT64 "lu"
105
#define SAL_PRIxUINT64 "lx"
106
#define SAL_PRIXUINT64 "lX"
107
#elif SAL_TYPES_SIZEOFLONGLONG == 8
108
typedef
signed
long
long
sal_Int64;
109
typedef
unsigned
long
long
sal_uInt64;
110
111
/* The following are macros that will add the 64 bit constant suffix. */
112
#define SAL_CONST_INT64(x) x##ll
113
#define SAL_CONST_UINT64(x) x##ull
114
115
#define SAL_PRIdINT64 "lld"
116
#define SAL_PRIuUINT64 "llu"
117
#define SAL_PRIxUINT64 "llx"
118
#define SAL_PRIXUINT64 "llX"
119
#else
120
#error "Could not find 64-bit type, add support for your architecture"
121
#endif
122
#else
123
#error "Please define the 64-bit types for your architecture/compiler in sal/inc/sal/types.h"
124
#endif
125
130
typedef
char
sal_Char
;
131
136
typedef
signed
char
sal_sChar
;
137
142
typedef
unsigned
char
sal_uChar
;
143
144
#if ( defined(SAL_W32) && !defined(__MINGW32__) )
145
// http://msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.80%29.aspx
146
// "By default wchar_t is a typedef for unsigned short."
147
// But MinGW has a native wchar_t, and on many places, we cannot deal with
148
// that, so sal_Unicode has to be explicitly typedef'd as sal_uInt16 there.
149
typedef
wchar_t
sal_Unicode
;
150
#else
151
#define SAL_UNICODE_NOTEQUAL_WCHAR_T
152
typedef
sal_uInt16
sal_Unicode
;
153
#endif
154
155
typedef
void
*
sal_Handle
;
156
157
/* sal_Size should currently be the native width of the platform */
158
#if SAL_TYPES_SIZEOFPOINTER == 4
159
typedef
sal_uInt32 sal_Size;
160
typedef
sal_Int32 sal_sSize;
161
#elif SAL_TYPES_SIZEOFPOINTER == 8
162
typedef
sal_uInt64 sal_Size;
163
typedef
sal_Int64 sal_sSize;
164
#else
165
#error "Please make sure SAL_TYPES_SIZEOFPOINTER is defined for your architecture/compiler"
166
#endif
167
168
/* sal_PtrDiff holds the result of a pointer subtraction */
169
#if SAL_TYPES_SIZEOFPOINTER == 4
170
typedef
sal_Int32 sal_PtrDiff;
171
#elif SAL_TYPES_SIZEOFPOINTER == 8
172
typedef
sal_Int64 sal_PtrDiff;
173
#else
174
#error "Please make sure SAL_TYPES_SIZEOFPOINTER is defined for your architecture/compiler"
175
#endif
176
177
/* printf-style conversion specification length modifiers for size_t and
178
ptrdiff_t (most platforms support C99, MSC has its own extension) */
179
#if defined(_MSC_VER)
180
#define SAL_PRI_SIZET "I"
181
#define SAL_PRI_PTRDIFFT "I"
182
#else
183
#define SAL_PRI_SIZET "z"
184
#define SAL_PRI_PTRDIFFT "t"
185
#endif
186
187
/* sal_IntPtr, sal_uIntPtr are integer types designed to hold pointers so that any valid
188
* pointer to void can be converted to this type and back to a pointer to void and the
189
* result will compare to the original pointer */
190
#if SAL_TYPES_SIZEOFPOINTER == 4
191
typedef
sal_Int32 sal_IntPtr;
192
typedef
sal_uInt32 sal_uIntPtr;
193
#define SAL_PRIdINTPTR SAL_PRIdINT32
194
#define SAL_PRIuUINTPTR SAL_PRIuUINT32
195
#define SAL_PRIxUINTPTR SAL_PRIxUINT32
196
#define SAL_PRIXUINTPTR SAL_PRIXUINT32
197
#elif SAL_TYPES_SIZEOFPOINTER == 8
198
typedef
sal_Int64 sal_IntPtr;
199
typedef
sal_uInt64 sal_uIntPtr;
200
#define SAL_PRIdINTPTR SAL_PRIdINT64
201
#define SAL_PRIuUINTPTR SAL_PRIuUINT64
202
#define SAL_PRIxUINTPTR SAL_PRIxUINT64
203
#define SAL_PRIXUINTPTR SAL_PRIXUINT64
204
#else
205
#error "Please make sure SAL_TYPES_SIZEOFPOINTER is defined for your architecture/compiler"
206
#endif
207
208
/********************************************************************************/
209
/* Useful defines
210
*/
211
212
/* The following SAL_MIN_INTn defines codify the assumption that the signed
213
* sal_Int types use two's complement representation. Defining them as
214
* "-0x7F... - 1" instead of as "-0x80..." prevents warnings about applying the
215
* unary minus operator to unsigned quantities.
216
*/
217
#define SAL_MIN_INT8 ((sal_Int8) (-0x7F - 1))
218
#define SAL_MAX_INT8 ((sal_Int8) 0x7F)
219
#define SAL_MAX_UINT8 ((sal_uInt8) 0xFF)
220
#define SAL_MIN_INT16 ((sal_Int16) (-0x7FFF - 1))
221
#define SAL_MAX_INT16 ((sal_Int16) 0x7FFF)
222
#define SAL_MAX_UINT16 ((sal_uInt16) 0xFFFF)
223
#define SAL_MIN_INT32 ((sal_Int32) (-0x7FFFFFFF - 1))
224
#define SAL_MAX_INT32 ((sal_Int32) 0x7FFFFFFF)
225
#define SAL_MAX_UINT32 ((sal_uInt32) 0xFFFFFFFF)
226
#define SAL_MIN_INT64 ((sal_Int64) (SAL_CONST_INT64(-0x7FFFFFFFFFFFFFFF) - 1))
227
#define SAL_MAX_INT64 ((sal_Int64) SAL_CONST_INT64(0x7FFFFFFFFFFFFFFF))
228
#define SAL_MAX_UINT64 ((sal_uInt64) SAL_CONST_UINT64(0xFFFFFFFFFFFFFFFF))
229
230
#if SAL_TYPES_SIZEOFLONG == 4
231
#define SAL_MAX_SSIZE SAL_MAX_INT32
232
#define SAL_MAX_SIZE SAL_MAX_UINT32
233
#elif SAL_TYPES_SIZEOFLONG == 8
234
#define SAL_MAX_SSIZE SAL_MAX_INT64
235
#define SAL_MAX_SIZE SAL_MAX_UINT64
236
#endif
237
238
#if defined(SAL_W32) || defined(SAL_UNX)
239
# define SAL_MAX_ENUM 0x7fffffff
240
#endif
241
242
#if defined(_MSC_VER) || defined(__MINGW32__)
243
# define SAL_DLLPUBLIC_EXPORT __declspec(dllexport)
244
# define SAL_JNI_EXPORT __declspec(dllexport)
245
#if defined(_MSC_VER)
246
# define SAL_DLLPUBLIC_IMPORT __declspec(dllimport)
247
#else
248
# define SAL_DLLPUBLIC_IMPORT
249
#endif // defined(_MSC_VER)
250
# define SAL_DLLPRIVATE
251
# define SAL_DLLPUBLIC_TEMPLATE
252
# define SAL_CALL __cdecl
253
# define SAL_CALL_ELLIPSE __cdecl
254
#elif defined SAL_UNX
255
# if defined(__GNUC__) && defined(HAVE_GCC_VISIBILITY_FEATURE)
256
# if defined(DISABLE_DYNLOADING)
257
# define SAL_DLLPUBLIC_EXPORT __attribute__ ((visibility("hidden")))
258
# define SAL_JNI_EXPORT __attribute__ ((visibility("default")))
259
# define SAL_DLLPUBLIC_IMPORT __attribute__ ((visibility("hidden")))
260
# define SAL_DLLPRIVATE __attribute__ ((visibility("hidden")))
261
# define SAL_DLLPUBLIC_TEMPLATE __attribute__ ((visibility("hidden")))
262
# else
263
# define SAL_DLLPUBLIC_EXPORT __attribute__ ((visibility("default")))
264
# define SAL_JNI_EXPORT __attribute__ ((visibility("default")))
265
# define SAL_DLLPUBLIC_IMPORT __attribute__ ((visibility("default")))
266
# define SAL_DLLPRIVATE __attribute__ ((visibility("hidden")))
267
# define SAL_DLLPUBLIC_TEMPLATE __attribute__ ((visibility("default")))
268
# endif
269
# else
270
# define SAL_DLLPUBLIC_EXPORT
271
# define SAL_JNI_EXPORT
272
# define SAL_DLLPUBLIC_IMPORT
273
# define SAL_DLLPRIVATE
274
# define SAL_DLLPUBLIC_TEMPLATE
275
# endif
276
# define SAL_CALL
277
# define SAL_CALL_ELLIPSE
278
#else
279
# error("unknown platform")
280
#endif
281
288
#if defined(__GNUC__) && ! defined(__MINGW32__)
289
# if defined(DISABLE_DYNLOADING)
290
# define SAL_EXCEPTION_DLLPUBLIC_EXPORT __attribute__((visibility("default")))
291
# else
292
# define SAL_EXCEPTION_DLLPUBLIC_EXPORT SAL_DLLPUBLIC_EXPORT
293
# endif
294
# define SAL_EXCEPTION_DLLPRIVATE SAL_DLLPRIVATE
295
#else
296
# define SAL_EXCEPTION_DLLPUBLIC_EXPORT
297
# define SAL_EXCEPTION_DLLPRIVATE
298
#endif
299
306
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
307
# define SAL_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
308
#else
309
# define SAL_WARN_UNUSED_RESULT
310
#endif
311
316
#ifdef _MSC_VER
317
# define SAL_NO_VTABLE __declspec(novtable)
318
#else
319
# define SAL_NO_VTABLE
320
#endif
321
322
#ifdef SAL_W32
323
# pragma pack(push, 8)
324
#endif
325
329
typedef
struct
_sal_Sequence
330
{
333
sal_Int32
nRefCount
;
336
sal_Int32
nElements
;
339
char
elements
[1];
340
}
sal_Sequence
;
341
342
#define SAL_SEQUENCE_HEADER_SIZE ((sal_Size) offsetof(sal_Sequence,elements))
343
344
#if defined( SAL_W32)
345
#pragma pack(pop)
346
#endif
347
348
#if defined __cplusplus
349
354
#define SAL_THROW_EXTERN_C() throw ()
355
356
#else
357
358
#define SAL_THROW_EXTERN_C()
359
360
#endif
361
362
#ifdef __cplusplus
363
}
364
#endif
/* __cplusplus */
365
366
#ifdef __cplusplus
367
368
enum
__sal_NoAcquire
369
{
372
SAL_NO_ACQUIRE
373
};
374
375
namespace
com {
namespace
sun {
namespace
star { } } }
376
381
namespace
css = ::com::sun::star;
382
391
#if HAVE_CXX11_DELETE
392
#define SAL_DELETED_FUNCTION = delete
393
#else
394
#define SAL_DELETED_FUNCTION
395
#endif
396
404
#if HAVE_CXX11_OVERRIDE
405
#define SAL_OVERRIDE override
406
#else
407
#define SAL_OVERRIDE
408
#endif
409
416
#if HAVE_CXX11_FINAL
417
#define SAL_FINAL final
418
#else
419
#define SAL_FINAL
420
#endif
421
422
#endif
/* __cplusplus */
423
424
#ifdef __cplusplus
425
426
namespace
sal {
427
439
template
<
typename
T1,
typename
T2 >
inline
T1
static_int_cast
(T2 n) {
440
return
static_cast<
T1
>
(n);
441
}
442
443
}
444
445
#else
/* __cplusplus */
446
459
#define SAL_INT_CAST(type, expr) ((type) (expr))
460
461
#endif
/* __cplusplus */
462
468
#if HAVE_GCC_DEPRECATED_MESSAGE
469
# define SAL_DEPRECATED(message) __attribute__((deprecated(message)))
470
#elif (__GNUC__)
471
# define SAL_DEPRECATED(message) __attribute__((deprecated))
472
#elif defined(_MSC_VER)
473
# define SAL_DEPRECATED(message) __declspec(deprecated(message))
474
#else
475
# define SAL_DEPRECATED(message)
476
#endif
477
487
#ifdef LIBO_INTERNAL_ONLY
488
# define SAL_DEPRECATED_INTERNAL(message)
489
#else
490
# define SAL_DEPRECATED_INTERNAL(message) SAL_DEPRECATED(message)
491
#endif
492
500
#if HAVE_GCC_PRAGMA_OPERATOR
501
#define SAL_WNODEPRECATED_DECLARATIONS_PUSH \
502
_Pragma(SAL_STRINGIFY_ARG(GCC diagnostic push)) \
503
_Pragma(SAL_STRINGIFY_ARG(GCC diagnostic ignored "-Wdeprecated-declarations"))
504
#define SAL_WNODEPRECATED_DECLARATIONS_POP \
505
_Pragma(SAL_STRINGIFY_ARG(GCC diagnostic pop))
506
#else
507
# define SAL_WNODEPRECATED_DECLARATIONS_PUSH
508
# define SAL_WNODEPRECATED_DECLARATIONS_POP
509
#endif
510
527
#ifdef _MSC_VER
528
#define SAL_WNOUNREACHABLE_CODE_PUSH \
529
__pragma(warning(push)) \
530
__pragma(warning(disable:4702)) \
531
__pragma(warning(disable:4722))
532
#define SAL_WNOUNREACHABLE_CODE_POP \
533
__pragma(warning(pop))
534
#else
535
/* Add definitions for GCC and Clang if needed */
536
#define SAL_WNOUNREACHABLE_CODE_PUSH
537
#define SAL_WNOUNREACHABLE_CODE_POP
538
#endif
539
563
#if defined __cplusplus
564
#if defined __GNUC__
565
#define SAL_UNUSED_PARAMETER __attribute__ ((unused))
566
#else
567
#define SAL_UNUSED_PARAMETER
568
#endif
569
#endif
570
583
#if HAVE_GCC_ATTRIBUTE_WARN_UNUSED
584
#define SAL_WARN_UNUSED __attribute__((warn_unused))
585
#elif defined __clang__
586
#define SAL_WARN_UNUSED __attribute__((annotate("lo_warn_unused")))
587
#else
588
#define SAL_WARN_UNUSED
589
#endif
590
591
#endif // INCLUDED_SAL_TYPES_H
592
593
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Generated on Thu Oct 1 2015 21:39:50 for LibreOffice by
1.8.4