some OSX build fixes, missing virtual destructors

metadata
Wenzel Jakob 2010-09-20 22:19:41 +02:00
parent 686030ef7e
commit e2dfe9a330
10 changed files with 527 additions and 255 deletions

View File

@ -39,6 +39,8 @@ public:
* at the given wavelength. * at the given wavelength.
*/ */
virtual Float eval(Float lambda) const = 0; virtual Float eval(Float lambda) const = 0;
virtual ~SmoothSpectrum() { }
}; };
/** /**
@ -57,6 +59,8 @@ public:
m_temperature = temperature; m_temperature = temperature;
} }
virtual ~BlackBodySpectrum() { }
/** \brief Return the value of the spectral power distribution /** \brief Return the value of the spectral power distribution
* at the given wavelength. * at the given wavelength.
*/ */
@ -91,6 +95,8 @@ public:
* at the given wavelength. * at the given wavelength.
*/ */
virtual Float eval(Float lambda) const; virtual Float eval(Float lambda) const;
virtual ~InterpolatedSpectrum() { }
private: private:
std::vector<Float> m_wavelength, m_value; std::vector<Float> m_wavelength, m_value;
}; };

View File

@ -36,6 +36,8 @@ class GPUProgram;
class MTS_EXPORT_RENDER HWResource { class MTS_EXPORT_RENDER HWResource {
public: public:
virtual Shader *createShader(Renderer *renderer) const; virtual Shader *createShader(Renderer *renderer) const;
virtual ~HWResource() { }
}; };
/** /**

View File

@ -19,7 +19,9 @@
#include <mitsuba/core/plugin.h> #include <mitsuba/core/plugin.h>
#include <mitsuba/render/gatherproc.h> #include <mitsuba/render/gatherproc.h>
#include <mitsuba/render/renderqueue.h> #include <mitsuba/render/renderqueue.h>
#if !defined(__OSX__)
#include <omp.h> #include <omp.h>
#endif
MTS_NAMESPACE_BEGIN MTS_NAMESPACE_BEGIN
@ -121,9 +123,10 @@ public:
Vector2i cropSize = film->getCropSize(); Vector2i cropSize = film->getCropSize();
Point2i cropOffset = film->getCropOffset(); Point2i cropOffset = film->getCropOffset();
omp_set_num_threads(nCores);
#if !defined(__OSX__)
omp_set_num_threads(nCores);
#endif
m_gatherPoints.clear(); m_gatherPoints.clear();
m_running = true; m_running = true;
for (size_t i=0; i<m_blocks.size(); ++i) for (size_t i=0; i<m_blocks.size(); ++i)

View File

@ -20,7 +20,9 @@
#include <mitsuba/core/bitmap.h> #include <mitsuba/core/bitmap.h>
#include <mitsuba/render/gatherproc.h> #include <mitsuba/render/gatherproc.h>
#include <mitsuba/render/renderqueue.h> #include <mitsuba/render/renderqueue.h>
#if !defined(__OSX__)
#include <omp.h> #include <omp.h>
#endif
MTS_NAMESPACE_BEGIN MTS_NAMESPACE_BEGIN
@ -148,7 +150,9 @@ public:
int samplerResID = sched->registerManifoldResource( int samplerResID = sched->registerManifoldResource(
static_cast<std::vector<SerializableObject*> &>(samplers)); static_cast<std::vector<SerializableObject*> &>(samplers));
#if !defined(__OSX__)
omp_set_num_threads(nCores); omp_set_num_threads(nCores);
#endif
int it=0; int it=0;
while (m_running) { while (m_running) {
@ -174,7 +178,11 @@ public:
#pragma omp parallel for schedule(dynamic) #pragma omp parallel for schedule(dynamic)
for (int i=-1; i<(int) m_gatherBlocks.size(); ++i) { for (int i=-1; i<(int) m_gatherBlocks.size(); ++i) {
std::vector<GatherPoint> &gatherPoints = m_gatherBlocks[i]; std::vector<GatherPoint> &gatherPoints = m_gatherBlocks[i];
#if !defined(__OSX__)
Sampler *sampler = static_cast<Sampler *>(samplers[omp_get_thread_num()]); Sampler *sampler = static_cast<Sampler *>(samplers[omp_get_thread_num()]);
#else
Sampler *sampler = static_cast<Sampler *>(samplers[0]);
#endif
int xofs = m_offset[i].x, yofs = m_offset[i].y; int xofs = m_offset[i].x, yofs = m_offset[i].y;
int index = 0; int index = 0;
for (int yofsInt = 0; yofsInt < m_blockSize; ++yofsInt) { for (int yofsInt = 0; yofsInt < m_blockSize; ++yofsInt) {

View File

@ -1,53 +1,53 @@
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED #define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
// MS compatible compilers support #pragma once // MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020) #if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once # pragma once
#endif #endif
// //
// boost/detail/spinlock.hpp // boost/detail/spinlock.hpp
// //
// Copyright (c) 2008 Peter Dimov // Copyright (c) 2008 Peter Dimov
// //
// Distributed under the Boost Software License, Version 1.0. // Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at // See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
// //
// struct spinlock // struct spinlock
// { // {
// void lock(); // void lock();
// bool try_lock(); // bool try_lock();
// void unlock(); // void unlock();
// //
// class scoped_lock; // class scoped_lock;
// }; // };
// //
// #define BOOST_DETAIL_SPINLOCK_INIT <unspecified> // #define BOOST_DETAIL_SPINLOCK_INIT <unspecified>
// //
#include <boost/config.hpp> #include <boost/config.hpp>
#include <boost/smart_ptr/detail/sp_has_sync.hpp> #include <boost/smart_ptr/detail/sp_has_sync.hpp>
#if defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) #if defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ )
# include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp> # include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp>
#elif defined( BOOST_SP_HAS_SYNC ) #elif defined( BOOST_SP_HAS_SYNC )
# include <boost/smart_ptr/detail/spinlock_sync.hpp> # include <boost/smart_ptr/detail/spinlock_sync.hpp>
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
# include <boost/smart_ptr/detail/spinlock_w32.hpp> # include <boost/smart_ptr/detail/spinlock_w32.hpp>
#elif defined(BOOST_HAS_PTHREADS) #elif defined(BOOST_HAS_PTHREADS)
# include <boost/smart_ptr/detail/spinlock_pt.hpp> # include <boost/smart_ptr/detail/spinlock_pt.hpp>
#elif !defined(BOOST_HAS_THREADS) #elif !defined(BOOST_HAS_THREADS)
# include <boost/smart_ptr/detail/spinlock_nt.hpp> # include <boost/smart_ptr/detail/spinlock_nt.hpp>
#else #else
# error Unrecognized threading platform # error Unrecognized threading platform
#endif #endif
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED

View File

@ -0,0 +1,85 @@
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
//
// Copyright (c) 2008 Peter Dimov
//
// 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)
//
#include <boost/smart_ptr/detail/yield_k.hpp>
namespace boost
{
namespace detail
{
class spinlock
{
public:
int v_;
public:
bool try_lock()
{
int r;
__asm__ __volatile__(
"swp %0, %1, [%2]":
"=&r"( r ): // outputs
"r"( 1 ), "r"( &v_ ): // inputs
"memory", "cc" );
return r == 0;
}
void lock()
{
for( unsigned k = 0; !try_lock(); ++k )
{
boost::detail::yield( k );
}
}
void unlock()
{
__asm__ __volatile__( "" ::: "memory" );
*const_cast< int volatile* >( &v_ ) = 0;
}
public:
class scoped_lock
{
private:
spinlock & sp_;
scoped_lock( scoped_lock const & );
scoped_lock & operator=( scoped_lock const & );
public:
explicit scoped_lock( spinlock & sp ): sp_( sp )
{
sp.lock();
}
~scoped_lock()
{
sp_.unlock();
}
};
};
} // namespace detail
} // namespace boost
#define BOOST_DETAIL_SPINLOCK_INIT {0}
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED

View File

@ -0,0 +1,89 @@
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
// MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
//
// Copyright (c) 2008 Peter Dimov
//
// 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)
//
#include <boost/assert.hpp>
namespace boost
{
namespace detail
{
class spinlock
{
public:
bool locked_;
public:
inline bool try_lock()
{
if( locked_ )
{
return false;
}
else
{
locked_ = true;
return true;
}
}
inline void lock()
{
BOOST_ASSERT( !locked_ );
locked_ = true;
}
inline void unlock()
{
BOOST_ASSERT( locked_ );
locked_ = false;
}
public:
class scoped_lock
{
private:
spinlock & sp_;
scoped_lock( scoped_lock const & );
scoped_lock & operator=( scoped_lock const & );
public:
explicit scoped_lock( spinlock & sp ): sp_( sp )
{
sp.lock();
}
~scoped_lock()
{
sp_.unlock();
}
};
};
} // namespace detail
} // namespace boost
#define BOOST_DETAIL_SPINLOCK_INIT { false }
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED

View File

@ -1,87 +1,87 @@
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED #define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED
// MS compatible compilers support #pragma once // MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020) #if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once # pragma once
#endif #endif
// //
// boost/detail/spinlock_pool.hpp // boost/detail/spinlock_pool.hpp
// //
// Copyright (c) 2008 Peter Dimov // Copyright (c) 2008 Peter Dimov
// //
// Distributed under the Boost Software License, Version 1.0. // Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at // See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
// //
// spinlock_pool<0> is reserved for atomic<>, when/if it arrives // spinlock_pool<0> is reserved for atomic<>, when/if it arrives
// spinlock_pool<1> is reserved for shared_ptr reference counts // spinlock_pool<1> is reserved for shared_ptr reference counts
// spinlock_pool<2> is reserved for shared_ptr atomic access // spinlock_pool<2> is reserved for shared_ptr atomic access
// //
#include <boost/config.hpp> #include <boost/config.hpp>
#include <boost/smart_ptr/detail/spinlock.hpp> #include <boost/smart_ptr/detail/spinlock.hpp>
#include <cstddef> #include <cstddef>
namespace boost namespace boost
{ {
namespace detail namespace detail
{ {
template< int I > class spinlock_pool template< int I > class spinlock_pool
{ {
private: private:
static spinlock pool_[ 41 ]; static spinlock pool_[ 41 ];
public: public:
static spinlock & spinlock_for( void const * pv ) static spinlock & spinlock_for( void const * pv )
{ {
std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41; std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41;
return pool_[ i ]; return pool_[ i ];
} }
class scoped_lock class scoped_lock
{ {
private: private:
spinlock & sp_; spinlock & sp_;
scoped_lock( scoped_lock const & ); scoped_lock( scoped_lock const & );
scoped_lock & operator=( scoped_lock const & ); scoped_lock & operator=( scoped_lock const & );
public: public:
explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) ) explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) )
{ {
sp_.lock(); sp_.lock();
} }
~scoped_lock() ~scoped_lock()
{ {
sp_.unlock(); sp_.unlock();
} }
}; };
}; };
template< int I > spinlock spinlock_pool< I >::pool_[ 41 ] = template< int I > spinlock spinlock_pool< I >::pool_[ 41 ] =
{ {
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT,
BOOST_DETAIL_SPINLOCK_INIT BOOST_DETAIL_SPINLOCK_INIT
}; };
} // namespace detail } // namespace detail
} // namespace boost } // namespace boost
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED

View File

@ -0,0 +1,79 @@
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED
// MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
//
// Copyright (c) 2008 Peter Dimov
//
// 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)
//
#include <pthread.h>
namespace boost
{
namespace detail
{
class spinlock
{
public:
pthread_mutex_t v_;
public:
bool try_lock()
{
return pthread_mutex_trylock( &v_ ) == 0;
}
void lock()
{
pthread_mutex_lock( &v_ );
}
void unlock()
{
pthread_mutex_unlock( &v_ );
}
public:
class scoped_lock
{
private:
spinlock & sp_;
scoped_lock( scoped_lock const & );
scoped_lock & operator=( scoped_lock const & );
public:
explicit scoped_lock( spinlock & sp ): sp_( sp )
{
sp.lock();
}
~scoped_lock()
{
sp_.unlock();
}
};
};
} // namespace detail
} // namespace boost
#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER }
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED

View File

@ -1,113 +1,113 @@
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED #define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
// MS compatible compilers support #pragma once // MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020) #if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once # pragma once
#endif #endif
// //
// Copyright (c) 2008 Peter Dimov // Copyright (c) 2008 Peter Dimov
// //
// Distributed under the Boost Software License, Version 1.0. // Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at // See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
// //
#include <boost/detail/interlocked.hpp> #include <boost/detail/interlocked.hpp>
#include <boost/smart_ptr/detail/yield_k.hpp> #include <boost/smart_ptr/detail/yield_k.hpp>
// BOOST_COMPILER_FENCE // BOOST_COMPILER_FENCE
#if defined(__INTEL_COMPILER) #if defined(__INTEL_COMPILER)
#define BOOST_COMPILER_FENCE __memory_barrier(); #define BOOST_COMPILER_FENCE __memory_barrier();
#elif defined( _MSC_VER ) && _MSC_VER >= 1310 #elif defined( _MSC_VER ) && _MSC_VER >= 1310
extern "C" void _ReadWriteBarrier(); extern "C" void _ReadWriteBarrier();
#pragma intrinsic( _ReadWriteBarrier ) #pragma intrinsic( _ReadWriteBarrier )
#define BOOST_COMPILER_FENCE _ReadWriteBarrier(); #define BOOST_COMPILER_FENCE _ReadWriteBarrier();
#elif defined(__GNUC__) #elif defined(__GNUC__)
#define BOOST_COMPILER_FENCE __asm__ __volatile__( "" : : : "memory" ); #define BOOST_COMPILER_FENCE __asm__ __volatile__( "" : : : "memory" );
#else #else
#define BOOST_COMPILER_FENCE #define BOOST_COMPILER_FENCE
#endif #endif
// //
namespace boost namespace boost
{ {
namespace detail namespace detail
{ {
class spinlock class spinlock
{ {
public: public:
long v_; long v_;
public: public:
bool try_lock() bool try_lock()
{ {
long r = BOOST_INTERLOCKED_EXCHANGE( &v_, 1 ); long r = BOOST_INTERLOCKED_EXCHANGE( &v_, 1 );
BOOST_COMPILER_FENCE BOOST_COMPILER_FENCE
return r == 0; return r == 0;
} }
void lock() void lock()
{ {
for( unsigned k = 0; !try_lock(); ++k ) for( unsigned k = 0; !try_lock(); ++k )
{ {
boost::detail::yield( k ); boost::detail::yield( k );
} }
} }
void unlock() void unlock()
{ {
BOOST_COMPILER_FENCE BOOST_COMPILER_FENCE
*const_cast< long volatile* >( &v_ ) = 0; *const_cast< long volatile* >( &v_ ) = 0;
} }
public: public:
class scoped_lock class scoped_lock
{ {
private: private:
spinlock & sp_; spinlock & sp_;
scoped_lock( scoped_lock const & ); scoped_lock( scoped_lock const & );
scoped_lock & operator=( scoped_lock const & ); scoped_lock & operator=( scoped_lock const & );
public: public:
explicit scoped_lock( spinlock & sp ): sp_( sp ) explicit scoped_lock( spinlock & sp ): sp_( sp )
{ {
sp.lock(); sp.lock();
} }
~scoped_lock() ~scoped_lock()
{ {
sp_.unlock(); sp_.unlock();
} }
}; };
}; };
} // namespace detail } // namespace detail
} // namespace boost } // namespace boost
#define BOOST_DETAIL_SPINLOCK_INIT {0} #define BOOST_DETAIL_SPINLOCK_INIT {0}
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED