summaryrefslogtreecommitdiff
path: root/src/mongo/base/data_type_terminated.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/base/data_type_terminated.h')
-rw-r--r--src/mongo/base/data_type_terminated.h137
1 files changed, 71 insertions, 66 deletions
diff --git a/src/mongo/base/data_type_terminated.h b/src/mongo/base/data_type_terminated.h
index 0c2e8847bfc..57fe61dbf9a 100644
--- a/src/mongo/base/data_type_terminated.h
+++ b/src/mongo/base/data_type_terminated.h
@@ -33,86 +33,91 @@
namespace mongo {
- template <char C, typename T>
- struct Terminated {
- Terminated() : value(DataType::defaultConstruct<T>()) {}
- Terminated(T value) : value(std::move(value)) {}
- T value;
-
- operator T() const {
- return value;
+template <char C, typename T>
+struct Terminated {
+ Terminated() : value(DataType::defaultConstruct<T>()) {}
+ Terminated(T value) : value(std::move(value)) {}
+ T value;
+
+ operator T() const {
+ return value;
+ }
+};
+
+struct TerminatedHelper {
+ static Status makeLoadNoTerminalStatus(char c, size_t length, std::ptrdiff_t debug_offset);
+ static Status makeLoadShortReadStatus(char c,
+ size_t read,
+ size_t length,
+ std::ptrdiff_t debug_offset);
+ static Status makeStoreStatus(char c, size_t length, std::ptrdiff_t debug_offset);
+};
+
+template <char C, typename T>
+struct DataType::Handler<Terminated<C, T>> {
+ using TerminatedType = Terminated<C, T>;
+
+ static Status load(TerminatedType* tt,
+ const char* ptr,
+ size_t length,
+ size_t* advanced,
+ std::ptrdiff_t debug_offset) {
+ size_t local_advanced = 0;
+
+ const char* end = static_cast<const char*>(std::memchr(ptr, C, length));
+
+ if (!end) {
+ return TerminatedHelper::makeLoadNoTerminalStatus(C, length, debug_offset);
}
- };
- struct TerminatedHelper {
- static Status makeLoadNoTerminalStatus(char c, size_t length, std::ptrdiff_t debug_offset);
- static Status makeLoadShortReadStatus(char c, size_t read, size_t length,
- std::ptrdiff_t debug_offset);
- static Status makeStoreStatus(char c, size_t length, std::ptrdiff_t debug_offset);
- };
+ auto status = DataType::load(
+ tt ? &tt->value : nullptr, ptr, end - ptr, &local_advanced, debug_offset);
- template <char C, typename T>
- struct DataType::Handler<Terminated<C, T>> {
- using TerminatedType = Terminated<C, T>;
-
- static Status load(TerminatedType* tt, const char* ptr, size_t length, size_t* advanced,
- std::ptrdiff_t debug_offset)
- {
- size_t local_advanced = 0;
-
- const char* end = static_cast<const char*>(std::memchr(ptr, C, length));
-
- if (!end) {
- return TerminatedHelper::makeLoadNoTerminalStatus(C, length, debug_offset);
- }
-
- auto status = DataType::load(tt ? &tt->value : nullptr, ptr, end - ptr, &local_advanced,
- debug_offset);
-
- if (!status.isOK()) {
- return status;
- }
-
- if (local_advanced != static_cast<size_t>(end - ptr)) {
- return TerminatedHelper::makeLoadShortReadStatus(C, local_advanced, end - ptr,
- debug_offset);
- }
+ if (!status.isOK()) {
+ return status;
+ }
- if (advanced) {
- *advanced = local_advanced + 1;
- }
+ if (local_advanced != static_cast<size_t>(end - ptr)) {
+ return TerminatedHelper::makeLoadShortReadStatus(
+ C, local_advanced, end - ptr, debug_offset);
+ }
- return Status::OK();
+ if (advanced) {
+ *advanced = local_advanced + 1;
}
- static Status store(const TerminatedType& tt, char* ptr, size_t length, size_t* advanced,
- std::ptrdiff_t debug_offset)
- {
- size_t local_advanced = 0;
+ return Status::OK();
+ }
- auto status = DataType::store(tt.value, ptr, length, &local_advanced, debug_offset);
+ static Status store(const TerminatedType& tt,
+ char* ptr,
+ size_t length,
+ size_t* advanced,
+ std::ptrdiff_t debug_offset) {
+ size_t local_advanced = 0;
- if (!status.isOK()) {
- return status;
- }
+ auto status = DataType::store(tt.value, ptr, length, &local_advanced, debug_offset);
- if (length - local_advanced < 1) {
- return TerminatedHelper::makeStoreStatus(C, length, debug_offset + local_advanced);
- }
+ if (!status.isOK()) {
+ return status;
+ }
- ptr[local_advanced] = C;
+ if (length - local_advanced < 1) {
+ return TerminatedHelper::makeStoreStatus(C, length, debug_offset + local_advanced);
+ }
- if (advanced) {
- *advanced = local_advanced + 1;
- }
+ ptr[local_advanced] = C;
- return Status::OK();
+ if (advanced) {
+ *advanced = local_advanced + 1;
}
- static TerminatedType defaultConstruct() {
- return TerminatedType();
- }
+ return Status::OK();
+ }
- };
+ static TerminatedType defaultConstruct() {
+ return TerminatedType();
+ }
+};
-} // namespace mongo
+} // namespace mongo