Commit 7933d8e1 authored by Xavier Thompson's avatar Xavier Thompson

Rename continuation.hpp into theft_point.hpp

parent 3f3c9f45
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
#include <coroutine> #include <coroutine>
#include <cstdint> #include <cstdint>
#include <typon/continuation.hpp>
#include <typon/result.hpp> #include <typon/result.hpp>
#include <typon/scheduler.hpp> #include <typon/scheduler.hpp>
#include <typon/stack.hpp> #include <typon/stack.hpp>
#include <typon/theft_point.hpp>
namespace typon namespace typon
...@@ -18,7 +18,7 @@ namespace typon ...@@ -18,7 +18,7 @@ namespace typon
struct [[nodiscard]] Future struct [[nodiscard]] Future
{ {
struct promise_type; struct promise_type;
using u64 = Continuation::u64; using u64 = TheftPoint::u64;
using enum std::memory_order; using enum std::memory_order;
...@@ -87,10 +87,10 @@ namespace typon ...@@ -87,10 +87,10 @@ namespace typon
{ {
std::coroutine_handle<> await_suspend(std::coroutine_handle<promise_type> coroutine) noexcept std::coroutine_handle<> await_suspend(std::coroutine_handle<promise_type> coroutine) noexcept
{ {
auto continuation = Scheduler::peek(); auto theftpoint = Scheduler::peek();
if (Scheduler::pop()) if (Scheduler::pop())
{ {
return continuation->_coroutine; return theftpoint->_coroutine;
} }
auto state = coroutine.promise()._state.exchange(ready, acq_rel); auto state = coroutine.promise()._state.exchange(ready, acq_rel);
if (state == discarded) if (state == discarded)
...@@ -118,7 +118,7 @@ namespace typon ...@@ -118,7 +118,7 @@ namespace typon
{ {
Future _future; Future _future;
std::coroutine_handle<promise_type> _coroutine; std::coroutine_handle<promise_type> _coroutine;
Continuation _continuation; TheftPoint _theftpoint;
awaitable(Future && f, std::coroutine_handle<promise_type> c) noexcept awaitable(Future && f, std::coroutine_handle<promise_type> c) noexcept
: _future(std::move(f)) : _future(std::move(f))
...@@ -132,16 +132,16 @@ namespace typon ...@@ -132,16 +132,16 @@ namespace typon
auto await_suspend(std::coroutine_handle<> continuation) noexcept auto await_suspend(std::coroutine_handle<> continuation) noexcept
{ {
_continuation._coroutine = continuation; _theftpoint._coroutine = continuation;
std::coroutine_handle<> on_stack_handle = _coroutine; std::coroutine_handle<> on_stack_handle = _coroutine;
Scheduler::push(&(_continuation)); Scheduler::push(&(_theftpoint));
return on_stack_handle; return on_stack_handle;
} }
auto await_resume() noexcept auto await_resume() noexcept
{ {
_future._ready = !_continuation._thefts; _future._ready = !_theftpoint._thefts;
return std::move(_future); return std::move(_future);
} }
}; };
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include <typon/continuation.hpp>
#include <typon/event_count.hpp> #include <typon/event_count.hpp>
#include <typon/garbage_collector.hpp> #include <typon/garbage_collector.hpp>
#include <typon/pool.hpp> #include <typon/pool.hpp>
#include <typon/random.hpp> #include <typon/random.hpp>
#include <typon/stack.hpp> #include <typon/stack.hpp>
#include <typon/theft_point.hpp>
namespace typon namespace typon
...@@ -58,7 +58,7 @@ namespace typon ...@@ -58,7 +58,7 @@ namespace typon
get()._notifyer.notify_one(); get()._notifyer.notify_one();
} }
static void push(Continuation * task) noexcept static void push(TheftPoint * task) noexcept
{ {
get()._stack[thread_id]->push(task); get()._stack[thread_id]->push(task);
} }
...@@ -73,7 +73,7 @@ namespace typon ...@@ -73,7 +73,7 @@ namespace typon
return result; return result;
} }
static Continuation * peek() noexcept static TheftPoint * peek() noexcept
{ {
return get()._stack[thread_id]->peek(); return get()._stack[thread_id]->peek();
} }
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <limits> #include <limits>
#include <vector> #include <vector>
#include <typon/continuation.hpp> #include <typon/theft_point.hpp>
namespace typon namespace typon
...@@ -65,9 +65,9 @@ namespace typon ...@@ -65,9 +65,9 @@ namespace typon
}; };
struct Span : Continuation struct Span : TheftPoint
{ {
using u64 = Continuation::u64; using u64 = TheftPoint::u64;
static constexpr u64 UMAX = std::numeric_limits<u64>::max(); static constexpr u64 UMAX = std::numeric_limits<u64>::max();
...@@ -78,7 +78,7 @@ namespace typon ...@@ -78,7 +78,7 @@ namespace typon
std::atomic<u64> _n = UMAX; std::atomic<u64> _n = UMAX;
Span(std::coroutine_handle<> coroutine) noexcept Span(std::coroutine_handle<> coroutine) noexcept
: Continuation(coroutine) : TheftPoint(coroutine)
{} {}
void resume() void resume()
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
#include <typon/continuation.hpp>
#include <typon/ring_buffer.hpp> #include <typon/ring_buffer.hpp>
#include <typon/theft_point.hpp>
namespace typon namespace typon
...@@ -16,7 +16,7 @@ namespace typon ...@@ -16,7 +16,7 @@ namespace typon
struct Stack struct Stack
{ {
using RingBuffer = typon::RingBuffer<Continuation *>; using RingBuffer = typon::RingBuffer<TheftPoint *>;
using u64 = RingBuffer::u64; using u64 = RingBuffer::u64;
using enum std::memory_order; using enum std::memory_order;
...@@ -39,7 +39,7 @@ namespace typon ...@@ -39,7 +39,7 @@ namespace typon
delete _buffer.load(relaxed); delete _buffer.load(relaxed);
} }
void push(Continuation * x) noexcept void push(TheftPoint * x) noexcept
{ {
u64 bottom = _bottom.load(relaxed); u64 bottom = _bottom.load(relaxed);
u64 top = _top.load(acquire); u64 top = _top.load(acquire);
...@@ -74,14 +74,14 @@ namespace typon ...@@ -74,14 +74,14 @@ namespace typon
return false; return false;
} }
Continuation * peek() noexcept TheftPoint * peek() noexcept
{ {
u64 bottom = _bottom.load(relaxed) - 1; u64 bottom = _bottom.load(relaxed) - 1;
RingBuffer * buffer = _buffer.load(relaxed); RingBuffer * buffer = _buffer.load(relaxed);
return buffer->get(bottom); return buffer->get(bottom);
} }
Continuation * steal() noexcept TheftPoint * steal() noexcept
{ {
u64 top = _top.load(acquire); u64 top = _top.load(acquire);
std::atomic_thread_fence(seq_cst); std::atomic_thread_fence(seq_cst);
...@@ -89,7 +89,7 @@ namespace typon ...@@ -89,7 +89,7 @@ namespace typon
RingBuffer * buffer = _buffer.load(consume); RingBuffer * buffer = _buffer.load(consume);
if (top < bottom) if (top < bottom)
{ {
Continuation * x = buffer->get(top); TheftPoint * x = buffer->get(top);
if (!_top.compare_exchange_strong(top, top + 1, seq_cst, relaxed)) if (!_top.compare_exchange_strong(top, top + 1, seq_cst, relaxed))
{ {
return nullptr; return nullptr;
...@@ -99,12 +99,12 @@ namespace typon ...@@ -99,12 +99,12 @@ namespace typon
return nullptr; return nullptr;
} }
Continuation * pop_top() noexcept TheftPoint * pop_top() noexcept
{ {
u64 top = _top.load(relaxed); u64 top = _top.load(relaxed);
u64 bottom = _bottom.load(relaxed); u64 bottom = _bottom.load(relaxed);
auto buffer = _buffer.load(relaxed); auto buffer = _buffer.load(relaxed);
Continuation * x = nullptr; TheftPoint * x = nullptr;
if (top < bottom) if (top < bottom)
{ {
x = buffer->get(top); x = buffer->get(top);
......
#ifndef TYPON_CONTINUATION_HPP_INCLUDED #ifndef TYPON_THEFT_POINT_HPP_INCLUDED
#define TYPON_CONTINUATION_HPP_INCLUDED #define TYPON_THEFT_POINT_HPP_INCLUDED
#include <coroutine> #include <coroutine>
#include <cstdint> #include <cstdint>
...@@ -8,16 +8,16 @@ ...@@ -8,16 +8,16 @@
namespace typon namespace typon
{ {
struct Continuation struct TheftPoint
{ {
using u64 = std::uint_fast64_t; using u64 = std::uint_fast64_t;
std::coroutine_handle<> _coroutine; std::coroutine_handle<> _coroutine;
u64 _thefts = 0; u64 _thefts = 0;
Continuation() noexcept {} TheftPoint() noexcept {}
Continuation(std::coroutine_handle<> coroutine) noexcept TheftPoint(std::coroutine_handle<> coroutine) noexcept
: _coroutine(coroutine) : _coroutine(coroutine)
{} {}
}; };
...@@ -25,4 +25,4 @@ namespace typon ...@@ -25,4 +25,4 @@ namespace typon
} }
#endif // TYPON_CONTINUATION_HPP_INCLUDED #endif // TYPON_THEFT_POINT_HPP_INCLUDED
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment