[/
  (C) Copyright 2008-2013 Vicente J. Botet Escriba
  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).
]

[/==========================================================================================]
[section:lockable_adapter_hpp Header `<boost/thread/lockable_adapter.hpp>`]
[/==========================================================================================]

    namespace boost {
        template <typename Lockable> class basic_lockable_adapter;
        template <typename Lockable> class lockable_adapter;
        template <typename TimedLock> class timed_lockable_adapter;
        template <typename SharableLock> class shared_lockable_adapter;
        template <typename UpgradableLock> class upgrade_lockable_adapter;
    }

[section Template Class `basic_lockable_adapter<>`]

    template <typename Lockable>
    class basic_lockable_adapter {
    public:
        basic_lockable_adapter(basic_lockable_adapter const&) = delete
        basic_lockable_adapter& opearator=(basic_lockable_adapter const&) = delete

        typedef Lockable mutex_type;

        basic_lockable_adapter() {}
        void lock();
        void unlock();
        bool try_lock();
    };

[endsect]
[section Template Class `lockable_adapter<>`]

    template <typename Lockable>
    class lockable_adapter : : public basic_lockable_adapter<Lockable> {
    public:
        lockable_adapter() {}

        bool try_lock();
    };

[endsect]

[section Template Class `timed_lockable_adapter<>`]

    template <typename TimedLock>
    class timed_lockable_adapter : public lockable_adapter<TimedLock> {
    public:
        timed_lockable_adapter() {}

        bool try_lock_until(system_time const & abs_time);
        template<typename TimeDuration>
        bool try_lock_for(TimeDuration const & relative_time);
        
        void lock_until(system_time const & abs_time);
        template<typename TimeDuration>
        void lock_for(TimeDuration const & relative_time);
    };

[endsect]
[section Template Class `shared_lockable_adapter<>`]

    template <typename SharableLock>
    class shared_lockable_adapter : public timed_lockable_adapter<SharableLock>     {
    public:
        shared_lockable_adapter() {}
        void lock_shared();
        bool try_lock_shared();
        void unlock_shared();

        bool try_lock_shared_until(system_time const& t);
        template<typename TimeDuration>   
        bool try_lock_shared_for(TimeDuration const& t);
        
        template<typename TimeDuration>   
        void lock_shared_for(TimeDuration const& t);
        void lock_shared_until(system_time const& t);
    };


[endsect]
[section Template Class `upgrade_lockable_adapter<>`]

    template <typename UpgradableLock>
    class upgrade_lockable_adapter : public shared_lockable_adapter<UpgradableLock>{
    public:
        upgrade_lockable_adapter();

        void lock_upgrade();
        bool try_lock_upgrade();
        void unlock_upgrade();

        void unlock_upgrade_and_lock();
        void unlock_and_lock_upgrade();
        void unlock_and_lock_shared();
        void unlock_upgrade_and_lock_shared();
        
        bool try_lock_upgrade_until(system_time const&t);
        template<typename TimeDuration>   
        bool try_lock_upgrade_for(TimeDuration const&t);
        void lock_upgrade_until(system_time const&t);
        template<typename TimeDuration>   
        void lock_upgrade_for(TimeDuration const&t);
    };



[endsect]
[endsect]



