Accepting request 427051 from home:plater
Update to 4.0.4 OBS-URL: https://build.opensuse.org/request/show/427051 OBS-URL: https://build.opensuse.org/package/show/electronics/kicad?expand=0&rev=27
This commit is contained in:
parent
4d8cc330fb
commit
b80e7857c9
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:7f45ac77ed14953d8f8a4413db7ff6c283d8175e9a16460b1579a6a8ff917547
|
|
||||||
size 10609432
|
|
3
kicad-4.0.4.tar.xz
Normal file
3
kicad-4.0.4.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6da5d3f7bc63a9c5b4d0f5e4b954411b45d712168596b5af02957343c87eda00
|
||||||
|
size 10672424
|
@ -4,11 +4,11 @@ Date: Tue, 5 Jul 2016 00:14:32 +0200
|
|||||||
Subject: boost::context fixes to make it compatible with boost 1.61
|
Subject: boost::context fixes to make it compatible with boost 1.61
|
||||||
|
|
||||||
|
|
||||||
diff --git a/common/tool/tool_manager.cpp b/common/tool/tool_manager.cpp
|
Index: common/tool/tool_manager.cpp
|
||||||
index 8639e57..0ec1882 100644
|
===================================================================
|
||||||
--- a/common/tool/tool_manager.cpp
|
--- common/tool/tool_manager.cpp.orig
|
||||||
+++ b/common/tool/tool_manager.cpp
|
+++ common/tool/tool_manager.cpp
|
||||||
@@ -518,7 +518,7 @@ void TOOL_MANAGER::dispatchInternal( const TOOL_EVENT& aEvent )
|
@@ -528,7 +528,7 @@ void TOOL_MANAGER::dispatchInternal( con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ index 8639e57..0ec1882 100644
|
|||||||
{
|
{
|
||||||
// no state handler in progress - check if there are any transitions (defined by
|
// no state handler in progress - check if there are any transitions (defined by
|
||||||
// Go() method that match the event.
|
// Go() method that match the event.
|
||||||
@@ -532,11 +532,11 @@ void TOOL_MANAGER::dispatchInternal( const TOOL_EVENT& aEvent )
|
@@ -542,11 +542,11 @@ void TOOL_MANAGER::dispatchInternal( con
|
||||||
if( st->cofunc )
|
if( st->cofunc )
|
||||||
st->Push();
|
st->Push();
|
||||||
|
|
||||||
@ -31,10 +31,10 @@ index 8639e57..0ec1882 100644
|
|||||||
// got match? Run the handler.
|
// got match? Run the handler.
|
||||||
st->cofunc->Call( aEvent );
|
st->cofunc->Call( aEvent );
|
||||||
|
|
||||||
diff --git a/include/tool/coroutine.h b/include/tool/coroutine.h
|
Index: include/tool/coroutine.h
|
||||||
index c7eaf5f..e21e18f 100644
|
===================================================================
|
||||||
--- a/include/tool/coroutine.h
|
--- include/tool/coroutine.h.orig
|
||||||
+++ b/include/tool/coroutine.h
|
+++ include/tool/coroutine.h
|
||||||
@@ -3,6 +3,7 @@
|
@@ -3,6 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 CERN
|
* Copyright (C) 2013 CERN
|
||||||
@ -43,7 +43,7 @@ index c7eaf5f..e21e18f 100644
|
|||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -27,10 +28,14 @@
|
@@ -27,10 +28,53 @@
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
@ -52,401 +52,14 @@ index c7eaf5f..e21e18f 100644
|
|||||||
+#include <type_traits>
|
+#include <type_traits>
|
||||||
|
|
||||||
-#include "delegate.h"
|
-#include "delegate.h"
|
||||||
+#if BOOST_VERSION <= 106000
|
+#if BOOST_VERSION < 106100
|
||||||
+#include <boost/context/fcontext.hpp>
|
+#include <boost/context/fcontext.hpp>
|
||||||
+#else
|
+#else
|
||||||
+#include <boost/context/execution_context.hpp>
|
+#include <boost/context/execution_context.hpp>
|
||||||
+#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class COROUNTINE.
|
|
||||||
@@ -53,13 +58,12 @@
|
|
||||||
* See coroutine_example.cpp for sample code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
-template <class ReturnType, class ArgType>
|
|
||||||
+template <typename ReturnType, typename ArgType>
|
|
||||||
class COROUTINE
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
COROUTINE() :
|
|
||||||
- m_saved( NULL ), m_self( NULL ), m_stack( NULL ), m_stackSize( c_defaultStackSize ),
|
|
||||||
- m_running( false )
|
|
||||||
+ COROUTINE( nullptr )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -69,8 +73,7 @@ public:
|
|
||||||
*/
|
|
||||||
template <class T>
|
|
||||||
COROUTINE( T* object, ReturnType(T::* ptr)( ArgType ) ) :
|
|
||||||
- m_func( object, ptr ), m_self( NULL ), m_saved( NULL ), m_stack( NULL ),
|
|
||||||
- m_stackSize( c_defaultStackSize ), m_running( false )
|
|
||||||
+ COROUTINE( std::bind( ptr, object, std::placeholders::_1 ) )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -78,9 +81,15 @@ public:
|
|
||||||
* Constructor
|
|
||||||
* Creates a coroutine from a delegate object
|
|
||||||
*/
|
|
||||||
- COROUTINE( DELEGATE<ReturnType, ArgType> aEntry ) :
|
|
||||||
- m_func( aEntry ), m_saved( NULL ), m_self( NULL ), m_stack( NULL ),
|
|
||||||
- m_stackSize( c_defaultStackSize ), m_running( false )
|
|
||||||
+ COROUTINE( std::function<ReturnType(ArgType)> aEntry ) :
|
|
||||||
+ m_func( std::move( aEntry ) ),
|
|
||||||
+ m_running( false ),
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ m_stack( nullptr ),
|
|
||||||
+ m_stackSize( c_defaultStackSize ),
|
|
||||||
+#endif
|
|
||||||
+ m_caller( nullptr ),
|
|
||||||
+ m_callee( nullptr )
|
|
||||||
{
|
|
||||||
// Avoid not initialized members, and make static analysers quiet
|
|
||||||
m_args = 0;
|
|
||||||
@@ -89,18 +98,26 @@ public:
|
|
||||||
|
|
||||||
~COROUTINE()
|
|
||||||
{
|
|
||||||
- if( m_saved )
|
|
||||||
- delete m_saved;
|
|
||||||
-
|
|
||||||
#if BOOST_VERSION >= 105600
|
|
||||||
- if( m_self )
|
|
||||||
- delete m_self;
|
|
||||||
+ delete m_callee;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ delete m_caller;
|
|
||||||
+
|
|
||||||
if( m_stack )
|
|
||||||
free( m_stack );
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
+private:
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ using context_type = boost::context::fcontext_t;
|
|
||||||
+#else
|
|
||||||
+ using context_type = boost::context::execution_context<COROUTINE*>;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+public:
|
|
||||||
/**
|
|
||||||
* Function Yield()
|
|
||||||
*
|
|
||||||
@@ -110,7 +127,12 @@ public:
|
|
||||||
*/
|
|
||||||
void Yield()
|
|
||||||
{
|
|
||||||
- jump( m_self, m_saved, 0 );
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ jump( m_callee, m_caller, false );
|
|
||||||
+#else
|
|
||||||
+ auto result = (*m_caller)( this );
|
|
||||||
+ *m_caller = std::move( std::get<0>( result ) );
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -122,7 +144,11 @@ public:
|
|
||||||
void Yield( ReturnType& aRetVal )
|
|
||||||
{
|
|
||||||
m_retVal = aRetVal;
|
|
||||||
- jump( m_self, m_saved, 0 );
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ jump( m_callee, m_caller, false );
|
|
||||||
+#else
|
|
||||||
+ m_caller( this );
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -130,9 +156,9 @@ public:
|
|
||||||
*
|
|
||||||
* Defines the entry point for the coroutine, if not set in the constructor.
|
|
||||||
*/
|
|
||||||
- void SetEntry( DELEGATE<ReturnType, ArgType> aEntry )
|
|
||||||
+ void SetEntry( std::function<ReturnType(ArgType)> aEntry )
|
|
||||||
{
|
|
||||||
- m_func = aEntry;
|
|
||||||
+ m_func = std::move( aEntry );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Function Call()
|
|
||||||
@@ -143,6 +169,10 @@ public:
|
|
||||||
*/
|
|
||||||
bool Call( ArgType aArgs )
|
|
||||||
{
|
|
||||||
+ assert( m_callee == NULL );
|
|
||||||
+ assert( m_caller == NULL );
|
|
||||||
+
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
// fixme: Clean up stack stuff. Add a guard
|
|
||||||
m_stack = malloc( c_defaultStackSize );
|
|
||||||
|
|
||||||
@@ -151,22 +181,32 @@ public:
|
|
||||||
|
|
||||||
// correct the stack size
|
|
||||||
m_stackSize -= ( (size_t) m_stack + m_stackSize - (size_t) sp );
|
|
||||||
-
|
|
||||||
- assert( m_self == NULL );
|
|
||||||
- assert( m_saved == NULL );
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
m_args = &aArgs;
|
|
||||||
-#if BOOST_VERSION >= 105600
|
|
||||||
- m_self = new boost::context::fcontext_t();
|
|
||||||
- *m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
|
||||||
+
|
|
||||||
+#if BOOST_VERSION < 105600
|
|
||||||
+ m_callee = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
|
||||||
+#elif BOOST_VERSION <= 106000
|
|
||||||
+ m_callee = new context_type( boost::context::make_fcontext( sp, m_stackSize, callerStub ) );
|
|
||||||
#else
|
|
||||||
- m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
|
||||||
+ m_callee = new context_type( std::allocator_arg_t(),
|
|
||||||
+ boost::context::fixedsize_stack( c_defaultStackSize ), &COROUTINE::callerStub );
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ m_caller = new context_type();
|
|
||||||
#endif
|
|
||||||
- m_saved = new boost::context::fcontext_t();
|
|
||||||
|
|
||||||
m_running = true;
|
|
||||||
+
|
|
||||||
// off we go!
|
|
||||||
- jump( m_saved, m_self, reinterpret_cast<intptr_t>( this ) );
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ jump( m_caller, m_callee, reinterpret_cast<intptr_t>( this ) );
|
|
||||||
+#else
|
|
||||||
+ auto result = (*m_callee)( this );
|
|
||||||
+ *m_callee = std::move( std::get<0>( result ) );
|
|
||||||
+#endif
|
|
||||||
return m_running;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -179,7 +219,12 @@ public:
|
|
||||||
*/
|
|
||||||
bool Resume()
|
|
||||||
{
|
|
||||||
- jump( m_saved, m_self, 0 );
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ jump( m_caller, m_callee, false );
|
|
||||||
+#else
|
|
||||||
+ auto result = (*m_callee)( this );
|
|
||||||
+ *m_callee = std::move( std::get<0>( result ) );
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
return m_running;
|
|
||||||
}
|
|
||||||
@@ -208,61 +253,66 @@ private:
|
|
||||||
static const int c_defaultStackSize = 2000000; // fixme: make configurable
|
|
||||||
|
|
||||||
/* real entry point of the coroutine */
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
static void callerStub( intptr_t aData )
|
|
||||||
+#else
|
|
||||||
+ static context_type callerStub( context_type caller, COROUTINE* cor )
|
|
||||||
+#endif
|
|
||||||
{
|
|
||||||
// get pointer to self
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
COROUTINE<ReturnType, ArgType>* cor = reinterpret_cast<COROUTINE<ReturnType, ArgType>*>( aData );
|
|
||||||
+#else
|
|
||||||
+ cor->m_caller = &caller;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
// call the coroutine method
|
|
||||||
- cor->m_retVal = cor->m_func( *cor->m_args );
|
|
||||||
+ cor->m_retVal = cor->m_func( *( cor->m_args ) );
|
|
||||||
cor->m_running = false;
|
|
||||||
|
|
||||||
// go back to wherever we came from.
|
|
||||||
- jump( cor->m_self, cor->m_saved, 0 ); // reinterpret_cast<intptr_t>( this ));
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ jump( cor->m_callee, cor->m_caller, 0 );
|
|
||||||
+#else
|
|
||||||
+ return caller;
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
///> 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,
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ static inline intptr_t jump( context_type* aOld, context_type* aNew,
|
|
||||||
intptr_t aP, bool aPreserveFPU = true )
|
|
||||||
{
|
|
||||||
-#if BOOST_VERSION >= 105600
|
|
||||||
- return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
|
|
||||||
-#else
|
|
||||||
+#if BOOST_VERSION < 105600
|
|
||||||
return boost::context::jump_fcontext( aOld, aNew, aP, aPreserveFPU );
|
|
||||||
+#else
|
|
||||||
+ return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
- template <typename T>
|
|
||||||
- struct strip_ref
|
|
||||||
- {
|
|
||||||
- typedef T result;
|
|
||||||
- };
|
|
||||||
+ std::function<ReturnType(ArgType)> m_func;
|
|
||||||
|
|
||||||
- template <typename T>
|
|
||||||
- struct strip_ref<T&>
|
|
||||||
- {
|
|
||||||
- typedef T result;
|
|
||||||
- };
|
|
||||||
+ bool m_running;
|
|
||||||
|
|
||||||
- DELEGATE<ReturnType, ArgType> m_func;
|
|
||||||
+#if BOOST_VERSION <= 106000
|
|
||||||
+ ///< coroutine stack
|
|
||||||
+ void* m_stack;
|
|
||||||
+
|
|
||||||
+ size_t m_stackSize;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
///< pointer to coroutine entry arguments. Stripped of references
|
|
||||||
///< to avoid compiler errors.
|
|
||||||
- typename strip_ref<ArgType>::result* m_args;
|
|
||||||
+ typename std::remove_reference<ArgType>::type* m_args;
|
|
||||||
+
|
|
||||||
ReturnType m_retVal;
|
|
||||||
|
|
||||||
///< saved caller context
|
|
||||||
- boost::context::fcontext_t* m_saved;
|
|
||||||
+ context_type* m_caller;
|
|
||||||
|
|
||||||
///< saved coroutine context
|
|
||||||
- boost::context::fcontext_t* m_self;
|
|
||||||
-
|
|
||||||
- ///< coroutine stack
|
|
||||||
- void* m_stack;
|
|
||||||
-
|
|
||||||
- size_t m_stackSize;
|
|
||||||
-
|
|
||||||
- bool m_running;
|
|
||||||
+ context_type* m_callee;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
diff --git a/include/tool/tool_base.h b/include/tool/tool_base.h
|
|
||||||
index 584a979..3bef987 100644
|
|
||||||
--- a/include/tool/tool_base.h
|
|
||||||
+++ b/include/tool/tool_base.h
|
|
||||||
@@ -3,6 +3,7 @@
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 CERN
|
|
||||||
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
|
||||||
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
@@ -31,7 +32,7 @@
|
|
||||||
#include <tool/tool_event.h>
|
|
||||||
#include <tool/tool_settings.h>
|
|
||||||
|
|
||||||
-#include <tool/delegate.h>
|
|
||||||
+#include <functional>
|
|
||||||
|
|
||||||
class EDA_ITEM;
|
|
||||||
class TOOL_MANAGER;
|
|
||||||
@@ -53,7 +54,9 @@ enum TOOL_TYPE
|
|
||||||
|
|
||||||
/// Unique identifier for tools
|
|
||||||
typedef int TOOL_ID;
|
|
||||||
-typedef DELEGATE<int, const TOOL_EVENT&> TOOL_STATE_FUNC;
|
|
||||||
+
|
|
||||||
+using TOOL_STATE_FUNC = std::function<int(const TOOL_EVENT&)>;
|
|
||||||
+
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class TOOL_BASE
|
|
||||||
diff --git a/include/tool/tool_interactive.h b/include/tool/tool_interactive.h
|
|
||||||
index 17d2de7..240eb58 100644
|
|
||||||
--- a/include/tool/tool_interactive.h
|
|
||||||
+++ b/include/tool/tool_interactive.h
|
|
||||||
@@ -3,6 +3,7 @@
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 CERN
|
|
||||||
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
|
||||||
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
@@ -113,7 +114,7 @@ template <class T>
|
|
||||||
void TOOL_INTERACTIVE::Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
|
|
||||||
const TOOL_EVENT_LIST& aConditions )
|
|
||||||
{
|
|
||||||
- TOOL_STATE_FUNC sptr( static_cast<T*>( this ), aStateFunc );
|
|
||||||
+ TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
|
|
||||||
|
|
||||||
goInternal( sptr, aConditions );
|
|
||||||
}
|
|
||||||
--
|
|
||||||
cgit v0.10.2
|
|
||||||
|
|
||||||
From 78bc3c65de6c03d19be9902327d08cd4d87c229c Mon Sep 17 00:00:00 2001
|
|
||||||
From: decimad <michsteinb@gmail.com>
|
|
||||||
Date: Tue, 5 Jul 2016 18:02:50 +0200
|
|
||||||
Subject: use a guarded stack for coroutines in boost version 1.61
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/include/tool/coroutine.h b/include/tool/coroutine.h
|
|
||||||
index e21e18f..8e472ca 100644
|
|
||||||
--- a/include/tool/coroutine.h
|
|
||||||
+++ b/include/tool/coroutine.h
|
|
||||||
@@ -35,6 +35,7 @@
|
|
||||||
#include <boost/context/fcontext.hpp>
|
|
||||||
#else
|
|
||||||
#include <boost/context/execution_context.hpp>
|
|
||||||
+#include <boost/context/protected_fixedsize_stack.hpp>
|
+#include <boost/context/protected_fixedsize_stack.hpp>
|
||||||
#endif
|
+#endif
|
||||||
|
+
|
||||||
/**
|
+/**
|
||||||
@@ -191,7 +192,7 @@ public:
|
|
||||||
m_callee = new context_type( boost::context::make_fcontext( sp, m_stackSize, callerStub ) );
|
|
||||||
#else
|
|
||||||
m_callee = new context_type( std::allocator_arg_t(),
|
|
||||||
- boost::context::fixedsize_stack( c_defaultStackSize ), &COROUTINE::callerStub );
|
|
||||||
+ boost::context::protected_fixedsize_stack( c_defaultStackSize ), &COROUTINE::callerStub );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if BOOST_VERSION <= 106000
|
|
||||||
--
|
|
||||||
cgit v0.10.2
|
|
||||||
|
|
||||||
From 18b7dbf4d166fcb7da10ced72268a77f02448188 Mon Sep 17 00:00:00 2001
|
|
||||||
From: decimad <michsteinb@gmail.com>
|
|
||||||
Date: Tue, 2 Aug 2016 11:39:39 +0200
|
|
||||||
Subject: Refactor coroutine to improve readability and removed unnecessary
|
|
||||||
heap allocations. Added documentation/links to various boost doc revisions.
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/include/tool/coroutine.h b/include/tool/coroutine.h
|
|
||||||
index 8e472ca..70ef6cb 100644
|
|
||||||
--- a/include/tool/coroutine.h
|
|
||||||
+++ b/include/tool/coroutine.h
|
|
||||||
@@ -31,7 +31,7 @@
|
|
||||||
#include <boost/version.hpp>
|
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
+#if BOOST_VERSION < 106100
|
|
||||||
#include <boost/context/fcontext.hpp>
|
|
||||||
#else
|
|
||||||
#include <boost/context/execution_context.hpp>
|
|
||||||
@@ -39,6 +39,44 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * Note: in the history of boost, two changes to the context interface happened.
|
+ * Note: in the history of boost, two changes to the context interface happened.
|
||||||
+ * [1.54, 1.56)
|
+ * [1.54, 1.56)
|
||||||
+ * http://www.boost.org/doc/libs/1_55_0/libs/context/doc/html/context/context/boost_fcontext.html
|
+ * http://www.boost.org/doc/libs/1_55_0/libs/context/doc/html/context/context/boost_fcontext.html
|
||||||
@ -483,83 +96,97 @@ index 8e472ca..70ef6cb 100644
|
|||||||
+ * fcontext_t is hidden away behind the boost::execution_context(_v2) and the stack is created on behalf of
|
+ * fcontext_t is hidden away behind the boost::execution_context(_v2) and the stack is created on behalf of
|
||||||
+ * the user.
|
+ * the user.
|
||||||
+ */
|
+ */
|
||||||
+
|
|
||||||
+/**
|
/**
|
||||||
* Class COROUNTINE.
|
* Class COROUNTINE.
|
||||||
* Implements a coroutine. Wikipedia has a good explanation:
|
@@ -53,13 +97,12 @@
|
||||||
*
|
* See coroutine_example.cpp for sample code.
|
||||||
@@ -73,7 +111,7 @@ public:
|
*/
|
||||||
|
|
||||||
|
-template <class ReturnType, class ArgType>
|
||||||
|
+template <typename ReturnType, typename ArgType>
|
||||||
|
class COROUTINE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
COROUTINE() :
|
||||||
|
- m_saved( NULL ), m_self( NULL ), m_stack( NULL ), m_stackSize( c_defaultStackSize ),
|
||||||
|
- m_running( false )
|
||||||
|
+ COROUTINE( nullptr )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -68,9 +111,8 @@ public:
|
||||||
* Creates a coroutine from a member method of an object
|
* Creates a coroutine from a member method of an object
|
||||||
*/
|
*/
|
||||||
template <class T>
|
template <class T>
|
||||||
- COROUTINE( T* object, ReturnType(T::* ptr)( ArgType ) ) :
|
- COROUTINE( T* object, ReturnType(T::* ptr)( ArgType ) ) :
|
||||||
|
- m_func( object, ptr ), m_self( NULL ), m_saved( NULL ), m_stack( NULL ),
|
||||||
|
- m_stackSize( c_defaultStackSize ), m_running( false )
|
||||||
+ COROUTINE( T* object, ReturnType(T::*ptr)( ArgType ) ) :
|
+ COROUTINE( T* object, ReturnType(T::*ptr)( ArgType ) ) :
|
||||||
COROUTINE( std::bind( ptr, object, std::placeholders::_1 ) )
|
+ COROUTINE( std::bind( ptr, object, std::placeholders::_1 ) )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -85,34 +123,20 @@ public:
|
|
||||||
COROUTINE( std::function<ReturnType(ArgType)> aEntry ) :
|
@@ -78,29 +120,29 @@ public:
|
||||||
m_func( std::move( aEntry ) ),
|
* Constructor
|
||||||
m_running( false ),
|
* Creates a coroutine from a delegate object
|
||||||
-#if BOOST_VERSION <= 106000
|
*/
|
||||||
- m_stack( nullptr ),
|
- COROUTINE( DELEGATE<ReturnType, ArgType> aEntry ) :
|
||||||
- m_stackSize( c_defaultStackSize ),
|
- m_func( aEntry ), m_saved( NULL ), m_self( NULL ), m_stack( NULL ),
|
||||||
+ m_args( 0 ),
|
- m_stackSize( c_defaultStackSize ), m_running( false )
|
||||||
+#if BOOST_VERSION < 106100 // -> m_callee = void* or void**
|
- {
|
||||||
+ m_callee( nullptr ),
|
|
||||||
#endif
|
|
||||||
- m_caller( nullptr ),
|
|
||||||
- m_callee( nullptr )
|
|
||||||
+ m_retVal( 0 )
|
|
||||||
{
|
|
||||||
- // Avoid not initialized members, and make static analysers quiet
|
- // Avoid not initialized members, and make static analysers quiet
|
||||||
- m_args = 0;
|
- m_args = 0;
|
||||||
- m_retVal = 0;
|
- m_retVal = 0;
|
||||||
|
+ COROUTINE( std::function<ReturnType(ArgType)> aEntry ) :
|
||||||
|
+ m_func( std::move( aEntry ) ),
|
||||||
|
+ m_running( false ),
|
||||||
|
+ m_args( 0 ),
|
||||||
|
+#if BOOST_VERSION < 106100 // -> m_callee = void* or void**
|
||||||
|
+ m_callee( nullptr ),
|
||||||
|
+#endif
|
||||||
|
+ m_retVal( 0 )
|
||||||
|
+ {
|
||||||
}
|
}
|
||||||
|
|
||||||
~COROUTINE()
|
~COROUTINE()
|
||||||
{
|
{
|
||||||
|
- if( m_saved )
|
||||||
|
- delete m_saved;
|
||||||
|
+ }
|
||||||
|
|
||||||
-#if BOOST_VERSION >= 105600
|
-#if BOOST_VERSION >= 105600
|
||||||
- delete m_callee;
|
- if( m_self )
|
||||||
-#endif
|
- delete m_self;
|
||||||
-
|
+private:
|
||||||
-#if BOOST_VERSION <= 106000
|
+#if BOOST_VERSION < 106100
|
||||||
- delete m_caller;
|
+ using context_type = boost::context::fcontext_t;
|
||||||
-
|
+#else
|
||||||
|
+ using context_type = boost::context::execution_context<COROUTINE*>;
|
||||||
|
#endif
|
||||||
|
|
||||||
- if( m_stack )
|
- if( m_stack )
|
||||||
- free( m_stack );
|
- free( m_stack );
|
||||||
-#endif
|
- }
|
||||||
}
|
-
|
||||||
|
+public:
|
||||||
private:
|
/**
|
||||||
-#if BOOST_VERSION <= 106000
|
* Function Yield()
|
||||||
+#if BOOST_VERSION < 106100
|
*
|
||||||
using context_type = boost::context::fcontext_t;
|
@@ -110,7 +152,7 @@ public:
|
||||||
#else
|
|
||||||
using context_type = boost::context::execution_context<COROUTINE*>;
|
|
||||||
@@ -128,12 +152,7 @@ public:
|
|
||||||
*/
|
*/
|
||||||
void Yield()
|
void Yield()
|
||||||
{
|
{
|
||||||
-#if BOOST_VERSION <= 106000
|
- jump( m_self, m_saved, 0 );
|
||||||
- jump( m_callee, m_caller, false );
|
|
||||||
-#else
|
|
||||||
- auto result = (*m_caller)( this );
|
|
||||||
- *m_caller = std::move( std::get<0>( result ) );
|
|
||||||
-#endif
|
|
||||||
+ jumpOut();
|
+ jumpOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -145,11 +164,20 @@ public:
|
@@ -122,7 +164,20 @@ public:
|
||||||
void Yield( ReturnType& aRetVal )
|
void Yield( ReturnType& aRetVal )
|
||||||
{
|
{
|
||||||
m_retVal = aRetVal;
|
m_retVal = aRetVal;
|
||||||
-#if BOOST_VERSION <= 106000
|
- jump( m_self, m_saved, 0 );
|
||||||
- jump( m_callee, m_caller, false );
|
|
||||||
-#else
|
|
||||||
- m_caller( this );
|
|
||||||
-#endif
|
|
||||||
+ jumpOut();
|
+ jumpOut();
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@ -577,12 +204,22 @@ index 8e472ca..70ef6cb 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -170,62 +198,37 @@ public:
|
@@ -130,9 +185,9 @@ public:
|
||||||
|
*
|
||||||
|
* Defines the entry point for the coroutine, if not set in the constructor.
|
||||||
|
*/
|
||||||
|
- void SetEntry( DELEGATE<ReturnType, ArgType> aEntry )
|
||||||
|
+ void SetEntry( std::function<ReturnType(ArgType)> aEntry )
|
||||||
|
{
|
||||||
|
- m_func = aEntry;
|
||||||
|
+ m_func = std::move( aEntry );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function Call()
|
||||||
|
@@ -143,43 +198,37 @@ public:
|
||||||
*/
|
*/
|
||||||
bool Call( ArgType aArgs )
|
bool Call( ArgType aArgs )
|
||||||
{
|
{
|
||||||
- assert( m_callee == NULL );
|
|
||||||
- assert( m_caller == NULL );
|
|
||||||
+ assert( m_func );
|
+ assert( m_func );
|
||||||
+ assert( !m_callee );
|
+ assert( !m_callee );
|
||||||
+
|
+
|
||||||
@ -590,8 +227,7 @@ index 8e472ca..70ef6cb 100644
|
|||||||
+
|
+
|
||||||
+#if BOOST_VERSION < 106100
|
+#if BOOST_VERSION < 106100
|
||||||
+ assert( m_stack == nullptr );
|
+ assert( m_stack == nullptr );
|
||||||
|
+
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
// fixme: Clean up stack stuff. Add a guard
|
// fixme: Clean up stack stuff. Add a guard
|
||||||
- m_stack = malloc( c_defaultStackSize );
|
- m_stack = malloc( c_defaultStackSize );
|
||||||
+ size_t stackSize = c_defaultStackSize;
|
+ size_t stackSize = c_defaultStackSize;
|
||||||
@ -603,42 +239,32 @@ index 8e472ca..70ef6cb 100644
|
|||||||
|
|
||||||
// correct the stack size
|
// correct the stack size
|
||||||
- m_stackSize -= ( (size_t) m_stack + m_stackSize - (size_t) sp );
|
- m_stackSize -= ( (size_t) m_stack + m_stackSize - (size_t) sp );
|
||||||
-#endif
|
|
||||||
-
|
-
|
||||||
- m_args = &aArgs;
|
- assert( m_self == NULL );
|
||||||
|
- assert( m_saved == NULL );
|
||||||
+ stackSize -= size_t( ( (ptrdiff_t) m_stack.get() + stackSize) - (ptrdiff_t) sp );
|
+ stackSize -= size_t( ( (ptrdiff_t) m_stack.get() + stackSize) - (ptrdiff_t) sp );
|
||||||
|
|
||||||
-#if BOOST_VERSION < 105600
|
- m_args = &aArgs;
|
||||||
- m_callee = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
-#if BOOST_VERSION >= 105600
|
||||||
-#elif BOOST_VERSION <= 106000
|
- m_self = new boost::context::fcontext_t();
|
||||||
- m_callee = new context_type( boost::context::make_fcontext( sp, m_stackSize, callerStub ) );
|
- *m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
||||||
+ m_callee = boost::context::make_fcontext( sp, stackSize, callerStub );
|
+ m_callee = boost::context::make_fcontext( sp, stackSize, callerStub );
|
||||||
#else
|
#else
|
||||||
- m_callee = new context_type( std::allocator_arg_t(),
|
- m_self = boost::context::make_fcontext( sp, m_stackSize, callerStub );
|
||||||
- boost::context::protected_fixedsize_stack( c_defaultStackSize ), &COROUTINE::callerStub );
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
- m_caller = new context_type();
|
|
||||||
+ m_callee = context_type(
|
+ m_callee = context_type(
|
||||||
+ std::allocator_arg_t(),
|
+ std::allocator_arg_t(),
|
||||||
+ boost::context::protected_fixedsize_stack( c_defaultStackSize ),
|
+ boost::context::protected_fixedsize_stack( c_defaultStackSize ),
|
||||||
+ &COROUTINE::callerStub
|
+ &COROUTINE::callerStub
|
||||||
+ );
|
+ );
|
||||||
#endif
|
#endif
|
||||||
|
- m_saved = new boost::context::fcontext_t();
|
||||||
|
|
||||||
m_running = true;
|
m_running = true;
|
||||||
|
- // off we go!
|
||||||
// off we go!
|
- jump( m_saved, m_self, reinterpret_cast<intptr_t>( this ) );
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
- jump( m_caller, m_callee, reinterpret_cast<intptr_t>( this ) );
|
|
||||||
-#else
|
|
||||||
- auto result = (*m_callee)( this );
|
|
||||||
- *m_callee = std::move( std::get<0>( result ) );
|
|
||||||
-#endif
|
|
||||||
- return m_running;
|
- return m_running;
|
||||||
- }
|
- }
|
||||||
-
|
|
||||||
- /**
|
- /**
|
||||||
- * Function Resume()
|
- * Function Resume()
|
||||||
- *
|
- *
|
||||||
@ -648,129 +274,180 @@ index 8e472ca..70ef6cb 100644
|
|||||||
- */
|
- */
|
||||||
- bool Resume()
|
- bool Resume()
|
||||||
- {
|
- {
|
||||||
-#if BOOST_VERSION <= 106000
|
- jump( m_saved, m_self, 0 );
|
||||||
- jump( m_caller, m_callee, false );
|
+ // off we go!
|
||||||
-#else
|
|
||||||
- auto result = (*m_callee)( this );
|
|
||||||
- *m_callee = std::move( std::get<0>( result ) );
|
|
||||||
-#endif
|
|
||||||
+ jumpIn();
|
+ jumpIn();
|
||||||
|
|
||||||
return m_running;
|
return m_running;
|
||||||
}
|
}
|
||||||
@@ -254,66 +257,82 @@ private:
|
@@ -208,61 +257,82 @@ private:
|
||||||
static const int c_defaultStackSize = 2000000; // fixme: make configurable
|
static const int c_defaultStackSize = 2000000; // fixme: make configurable
|
||||||
|
|
||||||
/* real entry point of the coroutine */
|
/* real entry point of the coroutine */
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
+#if BOOST_VERSION < 106100
|
+#if BOOST_VERSION < 106100
|
||||||
static void callerStub( intptr_t aData )
|
static void callerStub( intptr_t aData )
|
||||||
-#else
|
|
||||||
- static context_type callerStub( context_type caller, COROUTINE* cor )
|
|
||||||
-#endif
|
|
||||||
{
|
{
|
||||||
// get pointer to self
|
// get pointer to self
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
- COROUTINE<ReturnType, ArgType>* cor = reinterpret_cast<COROUTINE<ReturnType, ArgType>*>( aData );
|
- COROUTINE<ReturnType, ArgType>* cor = reinterpret_cast<COROUTINE<ReturnType, ArgType>*>( aData );
|
||||||
+ COROUTINE* cor = reinterpret_cast<COROUTINE*>( aData );
|
+ COROUTINE* cor = reinterpret_cast<COROUTINE*>( aData );
|
||||||
|
|
||||||
|
// call the coroutine method
|
||||||
|
- cor->m_retVal = cor->m_func( *cor->m_args );
|
||||||
|
+ cor->m_retVal = cor->m_func( *(cor->m_args) );
|
||||||
|
cor->m_running = false;
|
||||||
|
|
||||||
|
// go back to wherever we came from.
|
||||||
|
- jump( cor->m_self, cor->m_saved, 0 ); // reinterpret_cast<intptr_t>( this ));
|
||||||
|
+ cor->jumpOut();
|
||||||
|
}
|
||||||
|
+#else
|
||||||
|
+ /* real entry point of the coroutine */
|
||||||
|
+ static context_type callerStub( context_type caller, COROUTINE* cor )
|
||||||
|
+ {
|
||||||
|
+ cor->m_caller = std::move( caller );
|
||||||
+
|
+
|
||||||
+ // call the coroutine method
|
+ // call the coroutine method
|
||||||
+ cor->m_retVal = cor->m_func( *(cor->m_args) );
|
+ cor->m_retVal = cor->m_func( *(cor->m_args) );
|
||||||
+ cor->m_running = false;
|
+ cor->m_running = false;
|
||||||
+
|
+
|
||||||
+ // go back to wherever we came from.
|
+ // go back to wherever we came from.
|
||||||
+ cor->jumpOut();
|
|
||||||
+ }
|
|
||||||
#else
|
|
||||||
- cor->m_caller = &caller;
|
|
||||||
-#endif
|
|
||||||
+ /* real entry point of the coroutine */
|
|
||||||
+ static context_type callerStub( context_type caller, COROUTINE* cor )
|
|
||||||
+ {
|
|
||||||
+ cor->m_caller = std::move( caller );
|
|
||||||
|
|
||||||
// call the coroutine method
|
|
||||||
- cor->m_retVal = cor->m_func( *( cor->m_args ) );
|
|
||||||
+ cor->m_retVal = cor->m_func( *(cor->m_args) );
|
|
||||||
cor->m_running = false;
|
|
||||||
|
|
||||||
// go back to wherever we came from.
|
|
||||||
-#if BOOST_VERSION <= 106000
|
|
||||||
- jump( cor->m_callee, cor->m_caller, 0 );
|
|
||||||
+ return std::move( cor->m_caller );
|
+ return std::move( cor->m_caller );
|
||||||
+ }
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+
|
|
||||||
|
- ///> 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 )
|
||||||
+ void jumpIn()
|
+ void jumpIn()
|
||||||
+ {
|
{
|
||||||
|
-#if BOOST_VERSION >= 105600
|
||||||
|
- return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
|
||||||
+#if BOOST_VERSION < 105600
|
+#if BOOST_VERSION < 105600
|
||||||
+ boost::context::jump_fcontext( &m_caller, m_callee, reinterpret_cast<intptr_t>(this) );
|
+ boost::context::jump_fcontext( &m_caller, m_callee, reinterpret_cast<intptr_t>(this) );
|
||||||
+#elif BOOST_VERSION < 106100
|
+#elif BOOST_VERSION < 106100
|
||||||
+ boost::context::jump_fcontext( &m_caller, m_callee, reinterpret_cast<intptr_t>(this) );
|
+ boost::context::jump_fcontext( &m_caller, m_callee, reinterpret_cast<intptr_t>(this) );
|
||||||
#else
|
#else
|
||||||
- return caller;
|
- return boost::context::jump_fcontext( aOld, aNew, aP, aPreserveFPU );
|
||||||
+ auto result = m_callee( this );
|
+ auto result = m_callee( this );
|
||||||
+ m_callee = std::move( std::get<0>( result ) );
|
+ m_callee = std::move( std::get<0>( result ) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
- ///> Wrapper for jump_fcontext to assure compatibility between different boost versions
|
- template <typename T>
|
||||||
-#if BOOST_VERSION <= 106000
|
- struct strip_ref
|
||||||
- static inline intptr_t jump( context_type* aOld, context_type* aNew,
|
|
||||||
- intptr_t aP, bool aPreserveFPU = true )
|
|
||||||
+ void jumpOut()
|
+ void jumpOut()
|
||||||
{
|
{
|
||||||
#if BOOST_VERSION < 105600
|
- typedef T result;
|
||||||
- return boost::context::jump_fcontext( aOld, aNew, aP, aPreserveFPU );
|
- };
|
||||||
|
+#if BOOST_VERSION < 105600
|
||||||
+ boost::context::jump_fcontext( m_callee, &m_caller, 0 );
|
+ boost::context::jump_fcontext( m_callee, &m_caller, 0 );
|
||||||
+#elif BOOST_VERSION < 106100
|
+#elif BOOST_VERSION < 106100
|
||||||
+ boost::context::jump_fcontext( &m_callee, m_caller, 0 );
|
+ boost::context::jump_fcontext( &m_callee, m_caller, 0 );
|
||||||
#else
|
+#else
|
||||||
- return boost::context::jump_fcontext( aOld, *aNew, aP, aPreserveFPU );
|
|
||||||
+ auto result = m_caller( nullptr );
|
+ auto result = m_caller( nullptr );
|
||||||
+ m_caller = std::move( std::get<0>( result ) );
|
+ m_caller = std::move( std::get<0>( result ) );
|
||||||
#endif
|
+#endif
|
||||||
}
|
+ }
|
||||||
-#endif
|
|
||||||
|
|
||||||
std::function<ReturnType(ArgType)> m_func;
|
- template <typename T>
|
||||||
|
- struct strip_ref<T&>
|
||||||
|
- {
|
||||||
|
- typedef T result;
|
||||||
|
- };
|
||||||
|
+ std::function<ReturnType(ArgType)> m_func;
|
||||||
|
|
||||||
bool m_running;
|
- DELEGATE<ReturnType, ArgType> m_func;
|
||||||
|
+ bool m_running;
|
||||||
-#if BOOST_VERSION <= 106000
|
+
|
||||||
+#if BOOST_VERSION < 106100
|
+#if BOOST_VERSION < 106100
|
||||||
///< coroutine stack
|
+ ///< coroutine stack
|
||||||
- void* m_stack;
|
|
||||||
-
|
|
||||||
- size_t m_stackSize;
|
|
||||||
+ std::unique_ptr<char[]> m_stack;
|
+ std::unique_ptr<char[]> m_stack;
|
||||||
#endif
|
+#endif
|
||||||
|
|
||||||
///< pointer to coroutine entry arguments. Stripped of references
|
///< pointer to coroutine entry arguments. Stripped of references
|
||||||
///< to avoid compiler errors.
|
///< to avoid compiler errors.
|
||||||
typename std::remove_reference<ArgType>::type* m_args;
|
- typename strip_ref<ArgType>::result* m_args;
|
||||||
|
|
||||||
- ReturnType m_retVal;
|
- ReturnType m_retVal;
|
||||||
-
|
+ typename std::remove_reference<ArgType>::type* m_args;
|
||||||
|
|
||||||
///< saved caller context
|
///< saved caller context
|
||||||
- context_type* m_caller;
|
- boost::context::fcontext_t* m_saved;
|
||||||
+ context_type m_caller;
|
+ context_type m_caller;
|
||||||
|
|
||||||
///< saved coroutine context
|
///< saved coroutine context
|
||||||
|
- boost::context::fcontext_t* m_self;
|
||||||
|
-
|
||||||
|
- ///< coroutine stack
|
||||||
|
- void* m_stack;
|
||||||
|
-
|
||||||
|
- size_t m_stackSize;
|
||||||
+#if BOOST_VERSION < 105600
|
+#if BOOST_VERSION < 105600
|
||||||
context_type* m_callee;
|
+ context_type* m_callee;
|
||||||
+#else
|
+#else
|
||||||
+ context_type m_callee;
|
+ context_type m_callee;
|
||||||
+#endif
|
+#endif
|
||||||
+
|
|
||||||
|
- bool m_running;
|
||||||
+ ReturnType m_retVal;
|
+ ReturnType m_retVal;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
diff --git a/include/tool/delegate.h b/include/tool/delegate.h
|
Index: include/tool/tool_base.h
|
||||||
deleted file mode 100644
|
===================================================================
|
||||||
index a350dec..0000000
|
--- include/tool/tool_base.h.orig
|
||||||
--- a/include/tool/delegate.h
|
+++ include/tool/tool_base.h
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 CERN
|
||||||
|
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
||||||
|
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@@ -31,7 +32,7 @@
|
||||||
|
#include <tool/tool_event.h>
|
||||||
|
#include <tool/tool_settings.h>
|
||||||
|
|
||||||
|
-#include <tool/delegate.h>
|
||||||
|
+#include <functional>
|
||||||
|
|
||||||
|
class EDA_ITEM;
|
||||||
|
class TOOL_MANAGER;
|
||||||
|
@@ -53,7 +54,9 @@ enum TOOL_TYPE
|
||||||
|
|
||||||
|
/// Unique identifier for tools
|
||||||
|
typedef int TOOL_ID;
|
||||||
|
-typedef DELEGATE<int, const TOOL_EVENT&> TOOL_STATE_FUNC;
|
||||||
|
+
|
||||||
|
+using TOOL_STATE_FUNC = std::function<int(const TOOL_EVENT&)>;
|
||||||
|
+
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class TOOL_BASE
|
||||||
|
Index: include/tool/tool_interactive.h
|
||||||
|
===================================================================
|
||||||
|
--- include/tool/tool_interactive.h.orig
|
||||||
|
+++ include/tool/tool_interactive.h
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 CERN
|
||||||
|
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
||||||
|
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@@ -113,7 +114,7 @@ template <class T>
|
||||||
|
void TOOL_INTERACTIVE::Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
|
||||||
|
const TOOL_EVENT_LIST& aConditions )
|
||||||
|
{
|
||||||
|
- TOOL_STATE_FUNC sptr( static_cast<T*>( this ), aStateFunc );
|
||||||
|
+ TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
|
||||||
|
|
||||||
|
goInternal( sptr, aConditions );
|
||||||
|
}
|
||||||
|
Index: include/tool/delegate.h
|
||||||
|
===================================================================
|
||||||
|
--- include/tool/delegate.h
|
||||||
+++ /dev/null
|
+++ /dev/null
|
||||||
@@ -1,100 +0,0 @@
|
@@ -1,100 +0,0 @@
|
||||||
-/*
|
-/*
|
||||||
@ -873,6 +550,3 @@ index a350dec..0000000
|
|||||||
-};
|
-};
|
||||||
-
|
-
|
||||||
-#endif
|
-#endif
|
||||||
--
|
|
||||||
cgit v0.10.2
|
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
--- kicad-4.0.2/CMakeLists.txt_orig 2016-08-27 21:24:50.616212416 +0200
|
Index: CMakeLists.txt
|
||||||
+++ kicad-4.0.2/CMakeLists.txt 2016-08-27 21:24:30.103970797 +0200
|
===================================================================
|
||||||
@@ -143,6 +143,8 @@
|
--- CMakeLists.txt.orig
|
||||||
|
+++ CMakeLists.txt
|
||||||
|
@@ -142,6 +142,8 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CX
|
||||||
|
# subsequently on the command line, such as in pcbnew/github/CMakeLists.txt
|
||||||
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
|
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
|
||||||
set( CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}" )
|
set( CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}" )
|
||||||
|
|
||||||
+ set( CMAKE_CXX_STANDARD 14 )
|
|
||||||
+
|
+
|
||||||
|
+ set( CMAKE_CXX_STANDARD 14 )
|
||||||
|
|
||||||
# The optimization level is -O1 instead of the usual -O2 level because
|
# The optimization level is -O1 instead of the usual -O2 level because
|
||||||
# boost::polygon has a function (inflate polygon) broken by the -O2 level
|
# boost::polygon has a function (inflate polygon) broken by the -O2 level
|
||||||
# with GCC 4.7.0 to 4.7.2 (works fine with with GCC 4.6 and 4.7.3).
|
|
||||||
|
@ -1,18 +1,26 @@
|
|||||||
Index: kicad-4.0.0-rc1/common/kiface_i.cpp
|
Index: common/kiface_i.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kicad-4.0.0-rc1.orig/common/kiface_i.cpp
|
--- common/kiface_i.cpp.orig
|
||||||
+++ kicad-4.0.0-rc1/common/kiface_i.cpp
|
+++ common/kiface_i.cpp
|
||||||
@@ -80,6 +80,13 @@ static void setSearchPaths( SEARCH_STACK
|
@@ -53,6 +53,7 @@ static void setSearchPaths( SEARCH_STACK
|
||||||
aDst->AddPaths( fn.GetPath() );
|
|
||||||
}
|
|
||||||
|
|
||||||
+// user local library
|
fn.AppendDir( wxT( "library" ) );
|
||||||
+wxString homeDir = wxFileName::GetHomeDir();
|
aDst->AddPaths( fn.GetPath() );
|
||||||
+aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/library" ) );
|
|
||||||
+aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/modules" ) );
|
|
||||||
+aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/modules/packages3d" ) );
|
|
||||||
+aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/template" ) );
|
|
||||||
+
|
+
|
||||||
#ifndef __WXMAC__
|
|
||||||
aDst->AddPaths( wxT( "/usr/local/share" ) );
|
fn.AppendDir( wxT( "doc" ) );
|
||||||
#endif
|
aDst->AddPaths( fn.GetPath() );
|
||||||
|
@@ -60,6 +61,13 @@ static void setSearchPaths( SEARCH_STACK
|
||||||
|
fn.RemoveLastDir();
|
||||||
|
fn.RemoveLastDir(); // "../../" up twice, removing library/doc/
|
||||||
|
}
|
||||||
|
+ // user local library
|
||||||
|
+ wxString homeDir = wxFileName::GetHomeDir();
|
||||||
|
+ aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/library" ) );
|
||||||
|
+ aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/modules" ) );
|
||||||
|
+ aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/modules/packages3d" ) );
|
||||||
|
+ aDst->AddPaths( homeDir + wxT( "/.local/share/kicad/library-repos/kicad-library/template" ) );
|
||||||
|
+
|
||||||
|
|
||||||
|
// Add PCB library file path to search path list.
|
||||||
|
if( aId == KIWAY::FACE_PCB || aId == KIWAY::FACE_CVPCB )
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 12 14:02:01 UTC 2016 - davejplater@gmail.com
|
||||||
|
|
||||||
|
- Update to version 4.0.4
|
||||||
|
*bugfix release
|
||||||
|
- Ran dos2unix and rebased
|
||||||
|
kicad-boost-1_61-boost-context-changes.patch
|
||||||
|
- Rebased kicad-set-cxx-version.patch,kicad-suse-help-path.patch,
|
||||||
|
and kicad-user-library.patch.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Aug 27 17:17:53 UTC 2016 - stefan.bruens@rwth-aachen.de
|
Sat Aug 27 17:17:53 UTC 2016 - stefan.bruens@rwth-aachen.de
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: kicad
|
Name: kicad
|
||||||
Version: 4.0.3
|
Version: 4.0.4
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: EDA software suite for the creation of schematics and PCB
|
Summary: EDA software suite for the creation of schematics and PCB
|
||||||
License: GPL-2.0+ and GPL-3.0+
|
License: GPL-2.0+ and GPL-3.0+
|
||||||
@ -98,13 +98,13 @@ This package contains script for KiCad libraries downloading.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n kicad-%{version}
|
%setup -q -n kicad-%{version}
|
||||||
%patch1 -p1
|
%patch1 -p0
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3
|
%patch3
|
||||||
# patch requires C++11, CMAKE_CXX_STANDARD requires cmake 3.1 -> Leap 42.1 or TW
|
# patch requires C++11, CMAKE_CXX_STANDARD requires cmake 3.1 -> Leap 42.1 or TW
|
||||||
%if 0%{?suse_version} > 1320 || 0%{?suse_version} == 1315
|
%if 0%{?suse_version} > 1320 || 0%{?suse_version} == 1315
|
||||||
%patch4 -p1
|
%patch4
|
||||||
%patch5 -p1
|
%patch5 -p0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
cp %{SOURCE2} .
|
cp %{SOURCE2} .
|
||||||
|
Loading…
Reference in New Issue
Block a user