Add some more functions, simplify code
This commit is contained in:
parent
2122cb628d
commit
ee587d0b9e
2 changed files with 22 additions and 19 deletions
|
@ -4,6 +4,7 @@
|
|||
#include <wren.hpp>
|
||||
#include <cassert>
|
||||
#include <stdexcept>
|
||||
#include <vector>
|
||||
|
||||
namespace wren {
|
||||
namespace {
|
||||
|
@ -68,17 +69,6 @@ namespace wren {
|
|||
retval.finalize = funcs.finalize;
|
||||
return retval;
|
||||
}
|
||||
|
||||
template <typename T> T slot_specialized (WrenVM* vm, int slot_num);
|
||||
template <> bool slot_specialized (WrenVM* vm, int slot_num) {
|
||||
return wrenGetSlotBool(vm, slot_num);
|
||||
}
|
||||
template <> std::string slot_specialized (WrenVM* vm, int slot_num) {
|
||||
return wrenGetSlotString(vm, slot_num);
|
||||
}
|
||||
template <> double slot_specialized (WrenVM* vm, int slot_num) {
|
||||
return wrenGetSlotDouble(vm, slot_num);
|
||||
}
|
||||
} //unnamed namespace
|
||||
|
||||
struct VM::LocalData {
|
||||
|
@ -169,9 +159,22 @@ namespace wren {
|
|||
wrenReleaseHandle(m_local->wvm, handle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T VM::slot (int slot_num) {
|
||||
return slot_specialized<T>(m_local->wvm, slot_num);
|
||||
template <> bool VM::slot (int slot_num) {
|
||||
return wrenGetSlotBool(m_local->wvm, slot_num);
|
||||
}
|
||||
|
||||
template <> std::string VM::slot (int slot_num) {
|
||||
return wrenGetSlotString(m_local->wvm, slot_num);
|
||||
}
|
||||
|
||||
template <> double VM::slot (int slot_num) {
|
||||
return wrenGetSlotDouble(m_local->wvm, slot_num);
|
||||
}
|
||||
|
||||
template <> std::vector<char> VM::slot (int slot_num) {
|
||||
int length;
|
||||
const char* const data = wrenGetSlotBytes(m_local->wvm, slot_num, &length);
|
||||
return std::vector<char>{data, data + length};
|
||||
}
|
||||
|
||||
template <>
|
||||
|
@ -183,6 +186,10 @@ namespace wren {
|
|||
wrenEnsureSlots(m_local->wvm, num_slots);
|
||||
}
|
||||
|
||||
int VM::slot_count() {
|
||||
return wrenGetSlotCount(m_local->wvm);
|
||||
}
|
||||
|
||||
void VM::variable(const char* module, const char* name, int slot) {
|
||||
wrenGetVariable(m_local->wvm, module, name, slot);
|
||||
}
|
||||
|
@ -194,9 +201,4 @@ namespace wren {
|
|||
void VM::variable (const Handle& handle, int slot) {
|
||||
wrenSetSlotHandle(m_local->wvm, slot, handle);
|
||||
}
|
||||
|
||||
template bool VM::slot<bool>(int);
|
||||
template std::string VM::slot<std::string>(int);
|
||||
template double VM::slot<double>(int);
|
||||
template int VM::slot<int>(int);
|
||||
} //namespace wren
|
||||
|
|
|
@ -63,6 +63,7 @@ namespace wren {
|
|||
void release (Handle& handle) noexcept;
|
||||
template <typename T> T slot (int slot_num);
|
||||
void ensure_slots(int num_slots);
|
||||
int slot_count();
|
||||
void variable(const char* module, const char* name, int slot);
|
||||
void variable(const ModuleAndName& mod_and_name, int slot);
|
||||
void variable(const Handle& handle, int slot);
|
||||
|
|
Loading…
Reference in a new issue