mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
const-correctness since nobody is going to let me be fuckin' lazy .-.
This commit is contained in:
parent
976f236706
commit
f15f8dd5a7
|
@ -28,7 +28,8 @@
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
namespace sol {
|
namespace sol {
|
||||||
struct va_iterator : std::iterator<std::random_access_iterator_tag, stack_proxy, std::ptrdiff_t, stack_proxy*, stack_proxy> {
|
template <bool is_const>
|
||||||
|
struct va_iterator : std::iterator<std::random_access_iterator_tag, std::conditional_t<is_const, const stack_proxy, stack_proxy>, std::ptrdiff_t, std::conditional_t<is_const, const stack_proxy*, stack_proxy*>, std::conditional_t<is_const, const stack_proxy, stack_proxy>> {
|
||||||
lua_State* L;
|
lua_State* L;
|
||||||
int index;
|
int index;
|
||||||
int stacktop;
|
int stacktop;
|
||||||
|
@ -37,12 +38,11 @@ namespace sol {
|
||||||
va_iterator() : L(nullptr), index(std::numeric_limits<int>::max()), stacktop(std::numeric_limits<int>::max()) {}
|
va_iterator() : L(nullptr), index(std::numeric_limits<int>::max()), stacktop(std::numeric_limits<int>::max()) {}
|
||||||
va_iterator(lua_State* L, int index, int stacktop) : L(L), index(index), stacktop(stacktop), sp(L, index) {}
|
va_iterator(lua_State* L, int index, int stacktop) : L(L), index(index), stacktop(stacktop), sp(L, index) {}
|
||||||
|
|
||||||
stack_proxy operator*() {
|
reference operator*() {
|
||||||
sp = stack_proxy(L, index);
|
return stack_proxy(L, index);
|
||||||
return sp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stack_proxy* operator->() {
|
pointer operator->() {
|
||||||
sp = stack_proxy(L, index);
|
sp = stack_proxy(L, index);
|
||||||
return &sp;
|
return &sp;
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ namespace sol {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
stack_proxy operator[](difference_type idx) {
|
reference operator[](difference_type idx) {
|
||||||
return stack_proxy(L, index + static_cast<int>(idx));
|
return stack_proxy(L, index + static_cast<int>(idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,8 +123,9 @@ namespace sol {
|
||||||
return index >= r.index;
|
return index >= r.index;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline va_iterator operator+(typename va_iterator::difference_type n, const va_iterator& r) {
|
template <bool is_const>
|
||||||
|
inline va_iterator<is_const> operator+(typename va_iterator<is_const>::difference_type n, const va_iterator<is_const>& r) {
|
||||||
return r + n;
|
return r + n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,8 +141,8 @@ public:
|
||||||
typedef stack_proxy* pointer;
|
typedef stack_proxy* pointer;
|
||||||
typedef std::ptrdiff_t difference_type;
|
typedef std::ptrdiff_t difference_type;
|
||||||
typedef std::size_t size_type;
|
typedef std::size_t size_type;
|
||||||
typedef va_iterator iterator;
|
typedef va_iterator<false> iterator;
|
||||||
typedef const va_iterator const_iterator;
|
typedef va_iterator<true> const_iterator;
|
||||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||||
|
|
||||||
|
@ -170,10 +171,10 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator begin() { return va_iterator(L, index, stacktop + 1); }
|
iterator begin() { return iterator(L, index, stacktop + 1); }
|
||||||
iterator end() { return va_iterator(L, stacktop + 1, stacktop + 1); }
|
iterator end() { return iterator(L, stacktop + 1, stacktop + 1); }
|
||||||
const_iterator begin() const { return va_iterator(L, index, stacktop + 1); }
|
const_iterator begin() const { return const_iterator(L, index, stacktop + 1); }
|
||||||
const_iterator end() const { return va_iterator(L, stacktop + 1, stacktop + 1); }
|
const_iterator end() const { return const_iterator(L, stacktop + 1, stacktop + 1); }
|
||||||
const_iterator cbegin() const { return begin(); }
|
const_iterator cbegin() const { return begin(); }
|
||||||
const_iterator cend() const { return end(); }
|
const_iterator cend() const { return end(); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user