Pass string_view instead of const char* to callback functions

This commit is contained in:
King_DuckZ 2022-04-28 22:55:22 +02:00
commit 6f4b0ce094
7 changed files with 63 additions and 42 deletions

View file

@ -97,8 +97,8 @@ System.print("You have %(cale.appointment_count()) appointment(s)")
class MyConf : public wren::DefConfiguration {
public:
char* load_module_fn(wren::VM* vm, const char* module_name) {
if (std::string_view{module_name} == "calendar") {
char* load_module_fn(wren::VM* vm, std::string_view module_name) {
if (module_name == "calendar") {
constexpr const std::size_t buff_sz = sizeof(g_calendar_src);
char* const buff = static_cast<char*>(MyConf::reallocate_fn(nullptr, buff_sz));
std::copy(g_calendar_src, g_calendar_src + buff_sz / sizeof(g_calendar_src[0]), buff);
@ -107,11 +107,13 @@ System.print("You have %(cale.appointment_count()) appointment(s)")
return nullptr;
}
wren::foreign_method_t foreign_method_fn(wren::VM* vm, const char* m, const char* c, bool is_static, const char* s) {
std::string_view module(m);
std::string_view class_name(c);
std::string_view signature(s);
wren::foreign_method_t foreign_method_fn(
wren::VM* vm,
std::string_view module,
std::string_view class_name,
bool is_static,
std::string_view signature
) {
if (module == "calendar" and class_name == "Calendar") {
if (is_static and signature == "today()")
return &Calendar::today;
@ -123,10 +125,11 @@ System.print("You have %(cale.appointment_count()) appointment(s)")
return nullptr;
}
wren::foreign_class_t foreign_class_fn(wren::VM* vm, const char* m, const char* c) {
std::string_view module(m);
std::string_view class_name(c);
wren::foreign_class_t foreign_class_fn(
wren::VM* vm,
std::string_view module,
std::string_view class_name
) {
if (module == "calendar" and class_name == "Calendar") {
return wren::make_foreign_class<Calendar>();
}

View file

@ -51,14 +51,11 @@ namespace {
public:
wren::foreign_method_t foreign_method_fn (
wren::VM* vm,
const char* module_ptr,
const char* class_name_ptr,
std::string_view module,
std::string_view class_name,
bool is_static,
const char* signature_ptr
std::string_view signature
) {
std::string_view module(module_ptr);
std::string_view class_name(class_name_ptr);
std::string_view signature(signature_ptr);
//std::cout << "requested: \"" << module << "\" \"" <<
// class_name << "\" \"" << signature << "\" static: " <<
// std::boolalpha << is_static << '\n';

View file

@ -63,18 +63,15 @@ class MyConfig : public wren::DefConfiguration {
public:
wren::foreign_method_t foreign_method_fn (
wren::VM* vm,
const char* module_ptr,
const char* class_name_ptr,
std::string_view module,
std::string_view class_name,
bool is_static,
const char* signature_ptr
std::string_view signature
) {
//std::cout << "VM " << vm << " requested foreign method " <<
// class_name_ptr << "::" << signature_ptr <<
// " in module " << module_ptr << "\n";
// class_name << "::" << signature <<
// " in module " << module << "\n";
std::string_view module(module_ptr);
std::string_view class_name(class_name_ptr);
std::string_view signature(signature_ptr);
if ("User" == class_name and "main" == module and "get_env(_)" == signature)
return &user_get_env;