From 49ed20e895b728aae6b811950a2939ecbaf76f7c Mon Sep 17 00:00:00 2001 From: Kuat Date: Thu, 10 Sep 2020 17:02:58 -0700 Subject: [PATCH] move to header files (#61) Signed-off-by: Kuat Yessenov --- include/proxy-wasm/exports.h | 33 +++++++++++++++++++++++++++++---- src/exports.cc | 34 ++-------------------------------- 2 files changed, 31 insertions(+), 36 deletions(-) diff --git a/include/proxy-wasm/exports.h b/include/proxy-wasm/exports.h index 914176b8..a2d7df84 100644 --- a/include/proxy-wasm/exports.h +++ b/include/proxy-wasm/exports.h @@ -27,10 +27,35 @@ extern thread_local ContextBase *current_context_; namespace exports { -template size_t pairsSize(const Pairs &result); -template void marshalPairs(const Pairs &result, char *buffer); -template -bool getPairs(ContextBase *context, const Pairs &result, uint64_t ptr_ptr, uint64_t size_ptr); +template size_t pairsSize(const Pairs &result) { + size_t size = 4; // number of headers + for (auto &p : result) { + size += 8; // size of key, size of value + size += p.first.size() + 1; // null terminated key + size += p.second.size() + 1; // null terminated value + } + return size; +} + +template void marshalPairs(const Pairs &result, char *buffer) { + char *b = buffer; + *reinterpret_cast(b) = result.size(); + b += sizeof(uint32_t); + for (auto &p : result) { + *reinterpret_cast(b) = p.first.size(); + b += sizeof(uint32_t); + *reinterpret_cast(b) = p.second.size(); + b += sizeof(uint32_t); + } + for (auto &p : result) { + memcpy(b, p.first.data(), p.first.size()); + b += p.first.size(); + *b++ = 0; + memcpy(b, p.second.data(), p.second.size()); + b += p.second.size(); + *b++ = 0; + } +} // ABI functions exported from envoy to wasm. diff --git a/src/exports.cc b/src/exports.cc index 0e635381..72cebaeb 100644 --- a/src/exports.cc +++ b/src/exports.cc @@ -67,38 +67,6 @@ Pairs toPairs(std::string_view buffer) { return result; } -} // namespace - -template size_t pairsSize(const Pairs &result) { - size_t size = 4; // number of headers - for (auto &p : result) { - size += 8; // size of key, size of value - size += p.first.size() + 1; // null terminated key - size += p.second.size() + 1; // null terminated value - } - return size; -} - -template void marshalPairs(const Pairs &result, char *buffer) { - char *b = buffer; - *reinterpret_cast(b) = result.size(); - b += sizeof(uint32_t); - for (auto &p : result) { - *reinterpret_cast(b) = p.first.size(); - b += sizeof(uint32_t); - *reinterpret_cast(b) = p.second.size(); - b += sizeof(uint32_t); - } - for (auto &p : result) { - memcpy(b, p.first.data(), p.first.size()); - b += p.first.size(); - *b++ = 0; - memcpy(b, p.second.data(), p.second.size()); - b += p.second.size(); - *b++ = 0; - } -} - template bool getPairs(ContextBase *context, const Pairs &result, uint64_t ptr_ptr, uint64_t size_ptr) { if (result.empty()) { @@ -117,6 +85,8 @@ bool getPairs(ContextBase *context, const Pairs &result, uint64_t ptr_ptr, uint6 return true; } +} // namespace + // General ABI. Word set_property(void *raw_context, Word key_ptr, Word key_size, Word value_ptr, Word value_size) {