// $Id$ // // Copyright (C) 2006 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file \brief ProtocolClientSocketHandle inline template implementation */ // Definition of inline template functions //#include "ProtocolClientSocketHandle.ih" // Custom includes #include #define prefix_ inline //-///////////////////////////////////////////////////////////////////////////////////////////////// template prefix_ senf::ProtocolClientSocketHandle:: ProtocolClientSocketHandle(senf::NoInit_t) {} template prefix_ senf::ProtocolClientSocketHandle::ProtocolClientSocketHandle() : ClientSocketHandle( std::auto_ptr(new senf::ProtocolSocketBody(false))) { this->protocol().init_client(); } #define BOOST_PP_ITERATION_PARAMS_1 \ (4, (1, 9, SENF_ABSOLUTE_INCLUDE_PATH(Socket/ProtocolClientSocketHandle.mpp), 2)) #include BOOST_PP_ITERATE() template prefix_ senf::ProtocolClientSocketHandle:: ProtocolClientSocketHandle(FileHandle other, bool isChecked) : ClientSocketHandle(other, isChecked) {} template prefix_ SocketProtocol & senf::ProtocolClientSocketHandle::protocol() { SENF_ASSERT( dynamic_cast(&this->body().protocol()), "Internal failure: Incompatible protocol class found it's way into this handle"); // Need dynamic_cast here, since senf::SocketProtocol is a // virtual base return dynamic_cast(this->body().protocol()); } template prefix_ senf::ProtocolClientSocketHandle senf::ProtocolClientSocketHandle::cast_static(FileHandle handle) { return ProtocolClientSocketHandle(handle,true); } template prefix_ senf::ProtocolClientSocketHandle senf::ProtocolClientSocketHandle::cast_dynamic(FileHandle handle) { ClientSocketHandle h( ClientSocketHandle::cast_dynamic(handle)); // throw std::bad_cast if the protocol is invalid dynamic_cast(static_cast(FileHandle::body(h)).protocol()); return cast_static(handle); } template prefix_ void senf::ProtocolClientSocketHandle::state(SocketStateMap & map, unsigned lod) { map["handle"] = prettyName(typeid(*this)); if (this->valid()) { map["valid"] << "true"; this->body().state(map,lod); } else map["valid"] << "false"; } template prefix_ std::string senf::ProtocolClientSocketHandle::dumpState(unsigned lod) { SocketStateMap map; state(map,lod); return detail::dumpState(map); } //-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ // Local Variables: // mode: c++ // fill-column: 100 // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" // comment-column: 40 // End: