// Interpreter chain access
template <class Type>
-prefix_ bool senf::PacketInterpreterBase::is()
-{
- { static void const * const _ ((void*)&Type::dump); (void) _; }
- return dynamic_cast< PacketInterpreter<Type>* >(this);
-}
-
-template <class Type>
prefix_ typename senf::PacketInterpreter<Type>::ptr senf::PacketInterpreterBase::as()
{
- { static void const * const _ ((void*)&Type::dump); (void) _; }
+ // ensure that the template argument is included in the corresponding object file when linking:
+ { static typename PacketInterpreter<Type>::factory_t _ (PacketInterpreter<Type>::factory()); (void) _;}
return typename PacketInterpreter<Type>::ptr(
static_cast< PacketInterpreter<Type>* >(this));
}
// senf::PacketInterpreter<PacketType>
template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::factory_t
+prefix_ senf::PacketInterpreterBase::factory_t
senf::PacketInterpreter<PacketType>::factory()
{
return & factory_;
template <class PacketType>
prefix_ typename senf::PacketInterpreter<PacketType>::ptr
-senf::PacketInterpreter<PacketType>::createAfter(PacketInterpreterBase::ptr packet)
+senf::PacketInterpreter<PacketType>::createAfter(PacketInterpreterBase::ptr const & packet)
{
return createAfter(packet, initSize());
}
template <class PacketType>
prefix_ typename senf::PacketInterpreter<PacketType>::ptr
-senf::PacketInterpreter<PacketType>::createAfter(PacketInterpreterBase::ptr packet, senf::NoInit_t)
+senf::PacketInterpreter<PacketType>::createAfter(PacketInterpreterBase::ptr const & packet, senf::NoInit_t)
{
return createAfter(packet, 0, senf::noinit);
}
template <class PacketType>
prefix_ typename senf::PacketInterpreter<PacketType>::ptr
senf::PacketInterpreter<PacketType>::create(detail::PacketImpl * impl, iterator b, iterator e,
- PacketInterpreterBase::ptr before)
+ PacketInterpreterBase::ptr const & before)
{
return ptr(new PacketInterpreter(impl,b,e,before));
}
prefix_
senf::PacketInterpreter<PacketType>::PacketInterpreter(detail::PacketImpl * impl, iterator b,
iterator e,
- PacketInterpreterBase::ptr before)
+ PacketInterpreterBase::ptr const & before)
: PacketInterpreterBase(impl,b,e,before)
{}
// PacketType access
template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::size_type
+prefix_ senf::PacketInterpreterBase::size_type
senf::PacketInterpreter<PacketType>::initSize()
{
return type::initSize();
}
template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::size_type
+prefix_ senf::PacketInterpreterBase::size_type
senf::PacketInterpreter<PacketType>::initHeadSize()
{
size_type sz (type::initHeadSize());