diff options
Diffstat (limited to 'src/mongo/base/data_cursor.h')
-rw-r--r-- | src/mongo/base/data_cursor.h | 311 |
1 files changed, 153 insertions, 158 deletions
diff --git a/src/mongo/base/data_cursor.h b/src/mongo/base/data_cursor.h index 7806c811d9b..4f9d8aef652 100644 --- a/src/mongo/base/data_cursor.h +++ b/src/mongo/base/data_cursor.h @@ -36,167 +36,162 @@ namespace mongo { - class ConstDataCursor : public ConstDataView { - public: +class ConstDataCursor : public ConstDataView { +public: + typedef ConstDataView view_type; + + ConstDataCursor(ConstDataView::bytes_type bytes) : ConstDataView(bytes) {} + + ConstDataCursor operator+(std::size_t s) const { + return view() + s; + } + + ConstDataCursor& operator+=(std::size_t s) { + *this = view() + s; + return *this; + } + + ConstDataCursor operator-(std::size_t s) const { + return view() - s; + } + + ConstDataCursor& operator-=(std::size_t s) { + *this = view() - s; + return *this; + } + + ConstDataCursor& operator++() { + return operator+=(1); + } + + ConstDataCursor operator++(int) { + ConstDataCursor tmp = *this; + operator++(); + return tmp; + } + + ConstDataCursor& operator--() { + return operator-=(1); + } + + ConstDataCursor operator--(int) { + ConstDataCursor tmp = *this; + operator--(); + return tmp; + } + + template <typename T> + ConstDataCursor& skip() { + size_t advance = 0; + + DataType::unsafeLoad<T>(nullptr, view(), &advance); + *this += advance; + + return *this; + } + + template <typename T> + ConstDataCursor& readAndAdvance(T* t) { + size_t advance = 0; + + DataType::unsafeLoad(t, view(), &advance); + *this += advance; + + return *this; + } + + template <typename T> + T readAndAdvance() { + T out(DataType::defaultConstruct<T>()); + readAndAdvance(&out); + return out; + } +}; + +class DataCursor : public DataView { +public: + typedef DataView view_type; + + DataCursor(DataView::bytes_type bytes) : DataView(bytes) {} + + operator ConstDataCursor() const { + return view(); + } + + DataCursor operator+(std::size_t s) const { + return view() + s; + } + + DataCursor& operator+=(std::size_t s) { + *this = view() + s; + return *this; + } + + DataCursor operator-(std::size_t s) const { + return view() - s; + } + + DataCursor& operator-=(std::size_t s) { + *this = view() - s; + return *this; + } + + DataCursor& operator++() { + return operator+=(1); + } + + DataCursor operator++(int) { + DataCursor tmp = *this; + operator++(); + return tmp; + } + + DataCursor& operator--() { + return operator-=(1); + } + + DataCursor operator--(int) { + DataCursor tmp = *this; + operator--(); + return tmp; + } + + template <typename T> + DataCursor& skip() { + size_t advance = 0; + + DataType::unsafeLoad<T>(nullptr, view(), &advance); + *this += advance; + + return *this; + } + + template <typename T> + DataCursor& readAndAdvance(T* t) { + size_t advance = 0; - typedef ConstDataView view_type; + DataType::unsafeLoad(t, view(), &advance); + *this += advance; - ConstDataCursor(ConstDataView::bytes_type bytes) - : ConstDataView(bytes) { - } + return *this; + } + + template <typename T> + T readAndAdvance() { + T out(DataType::defaultConstruct<T>()); + readAndAdvance(&out); + return out; + } - ConstDataCursor operator+(std::size_t s) const { - return view() + s; - } - - ConstDataCursor& operator+=(std::size_t s) { - *this = view() + s; - return *this; - } - - ConstDataCursor operator-(std::size_t s) const { - return view() - s; - } - - ConstDataCursor& operator-=(std::size_t s) { - *this = view() - s; - return *this; - } - - ConstDataCursor& operator++() { - return operator+=(1); - } - - ConstDataCursor operator++(int) { - ConstDataCursor tmp = *this; - operator++(); - return tmp; - } - - ConstDataCursor& operator--() { - return operator-=(1); - } - - ConstDataCursor operator--(int) { - ConstDataCursor tmp = *this; - operator--(); - return tmp; - } + template <typename T> + DataCursor& writeAndAdvance(const T& value) { + size_t advance = 0; - template <typename T> - ConstDataCursor& skip() { - size_t advance = 0; - - DataType::unsafeLoad<T>(nullptr, view(), &advance); - *this += advance; - - return *this; - } - - template <typename T> - ConstDataCursor& readAndAdvance(T* t) { - size_t advance = 0; - - DataType::unsafeLoad(t, view(), &advance); - *this += advance; - - return *this; - } - - template <typename T> - T readAndAdvance() { - T out(DataType::defaultConstruct<T>()); - readAndAdvance(&out); - return out; - } - }; - - class DataCursor : public DataView { - public: - - typedef DataView view_type; - - DataCursor(DataView::bytes_type bytes) - : DataView(bytes) {} - - operator ConstDataCursor() const { - return view(); - } - - DataCursor operator+(std::size_t s) const { - return view() + s; - } - - DataCursor& operator+=(std::size_t s) { - *this = view() + s; - return *this; - } - - DataCursor operator-(std::size_t s) const { - return view() - s; - } - - DataCursor& operator-=(std::size_t s) { - *this = view() - s; - return *this; - } - - DataCursor& operator++() { - return operator+=(1); - } - - DataCursor operator++(int) { - DataCursor tmp = *this; - operator++(); - return tmp; - } - - DataCursor& operator--() { - return operator-=(1); - } - - DataCursor operator--(int) { - DataCursor tmp = *this; - operator--(); - return tmp; - } - - template <typename T> - DataCursor& skip() { - size_t advance = 0; - - DataType::unsafeLoad<T>(nullptr, view(), &advance); - *this += advance; - - return *this; - } + DataType::unsafeStore(value, view(), &advance); + *this += advance; - template <typename T> - DataCursor& readAndAdvance(T* t) { - size_t advance = 0; + return *this; + } +}; - DataType::unsafeLoad(t, view(), &advance); - *this += advance; - - return *this; - } - - template <typename T> - T readAndAdvance() { - T out(DataType::defaultConstruct<T>()); - readAndAdvance(&out); - return out; - } - - template <typename T> - DataCursor& writeAndAdvance(const T& value) { - size_t advance = 0; - - DataType::unsafeStore(value, view(), &advance); - *this += advance; - - return *this; - } - }; - -} // namespace mongo +} // namespace mongo |