Sun, 02 Nov 2025 18:04:35 +0100
difference shall not check already present items in the destination - fixes #753
| 
483
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
1 | /* | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
3 | * | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
4 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
5 | * | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
6 | * Redistribution and use in source and binary forms, with or without | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
7 | * modification, are permitted provided that the following conditions are met: | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
8 | * | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
9 | * 1. Redistributions of source code must retain the above copyright | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
10 | * notice, this list of conditions and the following disclaimer. | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
11 | * | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
12 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
13 | * notice, this list of conditions and the following disclaimer in the | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
14 | * documentation and/or other materials provided with the distribution. | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
15 | * | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
26 | * POSSIBILITY OF SUCH DAMAGE. | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
27 | */ | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
28 | |
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
29 | /** | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
30 | * @file common.h | 
| 
483
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
31 | * | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
32 | * @brief Common definitions and feature checks. | 
| 
483
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
33 | * | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
34 | * @author Mike Becker | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
35 | * @author Olaf Wintermann | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
36 | * @copyright 2-Clause BSD License | 
| 
485
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
37 | * | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
38 | * @mainpage UAP Common Extensions | 
| 
485
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
39 | * Library with common and useful functions, macros and data structures. | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
40 | * <p> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
41 | * Latest available source:<br> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
42 | * <a href="https://sourceforge.net/projects/ucx/files/">https://sourceforge.net/projects/ucx/files/</a> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
43 | * </p> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
44 | * | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
45 | * <p> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
46 | * Repositories:<br> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
47 | * <a href="https://sourceforge.net/p/ucx/code">https://sourceforge.net/p/ucx/code</a> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
48 | * - or - | 
| 
1227
 
0bf1c1fdf1e3
fix outdated link to develop.uap-core.de and link to latest dist
 
Mike Becker <universe@uap-core.de> 
parents: 
1196 
diff
changeset
 | 
49 | * <a href="https://uap-core.de/hg/ucx">https://uap-core.de/hg/ucx</a> | 
| 
485
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
50 | * </p> | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
51 | * | 
| 
1424
 
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
 
Mike Becker <universe@uap-core.de> 
parents: 
1364 
diff
changeset
 | 
52 | * <h2>LICENSE</h2> | 
| 
485
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
53 | * | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
54 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
55 | * | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
56 | * Redistribution and use in source and binary forms, with or without | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
57 | * modification, are permitted provided that the following conditions are met: | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
58 | * | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
59 | * 1. Redistributions of source code must retain the above copyright | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
60 | * notice, this list of conditions and the following disclaimer. | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
61 | * | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
62 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
63 | * notice, this list of conditions and the following disclaimer in the | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
64 | * documentation and/or other materials provided with the distribution. | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
65 | * | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
66 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
67 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
68 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
69 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
70 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
71 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
72 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
73 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
74 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
75 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
| 
 
6a86ad3d8c03
use same doxygen style in all files
 
Mike Becker <universe@uap-core.de> 
parents: 
484 
diff
changeset
 | 
76 | * POSSIBILITY OF SUCH DAMAGE. | 
| 
483
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
77 | */ | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
78 | |
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
79 | #ifndef UCX_COMMON_H | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
80 | #define UCX_COMMON_H | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
81 | |
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
82 | /** Major UCX version as integer constant. */ | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
83 | #define UCX_VERSION_MAJOR 3 | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
84 | |
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
85 | /** Minor UCX version as integer constant. */ | 
| 
759
 
475335643af4
increase version number to 3.1
 
Mike Becker <universe@uap-core.de> 
parents: 
682 
diff
changeset
 | 
86 | #define UCX_VERSION_MINOR 1 | 
| 
483
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
87 | |
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
88 | /** Version constant which ensures to increase monotonically. */ | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
89 | #define UCX_VERSION (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR) | 
| 
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
90 | |
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
91 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
92 | // Common includes | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
93 | // --------------------------------------------------------------------------- | 
| 
682
 
34120a385fc8
work around some MSC problems
 
Mike Becker <universe@uap-core.de> 
parents: 
674 
diff
changeset
 | 
94 | |
| 
484
 
9e6900b1cf9d
add common.h include to all other header files
 
Mike Becker <universe@uap-core.de> 
parents: 
483 
diff
changeset
 | 
95 | #include <stdlib.h> | 
| 
 
9e6900b1cf9d
add common.h include to all other header files
 
Mike Becker <universe@uap-core.de> 
parents: 
483 
diff
changeset
 | 
96 | #include <stddef.h> | 
| 
487
 
4bd19279778c
use c99 bool + add test for low level find
 
Mike Becker <universe@uap-core.de> 
parents: 
485 
diff
changeset
 | 
97 | #include <stdbool.h> | 
| 
650
 
77021e06b1a8
fix code not compiling under windows+mingw
 
Mike Becker <universe@uap-core.de> 
parents: 
628 
diff
changeset
 | 
98 | #include <stdint.h> | 
| 
1016
 
fe177d6dabb8
add sys/types.h to the common includes to fix a problem with ssize_t
 
Mike Becker <universe@uap-core.de> 
parents: 
988 
diff
changeset
 | 
99 | #include <sys/types.h> | 
| 
483
 
929016224c3c
add ported UCX buffer implementation
 
Mike Becker <universe@uap-core.de> 
parents:  
diff
changeset
 | 
100 | |
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
101 | // --------------------------------------------------------------------------- | 
| 
1018
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
102 | // Architecture Detection | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
103 | // --------------------------------------------------------------------------- | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
104 | |
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
105 | #ifndef INTPTR_MAX | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
106 | #error Missing INTPTR_MAX definition | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
107 | #endif | 
| 
1018
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
108 | #if INTPTR_MAX == INT64_MAX | 
| 
1034
 
424b5b74a68f
add missing documentation of CX_WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1018 
diff
changeset
 | 
109 | /** | 
| 
 
424b5b74a68f
add missing documentation of CX_WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1018 
diff
changeset
 | 
110 | * The address width in bits on this platform. | 
| 
 
424b5b74a68f
add missing documentation of CX_WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1018 
diff
changeset
 | 
111 | */ | 
| 
1018
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
112 | #define CX_WORDSIZE 64 | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
113 | #elif INTPTR_MAX == INT32_MAX | 
| 
1034
 
424b5b74a68f
add missing documentation of CX_WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1018 
diff
changeset
 | 
114 | /** | 
| 
 
424b5b74a68f
add missing documentation of CX_WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1018 
diff
changeset
 | 
115 | * The address width in bits on this platform. | 
| 
 
424b5b74a68f
add missing documentation of CX_WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1018 
diff
changeset
 | 
116 | */ | 
| 
1018
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
117 | #define CX_WORDSIZE 32 | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
118 | #else | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
119 | #error Unknown pointer size or missing size macros! | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
120 | #endif | 
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
121 | |
| 
 
c773da859bad
fix compilation for compilers which don't set __WORDSIZE
 
Mike Becker <universe@uap-core.de> 
parents: 
1016 
diff
changeset
 | 
122 | // --------------------------------------------------------------------------- | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
123 | // Attribute definitions | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
124 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
125 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
126 | #ifndef __GNUC__ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
127 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
128 | * Removes GNU C attributes where they are not supported. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
129 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
130 | #define __attribute__(x) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
131 | #endif | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
132 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
133 | /** | 
| 
1364
 
556e4e7608b1
fix that the fallthrough attributes were not abstracted by the cx_attr macros
 
Mike Becker <universe@uap-core.de> 
parents: 
1301 
diff
changeset
 | 
134 | * Inform the compiler that falling through a switch case is intentional. | 
| 
 
556e4e7608b1
fix that the fallthrough attributes were not abstracted by the cx_attr macros
 
Mike Becker <universe@uap-core.de> 
parents: 
1301 
diff
changeset
 | 
135 | */ | 
| 
 
556e4e7608b1
fix that the fallthrough attributes were not abstracted by the cx_attr macros
 
Mike Becker <universe@uap-core.de> 
parents: 
1301 
diff
changeset
 | 
136 | #define cx_attr_fallthrough __attribute__((__fallthrough__)) | 
| 
 
556e4e7608b1
fix that the fallthrough attributes were not abstracted by the cx_attr macros
 
Mike Becker <universe@uap-core.de> 
parents: 
1301 
diff
changeset
 | 
137 | |
| 
 
556e4e7608b1
fix that the fallthrough attributes were not abstracted by the cx_attr macros
 
Mike Becker <universe@uap-core.de> 
parents: 
1301 
diff
changeset
 | 
138 | /** | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
139 | * All pointer arguments must be non-NULL. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
140 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
141 | #define cx_attr_nonnull __attribute__((__nonnull__)) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
142 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
143 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
144 | * The specified pointer arguments must be non-NULL. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
145 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
146 | #define cx_attr_nonnull_arg(...) __attribute__((__nonnull__(__VA_ARGS__))) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
147 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
148 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
149 | * The returned value is guaranteed to be non-NULL. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
150 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
151 | #define cx_attr_returns_nonnull __attribute__((__returns_nonnull__)) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
152 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
153 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
154 | * The attributed function always returns freshly allocated memory. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
155 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
156 | #define cx_attr_malloc __attribute__((__malloc__)) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
157 | |
| 
1235
 
3e058f5ba5dc
fix compilation problems with gcc below version 11
 
Mike Becker <universe@uap-core.de> 
parents: 
1227 
diff
changeset
 | 
158 | #if !defined(__clang__) && __GNUC__ >= 11 | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
159 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
160 | * The pointer returned by the attributed function is supposed to be freed | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
161 | * by @p freefunc. | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
162 | * | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
163 | * @param freefunc the function that shall be used to free the memory | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
164 | * @param freefunc_arg the index of the pointer argument in @p freefunc | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
165 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
166 | #define cx_attr_dealloc(freefunc, freefunc_arg) \ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
167 | __attribute__((__malloc__(freefunc, freefunc_arg))) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
168 | #else | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
169 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
170 | * Not supported in clang. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
171 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
172 | #define cx_attr_dealloc(...) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
173 | #endif // __clang__ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
174 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
175 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
176 | * Shortcut to specify #cxFree() as deallocator. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
177 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
178 | #define cx_attr_dealloc_ucx cx_attr_dealloc(cxFree, 2) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
179 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
180 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
181 | * Specifies the parameters from which the allocation size is calculated. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
182 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
183 | #define cx_attr_allocsize(...) __attribute__((__alloc_size__(__VA_ARGS__))) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
184 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
185 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
186 | #ifdef __clang__ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
187 | /** | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
188 | * No support for @c null_terminated_string_arg in clang or GCC below 14. | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
189 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
190 | #define cx_attr_cstr_arg(idx) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
191 | /** | 
| 
1424
 
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
 
Mike Becker <universe@uap-core.de> 
parents: 
1364 
diff
changeset
 | 
192 | * No support for the access attribute in clang. | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
193 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
194 | #define cx_attr_access(mode, ...) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
195 | #else | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
196 | #if __GNUC__ < 10 | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
197 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
198 | * No support for access attribute in GCC < 10. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
199 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
200 | #define cx_attr_access(mode, ...) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
201 | #else | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
202 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
203 | * Helper macro to define access macros. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
204 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
205 | #define cx_attr_access(mode, ...) __attribute__((__access__(mode, __VA_ARGS__))) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
206 | #endif // __GNUC__ < 10 | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
207 | #if __GNUC__ < 14 | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
208 | /** | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
209 | * No support for @c null_terminated_string_arg in clang or GCC below 14. | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
210 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
211 | #define cx_attr_cstr_arg(idx) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
212 | #else | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
213 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
214 | * The specified argument is expected to be a zero-terminated string. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
215 | * | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
216 | * @param idx the index of the argument | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
217 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
218 | #define cx_attr_cstr_arg(idx) \ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
219 | __attribute__((__null_terminated_string_arg__(idx))) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
220 | #endif // __GNUC__ < 14 | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
221 | #endif // __clang__ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
222 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
223 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
224 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
225 | * Specifies that the function will only read through the given pointer. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
226 | * | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
227 | * Takes one or two arguments: the index of the pointer and (optionally) the | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
228 | * index of another argument specifying the maximum number of accessed bytes. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
229 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
230 | #define cx_attr_access_r(...) cx_attr_access(__read_only__, __VA_ARGS__) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
231 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
232 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
233 | * Specifies that the function will read and write through the given pointer. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
234 | * | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
235 | * Takes one or two arguments: the index of the pointer and (optionally) the | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
236 | * index of another argument specifying the maximum number of accessed bytes. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
237 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
238 | #define cx_attr_access_rw(...) cx_attr_access(__read_write__, __VA_ARGS__) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
239 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
240 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
241 | * Specifies that the function will only write through the given pointer. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
242 | * | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
243 | * Takes one or two arguments: the index of the pointer and (optionally) the | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
244 | * index of another argument specifying the maximum number of accessed bytes. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
245 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
246 | #define cx_attr_access_w(...) cx_attr_access(__write_only__, __VA_ARGS__) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
247 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
248 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
249 | * Do not warn about unused variable. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
250 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
251 | #define cx_attr_unused __attribute__((__unused__)) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
252 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
253 | /** | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
254 | * Warn about discarded return value. | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
255 | */ | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
256 | #define cx_attr_nodiscard __attribute__((__warn_unused_result__)) | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
257 | |
| 
1180
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
258 | |
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
259 | // --------------------------------------------------------------------------- | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
260 | // MSVC specifics | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
261 | // --------------------------------------------------------------------------- | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
262 | |
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
263 | #ifdef _MSC_VER | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
264 | // fix missing _Thread_local support | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
265 | #define _Thread_local __declspec(thread) | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
266 | #endif // _MSC_VER | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
267 | |
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
268 | // --------------------------------------------------------------------------- | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
269 | // Exported and inlined functions | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
270 | // --------------------------------------------------------------------------- | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
271 | |
| 
1180
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
272 | #if defined(CX_WINDLL_EXPORT) | 
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
273 | #define CX_EXPORT __declspec(dllexport) | 
| 
1180
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
274 | #elif defined(CX_WINDLL) | 
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
275 | #define CX_EXPORT __declspec(dllimport) | 
| 
1180
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
276 | #else | 
| 
1196
 
6b0acad8b56d
add docstring to cx_attr_export
 
Mike Becker <universe@uap-core.de> 
parents: 
1180 
diff
changeset
 | 
277 | /** Only used for building Windows DLLs. */ | 
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
278 | #define CX_EXPORT | 
| 
1180
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
279 | #endif // CX_WINDLL / CX_WINDLL_EXPORT | 
| 
 
4c3a69b9723a
add support for building windows DLLs - resolves #582
 
Mike Becker <universe@uap-core.de> 
parents: 
1162 
diff
changeset
 | 
280 | |
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
281 | #ifdef __GNUC__ | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
282 | /** | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
283 | * Declares a function to be inlined. | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
284 | */ | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
285 | #define CX_INLINE __attribute__((always_inline)) static inline | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
286 | #else | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
287 | #define CX_INLINE static inline | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
288 | #endif | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
289 | /** | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
290 | * Declares a compatibility function for C++ builds. | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
291 | */ | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
292 | #define CX_CPPDECL static inline | 
| 
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
293 | |
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
294 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
295 | // Useful function pointers | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
296 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
297 | |
| 
545
 
3700ac4bd9a3
#184 #170 first basic flush test
 
Mike Becker <universe@uap-core.de> 
parents: 
503 
diff
changeset
 | 
298 | /** | 
| 
 
3700ac4bd9a3
#184 #170 first basic flush test
 
Mike Becker <universe@uap-core.de> 
parents: 
503 
diff
changeset
 | 
299 | * Function pointer compatible with fwrite-like functions. | 
| 
 
3700ac4bd9a3
#184 #170 first basic flush test
 
Mike Becker <universe@uap-core.de> 
parents: 
503 
diff
changeset
 | 
300 | */ | 
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
301 | typedef size_t (*cx_write_func)(const void*, size_t, size_t, void*); | 
| 
545
 
3700ac4bd9a3
#184 #170 first basic flush test
 
Mike Becker <universe@uap-core.de> 
parents: 
503 
diff
changeset
 | 
302 | |
| 
674
 
dc514a5d42a5
add stream copy utils - fixes #254
 
Mike Becker <universe@uap-core.de> 
parents: 
651 
diff
changeset
 | 
303 | /** | 
| 
 
dc514a5d42a5
add stream copy utils - fixes #254
 
Mike Becker <universe@uap-core.de> 
parents: 
651 
diff
changeset
 | 
304 | * Function pointer compatible with fread-like functions. | 
| 
 
dc514a5d42a5
add stream copy utils - fixes #254
 
Mike Becker <universe@uap-core.de> 
parents: 
651 
diff
changeset
 | 
305 | */ | 
| 
1426
 
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
 
Mike Becker <universe@uap-core.de> 
parents: 
1424 
diff
changeset
 | 
306 | typedef size_t (*cx_read_func)(void*, size_t, size_t, void*); | 
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
307 | |
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
308 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
309 | // Utility macros | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
310 | // --------------------------------------------------------------------------- | 
| 
674
 
dc514a5d42a5
add stream copy utils - fixes #254
 
Mike Becker <universe@uap-core.de> 
parents: 
651 
diff
changeset
 | 
311 | |
| 945 | 312 | /** | 
| 313 | * Determines the number of members in a static C array. | |
| 314 | * | |
| 315 | * @attention never use this to determine the size of a dynamically allocated | |
| 316 | * array. | |
| 317 | * | |
| 318 | * @param arr the array identifier | |
| 319 | * @return the number of elements | |
| 320 | */ | |
| 321 | #define cx_nmemb(arr) (sizeof(arr)/sizeof((arr)[0])) | |
| 
651
 
19d1a8422f6e
fix last change of mul overflow builtin breaking non-windows compilations
 
Mike Becker <universe@uap-core.de> 
parents: 
650 
diff
changeset
 | 
322 | |
| 
985
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
323 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
324 | // szmul implementation | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
325 | // --------------------------------------------------------------------------- | 
| 
 
68754c7de906
major refactoring of attributes
 
Mike Becker <universe@uap-core.de> 
parents: 
970 
diff
changeset
 | 
326 | |
| 970 | 327 | #if (__GNUC__ >= 5 || defined(__clang__)) && !defined(CX_NO_SZMUL_BUILTIN) | 
| 328 | #define CX_SZMUL_BUILTIN | |
| 329 | #define cx_szmul(a, b, result) __builtin_mul_overflow(a, b, result) | |
| 330 | #else // no GNUC or clang bultin | |
| 331 | /** | |
| 332 | * Performs a multiplication of size_t values and checks for overflow. | |
| 333 | * | |
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
334 | * @param a (@c size_t) first operand | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
335 | * @param b (@c size_t) second operand | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
336 | * @param result (@c size_t*) a pointer to a variable, where the result should | 
| 970 | 337 | * be stored | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
338 | * @retval zero success | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
339 | * @retval non-zero the multiplication would overflow | 
| 970 | 340 | */ | 
| 341 | #define cx_szmul(a, b, result) cx_szmul_impl(a, b, result) | |
| 342 | ||
| 343 | /** | |
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
344 | * Implementation of cx_szmul() when no compiler builtin is available. | 
| 970 | 345 | * | 
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
346 | * Do not use in application code. | 
| 970 | 347 | * | 
| 348 | * @param a first operand | |
| 349 | * @param b second operand | |
| 
1093
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
350 | * @param result a pointer to a variable, where the result should | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
351 | * be stored | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
352 | * @retval zero success | 
| 
 
bcbf6bf582fa
refine docs for common.h - issue #548
 
Mike Becker <universe@uap-core.de> 
parents: 
1076 
diff
changeset
 | 
353 | * @retval non-zero the multiplication would overflow | 
| 970 | 354 | */ | 
| 
988
 
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
 
Mike Becker <universe@uap-core.de> 
parents: 
985 
diff
changeset
 | 
355 | #if __cplusplus | 
| 
 
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
 
Mike Becker <universe@uap-core.de> 
parents: 
985 
diff
changeset
 | 
356 | extern "C" | 
| 
 
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
 
Mike Becker <universe@uap-core.de> 
parents: 
985 
diff
changeset
 | 
357 | #endif | 
| 
1434
 
27d71ce751e9
fix overlooked renaming of cx_attr_export to CX_EXPORT
 
Mike Becker <universe@uap-core.de> 
parents: 
1426 
diff
changeset
 | 
358 | CX_EXPORT int cx_szmul_impl(size_t a, size_t b, size_t *result); | 
| 970 | 359 | #endif // cx_szmul | 
| 360 | ||
| 
628
 
1e2be40f0cb5
use //-style single line comments everywhere
 
Mike Becker <universe@uap-core.de> 
parents: 
570 
diff
changeset
 | 
361 | #endif // UCX_COMMON_H |