12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Copyright Nat Goodspeed 2014.
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- // Define fiber_properties, a base class from which a library consumer can
- // derive a subclass with specific properties important to a user-coded
- // scheduler.
- #ifndef BOOST_FIBERS_PROPERTIES_HPP
- #define BOOST_FIBERS_PROPERTIES_HPP
- #include <boost/fiber/detail/config.hpp>
- #ifdef BOOST_HAS_ABI_HEADERS
- # include BOOST_ABI_PREFIX
- #endif
- # if defined(BOOST_MSVC)
- # pragma warning(push)
- # pragma warning(disable:4275)
- # endif
- namespace boost {
- namespace fibers {
- class context;
- namespace algo {
- class algorithm;
- }
- class BOOST_FIBERS_DECL fiber_properties {
- protected:
- // initialized by constructor
- context * ctx_;
- // set every time this fiber becomes READY
- algo::algorithm * algo_{ nullptr };
- // Inform the relevant algorithm instance that something important
- // has changed, so it can (presumably) adjust its data structures
- // accordingly.
- void notify() noexcept;
- public:
- // Any specific property setter method, after updating the relevant
- // instance variable, can/should call notify().
- // fiber_properties, and by implication every subclass, must accept a back
- // pointer to its context.
- explicit fiber_properties( context * ctx) noexcept :
- ctx_{ ctx } {
- }
- // We need a virtual destructor (hence a vtable) because fiber_properties
- // is stored polymorphically (as fiber_properties*) in context, and
- // destroyed via that pointer.
- virtual ~fiber_properties() = default;
- // not really intended for public use, but algorithm_with_properties
- // must be able to call this
- void set_algorithm( algo::algorithm * algo) noexcept {
- algo_ = algo;
- }
- };
- }} // namespace boost::fibers
- # if defined(BOOST_MSVC)
- # pragma warning(pop)
- # endif
- #ifdef BOOST_HAS_ABI_HEADERS
- # include BOOST_ABI_SUFFIX
- #endif
- #endif // BOOST_FIBERS_PROPERTIES_HPP
|