Skip to content

Commit

Permalink
move to header files (#61)
Browse files Browse the repository at this point in the history
Signed-off-by: Kuat Yessenov <kuat@google.com>
  • Loading branch information
kyessenov authored Sep 11, 2020
1 parent 772c557 commit 49ed20e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 36 deletions.
33 changes: 29 additions & 4 deletions include/proxy-wasm/exports.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,35 @@ extern thread_local ContextBase *current_context_;

namespace exports {

template <typename Pairs> size_t pairsSize(const Pairs &result);
template <typename Pairs> void marshalPairs(const Pairs &result, char *buffer);
template <typename Pairs>
bool getPairs(ContextBase *context, const Pairs &result, uint64_t ptr_ptr, uint64_t size_ptr);
template <typename Pairs> 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 <typename Pairs> void marshalPairs(const Pairs &result, char *buffer) {
char *b = buffer;
*reinterpret_cast<uint32_t *>(b) = result.size();
b += sizeof(uint32_t);
for (auto &p : result) {
*reinterpret_cast<uint32_t *>(b) = p.first.size();
b += sizeof(uint32_t);
*reinterpret_cast<uint32_t *>(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.

Expand Down
34 changes: 2 additions & 32 deletions src/exports.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,38 +67,6 @@ Pairs toPairs(std::string_view buffer) {
return result;
}

} // namespace

template <typename Pairs> 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 <typename Pairs> void marshalPairs(const Pairs &result, char *buffer) {
char *b = buffer;
*reinterpret_cast<uint32_t *>(b) = result.size();
b += sizeof(uint32_t);
for (auto &p : result) {
*reinterpret_cast<uint32_t *>(b) = p.first.size();
b += sizeof(uint32_t);
*reinterpret_cast<uint32_t *>(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 <typename Pairs>
bool getPairs(ContextBase *context, const Pairs &result, uint64_t ptr_ptr, uint64_t size_ptr) {
if (result.empty()) {
Expand All @@ -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) {
Expand Down

0 comments on commit 49ed20e

Please sign in to comment.