mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-30 02:37:35 +02:00
visitRawString()
takes a RawString
This commit is contained in:
@ -73,8 +73,8 @@ class JsonSerializer : public VariantDataVisitor<size_t> {
|
|||||||
return bytesWritten();
|
return bytesWritten();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t visitRawString(const char* data, size_t n) {
|
size_t visitRawString(RawString value) {
|
||||||
formatter_.writeRaw(data, n);
|
formatter_.writeRaw(value.data(), value.size());
|
||||||
return bytesWritten();
|
return bytesWritten();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ class SerializedValue<TChar*> {
|
|||||||
size_t size_;
|
size_t size_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using RawString = SerializedValue<const char*>;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline SerializedValue<T> serialized(T str) {
|
inline SerializedValue<T> serialized(T str) {
|
||||||
return SerializedValue<T>(str);
|
return SerializedValue<T>(str);
|
||||||
|
@ -104,8 +104,8 @@ class MsgPackSerializer : public VariantDataVisitor<size_t> {
|
|||||||
return bytesWritten();
|
return bytesWritten();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t visitRawString(const char* data, size_t size) {
|
size_t visitRawString(RawString value) {
|
||||||
writeBytes(reinterpret_cast<const uint8_t*>(data), size);
|
writeBytes(reinterpret_cast<const uint8_t*>(value.data()), value.size());
|
||||||
return bytesWritten();
|
return bytesWritten();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ struct JsonVariantVisitor {
|
|||||||
return TResult();
|
return TResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
TResult visitRawString(const char*, size_t) {
|
TResult visitRawString(RawString) {
|
||||||
return TResult();
|
return TResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,8 +76,8 @@ class VisitorAdapter {
|
|||||||
return visitor_->visitString(value);
|
return visitor_->visitString(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
result_type visitRawString(const char* p, size_t n) {
|
result_type visitRawString(RawString value) {
|
||||||
return visitor_->visitRawString(p, n);
|
return visitor_->visitRawString(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
result_type visitSignedInteger(JsonInteger value) {
|
result_type visitSignedInteger(JsonInteger value) {
|
||||||
|
@ -105,15 +105,13 @@ struct ObjectComparer : ComparerBase {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct RawComparer : ComparerBase {
|
struct RawComparer : ComparerBase {
|
||||||
const char* rhsData_;
|
RawString rhs_;
|
||||||
size_t rhsSize_;
|
|
||||||
|
|
||||||
explicit RawComparer(const char* rhsData, size_t rhsSize)
|
explicit RawComparer(RawString rhs) : rhs_(rhs) {}
|
||||||
: rhsData_(rhsData), rhsSize_(rhsSize) {}
|
|
||||||
|
|
||||||
CompareResult visitRawString(const char* lhsData, size_t lhsSize) {
|
CompareResult visitRawString(RawString lhs) {
|
||||||
size_t size = rhsSize_ < lhsSize ? rhsSize_ : lhsSize;
|
size_t size = rhs_.size() < lhs.size() ? rhs_.size() : lhs.size();
|
||||||
int n = memcmp(lhsData, rhsData_, size);
|
int n = memcmp(lhs.data(), rhs_.data(), size);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
return COMPARE_RESULT_LESS;
|
return COMPARE_RESULT_LESS;
|
||||||
else if (n > 0)
|
else if (n > 0)
|
||||||
@ -148,8 +146,8 @@ struct VariantComparer : ComparerBase {
|
|||||||
return reverseResult(comparer);
|
return reverseResult(comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
CompareResult visitRawString(const char* lhsData, size_t lhsSize) {
|
CompareResult visitRawString(RawString value) {
|
||||||
RawComparer comparer(lhsData, lhsSize);
|
RawComparer comparer(value);
|
||||||
return reverseResult(comparer);
|
return reverseResult(comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,8 +45,8 @@ class VariantData {
|
|||||||
JsonString::Copied));
|
JsonString::Copied));
|
||||||
|
|
||||||
case VALUE_IS_RAW_STRING:
|
case VALUE_IS_RAW_STRING:
|
||||||
return visitor.visitRawString(content_.asOwnedString->data,
|
return visitor.visitRawString(RawString(
|
||||||
content_.asOwnedString->length);
|
content_.asOwnedString->data, content_.asOwnedString->length));
|
||||||
|
|
||||||
case VALUE_IS_SIGNED_INTEGER:
|
case VALUE_IS_SIGNED_INTEGER:
|
||||||
return visitor.visitSignedInteger(content_.asSignedInteger);
|
return visitor.visitSignedInteger(content_.asSignedInteger);
|
||||||
|
@ -43,7 +43,7 @@ struct VariantDataVisitor {
|
|||||||
return TResult();
|
return TResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
TResult visitRawString(const char*, size_t) {
|
TResult visitRawString(RawString) {
|
||||||
return TResult();
|
return TResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user