Tue, 04 Oct 2022 19:25:07 +0200
fix over-optimization of strstr
1. it's actually less performant to frequently read bytes
from an array instead of using the native word length
2. the SBO buffer should be local and not static to allow
multi-threading usage
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 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
30 | * \file common.h |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | * \brief Common definitions and feature checks. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | * \author Mike Becker |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | * \author Olaf Wintermann |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | * \version 3.0 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | * \copyright 2-Clause BSD License |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
38 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
39 | * \mainpage UAP Common Extensions |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
40 | * 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
|
41 | * <p> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
42 | * Latest available source:<br> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
43 | * <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
|
44 | * </p> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
45 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
46 | * <p> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
47 | * Repositories:<br> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
48 | * <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
|
49 | * - or - |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
50 | * <a href="https://develop.uap-core.de/hg/ucx">https://develop.uap-core.de/hg/ucx</a> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
51 | * </p> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
52 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
53 | * <h2>LICENCE</h2> |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
54 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
55 | * 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
|
56 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
57 | * 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
|
58 | * 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
|
59 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
60 | * 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
|
61 | * 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
|
62 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
63 | * 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
|
64 | * 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
|
65 | * 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
|
66 | * |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
67 | * 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
|
68 | * 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
|
69 | * 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
|
70 | * 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
|
71 | * 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
|
72 | * 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
|
73 | * 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
|
74 | * 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
|
75 | * 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
|
76 | * 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
|
77 | * POSSIBILITY OF SUCH DAMAGE. |
483
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 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
80 | #ifndef UCX_COMMON_H |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
81 | #define UCX_COMMON_H |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
82 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
83 | /** Major UCX version as integer constant. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
84 | #define UCX_VERSION_MAJOR 3 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
85 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
86 | /** Minor UCX version as integer constant. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
87 | #define UCX_VERSION_MINOR 0 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
88 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
89 | /** Version constant which ensures to increase monotonically. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
90 | #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
|
91 | |
484
9e6900b1cf9d
add common.h include to all other header files
Mike Becker <universe@uap-core.de>
parents:
483
diff
changeset
|
92 | #include <stdlib.h> |
9e6900b1cf9d
add common.h include to all other header files
Mike Becker <universe@uap-core.de>
parents:
483
diff
changeset
|
93 | #include <stddef.h> |
487
4bd19279778c
use c99 bool + add test for low level find
Mike Becker <universe@uap-core.de>
parents:
485
diff
changeset
|
94 | #include <stdbool.h> |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
95 | |
545
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
96 | /** |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
97 | * Function pointer compatible with fwrite-like functions. |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
98 | */ |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
99 | typedef size_t (*cx_write_func)( |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
100 | void const *, |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
101 | size_t, |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
102 | size_t, |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
103 | void * |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
104 | ); |
3700ac4bd9a3
#184 #170 first basic flush test
Mike Becker <universe@uap-core.de>
parents:
503
diff
changeset
|
105 | |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
106 | #ifdef _WIN32 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
107 | #ifndef __WORDSIZE |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
108 | #ifdef _WIN64 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
109 | #define __WORDSIZE 64 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
110 | #else |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
111 | #define __WORDSIZE 32 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
112 | #endif |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
113 | #endif /* __WORDSIZE */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
114 | #else /* !_WIN32 */ |
493
e3469b497eff
hide __attribute__ from compilers that may not support it
Mike Becker <universe@uap-core.de>
parents:
487
diff
changeset
|
115 | |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
116 | #include <sys/types.h> |
493
e3469b497eff
hide __attribute__ from compilers that may not support it
Mike Becker <universe@uap-core.de>
parents:
487
diff
changeset
|
117 | |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
118 | #endif /* _WIN32 */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
119 | |
493
e3469b497eff
hide __attribute__ from compilers that may not support it
Mike Becker <universe@uap-core.de>
parents:
487
diff
changeset
|
120 | #ifndef __GNUC__ |
503
a89857072ace
add new destructor API and apply it to CxList
Mike Becker <universe@uap-core.de>
parents:
493
diff
changeset
|
121 | /** |
a89857072ace
add new destructor API and apply it to CxList
Mike Becker <universe@uap-core.de>
parents:
493
diff
changeset
|
122 | * Removes GNU C attributes where they are not supported. |
a89857072ace
add new destructor API and apply it to CxList
Mike Becker <universe@uap-core.de>
parents:
493
diff
changeset
|
123 | */ |
493
e3469b497eff
hide __attribute__ from compilers that may not support it
Mike Becker <universe@uap-core.de>
parents:
487
diff
changeset
|
124 | #define __attribute__(x) |
e3469b497eff
hide __attribute__ from compilers that may not support it
Mike Becker <universe@uap-core.de>
parents:
487
diff
changeset
|
125 | #endif |
e3469b497eff
hide __attribute__ from compilers that may not support it
Mike Becker <universe@uap-core.de>
parents:
487
diff
changeset
|
126 | |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
127 | #endif /* UCX_COMMON_H */ |