Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)
set (CMAKE_CXX_STANDARD 14)
set (CMAKE_CXX_STANDARD 17)

# extism-cpp library
project(extism-cpp VERSION 1.0.0 DESCRIPTION "C++ bindings for libextism")
Expand Down Expand Up @@ -51,7 +51,8 @@ set_target_properties(extism-cpp PROPERTIES PUBLIC_HEADER src/extism.hpp)
target_include_directories(extism-cpp PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
)
target_link_libraries(extism-cpp PUBLIC extism-shared jsoncpp_lib)
target_link_libraries(extism-cpp PUBLIC extism-shared)
target_link_libraries(extism-cpp PRIVATE jsoncpp_lib)
set_target_properties(extism-cpp
PROPERTIES NO_SONAME 1
)
Expand All @@ -68,10 +69,10 @@ target_include_directories(extism-cpp-static PUBLIC
)
target_link_libraries(extism-cpp-static PUBLIC extism-static)
if(TARGET jsoncpp_static)
target_link_libraries(extism-cpp-static PUBLIC jsoncpp_static)
target_link_libraries(extism-cpp-static PRIVATE jsoncpp_static)
else()
message(WARNING "jsoncpp_static not found, linking jsoncpp_lib instead")
target_link_libraries(extism-cpp-static PUBLIC jsoncpp_lib)
target_link_libraries(extism-cpp-static PRIVATE jsoncpp_lib)
endif()
configure_file(extism-cpp-static.pc.in extism-cpp-static.pc @ONLY)
list(APPEND CMAKE_TARGETS extism-cpp-static)
Expand Down
2 changes: 1 addition & 1 deletion example.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) {
Plugin plugin(wasm, true, functions);

const char *input = argc > 1 ? argv[1] : "this is a test";
ExtismSize length = strlen(input);
size_t length = strlen(input);

extism::Buffer output = plugin.call("count_vowels", (uint8_t *)input, length);
std::cout << (char *)output.data << std::endl;
Expand Down
44 changes: 22 additions & 22 deletions src/current_plugin.cpp
Original file line number Diff line number Diff line change
@@ -1,46 +1,46 @@

#include "extism.hpp"
#include <cstring>
#include <string_view>

namespace extism {

uint8_t *CurrentPlugin::memory() {
uint8_t *CurrentPlugin::memory() const {
return extism_current_plugin_memory(this->pointer);
}
uint8_t *CurrentPlugin::memory(MemoryHandle offs) {
uint8_t *CurrentPlugin::memory(MemoryHandle offs) const {
return this->memory() + offs;
}

ExtismSize CurrentPlugin::memoryLength(MemoryHandle offs) {
ExtismSize CurrentPlugin::memoryLength(MemoryHandle offs) const {
return extism_current_plugin_memory_length(this->pointer, offs);
}

MemoryHandle CurrentPlugin::memoryAlloc(ExtismSize size) {
MemoryHandle CurrentPlugin::memoryAlloc(ExtismSize size) const {
return extism_current_plugin_memory_alloc(this->pointer, size);
}

void CurrentPlugin::memoryFree(MemoryHandle handle) {
void CurrentPlugin::memoryFree(MemoryHandle handle) const {
extism_current_plugin_memory_free(this->pointer, handle);
}

void CurrentPlugin::output(const std::string &s, size_t index) {
this->output((const uint8_t *)s.c_str(), s.size(), index);
bool CurrentPlugin::output(std::string_view s, size_t index) const {
return this->output(reinterpret_cast<const uint8_t *>(s.data()), s.size(),
index);
}

void CurrentPlugin::output(const uint8_t *bytes, size_t len, size_t index) {
if (index < this->nInputs) {
bool CurrentPlugin::output(const uint8_t *bytes, size_t len,
size_t index) const {
if (index < this->nOutputs) {
Comment thread
zshipko marked this conversation as resolved.
auto offs = this->memoryAlloc(len);
memcpy(this->memory() + offs, bytes, len);
this->outputs[index].v.i64 = offs;
return true;
}
return false;
}

void CurrentPlugin::output(const Json::Value &&v, size_t index) {
Json::FastWriter writer;
const std::string s = writer.write(v);
this->output(s, index);
}

uint8_t *CurrentPlugin::inputBytes(size_t *length, size_t index) {
uint8_t *CurrentPlugin::inputBytes(size_t *length, size_t index) const {
if (index >= this->nInputs) {
return nullptr;
}
Expand All @@ -54,27 +54,27 @@ uint8_t *CurrentPlugin::inputBytes(size_t *length, size_t index) {
return this->memory() + inp.v.i64;
}

Buffer CurrentPlugin::inputBuffer(size_t index) {
Buffer CurrentPlugin::inputBuffer(size_t index) const {
size_t length = 0;
auto ptr = inputBytes(&length, index);
return Buffer(ptr, length);
}

std::string CurrentPlugin::inputString(size_t index) {
std::string_view CurrentPlugin::inputStringView(size_t index) const {
size_t length = 0;
char *buf = (char *)this->inputBytes(&length, index);
return std::string(buf, length);
auto buf = reinterpret_cast<char *>(this->inputBytes(&length, index));
return std::string_view(buf, length);
}

const Val &CurrentPlugin::inputVal(size_t index) {
const Val &CurrentPlugin::inputVal(size_t index) const {
if (index >= nInputs) {
throw Error("Input out of bounds");
}

return this->inputs[index];
}

Val &CurrentPlugin::outputVal(size_t index) {
Val &CurrentPlugin::outputVal(size_t index) const {
if (index >= nOutputs) {
throw Error("Output out of bounds");
}
Expand Down
2 changes: 1 addition & 1 deletion src/extism.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ inline bool setLogFile(const char *filename, const char *level) {
}

// Get libextism version
inline std::string version() { return std::string(extism_version()); }
inline std::string_view version() { return extism_version(); }
}; // namespace extism
Loading