summaryrefslogtreecommitdiff
path: root/src/mongo/base/data_cursor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/base/data_cursor.h')
-rw-r--r--src/mongo/base/data_cursor.h311
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