mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
update examples and fix error_result returns
This commit is contained in:
parent
7193115e24
commit
a86e9ee62d
|
@ -40,5 +40,9 @@ int main(int, char*[]) {
|
||||||
|
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
{
|
||||||
|
std::remove("a_lua_script.lua");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
int main(int, char*[]) {
|
int main(int, char*[]) {
|
||||||
|
@ -40,5 +41,9 @@ int main(int, char*[]) {
|
||||||
|
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
{
|
||||||
|
std::remove("a_lua_script.lua");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// This file was generated with a script.
|
// This file was generated with a script.
|
||||||
// Generated 2017-12-07 13:23:41.409999 UTC
|
// Generated 2017-12-07 14:04:12.736591 UTC
|
||||||
// This header was generated with sol v2.18.7 (revision e17c0a1)
|
// This header was generated with sol v2.18.7 (revision 7193115)
|
||||||
// https://github.com/ThePhD/sol2
|
// https://github.com/ThePhD/sol2
|
||||||
|
|
||||||
#ifndef SOL_SINGLE_INCLUDE_HPP
|
#ifndef SOL_SINGLE_INCLUDE_HPP
|
||||||
|
@ -15258,7 +15258,7 @@ namespace sol {
|
||||||
return set_writable(is_writable(), L, self, it, std::move(value));
|
return set_writable(is_writable(), L, self, it, std::move(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_comparative(std::true_type, lua_State* L, T& self, stack_object okey, stack_object value) {
|
static error_result set_comparative(std::true_type, lua_State* L, T& self, stack_object okey, stack_object value) {
|
||||||
decltype(auto) key = okey.as<K>();
|
decltype(auto) key = okey.as<K>();
|
||||||
if (!is_writable::value) {
|
if (!is_writable::value) {
|
||||||
return error_result("cannot perform a 'set': '%s's iterator reference is not writable (non-copy-assignable or const)", detail::demangle<T>().data());
|
return error_result("cannot perform a 'set': '%s's iterator reference is not writable (non-copy-assignable or const)", detail::demangle<T>().data());
|
||||||
|
|
|
@ -668,7 +668,7 @@ namespace sol {
|
||||||
return set_writable(is_writable(), L, self, it, std::move(value));
|
return set_writable(is_writable(), L, self, it, std::move(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_comparative(std::true_type, lua_State* L, T& self, stack_object okey, stack_object value) {
|
static error_result set_comparative(std::true_type, lua_State* L, T& self, stack_object okey, stack_object value) {
|
||||||
decltype(auto) key = okey.as<K>();
|
decltype(auto) key = okey.as<K>();
|
||||||
if (!is_writable::value) {
|
if (!is_writable::value) {
|
||||||
return error_result("cannot perform a 'set': '%s's iterator reference is not writable (non-copy-assignable or const)", detail::demangle<T>().data());
|
return error_result("cannot perform a 'set': '%s's iterator reference is not writable (non-copy-assignable or const)", detail::demangle<T>().data());
|
||||||
|
|
|
@ -15,6 +15,104 @@
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
|
class int_shim {
|
||||||
|
public:
|
||||||
|
int_shim() = default;
|
||||||
|
|
||||||
|
int_shim(int x)
|
||||||
|
: x_(x) {
|
||||||
|
}
|
||||||
|
|
||||||
|
int val() const {
|
||||||
|
return x_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int x_ = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
class input_it {
|
||||||
|
public:
|
||||||
|
typedef std::input_iterator_tag iterator_category;
|
||||||
|
typedef int_shim value_type;
|
||||||
|
typedef value_type& reference;
|
||||||
|
typedef const value_type& const_reference;
|
||||||
|
typedef value_type* pointer;
|
||||||
|
typedef std::ptrdiff_t difference_type;
|
||||||
|
|
||||||
|
input_it() = default;
|
||||||
|
|
||||||
|
input_it(int n, int m)
|
||||||
|
: n_(n), m_(m), value_(n_) {
|
||||||
|
assert(n_ >= 0);
|
||||||
|
assert(m_ >= 0);
|
||||||
|
assert(n_ <= m_);
|
||||||
|
|
||||||
|
if (!n_ && !m_) {
|
||||||
|
n_ = -1;
|
||||||
|
m_ = -1;
|
||||||
|
value_ = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const int_shim& operator*() const {
|
||||||
|
return value_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int_shim* operator->() const {
|
||||||
|
return &value_;
|
||||||
|
}
|
||||||
|
|
||||||
|
input_it& operator++() {
|
||||||
|
assert(n_ >= 0);
|
||||||
|
assert(m_ >= 0);
|
||||||
|
if (n_ == m_ - 1) {
|
||||||
|
n_ = m_ = -1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
++n_;
|
||||||
|
}
|
||||||
|
value_ = n_;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const input_it& i) const {
|
||||||
|
return n_ == i.n_ && m_ == i.m_;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(const input_it& i) const {
|
||||||
|
return !(*this == i);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int n_ = -1;
|
||||||
|
int m_ = -1;
|
||||||
|
int_shim value_;
|
||||||
|
};
|
||||||
|
|
||||||
|
class not_really_a_container {
|
||||||
|
public:
|
||||||
|
using value_type = int_shim;
|
||||||
|
using iterator = input_it;
|
||||||
|
using const_iterator = input_it;
|
||||||
|
|
||||||
|
const_iterator begin() const {
|
||||||
|
return iterator(0, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
const_iterator end() const {
|
||||||
|
return iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type gcc_warning_block() {
|
||||||
|
return int_shim();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t size() const {
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
auto test_table_return_one() {
|
auto test_table_return_one() {
|
||||||
return sol::as_table(std::vector<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
|
return sol::as_table(std::vector<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
|
||||||
}
|
}
|
||||||
|
@ -821,104 +919,6 @@ TEST_CASE("containers/non_copyable", "make sure non-copyable types in containers
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("containers/input iterators", "test shitty input iterators that are all kinds of B L E H") {
|
TEST_CASE("containers/input iterators", "test shitty input iterators that are all kinds of B L E H") {
|
||||||
class int_shim {
|
|
||||||
public:
|
|
||||||
int_shim() = default;
|
|
||||||
|
|
||||||
int_shim(int x)
|
|
||||||
: x_(x) {
|
|
||||||
}
|
|
||||||
|
|
||||||
int val() const {
|
|
||||||
return x_;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
int x_ = -1;
|
|
||||||
};
|
|
||||||
|
|
||||||
class input_it {
|
|
||||||
public:
|
|
||||||
typedef std::input_iterator_tag iterator_category;
|
|
||||||
typedef int_shim value_type;
|
|
||||||
typedef value_type& reference;
|
|
||||||
typedef const value_type& const_reference;
|
|
||||||
typedef value_type* pointer;
|
|
||||||
typedef std::ptrdiff_t difference_type;
|
|
||||||
|
|
||||||
input_it() = default;
|
|
||||||
|
|
||||||
input_it(int n, int m)
|
|
||||||
: n_(n), m_(m), value_(n_) {
|
|
||||||
assert(n_ >= 0);
|
|
||||||
assert(m_ >= 0);
|
|
||||||
assert(n_ <= m_);
|
|
||||||
|
|
||||||
if (!n_ && !m_) {
|
|
||||||
n_ = -1;
|
|
||||||
m_ = -1;
|
|
||||||
value_ = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const int_shim& operator*() const {
|
|
||||||
return value_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int_shim* operator->() const {
|
|
||||||
return &value_;
|
|
||||||
}
|
|
||||||
|
|
||||||
input_it& operator++() {
|
|
||||||
assert(n_ >= 0);
|
|
||||||
assert(m_ >= 0);
|
|
||||||
if (n_ == m_ - 1) {
|
|
||||||
n_ = m_ = -1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
++n_;
|
|
||||||
}
|
|
||||||
value_ = n_;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const input_it& i) const {
|
|
||||||
return n_ == i.n_ && m_ == i.m_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!=(const input_it& i) const {
|
|
||||||
return !(*this == i);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
int n_ = -1;
|
|
||||||
int m_ = -1;
|
|
||||||
int_shim value_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class not_really_a_container {
|
|
||||||
public:
|
|
||||||
using value_type = int_shim;
|
|
||||||
using iterator = input_it;
|
|
||||||
using const_iterator = input_it;
|
|
||||||
|
|
||||||
const_iterator begin() const {
|
|
||||||
return iterator(0, 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
const_iterator end() const {
|
|
||||||
return iterator();
|
|
||||||
}
|
|
||||||
|
|
||||||
value_type gcc_warning_block() {
|
|
||||||
return int_shim();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::size_t size() const {
|
|
||||||
return 100;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
sol::state lua;
|
sol::state lua;
|
||||||
lua.open_libraries(sol::lib::base, sol::lib::package);
|
lua.open_libraries(sol::lib::base, sol::lib::package);
|
||||||
lua.new_usertype<int_shim>("int_shim",
|
lua.new_usertype<int_shim>("int_shim",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user