Boost 1.56 compatibility fix.
This commit is contained in:
parent
858e222ea7
commit
b30e0dd869
|
@ -28,6 +28,7 @@
|
|||
#include <cstdlib>
|
||||
|
||||
#include <boost/context/fcontext.hpp>
|
||||
#include <boost/version.hpp>
|
||||
|
||||
#include "delegate.h"
|
||||
|
||||
|
@ -88,6 +89,11 @@ public:
|
|||
if( m_saved )
|
||||
delete m_saved;
|
||||
|
||||
#if BOOST_VERSION >= 105600
|
||||
if( m_self )
|
||||
delete m_self;
|
||||
#endif
|
||||
|
||||
if( m_stack )
|
||||
free( m_stack );
|
||||
}
|
||||
|
@ -101,7 +107,7 @@ public:
|
|||
*/
|
||||
void Yield()
|
||||
{
|
||||
boost::context::jump_fcontext( m_self, m_saved, 0 );
|
||||
jump( m_self, m_saved, 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -113,7 +119,7 @@ public:
|
|||
void Yield( ReturnType& aRetVal )
|
||||
{
|
||||
m_retVal = aRetVal;
|
||||
boost::context::jump_fcontext( m_self, m_saved, 0 );
|
||||
jump( m_self, m_saved, 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -147,12 +153,17 @@ public:
|
|||
assert( m_saved == NULL );
|
||||
|
||||
m_args = &aArgs;
|
||||
#if BOOST_VERSION >= 105600
|
||||
m_self = new boost::context::fcontext_t();
|
||||
*m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
||||
#else
|
||||
m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
||||
#endif
|
||||
m_saved = new boost::context::fcontext_t();
|
||||
|
||||
m_running = true;
|
||||
// off we go!
|
||||
boost::context::jump_fcontext( m_saved, m_self, reinterpret_cast<intptr_t>( this ) );
|
||||
jump( m_saved, m_self, reinterpret_cast<intptr_t>( this ) );
|
||||
return m_running;
|
||||
}
|
||||
|
||||
|
@ -165,7 +176,7 @@ public:
|
|||
*/
|
||||
bool Resume()
|
||||
{
|
||||
boost::context::jump_fcontext( m_saved, m_self, 0 );
|
||||
jump( m_saved, m_self, 0 );
|
||||
|
||||
return m_running;
|
||||
}
|
||||
|
@ -204,7 +215,18 @@ private:
|
|||
cor->m_running = false;
|
||||
|
||||
// go back to wherever we came from.
|
||||
boost::context::jump_fcontext( cor->m_self, cor->m_saved, 0 ); // reinterpret_cast<intptr_t>( this ));
|
||||
jump( cor->m_self, cor->m_saved, 0 ); // reinterpret_cast<intptr_t>( this ));
|
||||
}
|
||||
|
||||
///> Wrapper for jump_fcontext to assure compatibility between different boost versions
|
||||
static inline intptr_t jump(boost::context::fcontext_t* aOld, boost::context::fcontext_t* aNew,
|
||||
intptr_t aP, bool aPreserveFPU = true )
|
||||
{
|
||||
#if BOOST_VERSION >= 105600
|
||||
return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
|
||||
#else
|
||||
return boost::context::jump_fcontext( aOld, aNew, aP, aPreserveFPU );
|
||||
#endif
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
Loading…
Reference in New Issue