From cf79328414f915f29cd67f0925bb3a4752f375eb Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 24 Jan 2024 11:13:03 -0800 Subject: [PATCH] gcc fixes --- ConflictSet.cpp | 4 +- conflict_set_c_api_test.c | 1 + include/ConflictSet.h | 101 ++++++++++++++++++-------------------- 3 files changed, 51 insertions(+), 55 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index c04a097..7ff3c6a 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -21,7 +21,7 @@ #define DEBUG_VERBOSE 0 -__attribute__((always_inline)) void *safe_malloc(size_t s) { +__attribute__((always_inline)) inline void *safe_malloc(size_t s) { if (void *p = malloc(s)) { return p; } @@ -853,7 +853,7 @@ Node *&getOrCreateChild(Node *&self, uint8_t index) { } if (self->numChildren == 4) { auto *newSelf = new (safe_malloc(sizeof(Node16))) Node16; - memcpy(newSelf, self, offsetof(Node, type)); + memcpy((void*)newSelf, self, offsetof(Node, type)); memcpy(newSelf->index, self4->index, 4); memcpy(newSelf->children, self4->children, 4 * sizeof(void *)); free(std::exchange(self, newSelf)); diff --git a/conflict_set_c_api_test.c b/conflict_set_c_api_test.c index 2b898e4..d38122a 100644 --- a/conflict_set_c_api_test.c +++ b/conflict_set_c_api_test.c @@ -19,4 +19,5 @@ int main(void) { ConflictSet_check(cs, &r, &result, 1); assert(result == ConflictSet_Conflict); ConflictSet_destroy(cs); + return 0; } diff --git a/include/ConflictSet.h b/include/ConflictSet.h index ee7ced1..990155c 100644 --- a/include/ConflictSet.h +++ b/include/ConflictSet.h @@ -4,56 +4,54 @@ #ifdef __cplusplus -// c++ api - struct __attribute__((__visibility__("default"))) ConflictSet { enum Result { - /// The result of a check which does not intersect any conflicting writes + /** The result of a check which does not intersect any conflicting writes */ Commit, - /// The result of a check which intersects a write at a version > - /// readVersion + /** The result of a check which intersects a write at a version > + readVersion */ Conflict, - /// The result of a check with a readVersion older than the highest call to - /// `setOldestVersion` + /** The result of a check with a readVersion older than the highest call to + `setOldestVersion` */ TooOld }; - /// Bytes ordered lexicographically + /** Bytes ordered lexicographically */ struct Key { const uint8_t *p; int len; }; - /// Denotes a set of keys to be checked for conflicts + /** Denotes a set of keys to be checked for conflicts */ struct ReadRange { Key begin; - /// `end` having length 0 denotes that this range is the single key {begin}. - /// Otherwise this denotes the range [begin, end) + /** `end` having length 0 denotes that this range is the single key {begin}. + * Otherwise this denotes the range [begin, end) */ Key end; int64_t readVersion; }; - /// Denotes a set of keys to be considered written at `writeVersion` + /** Denotes a set of keys to be considered written at `writeVersion` */ struct WriteRange { Key begin; - /// `end` having length 0 denotes that this range is the single key {begin}. - /// Otherwise this denotes the range [begin, end) + /** `end` having length 0 denotes that this range is the single key {begin}. + * Otherwise this denotes the range [begin, end) */ Key end; - /// Write version must be greater than all write versions in all previous - /// calls to `addWrites` + /** Write version must be greater than all write versions in all previous + * calls to `addWrites` */ int64_t writeVersion; }; - /// `reads` must be sorted ascending, and must not have adjacent or - /// overlapping ranges. The result of checking reads[i] is written in - /// results[i]. + /** `reads` must be sorted ascending, and must not have adjacent or + * overlapping ranges. The result of checking reads[i] is written in + * results[i]. */ void check(const ReadRange *reads, Result *results, int count) const; - /// `writes` must be sorted ascending, and must not have adjacent or - /// overlapping ranges. Reads intersecting writes where readVersion < - /// writeVersion will result in `Conflict` (or `TooOld`, eventually) + /** `writes` must be sorted ascending, and must not have adjacent or + * overlapping ranges. Reads intersecting writes where readVersion < + * writeVersion will result in `Conflict` (or `TooOld`, eventually) */ void addWrites(const WriteRange *writes, int count); - /// Reads where readVersion < oldestVersion will result in `TooOld`. Must be - /// greater than any previous oldestVersion. + /** Reads where readVersion < oldestVersion will result in `TooOld`. Must be + * greater than any previous oldestVersion. */ void setOldestVersion(int64_t oldestVersion); - /// Reads where readVersion < oldestVersion will result in `TooOld`. There are - /// no writes initially. + /** Reads where readVersion < oldestVersion will result in `TooOld`. There are + * no writes initially. */ explicit ConflictSet(int64_t oldestVersion, uint64_t seed); ~ConflictSet(); @@ -64,7 +62,7 @@ struct __attribute__((__visibility__("default"))) ConflictSet { ConflictSet &operator=(const ConflictSet &) = delete; #endif - /// @private + /** @private */ struct Impl; private: @@ -73,59 +71,56 @@ private: #else -// c api - typedef struct ConflictSet ConflictSet; typedef enum { - /* The result of a check which does not intersect any conflicting writes */ + /** The result of a check which does not intersect any conflicting writes */ ConflictSet_Commit, - /* The result of a check which intersects a write at a version > */ - /* readVersion */ + /** The result of a check which intersects a write at a version > readVersion + */ ConflictSet_Conflict, - /* The result of a check with a readVersion older than the highest call to */ - /* `setOldestVersion` */ + /** The result of a check with a readVersion older than the highest call to + `setOldestVersion` */ ConflictSet_TooOld } ConflictSet_Result; -/* Bytes ordered lexicographically */ +/** Bytes ordered lexicographically */ typedef struct { const uint8_t *p; int len; } ConflictSet_Key; -/* Denotes a set of keys to be checked for conflicts */ +/** Denotes a set of keys to be checked for conflicts */ typedef struct { ConflictSet_Key begin; - /* `end` having length 0 denotes that this range is the single key {begin}. */ - /* Otherwise this denotes the range [begin, end) */ + /** `end` having length 0 denotes that this range is the single key {begin}. + * Otherwise this denotes the range [begin, end) */ ConflictSet_Key end; int64_t readVersion; } ConflictSet_ReadRange; -/* Denotes a set of keys to be considered written at `writeVersion` */ +/** Denotes a set of keys to be considered written at `writeVersion` */ typedef struct { ConflictSet_Key begin; - /* `end` having length 0 denotes that this range is the single key {begin}. */ - /* Otherwise this denotes the range [begin, end) */ + /** `end` having length 0 denotes that this range is the single key {begin}. + * Otherwise this denotes the range [begin, end) */ ConflictSet_Key end; - /* Write version must be greater than all write versions in all previous */ - /* calls to `addWrites` */ + /** Write version must be greater than all write versions in all previous + * calls to `addWrites` */ int64_t writeVersion; } ConflictSet_WriteRange; -/* `reads` must be sorted ascending, and must not have adjacent or */ -/* overlapping ranges. The result of checking reads[i] is written in */ -/* results[i]. */ +/** `reads` must be sorted ascending, and must not have adjacent or overlapping + * ranges. The result of checking reads[i] is written in results[i]. */ void ConflictSet_check(ConflictSet *cs, const ConflictSet_ReadRange *reads, ConflictSet_Result *results, int count); -/* `writes` must be sorted ascending, and must not have adjacent or */ -/* overlapping ranges. Reads intersecting writes where readVersion < */ -/* writeVersion will result in `Conflict` (or `TooOld`, eventually) */ +/** `writes` must be sorted ascending, and must not have adjacent or overlapping + * ranges. Reads intersecting writes where readVersion < writeVersion will + * result in `Conflict` (or `TooOld`, eventually) */ void ConflictSet_addWrites(ConflictSet *cs, const ConflictSet_WriteRange *writes, int count); -/* Reads where readVersion < oldestVersion will result in `TooOld`. Must be */ -/* greater than any previous oldestVersion. */ +/** Reads where readVersion < oldestVersion will result in `TooOld`. Must be + * greater than any previous oldestVersion. */ void ConflictSet_setOldestVersion(ConflictSet *cs, int64_t oldestVersion); -/* Reads where readVersion < oldestVersion will result in `TooOld`. There are */ -/* no writes initially. */ +/** Reads where readVersion < oldestVersion will result in `TooOld`. There are + * no writes initially. */ ConflictSet *ConflictSet_create(int64_t oldestVersion, uint64_t seed); void ConflictSet_destroy(ConflictSet *cs);