// Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_SYNC_EXTENSION_KERNEl_1_
#define DLIB_SYNC_EXTENSION_KERNEl_1_
#include "../threads.h"
#include "../algs.h"
#include "sync_extension_kernel_abstract.h"
namespace dlib
{
template <
typename base
>
class sync_extension_kernel_1 : public base
{
rmutex m;
rsignaler s;
public:
sync_extension_kernel_1 () : s(m) {}
template < typename T >
sync_extension_kernel_1 (const T& one) : base(one),s(m) {}
template < typename T, typename U >
sync_extension_kernel_1 (const T& one, const U& two) : base(one,two),s(m) {}
const rmutex& get_mutex(
) const { return m; }
void lock (
) const { m.lock(); }
void unlock (
) const { m.unlock(); }
void wait (
) const { s.wait(); }
bool wait_or_timeout (
unsigned long milliseconds
) const { return s.wait_or_timeout(milliseconds); }
void broadcast (
) const { s.broadcast(); }
void signal (
) const { s.signal(); }
};
template <
typename base
>
inline void swap (
sync_extension_kernel_1& a,
sync_extension_kernel_1& b
) { a.swap(b); }
}
#endif // DLIB_SYNC_EXTENSION_KERNEl_1_