// $Id$ // // Copyright (C) 2006 // Fraunhofer Institute for Open Communication Systems (FOKUS) // // The contents of this file are subject to the Fraunhofer FOKUS Public License // Version 1.0 (the "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // http://senf.berlios.de/license.html // // The Fraunhofer FOKUS Public License Version 1.0 is based on, // but modifies the Mozilla Public License Version 1.1. // See the full license text for the amendments. // // Software distributed under the License is distributed on an "AS IS" basis, // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License // for the specific language governing rights and limitations under the License. // // The Original Code is Fraunhofer FOKUS code. // // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. // (registered association), Hansastraße 27 c, 80686 Munich, Germany. // All Rights Reserved. // // Contributor(s): // Stefan Bund /** \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 IGNORE( 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: