[complement-svn] SF.net SVN: complement: [1724] trunk/complement/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-09-07 10:53:31
|
Revision: 1724 http://complement.svn.sourceforge.net/complement/?rev=1724&view=rev Author: complement Date: 2007-09-07 03:53:27 -0700 (Fri, 07 Sep 2007) Log Message: ----------- allow any name of functions for 'connect' and 'close' procedures in template parametric class Connect Modified Paths: -------------- trunk/complement/explore/include/sockios/sockmgr.cc trunk/complement/explore/include/sockios/sockmgr.h trunk/complement/explore/lib/sockios/ChangeLog Modified: trunk/complement/explore/include/sockios/sockmgr.cc =================================================================== --- trunk/complement/explore/include/sockios/sockmgr.cc 2007-09-07 10:52:21 UTC (rev 1723) +++ trunk/complement/explore/include/sockios/sockmgr.cc 2007-09-07 10:53:27 UTC (rev 1724) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <07/09/05 00:54:04 ptr> +// -*- C++ -*- Time-stamp: <07/09/06 21:32:15 ptr> /* * Copyright (c) 1997-1999, 2002, 2003, 2005-2007 @@ -26,8 +26,8 @@ #ifndef __FIT_NO_POLL -template <class Connect> -void sockmgr_stream_MP<Connect>::_open( sock_base::stype t ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +void sockmgr_stream_MP<Connect,C,T>::_open( sock_base::stype t ) { xmt::scoped_lock lk(_fd_lck); if ( is_open_unsafe() ) { @@ -68,29 +68,29 @@ } } -template <class Connect> -void sockmgr_stream_MP<Connect>::open( const in_addr& addr, int port, sock_base::stype t ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +void sockmgr_stream_MP<Connect,C,T>::open( const in_addr& addr, int port, sock_base::stype t ) { basic_sockmgr::open( addr, port, t, sock_base::inet ); - sockmgr_stream_MP<Connect>::_open( t ); + sockmgr_stream_MP<Connect,C,T>::_open( t ); } -template <class Connect> -void sockmgr_stream_MP<Connect>::open( unsigned long addr, int port, sock_base::stype t ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +void sockmgr_stream_MP<Connect,C,T>::open( unsigned long addr, int port, sock_base::stype t ) { basic_sockmgr::open( addr, port, t, sock_base::inet ); - sockmgr_stream_MP<Connect>::_open( t ); + sockmgr_stream_MP<Connect,C,T>::_open( t ); } -template <class Connect> -void sockmgr_stream_MP<Connect>::open( int port, sock_base::stype t ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +void sockmgr_stream_MP<Connect,C,T>::open( int port, sock_base::stype t ) { basic_sockmgr::open( port, t, sock_base::inet ); - sockmgr_stream_MP<Connect>::_open( t ); + sockmgr_stream_MP<Connect,C,T>::_open( t ); } -template <class Connect> -bool sockmgr_stream_MP<Connect>::_shift_fd() +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +bool sockmgr_stream_MP<Connect,C,T>::_shift_fd() { bool ret = false; typename iterator_traits<typename _fd_sequence::iterator>::difference_type d; @@ -173,8 +173,8 @@ return ret; } -template <class Connect> -bool sockmgr_stream_MP<Connect>::accept_tcp() +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +bool sockmgr_stream_MP<Connect,C,T>::accept_tcp() { if ( !is_open() ) { return false; @@ -255,8 +255,8 @@ return true; // something was pushed in connection queue (by _shift_fd) } -template <class Connect> -bool sockmgr_stream_MP<Connect>::accept_udp() +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +bool sockmgr_stream_MP<Connect,C,T>::accept_udp() { if ( !is_open() ) { return false; @@ -359,8 +359,8 @@ return true /* cl */; } -template <class Connect> -void sockmgr_stream_MP<Connect>::_close_by_signal( int ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +void sockmgr_stream_MP<Connect,C,T>::_close_by_signal( int ) { #ifdef _PTHREADS void *_uw_save = *((void **)pthread_getspecific( xmt::Thread::mtkey() ) + _idx ); @@ -372,8 +372,8 @@ #endif } -template <class Connect> -xmt::Thread::ret_t sockmgr_stream_MP<Connect>::loop( void *p ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +xmt::Thread::ret_t sockmgr_stream_MP<Connect,C,T>::loop( void *p ) { _Self_type *me = static_cast<_Self_type *>(p); me->loop_id.pword( _idx ) = me; // push pointer to self for signal processing @@ -429,8 +429,8 @@ return rtc; } -template <class Connect> -xmt::Thread::ret_t sockmgr_stream_MP<Connect>::connect_processor( void *p ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +xmt::Thread::ret_t sockmgr_stream_MP<Connect,C,T>::connect_processor( void *p ) { _Self_type *me = static_cast<_Self_type *>(p); xmt::Thread::ret_t rtc = 0; @@ -454,7 +454,7 @@ if (_non_empty ) { sockstream& stream = c->s; if ( stream.is_open() ) { - c->_proc->connect( stream ); + (c->_proc->*C)( stream ); if ( stream.is_open() && stream.good() ) { if ( stream.rdbuf()->in_avail() > 0 ) { // socket has buffered data, push it back to queue @@ -509,8 +509,8 @@ return rtc; } -template <class Connect> -xmt::Thread::ret_t sockmgr_stream_MP<Connect>::observer( void *p ) +template <class Connect, void (Connect::*C)( std::sockstream& ), void (Connect::*T)() > +xmt::Thread::ret_t sockmgr_stream_MP<Connect,C,T>::observer( void *p ) { _Self_type *me = static_cast<_Self_type *>(p); xmt::Thread::ret_t rtc = 0; Modified: trunk/complement/explore/include/sockios/sockmgr.h =================================================================== --- trunk/complement/explore/include/sockios/sockmgr.h 2007-09-07 10:52:21 UTC (rev 1723) +++ trunk/complement/explore/include/sockios/sockmgr.h 2007-09-07 10:53:27 UTC (rev 1724) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <07/09/05 00:45:19 ptr> +// -*- C++ -*- Time-stamp: <07/09/06 21:23:52 ptr> /* * Copyright (c) 1997-1999, 2002, 2003, 2005-2007 @@ -135,7 +135,7 @@ #ifndef __FIT_NO_POLL -template <class Connect> +template <class Connect, void (Connect::*C)( std::sockstream& ) = &Connect::connect, void (Connect::*T)() = &Connect::close > class sockmgr_stream_MP : public basic_sockmgr { @@ -195,8 +195,8 @@ { loop_id.join(); } private: - sockmgr_stream_MP( const sockmgr_stream_MP<Connect>& ); - sockmgr_stream_MP<Connect>& operator =( const sockmgr_stream_MP<Connect>& ); + sockmgr_stream_MP( const sockmgr_stream_MP<Connect,C,T>& ); + sockmgr_stream_MP<Connect,C,T>& operator =( const sockmgr_stream_MP<Connect,C,T>& ); public: void open( const in_addr& addr, int port, sock_base::stype t = sock_base::sock_stream ); @@ -237,7 +237,7 @@ { } ~_Connect() - { if ( _proc ) { s.close(); _proc->close(); } delete _proc; } + { if ( _proc ) { s.close(); (_proc->*T)(); } delete _proc; } void open( sock_base::socket_type st, const sockaddr& addr, sock_base::stype t = sock_base::sock_stream ) { s.open( st, addr, t ); _proc = new Connect( s ); } @@ -276,7 +276,7 @@ { return __x.fd == __y; } }; - typedef bool (sockmgr_stream_MP<Connect>::*accept_type)(); + typedef bool (sockmgr_stream_MP<Connect,C,T>::*accept_type)(); #if 0 accept_type _accept; @@ -292,7 +292,7 @@ xmt::Thread loop_id; protected: - typedef sockmgr_stream_MP<Connect> _Self_type; + typedef sockmgr_stream_MP<Connect,C,T> _Self_type; typedef fd_equal _Compare; typedef iaddr_equal _Compare_inet; typedef typename _Sequence::value_type value_type; Modified: trunk/complement/explore/lib/sockios/ChangeLog =================================================================== --- trunk/complement/explore/lib/sockios/ChangeLog 2007-09-07 10:52:21 UTC (rev 1723) +++ trunk/complement/explore/lib/sockios/ChangeLog 2007-09-07 10:53:27 UTC (rev 1724) @@ -1,3 +1,8 @@ +2007-09-06 Petr Ovtchenkov <pt...@is...> + + * sockmgr.h, sockmgr.cc: allow any name of functions for 'connect' + and 'close' procedures in template parametric class Connect. + 2007-09-05 Petr Ovtchenkov <pt...@is...> * sockmgr.h, sockmgr.cc: looks like non-POD return from thread is This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |