#pragma once #include "notifier.h" #include "lua-helpers.h" #include "gc-data.h" #include "gc-object.h" #include namespace effil { class ChannelData : public GCData { public: std::mutex lock_; std::condition_variable cv_; size_t capacity_; std::queue channel_; }; class Channel : public GCObject, public IInterruptable { public: static void exportAPI(sol::state_view& lua); bool push(const sol::variadic_args& args); StoredArray pop(const sol::optional& duration, const sol::optional& period); size_t size(); void interrupt() final; private: Channel() = default; void initialize(const sol::stack_object& capacity); friend class GC; }; } // namespace effil