diff --git a/include/bitcoin/database/impl/memory/accessor.ipp b/include/bitcoin/database/impl/memory/accessor.ipp index 5936d8d03..a19511236 100644 --- a/include/bitcoin/database/impl/memory/accessor.ipp +++ b/include/bitcoin/database/impl/memory/accessor.ipp @@ -66,13 +66,25 @@ inline ptrdiff_t CLASS::size() const NOEXCEPT } TEMPLATE -inline uint8_t* CLASS::begin() NOEXCEPT +inline uint8_t* CLASS::data() const NOEXCEPT +{ + return begin(); +} + +TEMPLATE +inline CLASS::operator system::data_slab() const NOEXCEPT +{ + return { begin(), end() }; +}; + +TEMPLATE +inline uint8_t* CLASS::begin() const NOEXCEPT { return begin_; } TEMPLATE -inline uint8_t* CLASS::end() NOEXCEPT +inline uint8_t* CLASS::end() const NOEXCEPT { return end_; } diff --git a/include/bitcoin/database/memory/accessor.hpp b/include/bitcoin/database/memory/accessor.hpp index 896eede38..f7984c4da 100644 --- a/include/bitcoin/database/memory/accessor.hpp +++ b/include/bitcoin/database/memory/accessor.hpp @@ -50,12 +50,13 @@ class accessor /// The logical buffer size (from begin to end). inline ptrdiff_t size() const NOEXCEPT override; - /// Get logical buffer (guarded against remap only). - inline uint8_t* begin() NOEXCEPT override; - inline uint8_t* end() NOEXCEPT override; - /// Alias for begin. - inline uint8_t* data() NOEXCEPT override { return begin(); } + inline uint8_t* data() const NOEXCEPT override; + + /// Get logical buffer (guarded against remap only). + inline operator system::data_slab() const NOEXCEPT override; + inline uint8_t* begin() const NOEXCEPT override; + inline uint8_t* end() const NOEXCEPT override; private: uint8_t* begin_{}; diff --git a/include/bitcoin/database/memory/interfaces/memory.hpp b/include/bitcoin/database/memory/interfaces/memory.hpp index 33c8100a6..26ad67e7b 100644 --- a/include/bitcoin/database/memory/interfaces/memory.hpp +++ b/include/bitcoin/database/memory/interfaces/memory.hpp @@ -41,12 +41,13 @@ class memory /// The logical buffer size (from begin to end). virtual ptrdiff_t size() const NOEXCEPT = 0; - /// Get logical buffer. - virtual uint8_t* begin() NOEXCEPT = 0; - virtual uint8_t* end() NOEXCEPT = 0; - /// Alias begin. - virtual uint8_t* data() NOEXCEPT = 0; + virtual uint8_t* data() const NOEXCEPT = 0; + + /// Get logical buffer. + virtual operator system::data_slab() const NOEXCEPT = 0; + virtual uint8_t* begin() const NOEXCEPT = 0; + virtual uint8_t* end() const NOEXCEPT = 0; }; typedef memory::ptr memory_ptr;