diff options
author | Andrew Morrow <acm@mongodb.com> | 2014-08-22 12:41:06 -0400 |
---|---|---|
committer | Andrew Morrow <acm@mongodb.com> | 2014-09-08 17:44:20 -0400 |
commit | 09878cb3cb2ec6224824b5ebcf8747413e3802e8 (patch) | |
tree | 17096931afd825787d1cd47b3f2eaffff325bedf /src/mongo/base/data_view.h | |
parent | de8ad641914eeb56367d06fd465c17ad5e6a3e26 (diff) | |
download | mongo-09878cb3cb2ec6224824b5ebcf8747413e3802e8.tar.gz |
SERVER-15174 Provide some improved semantics for data_cursor and data_view
Diffstat (limited to 'src/mongo/base/data_view.h')
-rw-r--r-- | src/mongo/base/data_view.h | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/mongo/base/data_view.h b/src/mongo/base/data_view.h index f0430d6a504..9b4d43762e8 100644 --- a/src/mongo/base/data_view.h +++ b/src/mongo/base/data_view.h @@ -47,20 +47,26 @@ namespace mongo { } template<typename T> + const ConstDataView& readNative(T* t, size_t offset = 0) const { + std::memcpy(t, view(offset), sizeof(*t)); + return *this; + } + + template<typename T> T readNative(std::size_t offset = 0) const { T t; - std::memcpy(&t, view(offset), sizeof(t)); + readNative(&t, offset); return t; } template<typename T> T readLE(std::size_t offset = 0) const { - return littleToNative(readNative<T>(offset)); + return endian::littleToNative(readNative<T>(offset)); } template<typename T> T readBE(std::size_t offset = 0) const { - return bigToNative(readNative<T>(offset)); + return endian::bigToNative(readNative<T>(offset)); } private: @@ -83,18 +89,19 @@ namespace mongo { } template<typename T> - void writeNative(const T& value, std::size_t offset = 0) { + DataView& writeNative(const T& value, std::size_t offset = 0) { std::memcpy(view(offset), &value, sizeof(value)); + return *this; } template<typename T> - void writeLE(const T& value, std::size_t offset = 0) { - return writeNative(nativeToLittle(value), offset); + DataView& writeLE(const T& value, std::size_t offset = 0) { + return writeNative(endian::nativeToLittle(value), offset); } template<typename T> - void writeBE(const T& value, std::size_t offset = 0) { - return writeNative(nativeToBig(value), offset); + DataView& writeBE(const T& value, std::size_t offset = 0) { + return writeNative(endian::nativeToBig(value), offset); } }; |