Skip to content

Commit 320e65e

Browse files
committed
feat bfdev: added bfx extension function layer
Signed-off-by: John Sanpe <sanpeqf@gmail.com>
1 parent 713dafb commit 320e65e

File tree

12 files changed

+139
-92
lines changed

12 files changed

+139
-92
lines changed

CMakeLists.txt

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ set(BFDEV_ARCH generic)
2323
set(BFDEV_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
2424
set(BFDEV_HEADER_PATH ${PROJECT_SOURCE_DIR}/include)
2525
set(BFDEV_SOURCE_PATH ${PROJECT_SOURCE_DIR}/src)
26+
set(BFDEV_UTILS_PATH ${PROJECT_SOURCE_DIR}/utils)
2627
set(BFDEV_DOCUMENT_PATH ${PROJECT_SOURCE_DIR}/docs)
2728
set(BFDEV_GENERATED_PATH ${PROJECT_BINARY_DIR}/generated)
2829

@@ -48,8 +49,11 @@ string(APPEND BFDEV_RELEASE
4849

4950
option(BFDEV_DEVEL "Enable development mode" OFF)
5051
option(BFDEV_STRICT "Enable strict compilation" OFF)
51-
option(BFDEV_EXAMPLES "Build examples" OFF)
52-
option(BFDEV_TESTSUITE "Build testsuite" OFF)
52+
53+
option(BFDEV_BFX "Build Extension Layer" ON)
54+
option(BFDEV_EXAMPLES "Build Examples" OFF)
55+
option(BFDEV_TESTSUITE "Build Testsuite" OFF)
56+
option(BFDEV_DOCS "Install Documentation" OFF)
5357

5458
option(BFDEV_ASAN "Enable Address Sanitizer" OFF)
5559
option(BFDEV_UBSAN "Enable Undefined Behaviour Sanitizer" OFF)
@@ -67,23 +71,38 @@ option(BFDEV_CRC_EXTEND "CRC loop unfolding optimize" ON)
6771

6872
if(BFDEV_DEVEL)
6973
set(BFDEV_STRICT ON)
74+
set(BFDEV_BFX ON)
7075
set(BFDEV_EXAMPLES ON)
7176
set(BFDEV_TESTSUITE ON)
77+
set(BFDEV_DOCS ON)
7278
set(BFDEV_ASAN ON)
7379
set(BFDEV_UBSAN ON)
7480
set(BFDEV_GCOV ON)
7581
endif()
7682

83+
if(BFDEV_EXAMPLES OR BFDEV_TESTSUITE)
84+
set(BFDEV_BFX ON)
85+
endif()
86+
7787
include(${PROJECT_SOURCE_DIR}/build.cmake)
7888
add_subdirectory(${PROJECT_SOURCE_DIR}/scripts)
7989

8090
packed_header(
8191
bfdev/
82-
_BFDEV_H_
92+
_BFDEV_H_ ""
8393
${BFDEV_GENERATED_PATH}/bfdev.h
8494
${BFDEV_HEADER_PATH}/bfdev
8595
)
8696

97+
if(BFDEV_BFX)
98+
packed_header(
99+
bfx/
100+
_BFX_H_ "#include <bfdev.h>"
101+
${BFDEV_GENERATED_PATH}/bfx.h
102+
${BFDEV_HEADER_PATH}/bfx
103+
)
104+
endif()
105+
87106
macro(bfdev_dependencies target)
88107
add_dependencies(
89108
${target}
@@ -134,21 +153,13 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
134153
)
135154

136155
install(FILES
137-
${BFDEV_GENERATED_PATH}/bfdev.h
138-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
139-
)
140-
141-
install(FILES
142-
${PROJECT_SOURCE_DIR}/README.md
143-
${PROJECT_SOURCE_DIR}/AUTHORS
144-
${PROJECT_SOURCE_DIR}/COPYING
145-
${PROJECT_SOURCE_DIR}/COPYING.LIB
146-
DESTINATION ${CMAKE_INSTALL_DOCDIR}
156+
${BFDEV_CONFIGURE}
157+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bfdev
147158
)
148159

149160
install(FILES
150-
${BFDEV_CONFIGURE}
151-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bfdev
161+
${BFDEV_GENERATED_PATH}/bfdev.h
162+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
152163
)
153164

154165
install(DIRECTORY
@@ -158,10 +169,32 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
158169
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
159170
)
160171

161-
install(DIRECTORY
162-
${BFDEV_DOCUMENT_PATH}
163-
DESTINATION ${CMAKE_INSTALL_DOCDIR}
164-
)
172+
if(BFDEV_BFX)
173+
install(FILES
174+
${BFDEV_GENERATED_PATH}/bfx.h
175+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
176+
)
177+
178+
install(DIRECTORY
179+
${BFDEV_HEADER_PATH}/bfx
180+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
181+
)
182+
endif()
183+
184+
if(BFDEV_DOCS)
185+
install(FILES
186+
${PROJECT_SOURCE_DIR}/README.md
187+
${PROJECT_SOURCE_DIR}/AUTHORS
188+
${PROJECT_SOURCE_DIR}/COPYING
189+
${PROJECT_SOURCE_DIR}/COPYING.LIB
190+
DESTINATION ${CMAKE_INSTALL_DOCDIR}
191+
)
192+
193+
install(DIRECTORY
194+
${BFDEV_DOCUMENT_PATH}
195+
DESTINATION ${CMAKE_INSTALL_DOCDIR}
196+
)
197+
endif()
165198

166199
install(TARGETS
167200
bfdev_static bfdev_shared

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ View supported components: [Docs](docs/components.md)
5151
| include | include path |
5252
| scripts | build scripts |
5353
| src | core code path |
54+
| testsuite | unit tests and so on |
55+
| utils | API extension functions |
5456

5557
## Reference Path
5658

@@ -62,6 +64,7 @@ graph LR
6264
arch/asm-generated{exist}
6365
6466
subgraph target[User Installation]
67+
include/bfx[bfx]
6568
include/bfdev[bfdev]
6669
include/bfdev/asm-generic[bfdev:asm-generic]
6770
arch/bfdev/asm[bfdev:asm]
@@ -73,10 +76,12 @@ graph LR
7376
arch/asm -.-> include/asm-generic
7477
arch/asm-generated --N--> include/asm-generic
7578
include/bfdev --> arch/bfdev/asm-generated
79+
include/bfx --> include/bfdev
7680
arch/bfdev/asm-generated --Y--> arch/bfdev/asm
7781
arch/bfdev/asm-generated --N--> include/bfdev/asm-generic
7882
arch/bfdev/asm -.-> include/bfdev/asm-generic
7983
include --> include/bfdev
84+
include --> include/bfx
8085
arch/asm --> arch/bfdev/asm
8186
include/asm-generic --> arch/bfdev/asm
8287
```

build.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ include_directories(${BFDEV_INCLUDE_DIRS})
7272
include(${BFDEV_ARCH_PATH}/build.cmake)
7373
include(${BFDEV_SOURCE_PATH}/build.cmake)
7474

75+
if(BFDEV_BFX)
76+
include(${BFDEV_UTILS_PATH}/build.cmake)
77+
endif()
78+
7579
set(BFDEV_LIBRARY_HEADER
7680
${BFDEV_HEADER}
7781
${BFDEV_ASM_HEADER}

examples/bloom/simple.c

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,19 @@
33
* Copyright(c) 2023 John Sanpe <sanpeqf@gmail.com>
44
*/
55

6+
#define MODULE_NAME "bloom-simple"
7+
#define bfdev_log_fmt(fmt) MODULE_NAME ": " fmt
8+
69
#include <stdio.h>
710
#include <stdlib.h>
8-
#include <stdint.h>
911
#include <errno.h>
1012
#include <err.h>
11-
#include <bfdev/bloom.h>
12-
#include <bfdev/stringhash.h>
13+
#include <bfdev/log.h>
14+
#include <bfx/bloom.h>
1315

1416
#define TEST_LOOP 50
1517
#define TEST_SIZE 100
1618

17-
static unsigned int
18-
bloom_hash(unsigned int func, const void *key, void *pdata)
19-
{
20-
unsigned int hash;
21-
22-
switch (func) {
23-
case 0:
24-
hash = bfdev_pjwhash(key);
25-
break;
26-
27-
case 1:
28-
hash = (unsigned int)(uintptr_t)key;
29-
break;
30-
31-
default:
32-
abort();
33-
}
34-
35-
return hash;
36-
}
37-
3819
int
3920
main(int argc, const char *argv[])
4021
{
@@ -43,21 +24,21 @@ main(int argc, const char *argv[])
4324
unsigned int count;
4425
bool retval;
4526

46-
bloom = bfdev_bloom_create(NULL, TEST_SIZE, bloom_hash, 2, NULL);
27+
bloom = bfx_bloom_str_create(NULL, TEST_SIZE);
4728
if (!bloom)
4829
err(errno, "bfdev_bloom_create");
4930

5031
for (count = 0; count < TEST_LOOP; ++count) {
5132
snprintf(buffer[count], sizeof(*buffer), "%d", rand());
52-
retval = bfdev_bloom_push(bloom, buffer[count]);
53-
printf("push %u: %s (%s)\n", count, buffer[count],
54-
retval ? "clash" : "none");
33+
retval = bfx_bloom_str_push(bloom, buffer[count]);
34+
bfdev_log_info("push %u: %s (%s)\n", count, buffer[count],
35+
retval ? "clash" : "none");
5536
}
5637

5738
for (count = 0; count < TEST_LOOP; ++count) {
58-
retval = bfdev_bloom_peek(bloom, buffer[count]);
59-
printf("peek %u: %s (%s)\n", count, buffer[count],
60-
retval ? "passed" : "failed");
39+
retval = bfx_bloom_str_peek(bloom, buffer[count]);
40+
bfdev_log_info("peek %u: %s (%s)\n", count, buffer[count],
41+
retval ? "passed" : "failed");
6142
if (!retval)
6243
return 1;
6344
}

examples/btree/benchmark.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <stdio.h>
1010
#include <stdlib.h>
1111
#include <bfdev/log.h>
12-
#include <bfdev/btree.h>
12+
#include <bfx/btree.h>
1313
#include "../time.h"
1414

1515
#define BTREE_DEBUG 0
@@ -34,9 +34,9 @@ node_dump(struct bench_node *node)
3434

3535
static const bfdev_btree_ops_t
3636
bench_ops = {
37-
.alloc = bfdev_btree_alloc,
38-
.free = bfdev_btree_free,
39-
.find = bfdev_btree_key_find,
37+
.alloc = bfx_btree_alloc,
38+
.free = bfx_btree_free,
39+
.find = bfx_btree_key_find,
4040
};
4141

4242
int
@@ -48,7 +48,7 @@ main(int argc, const char *argv[])
4848
void *block;
4949

5050
BFDEV_BTREE_ROOT(
51-
bench_root, &bfdev_btree_layoutptr,
51+
bench_root, &bfx_btree_layoutptr,
5252
&bench_ops, NULL
5353
);
5454

examples/btree/selftest.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <stdlib.h>
88
#include <time.h>
99
#include <string.h>
10-
#include <bfdev/btree.h>
10+
#include <bfx/btree.h>
1111
#include <bfdev/list.h>
1212

1313
#define TEST_LOOP 100
@@ -54,18 +54,18 @@ test_strfind(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key)
5454

5555
static const bfdev_btree_ops_t
5656
test_value_ops = {
57-
.alloc = bfdev_btree_alloc,
58-
.free = bfdev_btree_free,
59-
.find = bfdev_btree_key_find,
57+
.alloc = bfx_btree_alloc,
58+
.free = bfx_btree_free,
59+
.find = bfx_btree_key_find,
6060
.clash = test_clash,
6161
.remove = test_remove,
6262

6363
};
6464

6565
static const bfdev_btree_ops_t
6666
test_string_ops = {
67-
.alloc = bfdev_btree_alloc,
68-
.free = bfdev_btree_free,
67+
.alloc = bfx_btree_alloc,
68+
.free = bfx_btree_free,
6969
.find = test_strfind,
7070
.clash = test_clash,
7171
.remove = test_remove,
@@ -81,7 +81,7 @@ test_testing(struct test_node *nodes)
8181
int retval;
8282

8383
BFDEV_BTREE_ROOT(
84-
root32, &bfdev_btree_layout32,
84+
root32, &bfx_btree_layout32,
8585
&test_value_ops, NULL
8686
);
8787

@@ -127,7 +127,7 @@ test_testing(struct test_node *nodes)
127127
bfdev_btree_release(&root32, NULL, NULL);
128128

129129
BFDEV_BTREE_ROOT(
130-
rootstr, &bfdev_btree_layout32,
130+
rootstr, &bfx_btree_layout32,
131131
&test_string_ops, NULL
132132
);
133133

include/bfdev/btree.h

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -58,34 +58,16 @@ struct bfdev_btree_ops {
5858
#define BFDEV_BTREE_ROOT(name, layout, ops, pdata) \
5959
bfdev_btree_root_t name = BFDEV_BTREE_INIT(layout, ops, pdata)
6060

61-
extern bfdev_btree_layout_t
62-
bfdev_btree_layout32;
63-
64-
extern bfdev_btree_layout_t
65-
bfdev_btree_layout64;
66-
67-
extern bfdev_btree_layout_t
68-
bfdev_btree_layoutptr;
69-
7061
static inline void
7162
bfdev_btree_init(bfdev_btree_root_t *root, bfdev_btree_layout_t *layout,
7263
bfdev_btree_ops_t *ops, void *pdata)
7364
{
7465
*root = BFDEV_BTREE_INIT(layout, ops, pdata);
7566
}
7667

77-
extern long
78-
bfdev_btree_key_find(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key);
79-
8068
extern void
8169
bfdev_btree_key_copy(bfdev_btree_root_t *root, uintptr_t *dest, uintptr_t *src);
8270

83-
extern void *
84-
bfdev_btree_alloc(bfdev_btree_root_t *root);
85-
86-
extern void
87-
bfdev_btree_free(bfdev_btree_root_t *root, void *node);
88-
8971
extern void *
9072
bfdev_btree_lookup(bfdev_btree_root_t *root, uintptr_t *key);
9173

@@ -99,8 +81,7 @@ extern void *
9981
bfdev_btree_remove(bfdev_btree_root_t *root, uintptr_t *key);
10082

10183
extern void
102-
bfdev_btree_release(bfdev_btree_root_t *root, bfdev_release_t release,
103-
void *pdata);
84+
bfdev_btree_release(bfdev_btree_root_t *root, bfdev_release_t release, void *pdata);
10485

10586
extern void *
10687
bfdev_btree_first(bfdev_btree_root_t *root, uintptr_t *key);

0 commit comments

Comments
 (0)