Skip to content

Commit 2b724c8

Browse files
committed
add preferred snake_case alias for SlickStreamBuffer, and update code references to use stream_buffer
1 parent 67e2cfe commit 2b724c8

5 files changed

Lines changed: 78 additions & 60 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## v1.0.4 - 2026-06-12
44
- Separatad slick/dynamic_stream_buffer.h into slick-dynamic-buffer repo due to vcpk dependencies issue
5+
- Added `slick::stream_buffer` as the preferred snake_case spelling of
6+
`slick::SlickStreamBuffer`, matching the `slick::stream_buffer` CMake target and the
7+
Boost-style naming of the `slick::dynamic_buffer` adapter. `SlickStreamBuffer`
8+
remains available for backward compatibility.
59

610
## v1.0.3 - 2026-06-11
711
- `slick/dynamic_stream_buffer.h` is now installed only when Boost is found at

README.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ target_link_libraries(your_target PRIVATE slick::stream_buffer)
8282
#include <slick/stream_buffer.h>
8383

8484
// 64 MB data ring, 64K message records; named -> shared memory, nullptr -> local
85-
slick::SlickStreamBuffer stream(1ull << 26, 1u << 16, "market_data");
85+
slick::stream_buffer stream(1ull << 26, 1u << 16, "market_data");
8686

8787
for (;;) {
8888
auto [ptr, size] = stream.prepare(64 * 1024);
@@ -99,9 +99,9 @@ for (;;) {
9999
### Consumers: independent cursors, zero-copy reads
100100
101101
```cpp
102-
// same process: share the SlickStreamBuffer instance with the producer
102+
// same process: share the slick::stream_buffer instance with the producer
103103
// another process:
104-
slick::SlickStreamBuffer stream("market_data");
104+
slick::stream_buffer stream("market_data");
105105
106106
uint64_t cursor = stream.initial_reading_index(); // or 0 to replay history
107107
for (;;) {
@@ -116,7 +116,7 @@ for (;;) {
116116
```cpp
117117
#include <slick/stream_buffer.h>
118118

119-
slick::SlickStreamBuffer buf(1024, 16); // capacity bytes, record count (both pow2)
119+
slick::stream_buffer buf(1024, 16); // capacity bytes, record count (both pow2)
120120

121121
auto [ptr, sz] = buf.prepare(5);
122122
std::memcpy(ptr, "hello", 5);
@@ -129,12 +129,16 @@ auto [data, length] = buf.read(cursor); // -> "hello", 5
129129
130130
## API Overview
131131
132+
The class is `slick::SlickStreamBuffer`; `slick::stream_buffer` is a type alias for it
133+
and the preferred spelling, matching the `slick::stream_buffer` CMake target. Both name
134+
the same type.
135+
132136
### Constructors
133137
134138
```cpp
135-
SlickStreamBuffer(uint64_t capacity, uint32_t control_size); // local memory
136-
SlickStreamBuffer(uint64_t capacity, uint32_t control_size, const char* shm_name); // shm creator
137-
SlickStreamBuffer(const char* shm_name); // shm opener
139+
stream_buffer(uint64_t capacity, uint32_t control_size); // local memory
140+
stream_buffer(uint64_t capacity, uint32_t control_size, const char* shm_name); // shm creator
141+
stream_buffer(const char* shm_name); // shm opener
138142
```
139143

140144
`capacity` is the data ring size in bytes; `control_size` is the number of message

include/slick/stream_buffer.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ namespace slick {
6767
*
6868
* The producer side exposes a beast::flat_buffer-like interface (prepare/commit/consume/data/size)
6969
* so that network bytes can be written directly into the ring (e.g. by boost::asio/boost::beast via
70-
* the dynamic_stream_buffer adapter). consume(n) does not discard bytes - it PUBLISHES them to
71-
* consumers as one discrete message record. Each consumer owns a monotonic cursor and reads whole
72-
* messages zero-copy as (pointer, length) pairs.
70+
* the slick::dynamic_buffer adapter from the slick-dynamic-buffer repo). consume(n) does not
71+
* discard bytes - it PUBLISHES them to consumers as one discrete message record. Each consumer
72+
* owns a monotonic cursor and reads whole messages zero-copy as (pointer, length) pairs.
7373
*
7474
* Caveats:
7575
* - Producer methods (prepare/commit/consume/data/size/reset) must be called from a single thread.
@@ -696,4 +696,9 @@ class SlickStreamBuffer {
696696
}
697697
};
698698

699+
/// Preferred snake_case spelling of SlickStreamBuffer, matching the slick::stream_buffer
700+
/// CMake target and the Boost-style naming of companion types such as slick::dynamic_buffer.
701+
/// SlickStreamBuffer remains available for backward compatibility.
702+
using stream_buffer = SlickStreamBuffer;
703+
699704
}

tests/stream_buffer_shm_tests.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
#include <thread>
1919
#include <vector>
2020

21-
using slick::SlickStreamBuffer;
21+
using slick::stream_buffer;
2222

2323
namespace {
2424

25-
void publish_message(SlickStreamBuffer& buf, const void* src, std::size_t n) {
25+
void publish_message(stream_buffer& buf, const void* src, std::size_t n) {
2626
auto [ptr, sz] = buf.prepare(n);
2727
ASSERT_NE(ptr, nullptr);
2828
std::memcpy(ptr, src, n);
@@ -33,8 +33,8 @@ void publish_message(SlickStreamBuffer& buf, const void* src, std::size_t n) {
3333
} // namespace
3434

3535
TEST(StreamBufferShmTests, CreatorOpenerRoundtrip) {
36-
SlickStreamBuffer server(1024, 16, "ssb_roundtrip");
37-
SlickStreamBuffer client("ssb_roundtrip");
36+
stream_buffer server(1024, 16, "ssb_roundtrip");
37+
stream_buffer client("ssb_roundtrip");
3838
EXPECT_TRUE(server.own_buffer());
3939
EXPECT_FALSE(client.own_buffer());
4040
EXPECT_TRUE(client.use_shm());
@@ -58,23 +58,23 @@ TEST(StreamBufferShmTests, CreatorOpenerRoundtrip) {
5858
}
5959

6060
TEST(StreamBufferShmTests, OpenerReadsGeometry) {
61-
SlickStreamBuffer server(2048, 32, "ssb_geometry");
62-
SlickStreamBuffer client("ssb_geometry");
61+
stream_buffer server(2048, 32, "ssb_geometry");
62+
stream_buffer client("ssb_geometry");
6363
EXPECT_EQ(client.capacity(), 2048u);
6464
EXPECT_EQ(client.control_size(), 32u);
6565
}
6666

6767
TEST(StreamBufferShmTests, GeometryMismatchThrows) {
68-
SlickStreamBuffer server(1024, 16, "ssb_geometry_mismatch");
68+
stream_buffer server(1024, 16, "ssb_geometry_mismatch");
6969
EXPECT_THROW({
7070
try {
71-
SlickStreamBuffer(2048, 16, "ssb_geometry_mismatch");
71+
stream_buffer(2048, 16, "ssb_geometry_mismatch");
7272
} catch (const std::runtime_error& e) {
7373
EXPECT_TRUE(std::string(e.what()).find("geometry mismatch") != std::string::npos);
7474
throw;
7575
}
7676
}, std::runtime_error);
77-
EXPECT_THROW(SlickStreamBuffer(1024, 32, "ssb_geometry_mismatch"), std::runtime_error);
77+
EXPECT_THROW(stream_buffer(1024, 32, "ssb_geometry_mismatch"), std::runtime_error);
7878
}
7979

8080
TEST(StreamBufferShmTests, MagicMismatchThrows) {
@@ -88,7 +88,7 @@ TEST(StreamBufferShmTests, MagicMismatchThrows) {
8888

8989
EXPECT_THROW({
9090
try {
91-
SlickStreamBuffer client("ssb_bad_magic");
91+
stream_buffer client("ssb_bad_magic");
9292
} catch (const std::runtime_error& e) {
9393
EXPECT_TRUE(std::string(e.what()).find("magic mismatch") != std::string::npos);
9494
throw;
@@ -101,11 +101,11 @@ TEST(StreamBufferShmTests, MagicMismatchThrows) {
101101
}
102102

103103
TEST(StreamBufferShmTests, LateJoinerViaShm) {
104-
SlickStreamBuffer server(1024, 16, "ssb_late_joiner");
104+
stream_buffer server(1024, 16, "ssb_late_joiner");
105105
publish_message(server, "old1", 4);
106106
publish_message(server, "old2", 4);
107107

108-
SlickStreamBuffer client("ssb_late_joiner");
108+
stream_buffer client("ssb_late_joiner");
109109
uint64_t cursor = client.initial_reading_index();
110110
EXPECT_EQ(cursor, 2u);
111111
EXPECT_EQ(client.read(cursor).first, nullptr);
@@ -119,8 +119,8 @@ TEST(StreamBufferShmTests, LateJoinerViaShm) {
119119

120120
#if SLICK_STREAM_BUFFER_ENABLE_LOSS_DETECTION
121121
TEST(StreamBufferShmTests, LossyOverwriteSkipsOldData) {
122-
SlickStreamBuffer server(1024, 4, "ssb_lossy"); // tiny control ring
123-
SlickStreamBuffer client("ssb_lossy");
122+
stream_buffer server(1024, 4, "ssb_lossy"); // tiny control ring
123+
stream_buffer client("ssb_lossy");
124124

125125
for (uint8_t i = 0; i < 8; ++i) {
126126
publish_message(server, &i, 1);
@@ -136,8 +136,8 @@ TEST(StreamBufferShmTests, LossyOverwriteSkipsOldData) {
136136
#endif
137137

138138
TEST(StreamBufferShmTests, ReadLastViaShm) {
139-
SlickStreamBuffer server(1024, 16, "ssb_read_last");
140-
SlickStreamBuffer client("ssb_read_last");
139+
stream_buffer server(1024, 16, "ssb_read_last");
140+
stream_buffer client("ssb_read_last");
141141

142142
publish_message(server, "first", 5);
143143
publish_message(server, "second", 6);
@@ -150,11 +150,11 @@ TEST(StreamBufferShmTests, ReadLastViaShm) {
150150

151151
TEST(StreamBufferShmTests, BroadcastTwoOpeners) {
152152
constexpr int kMessages = 200;
153-
SlickStreamBuffer server(1 << 16, 1024, "ssb_broadcast");
154-
SlickStreamBuffer client1("ssb_broadcast");
155-
SlickStreamBuffer client2("ssb_broadcast");
153+
stream_buffer server(1 << 16, 1024, "ssb_broadcast");
154+
stream_buffer client1("ssb_broadcast");
155+
stream_buffer client2("ssb_broadcast");
156156

157-
auto consume_all = [&](SlickStreamBuffer& client, std::vector<uint64_t>& out) {
157+
auto consume_all = [&](stream_buffer& client, std::vector<uint64_t>& out) {
158158
uint64_t cursor = 0;
159159
while (out.size() < kMessages) {
160160
auto [ptr, len] = client.read(cursor);

0 commit comments

Comments
 (0)