cppunit-cvs Mailing List for CppUnit - C++ port of JUnit (Page 24)
Brought to you by:
blep
You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(94) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
(114) |
Mar
(80) |
Apr
|
May
|
Jun
(36) |
Jul
(67) |
Aug
(37) |
Sep
(33) |
Oct
(28) |
Nov
(91) |
Dec
(16) |
2006 |
Jan
(1) |
Feb
(7) |
Mar
(45) |
Apr
|
May
|
Jun
(36) |
Jul
(7) |
Aug
|
Sep
(32) |
Oct
(3) |
Nov
|
Dec
|
2007 |
Jan
(29) |
Feb
(11) |
Mar
(5) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(35) |
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
(14) |
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
(13) |
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
(15) |
From: Baptiste L. <bl...@us...> - 2005-03-06 21:27:22
|
Update of /cvsroot/cppunit/cppunit2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24718 Modified Files: sconstruct Log Message: * link with pthread on linux Index: sconstruct =================================================================== RCS file: /cvsroot/cppunit/cppunit2/sconstruct,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** sconstruct 6 Mar 2005 18:49:05 -0000 1.10 --- sconstruct 6 Mar 2005 21:27:12 -0000 1.11 *************** *** 41,44 **** --- 41,45 ---- if platform == 'suncc': env.Tools( 'suncc' ) + env.Append( LIBS = ['pthreads'] ) elif platform == 'vacpp': env.Tool( 'default', 'aixcc' ) *************** *** 68,71 **** --- 69,73 ---- elif platform == 'linux-gcc': env.Tool( 'default' ) + env.Append( LIBS = ['pthread'] ) else: print "UNSUPPORTED PLATFORM." |
From: Baptiste L. <bl...@us...> - 2005-03-06 21:23:01
|
Update of /cvsroot/cppunit/cppunit2/src/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23710/src/cpptl Modified Files: thread.cpp Log Message: * fixed compilation issues in pthread implementation. Index: thread.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpptl/thread.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** thread.cpp 6 Mar 2005 21:21:09 -0000 1.2 --- thread.cpp 6 Mar 2005 21:22:46 -0000 1.3 *************** *** 266,270 **** { removeThreadExitHandler( this ); ! if ( pthread_key_delete( &key ) != 0 ) { // error: can't throw exception, during static uninitialization } --- 266,270 ---- { removeThreadExitHandler( this ); ! if ( pthread_key_delete( key_ ) != 0 ) { // error: can't throw exception, during static uninitialization } |
From: Baptiste L. <bl...@us...> - 2005-03-06 21:21:20
|
Update of /cvsroot/cppunit/cppunit2/src/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23201/src/cpptl Modified Files: thread.cpp Log Message: * fixed compilation issues in pthread implementation. Index: thread.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpptl/thread.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** thread.cpp 6 Mar 2005 18:46:49 -0000 1.1 --- thread.cpp 6 Mar 2005 21:21:09 -0000 1.2 *************** *** 212,216 **** { // initialization error } ! data_ = pthread_mutex_t; } --- 212,216 ---- { // initialization error } ! data_ = mutex; } *************** *** 255,259 **** : deallocator_( deallocator ) { ! if ( pthread_key_create( &key, 0 ) != 0 ) { // error: Can't throw exception => during static initialization } --- 255,259 ---- : deallocator_( deallocator ) { ! if ( pthread_key_create( &key_, 0 ) != 0 ) { // error: Can't throw exception => during static initialization } *************** *** 293,297 **** { // @todo assert if NULL ! return pthread_getspecific( &(storage->key_) ); } --- 293,297 ---- { // @todo assert if NULL ! return pthread_getspecific( storage->key_ ); } *************** *** 299,303 **** void *value ) { ! if ( pthread_setspecific( &(storage->key_), value ) != 0 ) { // @todo handle failure } --- 299,303 ---- void *value ) { ! if ( pthread_setspecific( storage->key_, value ) != 0 ) { // @todo handle failure } |
From: Baptiste L. <bl...@us...> - 2005-03-06 21:12:52
|
Update of /cvsroot/cppunit/cppunit2/src/cpputtest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20658/src/cpputtest Modified Files: main.cpp Log Message: * added pthread api activation * added CPPTL_USE_WIN32_ATOMIC for WIN32 Index: main.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpputtest/main.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** main.cpp 6 Mar 2005 21:01:45 -0000 1.19 --- main.cpp 6 Mar 2005 21:12:39 -0000 1.20 *************** *** 55,59 **** #elif CPPTL_USE_LINUX_ATOMIC config += "linux atomic operations (limited to 24 bits)"; ! #elif defined(WIN32) config += "win32"; #else --- 55,59 ---- #elif CPPTL_USE_LINUX_ATOMIC config += "linux atomic operations (limited to 24 bits)"; ! #elif CPPTL_USE_WIN32_ATOMIC config += "win32"; #else |
From: Baptiste L. <bl...@us...> - 2005-03-06 21:12:51
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20658/include/cpptl Modified Files: atomiccounter.h config.h Log Message: * added pthread api activation * added CPPTL_USE_WIN32_ATOMIC for WIN32 Index: config.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/config.h,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** config.h 6 Mar 2005 20:12:31 -0000 1.15 --- config.h 6 Mar 2005 21:12:39 -0000 1.16 *************** *** 65,68 **** --- 65,69 ---- # if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) + # define CPPTL_USE_WIN32_ATOMIC 1 # define CPPTL_USE_WIN32_THREAD 1 # elif defined(linux) || defined(__linux) || defined(__linux__) *************** *** 129,133 **** # if !defined(CPPTL_HAS_THREAD) ! # if CPPTL_USE_WIN32_THREAD # define CPPTL_HAS_THREAD 1 # endif --- 130,134 ---- # if !defined(CPPTL_HAS_THREAD) ! # if CPPTL_USE_WIN32_THREAD || CPPTL_USE_PTHREAD_THREAD # define CPPTL_HAS_THREAD 1 # endif Index: atomiccounter.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/atomiccounter.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** atomiccounter.h 6 Mar 2005 20:28:41 -0000 1.6 --- atomiccounter.h 6 Mar 2005 21:12:38 -0000 1.7 *************** *** 12,21 **** // http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/compiler/ref/rubifunc.htm ! # ifdef WIN32 // Forwards declaration for WIN32 (avoid including windows.h) extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile *); extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile *); ! # endif // ifdef WIN32 --- 12,21 ---- // http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/compiler/ref/rubifunc.htm ! # if CPPTL_USE_WIN32_ATOMIC // Forwards declaration for WIN32 (avoid including windows.h) extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile *); extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile *); ! # endif // ifdef CPPTL_USE_WIN32_ATOMIC *************** *** 61,65 **** // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// ! # ifdef WIN32 inline --- 61,65 ---- // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// ! # if CPPTL_USE_WIN32_ATOMIC inline *************** *** 209,213 **** } ! # endif // ifdef WIN32 --- 209,213 ---- } ! # endif // ifdef CPPTL_USE_WIN32_ATOMIC |
From: Baptiste L. <bl...@us...> - 2005-03-06 21:01:54
|
Update of /cvsroot/cppunit/cppunit2/src/cpputtest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17921/src/cpputtest Modified Files: main.cpp Log Message: * added configuration dump before running the test Index: main.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpputtest/main.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** main.cpp 5 Mar 2005 12:55:50 -0000 1.18 --- main.cpp 6 Mar 2005 21:01:45 -0000 1.19 *************** *** 32,37 **** --- 32,87 ---- + static void displayConfiguration() + { + CppTL::StringBuffer config; + // Thread API + #if CPPTL_HAS_THREAD + config += "Thread: Yes, API = "; + # if CPPTL_USE_WIN32_THREAD + config += "win32"; + # elif CPPTL_USE_PTHREAD_THREAD + config += "pthread"; + # else + config += "???"; + # endif + config += "\n"; + #else + config += "Thread: No\n"; + #endif + // Atomic counter implementation + config += "Atomic counter API: "; + #if CPPTL_HAS_VACPP_CHECKLOCK + config += "Visual Age C++ built-in __check_lock()"; + #elif CPPTL_USE_LINUX_ATOMIC + config += "linux atomic operations (limited to 24 bits)"; + #elif defined(WIN32) + config += "win32"; + #else + config += "none (not thread-safe)"; + #endif + config += "\n"; + // Int64 + config += "Int64: "; + #ifndef CPPTL_NO_INT64 + config += "Yes\n"; + #else + config += "No\n"; + #endif + // RTTI + config += "RTTI: "; + #ifndef CPPTL_NO_RTTI + config += "Yes\n"; + #else + config += "No\n"; + #endif + + printf( "=> CPPUT Configuration:\n%s\n", config.c_str() ); + } + + int main( int argc, const char *argv[] ) { + displayConfiguration(); + bool bootStrapSuccess = bootStrapTest(); |
From: Baptiste L. <bl...@us...> - 2005-03-06 20:28:52
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8437/include/cpptl Modified Files: atomiccounter.h Log Message: * removed volatile when using atomic_t as storage. Index: atomiccounter.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/atomiccounter.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** atomiccounter.h 6 Mar 2005 20:26:35 -0000 1.5 --- atomiccounter.h 6 Mar 2005 20:28:41 -0000 1.6 *************** *** 25,29 **** # if CPPTL_HAS_VACPP_CHECKLOCK typedef int AtomicCounterIntegerType; ! typedef AtomicCounterIntegerType AtomicCounterStorageType; # elif CPPTL_USE_LINUX_ATOMIC typedef long AtomicCounterIntegerType; --- 25,29 ---- # if CPPTL_HAS_VACPP_CHECKLOCK typedef int AtomicCounterIntegerType; ! typedef volatile AtomicCounterIntegerType AtomicCounterStorageType; # elif CPPTL_USE_LINUX_ATOMIC typedef long AtomicCounterIntegerType; *************** *** 31,35 **** # else typedef long AtomicCounterIntegerType; ! typedef AtomicCounterIntegerType AtomicCounterStorageType; # endif --- 31,35 ---- # else typedef long AtomicCounterIntegerType; ! typedef volatile AtomicCounterIntegerType AtomicCounterStorageType; # endif *************** *** 51,55 **** private: ! volatile AtomicCounterStorageType count_; }; --- 51,55 ---- private: ! AtomicCounterStorageType count_; }; |
From: Baptiste L. <bl...@us...> - 2005-03-06 20:27:02
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7983/include/cpptl Modified Files: atomiccounter.h Log Message: * can not use member initializer to initialize atomic counter on linux. Index: atomiccounter.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/atomiccounter.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** atomiccounter.h 6 Mar 2005 20:23:32 -0000 1.4 --- atomiccounter.h 6 Mar 2005 20:26:35 -0000 1.5 *************** *** 149,153 **** AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) { ! count_ = ATOMIC_INIT(count); } --- 149,154 ---- AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) { ! atomic_t value = ATOMIC_INIT(count); ! count_ = value; } |
From: Baptiste L. <bl...@us...> - 2005-03-06 20:23:41
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7261/include/cpptl Modified Files: atomiccounter.h Log Message: * can not use member initializer to initialize atomic counter on linux. Index: atomiccounter.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/atomiccounter.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** atomiccounter.h 6 Mar 2005 20:12:31 -0000 1.3 --- atomiccounter.h 6 Mar 2005 20:23:32 -0000 1.4 *************** *** 148,153 **** inline AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) - : count_( ATOMIC_INIT(count) ) { } --- 148,153 ---- inline AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) { + count_ = ATOMIC_INIT(count); } |
From: Baptiste L. <bl...@us...> - 2005-03-06 20:12:41
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4453/include/cpptl Modified Files: atomiccounter.h config.h thread.h Log Message: * added automatic detection of pthread support * added atomic counter implementation for linux Index: config.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/config.h,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** config.h 6 Mar 2005 18:35:14 -0000 1.14 --- config.h 6 Mar 2005 20:12:31 -0000 1.15 *************** *** 66,69 **** --- 66,78 ---- # if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) # define CPPTL_USE_WIN32_THREAD 1 + # elif defined(linux) || defined(__linux) || defined(__linux__) + # define CPPTL_USE_PTHREAD_THREAD 1 + # define CPPTL_USE_LINUX_ATOMIC 1 + # elif defined(sun) || defined(__sun) + # define CPPTL_USE_PTHREAD_THREAD 1 + # elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) + # define CPPTL_USE_PTHREAD_THREAD 1 + # elif defined(__IBMCPP__) + # define CPPTL_USE_PTHREAD_THREAD 1 # endif Index: thread.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/thread.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** thread.h 6 Mar 2005 18:36:03 -0000 1.1 --- thread.h 6 Mar 2005 20:12:31 -0000 1.2 *************** *** 18,21 **** --- 18,22 ---- + // Non-recursive mutex class CPPTL_API Mutex : public NonCopyable { Index: atomiccounter.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/atomiccounter.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** atomiccounter.h 26 Feb 2005 11:53:08 -0000 1.2 --- atomiccounter.h 6 Mar 2005 20:12:31 -0000 1.3 *************** *** 3,6 **** --- 3,14 ---- # include <cpptl/config.h> + # if CPPTL_USE_LINUX_ATOMIC + # include <asm/atomic.h> + # endif + + // Notes: linux implementation only guaranty a 24 bits range for the atomic integer. + + // For AIX implementation, see bulit-in function __check_lock_mp, __check_lock_up: + // http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/compiler/ref/rubifunc.htm # ifdef WIN32 // Forwards declaration for WIN32 (avoid including windows.h) *************** *** 15,36 **** namespace CppTL { class CPPTL_API AtomicCounter : public NonCopyable { public: ! AtomicCounter( long count = 0 ); ! long increment(); /// Decrements the count ! /// @returns 0 if the count is null, non zero otherwise. ! long decrement(); /// Should returns the current value of the count. /// \warning this method is only defined for debugging and testing ! /// purpose, you should not rely on it in production code. ! long count() const; private: ! volatile long count_; }; --- 23,55 ---- namespace CppTL { + # if CPPTL_HAS_VACPP_CHECKLOCK + typedef int AtomicCounterIntegerType; + typedef AtomicCounterIntegerType AtomicCounterStorageType; + # elif CPPTL_USE_LINUX_ATOMIC + typedef long AtomicCounterIntegerType; + typedef atomic_t AtomicCounterStorageType; + # else + typedef long AtomicCounterIntegerType; + typedef AtomicCounterIntegerType AtomicCounterStorageType; + # endif + class CPPTL_API AtomicCounter : public NonCopyable { public: ! AtomicCounter( AtomicCounterIntegerType count = 0 ); ! void increment(); /// Decrements the count ! /// @returns true if count is non null. ! bool decrement(); /// Should returns the current value of the count. /// \warning this method is only defined for debugging and testing ! /// purpose, you should not rely on it in production code path. ! AtomicCounterIntegerType count() const; private: ! volatile AtomicCounterStorageType count_; }; *************** *** 45,49 **** inline ! AtomicCounter::AtomicCounter( long count ) : count_( count ) { --- 64,68 ---- inline ! AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) : count_( count ) { *************** *** 51,69 **** ! inline long AtomicCounter::increment() { ! return InterlockedIncrement( const_cast< long * >( &count_ ) ); } ! inline long AtomicCounter::decrement() { ! return InterlockedDecrement( const_cast< long * >( &count_ ) ); } ! inline long AtomicCounter::count() const { --- 70,88 ---- ! inline void AtomicCounter::increment() { ! InterlockedIncrement( const_cast< AtomicCounterIntegerType * >( &count_ ) ); } ! inline bool AtomicCounter::decrement() { ! return InterlockedDecrement( const_cast< AtomicCounterIntegerType * >( &count_ ) ) != 0; } ! inline AtomicCounterIntegerType AtomicCounter::count() const { *************** *** 71,74 **** --- 90,176 ---- } + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + // AtomicCounter implementation for Visual Age C++ + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + #elif CPPTL_HAS_VACPP_CHECKLOCK + + // __check_lock( void *p, old_value, new_value ) + // it is a compare and swap built-in. The implementation below spins + // until the old_value matches the value we just read. + + inline + AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) + : count_( count ) + { + } + + + inline void + AtomicCounter::increment() + { + AtomicCounterIntegerType value; + do + value = count_; + while ( __check_lock( &count_, value, value+1 ) ); + } + + + inline bool + AtomicCounter::decrement() + { + AtomicCounterIntegerType value; + do + value = count_; + while ( __check_lock( &count_, value, value-1 ) ); + return value == 1; + } + + + inline AtomicCounterIntegerType + AtomicCounter::count() const + { + AtomicCounterIntegerType value; + do + value = count_; + while ( __check_lock( &count_, value, value ) ); + return value; + } + + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + // AtomicCounter implementation for Linux + // ////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////// + #elif CPPTL_USE_LINUX_ATOMIC + + inline + AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) + : count_( ATOMIC_INIT(count) ) + { + } + + + inline void + AtomicCounter::increment() + { + atomic_inc( &count_ ); + } + + + inline bool + AtomicCounter::decrement() + { + return !atomic_dec_and_test( &count_ ); + } + + + inline AtomicCounterIntegerType + AtomicCounter::count() const + { + return atomic_read( &count_ ); + } + // ////////////////////////////////////////////////////////////////// *************** *** 80,84 **** inline ! AtomicCounter::AtomicCounter( long count ) : count_( count ) { --- 182,186 ---- inline ! AtomicCounter::AtomicCounter( AtomicCounterIntegerType count ) : count_( count ) { *************** *** 86,90 **** ! inline long AtomicCounter::increment() { --- 188,192 ---- ! inline AtomicCounterIntegerType AtomicCounter::increment() { *************** *** 93,97 **** ! inline long AtomicCounter::decrement() { --- 195,199 ---- ! inline AtomicCounterIntegerType AtomicCounter::decrement() { *************** *** 100,104 **** ! inline long AtomicCounter::count() const { --- 202,206 ---- ! inline AtomicCounterIntegerType AtomicCounter::count() const { |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:50:09
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14341/src/cpput Modified Files: testinfo.cpp Log Message: * moved cpput/thread.h to cpptl/thread.h * simplified thread-local storage access. Index: testinfo.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/testinfo.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** testinfo.cpp 1 Mar 2005 19:36:51 -0000 1.9 --- testinfo.cpp 6 Mar 2005 18:49:59 -0000 1.10 *************** *** 1,4 **** #include <cpput/testinfo.h> ! #include <cpput/thread.h> namespace { --- 1,4 ---- #include <cpput/testinfo.h> ! #include <cpptl/thread.h> namespace { *************** *** 111,136 **** namespace TestInfo { ! // static TestInfoDataPtr staticData( new TestInfoData() ); ! ThreadLocalStorage<TestInfoDataPtr> staticData; ! ! static TestInfoDataPtr dataPtr() ! { ! const TestInfoDataPtr &data = staticData.get(); ! if ( !data ) ! { ! staticData.set( TestInfoDataPtr( new TestInfoData() ) ); ! return staticData.get(); ! } ! return data; ! } static TestInfoData &data() { ! return *dataPtr(); ! } ! ! static void setData( const TestInfoDataPtr &data ) ! { ! staticData = data; } --- 111,122 ---- namespace TestInfo { ! CppTL::ThreadLocalStorage<TestInfoDataPtr> staticData; static TestInfoData &data() { ! TestInfoDataPtr &data = staticData.get(); ! if ( !data ) ! data.reset( new TestInfoData() ); ! return *data; } *************** *** 259,264 **** TestInfoDataPtr saveAndResetContext() { ! TestInfoDataPtr oldData = dataPtr(); ! setData( TestInfoDataPtr( new TestInfoData() ) ); return oldData; } --- 245,250 ---- TestInfoDataPtr saveAndResetContext() { ! TestInfoDataPtr oldData = staticData.get(); ! staticData.get().reset( new TestInfoData() ); return oldData; } *************** *** 266,270 **** void restoreContext( const TestInfoDataPtr &oldContext ) { ! setData( oldContext ); } --- 252,256 ---- void restoreContext( const TestInfoDataPtr &oldContext ) { ! staticData = oldContext; } |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:49:14
|
Update of /cvsroot/cppunit/cppunit2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14084 Modified Files: sconstruct Log Message: * added a library for cpptl for threading functionnalies. Index: sconstruct =================================================================== RCS file: /cvsroot/cppunit/cppunit2/sconstruct,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** sconstruct 5 Mar 2005 10:52:18 -0000 1.9 --- sconstruct 6 Mar 2005 18:49:05 -0000 1.10 *************** *** 46,49 **** --- 46,51 ---- CXX ='xlC_r', #scons does not pick-up the correct one ! LINKFLAGS='-bh:5' ) # -bh:5 remove duplicate symbol warning + # using xlC_r ensure multi-threading is enabled: + # http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/compiler/ref/cuselect.htm elif platform == 'msvc6': env['MSVS_VERSION']='6.0' *************** *** 63,66 **** --- 65,69 ---- elif platform == 'mingw': env.Tool( 'mingw' ) + env.Append( CPPDEFINES=[ "WIN32", "NDEBUG", "_MT" ] ) elif platform == 'linux-gcc': env.Tool( 'default' ) *************** *** 72,76 **** LIBPATH = lib_dir ) ! env_testing = env.Copy( LIBS = ['cpput','opentest'] ) def buildCppUnitExample( env, target_sources, target_name ): --- 75,79 ---- LIBPATH = lib_dir ) ! env_testing = env.Copy( LIBS = ['cpput','opentest','cpptl'] ) def buildCppUnitExample( env, target_sources, target_name ): *************** *** 98,101 **** --- 101,105 ---- buildProjectInDirectory( 'src/cpput' ) + buildProjectInDirectory( 'src/cpptl' ) buildProjectInDirectory( 'src/opentest' ) buildProjectInDirectory( 'src/cpputtest' ) |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:48:34
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13982/src/cpput Modified Files: cpput.vcproj SConscript Log Message: * added a library for cpptl for threading functionnalies. Index: SConscript =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/SConscript,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** SConscript 5 Mar 2005 11:02:25 -0000 1.5 --- SConscript 6 Mar 2005 18:48:23 -0000 1.6 *************** *** 10,15 **** testinfo.cpp testrunner.cpp ! testsuite.cpp ! thread.cpp """ ), 'cpput' ) --- 10,14 ---- testinfo.cpp testrunner.cpp ! testsuite.cpp """ ), 'cpput' ) Index: cpput.vcproj =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/cpput.vcproj,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** cpput.vcproj 3 Mar 2005 08:15:54 -0000 1.30 --- cpput.vcproj 6 Mar 2005 18:48:23 -0000 1.31 *************** *** 209,212 **** --- 209,215 ---- </File> <File + RelativePath="..\..\include\cpptl\enumstringizer.h"> + </File> + <File RelativePath="..\..\include\cpptl\forwards.h"> </File> *************** *** 221,224 **** --- 224,230 ---- </File> <File + RelativePath="..\..\include\cpptl\reflectionimpl10.h"> + </File> + <File RelativePath="..\..\include\cpptl\sharedptr.h"> </File> *************** *** 227,230 **** --- 233,248 ---- </File> <File + RelativePath="..\cpptl\thread.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + </File> + <File + RelativePath="..\..\include\cpptl\thread.h"> + </File> + <File RelativePath="..\..\include\cpptl\typeinfo.h"> </File> *************** *** 429,450 **** </File> <File - RelativePath=".\thread.cpp"> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - DisableLanguageExtensions="FALSE"/> - </FileConfiguration> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - DisableLanguageExtensions="FALSE"/> - </FileConfiguration> - </File> - <File - RelativePath="..\..\include\cpput\thread.h"> - </File> - <File RelativePath="..\..\include\cpput\translate.h"> </File> --- 447,450 ---- |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:48:33
|
Update of /cvsroot/cppunit/cppunit2/src/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13982/src/cpptl Added Files: SConscript Log Message: * added a library for cpptl for threading functionnalies. --- NEW FILE: SConscript --- Import( 'env buildLibary' ) buildLibary( env, Split( """ thread.cpp """ ), 'cpptl' ) |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:46:59
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13635/src/cpput Removed Files: thread.cpp Log Message: * moved src/cpput/thread.cpp to src/cpptl/thread.cpp * implementation clean-up --- thread.cpp DELETED --- |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:46:59
|
Update of /cvsroot/cppunit/cppunit2/src/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13635/src/cpptl Added Files: thread.cpp Log Message: * moved src/cpput/thread.cpp to src/cpptl/thread.cpp * implementation clean-up --- NEW FILE: thread.cpp --- #include <cpptl/thread.h> #include <vector> #if CPPTL_HAS_THREAD # ifdef CPPTL_USE_WIN32_THREAD # if !defined(APIENTRY) # undef NOMINMAX # define WIN32_LEAN_AND_MEAN # define NOGDI # define NOUSER # define NOKERNEL # define NOSOUND # define NOMINMAX # define BLENDFUNCTION void // for mingw & gcc # include <windows.h> # endif # elif defined(CPPTL_USE_PTHREAD_THREAD) # include <pthread.h> # endif // # elif defined(CPPTL_USE_PTHREAD_THREAD) #endif // Notes concerning threading implementation: // CppUnit need has very few thread-safety, hence the implementation of the threading // API need not to be highly performant. // // But, the ThreadLocalStorage should not use lock for each get/set (locking when creating // the variable in a new thread is ok though). ThreadLocalStorage is use by assertions // and this would therefore decrease the actually concurrency of the threads using assertions. namespace CppTL { // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // No Thread API // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// #if !(CPPTL_HAS_THREAD) Mutex::Mutex() { } Mutex::~Mutex() { } void Mutex::lock() { } void Mutex::unlock() { } #else # if CPPTL_USE_WIN32_THREAD // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // Thread API for WIN32 // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class Mutex (win32) // ////////////////////////////////////////////////////////////////////// Mutex::Mutex() : data_( 0 ) { CRITICAL_SECTION *cs = new CRITICAL_SECTION(); ::InitializeCriticalSection( cs ); data_ = cs; } Mutex::~Mutex() { CRITICAL_SECTION *cs = static_cast<CRITICAL_SECTION *>( data_ ); if ( cs ) ::DeleteCriticalSection( cs ); delete cs; } void Mutex::lock() { CRITICAL_SECTION *cs = static_cast<CRITICAL_SECTION *>( data_ ); ::EnterCriticalSection( cs ); } void Mutex::unlock() { CRITICAL_SECTION *cs = static_cast<CRITICAL_SECTION *>( data_ ); ::LeaveCriticalSection( cs ); } // class Impl::RawThreadStorage (win32) // ////////////////////////////////////////////////////////////////////// namespace Impl { class RawThreadStorage { public: RawThreadStorage( const CppTL::Functor1<void *> &deallocator ) : deallocator_( deallocator ) { tlsIndex_ = ::TlsAlloc(); // if ( tlsIndex_ == TLS_OUT_OF_INDEXES ) // failed. // Can't throw exception => during static initialization... addThreadExitHandler( memfn0( this, &RawThreadStorage::onThreadExit ), this ); } ~RawThreadStorage() { removeThreadExitHandler( this ); ::TlsFree( tlsIndex_ ); } void onThreadExit() { deallocator_( getRawThreadStorage( this ) ); } CppTL::Functor1<void *> deallocator_; DWORD tlsIndex_; }; RawThreadStorage *createRawThreadStorage( const CppTL::Functor1<void *> &deallocator ) { return new RawThreadStorage( deallocator ); } void freeRawThreadStorage( RawThreadStorage *storage ) { delete storage; } void *getRawThreadStorage( RawThreadStorage *storage ) { // @todo assert if NULL return ::TlsGetValue( storage->tlsIndex_ ); } void setRawThreadStorage( RawThreadStorage *storage, void *value ) { if ( ::TlsSetValue( storage->tlsIndex_, value ) == 0 ) { // @todo handle failure } } } // namespace Impl // class Thread (win32) // ////////////////////////////////////////////////////////////////////// /* Thread::Thread( Functor0 threadFunction ) { // threadFunction(); } void Thread::join() { } */ Thread::ThreadIdType Thread::currentId() { return ThreadIdType( ::GetCurrentThreadId() ); } /* void Thread::sleep( unsigned long durationInMillisecond ) { ::Sleep( durationInMillisecond ); } */ # elif defined(CPPTL_USE_PTHREAD_THREAD) // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // Thread API for PTHREAD // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class Mutex (pthread) // ////////////////////////////////////////////////////////////////////// Mutex::Mutex() : data_( 0 ) { pthread_mutex_t *mutex = new pthread_mutex_t(); if ( pthread_mutex_init( mutex, 0 ) != 0 ) { // initialization error } data_ = pthread_mutex_t; } Mutex::~Mutex() { pthread_mutex_t *mutex = static_cast<pthread_mutex_t *>( data_ ); if ( mutex ) pthread_mutex_destroy( mutex ); delete mutex; } void Mutex::lock() { pthread_mutex_t *mutex = static_cast<pthread_mutex_t *>( data_ ); if ( pthread_mutex_lock( mutex ) != 0 ) { // @todo error } } void Mutex::unlock() { pthread_mutex_t *mutex = static_cast<pthread_mutex_t *>( data_ ); if ( pthread_mutex_unlock( mutex ) != 0 ) { // @todo error } } // class Impl::ThreadLocalStorageImpl (pthread) // ////////////////////////////////////////////////////////////////////// namespace Impl { class RawThreadStorage { public: RawThreadStorage( const CppTL::Functor1<void *> &deallocator ) : deallocator_( deallocator ) { if ( pthread_key_create( &key, 0 ) != 0 ) { // error: Can't throw exception => during static initialization } addThreadExitHandler( memfn0( this, &RawThreadStorage::onThreadExit ), this ); } ~RawThreadStorage() { removeThreadExitHandler( this ); if ( pthread_key_delete( &key ) != 0 ) { // error: can't throw exception, during static uninitialization } } void onThreadExit() { deallocator_( getRawThreadStorage( this ) ); } CppTL::Functor1<void *> deallocator_; pthread_key_t key_; }; RawThreadStorage *createRawThreadStorage( const CppTL::Functor1<void *> &deallocator ) { return new RawThreadStorage( deallocator ); } void freeRawThreadStorage( RawThreadStorage *storage ) { delete storage; } void *getRawThreadStorage( RawThreadStorage *storage ) { // @todo assert if NULL return pthread_getspecific( &(storage->key_) ); } void setRawThreadStorage( RawThreadStorage *storage, void *value ) { if ( pthread_setspecific( &(storage->key_), value ) != 0 ) { // @todo handle failure } } } // namespace Impl # endif // # elif defined(CPPTL_USE_PTHREAD_THREAD) // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // Common Thread API implementation // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // class ThreadExitHandler (win32) // ////////////////////////////////////////////////////////////////////// namespace Impl { class ThreadExitHandler : public NonCopyable { public: static ThreadExitHandler &instance() { // This static is instantiated at static construction time // so it's thread-safe static ThreadExitHandler handler; return handler; } ThreadExitHandler() : magic1_( 0x1a9cd67f ) // magic number are used to protect against , magic2_( 0x3e4a3c9d ) // possible race condition on shutdown. { } ~ThreadExitHandler() { Mutex::ScopedLockGuard guard( lock_ ); while ( !handlers_.empty() ) { handlers_.begin()->first(); handlers_.erase( handlers_.begin() ); } magic1_ = 0xdeadbeef; magic2_ = 0xdeadbeef; } void add( const Functor0 &handler, const void *tag ) { if ( !isValid() ) return; Mutex::ScopedLockGuard guard( lock_ ); Handlers::iterator it = find( tag ); if ( it == handlers_.end() ) handlers_.push_back( HandlerInfo( handler, tag ) ); else *it = HandlerInfo( handler, tag ); } void remove( const void *tag ) { if ( !isValid() ) return; Mutex::ScopedLockGuard guard( lock_ ); Handlers::iterator it = find( tag ); if ( it != handlers_.end() ) { it->first(); handlers_.erase( it ); } } void process() { if ( !isValid() ) return; Mutex::ScopedLockGuard guard( lock_ ); Handlers::iterator it = handlers_.begin(); for ( ; it != handlers_.end(); ++it ) it->first(); } private: typedef std::pair<Functor0,const void *> HandlerInfo; typedef std::vector<HandlerInfo> Handlers; Handlers::iterator find( const void *tag ) { Handlers::iterator it = handlers_.begin(); for ( ; it != handlers_.end(); ++it ) if ( it->second == tag ) return it; return handlers_.end(); } bool isValid() const { return magic1_ == 0x1a9cd67f && magic2_ == 0x3e4a3c9d; } Handlers handlers_; Mutex lock_; unsigned int magic1_; unsigned int magic2_; }; } // namespace Impl class ThreadExitHandlerInitializer { public: ThreadExitHandlerInitializer() { Impl::ThreadExitHandler::instance(); } }; // This force a call to ThreadExitHandler::instance(), // and ensure it is properly initialized. static ThreadExitHandlerInitializer threadExitInitializer; void addThreadExitHandler( const Functor0 &handler, const void *tag ) { Impl::ThreadExitHandler::instance().add( handler, tag ); } void removeThreadExitHandler( const void *tag ) { Impl::ThreadExitHandler::instance().remove( tag ); } void processThreadExitHandlers() { Impl::ThreadExitHandler::instance().process(); } #endif // #ifdef CPPTL_HAS_THREAD } // namespace CppTL |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:45:47
|
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13367/src/cpput Modified Files: assert.cpp Log Message: * removed unnecessary on thread.h Index: assert.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/assert.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** assert.cpp 28 Feb 2005 22:14:03 -0000 1.9 --- assert.cpp 6 Mar 2005 18:45:38 -0000 1.10 *************** *** 2,6 **** # include <cpput/message.h> # include <cpput/stringize.h> - # include <cpput/thread.h> # include <cpput/translate.h> --- 2,5 ---- |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:40:00
|
Update of /cvsroot/cppunit/cppunit2/include/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11925 Modified Files: config.h Log Message: * removed thread-safety related variables. Index: config.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpput/config.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** config.h 5 Mar 2005 12:29:38 -0000 1.11 --- config.h 6 Mar 2005 18:39:50 -0000 1.12 *************** *** 4,12 **** # include <cpptl/config.h> - //# define CPPUT_THREAD_SAFE - //# define CPPUT_USE_WIN32_THREAD - //# define CPPUT_USE_PTHREAD_THREAD // untested - //# define CPPUT_USE_BOOST_ATOMIC_COUNTER - //# define CPPUT_USE_BOOST_SHARED_PTR # define CPPUT_BOOST_FRIENDLY //# define CPPUT_DLL_SUPPORT --- 4,7 ---- |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:38:14
|
Update of /cvsroot/cppunit/cppunit2/include/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11586 Modified Files: assert.h Log Message: * added reference to potential C99 __func__ standard variable. Index: assert.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpput/assert.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** assert.h 1 Mar 2005 19:36:51 -0000 1.9 --- assert.h 6 Mar 2005 18:38:03 -0000 1.10 *************** *** 112,115 **** --- 112,119 ---- + // __func__ should contains the current fonction name on many compiler (C99 compiler extension). See: + // http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/language/ref/clrc02predefined_identifiers.htm + // Available if __C99__FUNC__ is defined: + // http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/language/ref/clrapxaix_macros.htm # define CPPUT_CHECK_POINT( assertionType ) \ ::CppUT::TestInfo::newAssertion( ::CppUT::assertionType, __FILE__, __LINE__) |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:37:35
|
Update of /cvsroot/cppunit/cppunit2/include/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11484 Removed Files: thread.h Log Message: * moved to cpptl/thread.h --- thread.h DELETED --- |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:36:57
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11308 Modified Files: typename.h Log Message: * added reference to AIX demangle API. Index: typename.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/typename.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** typename.h 28 Feb 2005 21:36:20 -0000 1.1 --- typename.h 6 Mar 2005 18:36:46 -0000 1.2 *************** *** 9,12 **** --- 9,15 ---- # endif + // AIX: demangle library + // http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/proguide/ref/demangle.htm + namespace CppTL { |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:36:15
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11122 Added Files: thread.h Log Message: * moved from cpput/thread.h * implementation clean-up --- NEW FILE: thread.h --- #ifndef CPPTL_THREAD_H_INCLUDED # define CPPTL_THREAD_H_INCLUDED # include <cpptl/forwards.h> # if CPPTL_HAS_THREAD # include <cpptl/functor.h> # endif // # if CPPTL_HAS_THREAD namespace CppTL { void CPPTL_API addThreadExitHandler( const Functor0 &handler, const void *tag = 0 ); void CPPTL_API removeThreadExitHandler( const void *tag ); void CPPTL_API processThreadExitHandlers(); class CPPTL_API Mutex : public NonCopyable { public: class ScopedLockGuard { public: ScopedLockGuard( Mutex &mutex ) : mutex_( mutex ) { mutex_.lock(); } ~ScopedLockGuard() { mutex_.unlock(); } private: Mutex &mutex_; }; Mutex(); ~Mutex(); void lock(); void unlock(); # if CPPTL_HAS_THREAD private: void *data_; # endif }; // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // Implementation of thread API for NON THREAD-SAFE mode // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// # if !(CPPTL_HAS_THREAD) template<class ValueType> class ThreadLocalStorage { public: typedef ThreadLocalStorage<ValueType> SelfType; ThreadLocalStorage( const ValueType &defaultValue = ValueType() ) : value_( defaultValue ) { } bool isInitialized() const { return true; } ValueType &get() { return value_; } private: ValueType value_; }; // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // Implementation of thread API for THREAD-SAFE mode // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// # else // # if !(CPPTL_HAS_THREAD) namespace Impl { class RawThreadStorage; RawThreadStorage *CPPTL_API createRawThreadStorage( const Functor1<void *> &deallocator ); void CPPTL_API freeRawThreadStorage( RawThreadStorage *storage ); void *CPPTL_API getRawThreadStorage( RawThreadStorage *storage ); void setRawThreadStorage( RawThreadStorage *storage, void *value ); } // namespace Impl template<class ValueType> class ThreadLocalStorage : public NonCopyable { public: typedef void(*FreeFn)(void*); typedef ThreadLocalStorage<ValueType> SelfType; ThreadLocalStorage( const ValueType &defaultValue = ValueType() ) : storage_( Impl::createRawThreadStorage( cfn1( FreeFn(freeValue) ) ) ) , defaultValue_( defaultValue ) { } virtual ~ThreadLocalStorage() { Impl::freeRawThreadStorage( storage_ ); } bool isInitialized() const { return Impl::getRawThreadStorage( storage_ ) != 0; } ValueType &get() { ValueType * value = static_cast<ValueType *>( Impl::getRawThreadStorage( storage_ ) ); if ( !value ) { value = new ValueType( defaultValue_ ); Impl::setRawThreadStorage( storage_, value ); } return *value; } SelfType &operator =( const ValueType &other ) { get() = other; return *this; } private: static void freeValue( void *p ) { delete static_cast<ValueType *>( p ); } ValueType defaultValue_; Impl::RawThreadStorage *storage_; }; class CPPTL_API Thread { public: typedef unsigned long ThreadIdType; // Thread( Functor0 threadFunction ); // void join(); static ThreadIdType currentId(); // static void sleep( unsigned long durationInMillisecond ); private: void *data_; }; # endif // # ifndef CPPTL_THREAD_SAFE // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // Implementation of thread API common to all thread-safety mode // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// /* class Thread; typedef CppTL::SharedPtr<Thread> ThreadPtr; inline ThreadPtr createThread( Functor0 threadFunction ) { return ThreadPtr( new Thread( threadFunction ) ); } */ } // namespace CppTL #endif // CPPTL_THREAD_H_INCLUDED |
From: Baptiste L. <bl...@us...> - 2005-03-06 18:35:24
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10940 Modified Files: config.h Log Message: * enabled thread if WIN32 platform. Index: config.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/config.h,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** config.h 5 Mar 2005 13:11:23 -0000 1.13 --- config.h 6 Mar 2005 18:35:14 -0000 1.14 *************** *** 5,9 **** #include <utility> - // compiler specific stuffs... /////////////////////////////////////////////////////////////////////////// --- 5,8 ---- *************** *** 62,65 **** --- 61,71 ---- # endif + // OS specifics + /////////////////////////////////////////////////////////////////////////// + + # if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) + # define CPPTL_USE_WIN32_THREAD 1 + # endif + // Common to all compilers /////////////////////////////////////////////////////////////////////////// *************** *** 113,116 **** --- 119,128 ---- # endif + # if !defined(CPPTL_HAS_THREAD) + # if CPPTL_USE_WIN32_THREAD + # define CPPTL_HAS_THREAD 1 + # endif + # endif + // auto-link specification |
From: Baptiste L. <bl...@us...> - 2005-03-06 17:48:15
|
Update of /cvsroot/cppunit/cppunit2/src/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31035/cpptl Log Message: Directory /cvsroot/cppunit/cppunit2/src/cpptl added to the repository |
From: Baptiste L. <bl...@us...> - 2005-03-05 13:45:07
|
Update of /cvsroot/cppunit/cppunit2/include/cpptl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23007/include/cpptl Modified Files: reflection.inl reflectionimpl.py reflectionimpl10.h Log Message: * added portability macro CPPTL_AT to access sequence container portably Index: reflection.inl =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/reflection.inl,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** reflection.inl 4 Mar 2005 22:18:14 -0000 1.3 --- reflection.inl 5 Mar 2005 13:44:50 -0000 1.4 *************** *** 139,143 **** Method::getArgType( size_type index ) const { ! return invokable_.argTypes_.at(index); } --- 139,143 ---- Method::getArgType( size_type index ) const { ! return CPPTL_AT( invokable_.argTypes_, index); } Index: reflectionimpl.py =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/reflectionimpl.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** reflectionimpl.py 5 Mar 2005 10:15:12 -0000 1.3 --- reflectionimpl.py 5 Mar 2005 13:44:50 -0000 1.4 *************** *** 122,126 **** self.fn_parameter_types = ', '.join( args ) self.const_method = (is_const and ' const') or '' ! self.fn_call = '\n ,'.join( [ 'any_cast( call.args_.at(%d), Type<Arg%d>() )' % (n,n+1) for n in xrange(0,count) ] ) self.invokable_instantiation = self.invokable + self.makeTemplateInstantiation( invokable_template_parameters ) --- 122,126 ---- self.fn_parameter_types = ', '.join( args ) self.const_method = (is_const and ' const') or '' ! self.fn_call = '\n ,'.join( [ 'any_cast( CPPTL_AT( call.args_, %d ), Type<Arg%d>() )' % (n,n+1) for n in xrange(0,count) ] ) self.invokable_instantiation = self.invokable + self.makeTemplateInstantiation( invokable_template_parameters ) Index: reflectionimpl10.h =================================================================== RCS file: /cvsroot/cppunit/cppunit2/include/cpptl/reflectionimpl10.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** reflectionimpl10.h 5 Mar 2005 10:15:12 -0000 1.3 --- reflectionimpl10.h 5 Mar 2005 13:44:50 -0000 1.4 *************** *** 104,108 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ); } --- 104,108 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ); } *************** *** 125,129 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ); } --- 125,129 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ); } *************** *** 146,150 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ); } --- 146,150 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ); } *************** *** 167,171 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ); } --- 167,171 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ); } *************** *** 188,193 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ); } --- 188,193 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ); } *************** *** 210,215 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ); } --- 210,215 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ); } *************** *** 232,237 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ); } --- 232,237 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ); } *************** *** 254,259 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ); } --- 254,259 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ); } *************** *** 276,282 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ); } --- 276,282 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ); } *************** *** 299,305 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ); } --- 299,305 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ); } *************** *** 322,328 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ); } --- 322,328 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ); } *************** *** 345,351 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ); } --- 345,351 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ); } *************** *** 368,375 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ); } --- 368,375 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ); } *************** *** 392,399 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ); } --- 392,399 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ); } *************** *** 416,423 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ); } --- 416,423 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ); } *************** *** 440,447 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ); } --- 440,447 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ); } *************** *** 464,472 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ); } --- 464,472 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ); } *************** *** 489,497 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ); } --- 489,497 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ); } *************** *** 514,522 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ); } --- 514,522 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ); } *************** *** 539,547 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ); } --- 539,547 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ); } *************** *** 564,573 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ); } --- 564,573 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ); } *************** *** 590,599 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ); } --- 590,599 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ); } *************** *** 616,625 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ); } --- 616,625 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ); } *************** *** 642,651 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ); } --- 642,651 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ); } *************** *** 668,678 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ); } --- 668,678 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ); } *************** *** 695,705 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ); } --- 695,705 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ); } *************** *** 722,732 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ); } --- 722,732 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ); } *************** *** 749,759 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ); } --- 749,759 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ); } *************** *** 776,787 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ); } --- 776,787 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ); } *************** *** 804,815 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ); } --- 804,815 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ); } *************** *** 832,843 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ); } --- 832,843 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ); } *************** *** 860,871 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ); } --- 860,871 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ); } *************** *** 888,900 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ); } --- 888,900 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ); } *************** *** 917,929 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ); } --- 917,929 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ); } *************** *** 946,958 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ); } --- 946,958 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ); } *************** *** 975,987 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ); } --- 975,987 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ); } *************** *** 1004,1017 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ! ,any_cast( call.args_.at(9), Type<Arg10>() ) ); } --- 1004,1017 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ! ,any_cast( CPPTL_AT( call.args_, 9 ), Type<Arg10>() ) ); } *************** *** 1034,1047 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ! ,any_cast( call.args_.at(9), Type<Arg10>() ) ); } --- 1034,1047 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ! ,any_cast( CPPTL_AT( call.args_, 9 ), Type<Arg10>() ) ); } *************** *** 1064,1077 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ! ,any_cast( call.args_.at(9), Type<Arg10>() ) ); } --- 1064,1077 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ! ,any_cast( CPPTL_AT( call.args_, 9 ), Type<Arg10>() ) ); } *************** *** 1094,1107 **** { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( call.args_.at(0), Type<Arg1>() ) ! ,any_cast( call.args_.at(1), Type<Arg2>() ) ! ,any_cast( call.args_.at(2), Type<Arg3>() ) ! ,any_cast( call.args_.at(3), Type<Arg4>() ) ! ,any_cast( call.args_.at(4), Type<Arg5>() ) ! ,any_cast( call.args_.at(5), Type<Arg6>() ) ! ,any_cast( call.args_.at(6), Type<Arg7>() ) ! ,any_cast( call.args_.at(7), Type<Arg8>() ) ! ,any_cast( call.args_.at(8), Type<Arg9>() ) ! ,any_cast( call.args_.at(9), Type<Arg10>() ) ); } --- 1094,1107 ---- { Object &object = *any_cast( call.holder_, Type<Object *>() ); ! call.result_ = (object.*member_)( any_cast( CPPTL_AT( call.args_, 0 ), Type<Arg1>() ) ! ,any_cast( CPPTL_AT( call.args_, 1 ), Type<Arg2>() ) ! ,any_cast( CPPTL_AT( call.args_, 2 ), Type<Arg3>() ) ! ,any_cast( CPPTL_AT( call.args_, 3 ), Type<Arg4>() ) ! ,any_cast( CPPTL_AT( call.args_, 4 ), Type<Arg5>() ) ! ,any_cast( CPPTL_AT( call.args_, 5 ), Type<Arg6>() ) ! ,any_cast( CPPTL_AT( call.args_, 6 ), Type<Arg7>() ) ! ,any_cast( CPPTL_AT( call.args_, 7 ), Type<Arg8>() ) ! ,any_cast( CPPTL_AT( call.args_, 8 ), Type<Arg9>() ) ! ,any_cast( CPPTL_AT( call.args_, 9 ), Type<Arg10>() ) ); } |