forked from OctaForge/libostd
correct noexcept in coroutine.hh
This commit is contained in:
parent
88e6fe3906
commit
c07f7d5ddc
|
@ -355,14 +355,14 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
coroutine(coroutine const &) = delete;
|
coroutine(coroutine const &) = delete;
|
||||||
coroutine(coroutine &&c):
|
coroutine(coroutine &&c) noexcept:
|
||||||
base_t(std::move(c)), p_func(std::move(c.p_func))
|
base_t(std::move(c)), p_func(std::move(c.p_func))
|
||||||
{
|
{
|
||||||
c.p_func = nullptr;
|
c.p_func = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
coroutine &operator=(coroutine const &) = delete;
|
coroutine &operator=(coroutine const &) = delete;
|
||||||
coroutine &operator=(coroutine &&c) {
|
coroutine &operator=(coroutine &&c) noexcept {
|
||||||
base_t::operator=(std::move(c));
|
base_t::operator=(std::move(c));
|
||||||
p_func = std::move(c.p_func);
|
p_func = std::move(c.p_func);
|
||||||
c.p_func = nullptr;
|
c.p_func = nullptr;
|
||||||
|
@ -372,7 +372,7 @@ public:
|
||||||
this->unwind();
|
this->unwind();
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit operator bool() const {
|
explicit operator bool() const noexcept {
|
||||||
return !this->is_dead();
|
return !this->is_dead();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,7 +389,7 @@ public:
|
||||||
return resume(std::forward<A>(args)...);
|
return resume(std::forward<A>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap(coroutine &other) {
|
void swap(coroutine &other) noexcept {
|
||||||
std::swap(p_func, other.p_func);
|
std::swap(p_func, other.p_func);
|
||||||
base_t::swap(other);
|
base_t::swap(other);
|
||||||
}
|
}
|
||||||
|
@ -426,7 +426,7 @@ release:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename R, typename ...A>
|
template<typename R, typename ...A>
|
||||||
inline void swap(coroutine<R(A...)> &a, coroutine<R(A...)> &b) {
|
inline void swap(coroutine<R(A...)> &a, coroutine<R(A...)> &b) noexcept {
|
||||||
a.swap(b);
|
a.swap(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,7 +486,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
generator(generator const &) = delete;
|
generator(generator const &) = delete;
|
||||||
generator(generator &&c):
|
generator(generator &&c) noexcept:
|
||||||
base_t(std::move(c)), p_func(std::move(c.p_func)), p_result(c.p_result)
|
base_t(std::move(c)), p_func(std::move(c.p_func)), p_result(c.p_result)
|
||||||
{
|
{
|
||||||
c.p_func = nullptr;
|
c.p_func = nullptr;
|
||||||
|
@ -494,7 +494,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
generator &operator=(generator const &) = delete;
|
generator &operator=(generator const &) = delete;
|
||||||
generator &operator=(generator &&c) {
|
generator &operator=(generator &&c) noexcept {
|
||||||
base_t::operator=(std::move(c));
|
base_t::operator=(std::move(c));
|
||||||
p_func = std::move(c.p_func);
|
p_func = std::move(c.p_func);
|
||||||
p_result = c.p_result;
|
p_result = c.p_result;
|
||||||
|
@ -506,7 +506,7 @@ public:
|
||||||
this->unwind();
|
this->unwind();
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit operator bool() const {
|
explicit operator bool() const noexcept {
|
||||||
return !this->is_dead();
|
return !this->is_dead();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,17 +531,17 @@ public:
|
||||||
return *p_result;
|
return *p_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool empty() const {
|
bool empty() const noexcept {
|
||||||
return (!p_result || this->is_dead());
|
return (!p_result || this->is_dead());
|
||||||
}
|
}
|
||||||
|
|
||||||
generator_range<T> iter();
|
generator_range<T> iter() noexcept;
|
||||||
|
|
||||||
/* for range for loop; they're the same, operator!= bypasses comparing */
|
/* for range for loop; they're the same, operator!= bypasses comparing */
|
||||||
detail::generator_iterator<T> begin();
|
detail::generator_iterator<T> begin() noexcept;
|
||||||
detail::generator_iterator<T> end();
|
detail::generator_iterator<T> end() noexcept;
|
||||||
|
|
||||||
void swap(generator &other) {
|
void swap(generator &other) noexcept {
|
||||||
using std::swap;
|
using std::swap;
|
||||||
swap(p_func, other.p_func);
|
swap(p_func, other.p_func);
|
||||||
swap(p_result, other.p_result);
|
swap(p_result, other.p_result);
|
||||||
|
@ -577,7 +577,7 @@ release:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline void swap(generator<T> &a, generator<T> &b) {
|
inline void swap(generator<T> &a, generator<T> &b) noexcept {
|
||||||
a.swap(b);
|
a.swap(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,7 +606,7 @@ struct generator_range: input_range<generator_range<T>> {
|
||||||
generator_range() = delete;
|
generator_range() = delete;
|
||||||
generator_range(generator<T> &g): p_gen(&g) {}
|
generator_range(generator<T> &g): p_gen(&g) {}
|
||||||
|
|
||||||
bool empty() const {
|
bool empty() const noexcept {
|
||||||
return p_gen->empty();
|
return p_gen->empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,7 +618,7 @@ struct generator_range: input_range<generator_range<T>> {
|
||||||
return p_gen->value();
|
return p_gen->value();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool equals_front(generator_range const &g) const {
|
bool equals_front(generator_range const &g) const noexcept {
|
||||||
return p_gen == g.p_gen;
|
return p_gen == g.p_gen;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
@ -626,7 +626,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
generator_range<T> generator<T>::iter() {
|
generator_range<T> generator<T>::iter() noexcept {
|
||||||
return generator_range<T>{*this};
|
return generator_range<T>{*this};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,7 +637,7 @@ namespace detail {
|
||||||
generator_iterator() = delete;
|
generator_iterator() = delete;
|
||||||
generator_iterator(generator<T> &g): p_gen(&g) {}
|
generator_iterator(generator<T> &g): p_gen(&g) {}
|
||||||
|
|
||||||
bool operator!=(generator_iterator const &) {
|
bool operator!=(generator_iterator const &) noexcept {
|
||||||
return !p_gen->empty();
|
return !p_gen->empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -656,12 +656,12 @@ namespace detail {
|
||||||
} /* namespace detail */
|
} /* namespace detail */
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
detail::generator_iterator<T> generator<T>::begin() {
|
detail::generator_iterator<T> generator<T>::begin() noexcept {
|
||||||
return detail::generator_iterator<T>{*this};
|
return detail::generator_iterator<T>{*this};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
detail::generator_iterator<T> generator<T>::end() {
|
detail::generator_iterator<T> generator<T>::end() noexcept {
|
||||||
return detail::generator_iterator<T>{*this};
|
return detail::generator_iterator<T>{*this};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue