#define _pbd_spinlock_h_
#include <boost/smart_ptr/detail/spinlock.hpp>
+#include <cstring>
+
#include "pbd/libpbd_visibility.h"
namespace PBD {
struct spinlock_t {
public:
- spinlock_t ();
+#ifdef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
+ /* C++11 non-static data member initialization,
+ * with non-copyable std::atomic ATOMIC_FLAG_INIT
+ */
+ spinlock_t () : l (BOOST_DETAIL_SPINLOCK_INIT) {};
+#else
+ /* default C++ assign struct's first member */
+ spinlock_t ()
+ {
+ boost::detail::spinlock init = BOOST_DETAIL_SPINLOCK_INIT;
+ std::memcpy (&l, &init, sizeof (init));
+ }
+#endif
void lock () { l.lock (); }
void unlock () { l.unlock (); }
bool try_lock () { return l.try_lock (); }
+
private:
boost::detail::spinlock l;
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#ifdef PLATFORM_WINDOWS
-#include <windows.h>
-#include <malloc.h>
-#endif
-
-#include <cstring>
-
#include "pbd/spinlock.h"
using namespace PBD;
-spinlock_t::spinlock_t ()
-#ifdef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
- /* C++11 non-static data member initialization,
- * with non-copyable std::atomic ATOMIC_FLAG_INIT
- */
- : l {BOOST_DETAIL_SPINLOCK_INIT} {}
-#else
- /* default C++ assign struct's first member */
-{
- boost::detail::spinlock init = BOOST_DETAIL_SPINLOCK_INIT;
- std::memcpy (&l, &init, sizeof (init));
-}
-#endif
-
SpinLock::SpinLock (spinlock_t& lock)
: _lock (lock)
{