summaryrefslogtreecommitdiff
path: root/graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h')
-rw-r--r--graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h30
1 files changed, 12 insertions, 18 deletions
diff --git a/graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h b/graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h
index d89f943c91..fb1a5ae267 100644
--- a/graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h
+++ b/graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h
@@ -18,6 +18,7 @@
#include "document.h"
#include "uri.h"
#include "internal/itoa.h"
+#include "error/error.h" // PointerParseErrorCode
#ifdef __clang__
RAPIDJSON_DIAG_PUSH
@@ -31,19 +32,6 @@ RAPIDJSON_NAMESPACE_BEGIN
static const SizeType kPointerInvalidIndex = ~SizeType(0); //!< Represents an invalid index in GenericPointer::Token
-//! Error code of parsing.
-/*! \ingroup RAPIDJSON_ERRORS
- \see GenericPointer::GenericPointer, GenericPointer::GetParseErrorCode
-*/
-enum PointerParseErrorCode {
- kPointerParseErrorNone = 0, //!< The parse is successful
-
- kPointerParseErrorTokenMustBeginWithSolidus, //!< A token must begin with a '/'
- kPointerParseErrorInvalidEscape, //!< Invalid escape
- kPointerParseErrorInvalidPercentEncoding, //!< Invalid percent encoding in URI fragment
- kPointerParseErrorCharacterMustPercentEncode //!< A character must percent encoded in URI fragment
-};
-
///////////////////////////////////////////////////////////////////////////////
// GenericPointer
@@ -84,7 +72,7 @@ public:
typedef GenericUri<ValueType, Allocator> UriType;
- //! A token is the basic units of internal representation.
+ //! A token is the basic units of internal representation.
/*!
A JSON pointer string representation "/foo/123" is parsed to two tokens:
"foo" and 123. 123 will be represented in both numeric form and string form.
@@ -902,10 +890,16 @@ private:
std::memcpy(nameBuffer_, rhs.nameBuffer_, nameBufferSize * sizeof(Ch));
}
- // Adjust pointers to name buffer
- std::ptrdiff_t diff = nameBuffer_ - rhs.nameBuffer_;
- for (Token *t = tokens_; t != tokens_ + rhs.tokenCount_; ++t)
- t->name += diff;
+ // The names of each token point to a string in the nameBuffer_. The
+ // previous memcpy copied over string pointers into the rhs.nameBuffer_,
+ // but they should point to the strings in the new nameBuffer_.
+ for (size_t i = 0; i < rhs.tokenCount_; ++i) {
+ // The offset between the string address and the name buffer should
+ // still be constant, so we can just get this offset and set each new
+ // token name according the new buffer start + the known offset.
+ std::ptrdiff_t name_offset = rhs.tokens_[i].name - rhs.nameBuffer_;
+ tokens_[i].name = nameBuffer_ + name_offset;
+ }
return nameBuffer_ + nameBufferSize;
}