diff --git a/src/MessageWriter.cpp b/src/MessageWriter.cpp index 0c42240e66..d0c2fc12c4 100644 --- a/src/MessageWriter.cpp +++ b/src/MessageWriter.cpp @@ -15,7 +15,7 @@ MessageWriter::~MessageWriter() {} void MessageWriter::WriteKeepAlive() { Write8(NT_MSG_KEEP_ALIVE); } -void MessageWriter::WriteClientHello(const NT_String& self_id) { +void MessageWriter::WriteClientHello(llvm::StringRef self_id) { Write8(NT_MSG_CLIENT_HELLO); Write16(m_proto_rev); if (m_proto_rev < 0x0300u) return; @@ -30,7 +30,7 @@ void MessageWriter::WriteProtoUnsup() { void MessageWriter::WriteServerHelloDone() { Write8(NT_MSG_SERVER_HELLO_DONE); } void MessageWriter::WriteServerHello(unsigned int flags, - const NT_String& self_id) { + llvm::StringRef self_id) { if (m_proto_rev < 0x0300u) return; // new message in version 3.0 Write8(NT_MSG_SERVER_HELLO); Write8(flags); @@ -42,7 +42,7 @@ void MessageWriter::WriteClientHelloDone() { Write8(NT_MSG_CLIENT_HELLO_DONE); } -void MessageWriter::WriteEntryAssign(const NT_String& name, unsigned int id, +void MessageWriter::WriteEntryAssign(llvm::StringRef name, unsigned int id, unsigned int seq_num, const NT_Value& value, unsigned int flags) { @@ -85,20 +85,18 @@ void MessageWriter::WriteClearEntries() { } void MessageWriter::WriteExecuteRpc(unsigned int id, unsigned int uid, - const NT_Value* params_start, - const NT_Value* params_end) { - WriteRpc(NT_MSG_EXECUTE_RPC, id, uid, params_start, params_end); + llvm::ArrayRef params) { + WriteRpc(NT_MSG_EXECUTE_RPC, id, uid, params); } void MessageWriter::WriteRpcResponse(unsigned int id, unsigned int uid, - const NT_Value* results_start, - const NT_Value* results_end) { - WriteRpc(NT_MSG_RPC_RESPONSE, id, uid, results_start, results_end); + llvm::ArrayRef results) { + WriteRpc(NT_MSG_RPC_RESPONSE, id, uid, results); } void MessageWriter::WriteRpc(unsigned int msg_type, unsigned int id, - unsigned int uid, const NT_Value* values_start, - const NT_Value* values_end) { + unsigned int uid, + llvm::ArrayRef values) { if (m_proto_rev < 0x0300u) return; // new message in version 3.0 Write8(msg_type); @@ -106,10 +104,8 @@ void MessageWriter::WriteRpc(unsigned int msg_type, unsigned int id, Write16(uid); unsigned long len = 0; - for (const NT_Value* value = values_start; value != values_end; ++value) - len += GetValueSize(*value); + for (auto& value : values) len += GetValueSize(value); WriteUleb128(len); - for (const NT_Value* value = values_start; value != values_end; ++value) - WriteValue(*value); + for (auto& value : values) WriteValue(value); } diff --git a/src/MessageWriter.h b/src/MessageWriter.h index 88c8126618..88e4775458 100644 --- a/src/MessageWriter.h +++ b/src/MessageWriter.h @@ -10,6 +10,9 @@ #include "WireEncoder.h" +#include "llvm/ArrayRef.h" +#include "llvm/StringRef.h" + namespace ntimpl { class MessageWriter : private WireEncoder { @@ -24,12 +27,12 @@ class MessageWriter : private WireEncoder { using WireEncoder::size; void WriteKeepAlive(); - void WriteClientHello(const NT_String& self_id); + void WriteClientHello(llvm::StringRef self_id); void WriteProtoUnsup(); void WriteServerHelloDone(); - void WriteServerHello(unsigned int flags, const NT_String& self_id); + void WriteServerHello(unsigned int flags, llvm::StringRef self_id); void WriteClientHelloDone(); - void WriteEntryAssign(const NT_String& name, unsigned int id, + void WriteEntryAssign(llvm::StringRef name, unsigned int id, unsigned int seq_num, const NT_Value& value, unsigned int flags); void WriteEntryUpdate(unsigned int id, unsigned int seq_num, @@ -38,18 +41,16 @@ class MessageWriter : private WireEncoder { void WriteEntryDelete(unsigned int id); void WriteClearEntries(); void WriteExecuteRpc(unsigned int id, unsigned int uid, - const NT_Value* params_start, - const NT_Value* params_end); + llvm::ArrayRef params); void WriteRpcResponse(unsigned int id, unsigned int uid, - const NT_Value* results_start, - const NT_Value* results_end); + llvm::ArrayRef results); MessageWriter(const MessageWriter&) = delete; MessageWriter& operator=(const MessageWriter&) = delete; private: void WriteRpc(unsigned int msg_type, unsigned int id, unsigned int uid, - const NT_Value* values_start, const NT_Value* values_end); + llvm::ArrayRef values); }; } // namespace ntimpl diff --git a/src/WireEncoder.cpp b/src/WireEncoder.cpp index f1198b8c79..47fc7c13a5 100644 --- a/src/WireEncoder.cpp +++ b/src/WireEncoder.cpp @@ -197,18 +197,18 @@ void WireEncoder::WriteValue(const NT_Value& value) { } } -std::size_t WireEncoder::GetStringSize(const NT_String& str) const { +std::size_t WireEncoder::GetStringSize(llvm::StringRef str) const { if (m_proto_rev < 0x0300u) { - std::size_t len = str.len; + std::size_t len = str.size(); if (len > 0xffff) len = 0xffff; // Limited to 64K length; truncate return 2 + len; } - return SizeUleb128(str.len) + str.len; + return SizeUleb128(str.size()) + str.size(); } -void WireEncoder::WriteString(const NT_String& str) { +void WireEncoder::WriteString(llvm::StringRef str) { // length - std::size_t len = str.len; + std::size_t len = str.size(); if (m_proto_rev < 0x0300u) { if (len > 0xffff) len = 0xffff; // Limited to 64K length; truncate Write16(len); @@ -217,6 +217,6 @@ void WireEncoder::WriteString(const NT_String& str) { // contents Reserve(len); - std::memcpy(m_cur, str.str, len); + std::memcpy(m_cur, str.data(), len); m_cur += len; } diff --git a/src/WireEncoder.h b/src/WireEncoder.h index 94de04ff27..487c0f4710 100644 --- a/src/WireEncoder.h +++ b/src/WireEncoder.h @@ -13,6 +13,8 @@ #include "ntcore.h" +#include "llvm/StringRef.h" + namespace ntimpl { /* Encodes native data for network transmission. @@ -89,7 +91,10 @@ class WireEncoder { void WriteType(NT_Type type); void WriteValue(const NT_Value& value); - void WriteString(const NT_String& str); + void WriteString(const NT_String& str) { + WriteString(llvm::StringRef(str.str, str.len)); + } + void WriteString(llvm::StringRef str); /* Utility function to get the written size of a value (without actually * writing it). @@ -99,7 +104,10 @@ class WireEncoder { /* Utility function to get the written size of a string (without actually * writing it). */ - std::size_t GetStringSize(const NT_String& str) const; + std::size_t GetStringSize(const NT_String& str) const { + return GetStringSize(llvm::StringRef(str.str, str.len)); + } + std::size_t GetStringSize(llvm::StringRef str) const; WireEncoder(const WireEncoder&) = delete; WireEncoder& operator=(const WireEncoder&) = delete;