diff --git a/ConflictSet.cpp b/ConflictSet.cpp index d604fec..e035c78 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2597,17 +2597,16 @@ Node *&getInTree(Node *n, ConflictSet::Impl *impl) { : getChildExists(n->parent, n->parentsIndex); } -// ==================== END IMPLEMENTATION ==================== +// Internal entry points. Public entry points should just delegate to these -// GCOVR_EXCL_START - -void ConflictSet::check(const ReadRange *reads, Result *results, - int count) const { - return impl->check(reads, results, count); +void internal_check(ConflictSet::Impl *impl, + const ConflictSet::ReadRange *reads, + ConflictSet::Result *results, int count) { + impl->check(reads, results, count); } - -void ConflictSet::addWrites(const WriteRange *writes, int count, - int64_t writeVersion) { +void internal_addWrites(ConflictSet::Impl *impl, + const ConflictSet::WriteRange *writes, int count, + int64_t writeVersion) { mallocBytesDelta = 0; impl->addWrites(writes, count, writeVersion); impl->totalBytes += mallocBytesDelta; @@ -2618,7 +2617,7 @@ void ConflictSet::addWrites(const WriteRange *writes, int count, #endif } -void ConflictSet::setOldestVersion(int64_t oldestVersion) { +void internal_setOldestVersion(ConflictSet::Impl *impl, int64_t oldestVersion) { mallocBytesDelta = 0; impl->setOldestVersion(oldestVersion); impl->totalBytes += mallocBytesDelta; @@ -2628,19 +2627,47 @@ void ConflictSet::setOldestVersion(int64_t oldestVersion) { } #endif } +ConflictSet::Impl *internal_create(int64_t oldestVersion) { + mallocBytesDelta = 0; + auto *result = new (safe_malloc(sizeof(ConflictSet::Impl))) + ConflictSet::Impl{oldestVersion}; + result->totalBytes += mallocBytesDelta; + return result; +} -int64_t ConflictSet::getBytes() const { return impl->totalBytes; } +void internal_destroy(ConflictSet::Impl *impl) { + impl->~Impl(); + safe_free(impl, sizeof(ConflictSet::Impl)); +} + +int64_t internal_getBytes(ConflictSet::Impl *impl) { return impl->totalBytes; } + +// ==================== END IMPLEMENTATION ==================== + +// GCOVR_EXCL_START + +void ConflictSet::check(const ReadRange *reads, Result *results, + int count) const { + internal_check(impl, reads, results, count); +} + +void ConflictSet::addWrites(const WriteRange *writes, int count, + int64_t writeVersion) { + internal_addWrites(impl, writes, count, writeVersion); +} + +void ConflictSet::setOldestVersion(int64_t oldestVersion) { + internal_setOldestVersion(impl, oldestVersion); +} + +int64_t ConflictSet::getBytes() const { return internal_getBytes(impl); } ConflictSet::ConflictSet(int64_t oldestVersion) - : impl((mallocBytesDelta = 0, - new(safe_malloc(sizeof(Impl))) Impl{oldestVersion})) { - impl->totalBytes += mallocBytesDelta; -} + : impl(internal_create(oldestVersion)) {} ConflictSet::~ConflictSet() { if (impl) { - impl->~Impl(); - safe_free(impl, sizeof(*impl)); + internal_destroy(impl); } } @@ -2661,50 +2688,27 @@ extern "C" { __attribute__((__visibility__("default"))) void ConflictSet_check(void *cs, const ConflictSet_ReadRange *reads, ConflictSet_Result *results, int count) { - ((ConflictSet::Impl *)cs)->check(reads, results, count); + internal_check((ConflictSet::Impl *)cs, reads, results, count); } __attribute__((__visibility__("default"))) void ConflictSet_addWrites(void *cs, const ConflictSet_WriteRange *writes, int count, int64_t writeVersion) { - auto *impl = (ConflictSet::Impl *)cs; - mallocBytesDelta = 0; - impl->addWrites(writes, count, writeVersion); - impl->totalBytes += mallocBytesDelta; -#if SHOW_MEMORY - if (impl->totalBytes != mallocBytes) { - abort(); - } -#endif + internal_addWrites((ConflictSet::Impl *)cs, writes, count, writeVersion); } __attribute__((__visibility__("default"))) void ConflictSet_setOldestVersion(void *cs, int64_t oldestVersion) { - auto *impl = (ConflictSet::Impl *)cs; - mallocBytesDelta = 0; - impl->setOldestVersion(oldestVersion); - impl->totalBytes += mallocBytesDelta; -#if SHOW_MEMORY - if (impl->totalBytes != mallocBytes) { - abort(); - } -#endif + internal_setOldestVersion((ConflictSet::Impl *)cs, oldestVersion); } __attribute__((__visibility__("default"))) void * ConflictSet_create(int64_t oldestVersion) { - mallocBytesDelta = 0; - auto *result = new (safe_malloc(sizeof(ConflictSet::Impl))) - ConflictSet::Impl{oldestVersion}; - result->totalBytes += mallocBytesDelta; - return result; + return internal_create(oldestVersion); } __attribute__((__visibility__("default"))) void ConflictSet_destroy(void *cs) { - using Impl = ConflictSet::Impl; - ((Impl *)cs)->~Impl(); - safe_free(cs, sizeof(Impl)); + internal_destroy((ConflictSet::Impl *)cs); } __attribute__((__visibility__("default"))) int64_t ConflictSet_getBytes(void *cs) { - using Impl = ConflictSet::Impl; - return ((Impl *)cs)->totalBytes; + return internal_getBytes((ConflictSet::Impl *)cs); } } diff --git a/SkipList.cpp b/SkipList.cpp index 2c99555..a4bb4a5 100644 --- a/SkipList.cpp +++ b/SkipList.cpp @@ -651,13 +651,16 @@ private: SkipList skipList; }; -void ConflictSet::check(const ReadRange *reads, Result *results, - int count) const { +// Internal entry points. Public entry points should just delegate to these + +void internal_check(ConflictSet::Impl *impl, + const ConflictSet::ReadRange *reads, + ConflictSet::Result *results, int count) { impl->check(reads, results, count); } - -void ConflictSet::addWrites(const WriteRange *writes, int count, - int64_t writeVersion) { +void internal_addWrites(ConflictSet::Impl *impl, + const ConflictSet::WriteRange *writes, int count, + int64_t writeVersion) { mallocBytesDelta = 0; impl->addWrites(writes, count, writeVersion); impl->totalBytes += mallocBytesDelta; @@ -668,7 +671,7 @@ void ConflictSet::addWrites(const WriteRange *writes, int count, #endif } -void ConflictSet::setOldestVersion(int64_t oldestVersion) { +void internal_setOldestVersion(ConflictSet::Impl *impl, int64_t oldestVersion) { mallocBytesDelta = 0; impl->setOldestVersion(oldestVersion); impl->totalBytes += mallocBytesDelta; @@ -678,19 +681,43 @@ void ConflictSet::setOldestVersion(int64_t oldestVersion) { } #endif } +ConflictSet::Impl *internal_create(int64_t oldestVersion) { + mallocBytesDelta = 0; + auto *result = new (safe_malloc(sizeof(ConflictSet::Impl))) + ConflictSet::Impl{oldestVersion}; + result->totalBytes += mallocBytesDelta; + return result; +} -int64_t ConflictSet::getBytes() const { return impl->totalBytes; } +void internal_destroy(ConflictSet::Impl *impl) { + impl->~Impl(); + safe_free(impl, sizeof(ConflictSet::Impl)); +} + +int64_t internal_getBytes(ConflictSet::Impl *impl) { return impl->totalBytes; } + +void ConflictSet::check(const ReadRange *reads, Result *results, + int count) const { + internal_check(impl, reads, results, count); +} + +void ConflictSet::addWrites(const WriteRange *writes, int count, + int64_t writeVersion) { + internal_addWrites(impl, writes, count, writeVersion); +} + +void ConflictSet::setOldestVersion(int64_t oldestVersion) { + internal_setOldestVersion(impl, oldestVersion); +} + +int64_t ConflictSet::getBytes() const { return internal_getBytes(impl); } ConflictSet::ConflictSet(int64_t oldestVersion) - : impl((mallocBytesDelta = 0, - new(safe_malloc(sizeof(Impl))) Impl{oldestVersion})) { - impl->totalBytes += mallocBytesDelta; -} + : impl(internal_create(oldestVersion)) {} ConflictSet::~ConflictSet() { if (impl) { - impl->~Impl(); - safe_free(impl, sizeof(Impl)); + internal_destroy(impl); } } @@ -711,50 +738,27 @@ extern "C" { __attribute__((__visibility__("default"))) void ConflictSet_check(void *cs, const ConflictSet_ReadRange *reads, ConflictSet_Result *results, int count) { - ((ConflictSet::Impl *)cs)->check(reads, results, count); + internal_check((ConflictSet::Impl *)cs, reads, results, count); } __attribute__((__visibility__("default"))) void ConflictSet_addWrites(void *cs, const ConflictSet_WriteRange *writes, int count, int64_t writeVersion) { - auto *impl = (ConflictSet::Impl *)cs; - mallocBytesDelta = 0; - impl->addWrites(writes, count, writeVersion); - impl->totalBytes += mallocBytesDelta; -#if SHOW_MEMORY - if (impl->totalBytes != mallocBytes) { - abort(); - } -#endif + internal_addWrites((ConflictSet::Impl *)cs, writes, count, writeVersion); } __attribute__((__visibility__("default"))) void ConflictSet_setOldestVersion(void *cs, int64_t oldestVersion) { - auto *impl = (ConflictSet::Impl *)cs; - mallocBytesDelta = 0; - impl->setOldestVersion(oldestVersion); - impl->totalBytes += mallocBytesDelta; -#if SHOW_MEMORY - if (impl->totalBytes != mallocBytes) { - abort(); - } -#endif + internal_setOldestVersion((ConflictSet::Impl *)cs, oldestVersion); } __attribute__((__visibility__("default"))) void * ConflictSet_create(int64_t oldestVersion) { - mallocBytesDelta = 0; - auto *result = new (safe_malloc(sizeof(ConflictSet::Impl))) - ConflictSet::Impl{oldestVersion}; - result->totalBytes += mallocBytesDelta; - return result; + return internal_create(oldestVersion); } __attribute__((__visibility__("default"))) void ConflictSet_destroy(void *cs) { - using Impl = ConflictSet::Impl; - ((Impl *)cs)->~Impl(); - safe_free(cs, sizeof(Impl)); + internal_destroy((ConflictSet::Impl *)cs); } __attribute__((__visibility__("default"))) int64_t ConflictSet_getBytes(void *cs) { - using Impl = ConflictSet::Impl; - return ((Impl *)cs)->totalBytes; + return internal_getBytes((ConflictSet::Impl *)cs); } }