/* ----------------------------------------------------------------------------- * std_string_view.i * * std::string_view typemaps for LUA * ----------------------------------------------------------------------------- */ %{ #include %} namespace std { %naturalvar string_view; %typemap(in,checkfn="lua_isstring") string_view { size_t len; const char *ptr = lua_tolstring(L, $input, &len); $1 = std::string_view(ptr, len); } %typemap(out) string_view %{ lua_pushlstring(L,$1.data(),$1.size()); SWIG_arg++;%} %typemap(in,checkfn="lua_isstring") const string_view& ($*1_ltype temp) { size_t len; const char *ptr = lua_tolstring(L, $input, &len); temp = std::string_view(ptr, len); $1=&temp; } %typemap(out) const string_view& %{ lua_pushlstring(L,$1->data(),$1->size()); SWIG_arg++;%} // for throwing of any kind of string_view, string_view ref's and string_view pointers // we convert all to lua strings %typemap(throws) string_view, string_view&, const string_view& %{ lua_pushlstring(L,$1.data(),$1.size()); SWIG_fail;%} %typemap(throws) string_view*, const string_view* %{ lua_pushlstring(L,$1->data(),$1->size()); SWIG_fail;%} %typecheck(SWIG_TYPECHECK_STRINGVIEW) string_view, const string_view& { $1 = lua_isstring(L,$input); } class string_view; }