mirror of
https://github.com/clockworklabs/SpacetimeDB.git
synced 2026-05-10 09:40:23 -04:00
52b6c66fa1
# Description of Changes This adds C++ server bindings (/crate/bindings-cpp) to allow writing C++ 20 modules. - Emscripten WASM build system integration with CMake - Macro-based code generation (SPACETIMEDB_TABLE, SPACETIMEDB_REDUCER, etc) - All SpacetimeDB types supported (primitives, Timestamp, Identity, Uuid, etc) - Product types via SPACETIMEDB_STRUCT - Sum types via SPACETIMEDB_ENUM - Constraints marked with FIELD* macros # API and ABI breaking changes None # Expected complexity level and risk 2 - Doesn't heavily impact any other areas but is complex macro C++ structure to support a similar developer experience, did have a small impact on init command # Testing - [x] modules/module-test-cpp - heavily tested every reducer - [x] modules/benchmarks-cpp - tested through the standalone (~6x faster than C#, ~6x slower than Rust) - [x] modules/sdk-test-cpp - [x] modules/sdk-test-procedure-cpp - [x] modules/sdk-test-view-cpp - [x] Wrote several test modules myself - [x] Quickstart smoketest [Currently in progress] - [ ] Write Blackholio C++ server module --------- Signed-off-by: Jason Larabie <jason@clockworklabs.io> Co-authored-by: clockwork-labs-bot <clockwork-labs-bot@users.noreply.github.com> Co-authored-by: Ryan <r.ekhoff@clockworklabs.io> Co-authored-by: John Detter <4099508+jdetter@users.noreply.github.com>
35 lines
1015 B
C++
35 lines
1015 B
C++
#pragma once
|
|
|
|
#include <spacetimedb.h>
|
|
#include <cstdint>
|
|
|
|
using namespace SpacetimeDB;
|
|
|
|
// Black box function to prevent compiler optimizations during benchmarking
|
|
template<typename T>
|
|
inline void black_box(const T& value) {
|
|
// Use volatile to prevent the compiler from optimizing away the value
|
|
volatile const void* ptr = &value;
|
|
(void)ptr;
|
|
}
|
|
|
|
// Load configuration struct - defines test data sizes for benchmarks
|
|
struct Load {
|
|
uint32_t initial_load;
|
|
uint32_t small_table;
|
|
uint32_t num_players;
|
|
uint32_t big_table;
|
|
uint32_t biggest_table;
|
|
|
|
// Default constructor required by SPACETIMEDB_STRUCT
|
|
Load() = default;
|
|
|
|
Load(uint32_t initial_load_param)
|
|
: initial_load(initial_load_param)
|
|
, small_table(initial_load_param)
|
|
, num_players(initial_load_param)
|
|
, big_table(initial_load_param * 50)
|
|
, biggest_table(initial_load_param * 100)
|
|
{}
|
|
};
|
|
SPACETIMEDB_STRUCT(Load, initial_load, small_table, num_players, big_table, biggest_table) |