visitRawString() takes a RawString

This commit is contained in:
Benoit Blanchon
2023-07-10 15:56:45 +02:00
parent da845ae01d
commit 21bf4973de
7 changed files with 19 additions and 19 deletions

View File

@ -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();
} }

View File

@ -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);

View File

@ -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();
} }

View File

@ -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) {

View File

@ -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);
} }

View File

@ -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);

View File

@ -43,7 +43,7 @@ struct VariantDataVisitor {
return TResult(); return TResult();
} }
TResult visitRawString(const char*, size_t) { TResult visitRawString(RawString) {
return TResult(); return TResult();
} }