several fixes for clang/llvm
tho [Wed, 7 Dec 2011 13:00:19 +0000 (13:00 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1833 270642c3-0616-0410-b53a-bc976706d245

74 files changed:
SConfigure
SConstruct
senf/PPI/Module.hh
senf/PPI/ModuleManager.hh
senf/PPI/MultiConnectorMixin.hh
senf/PPI/QueueingSocketSink.test.cc
senf/PPI/RateAnalyzer.test.cc
senf/PPI/Route.cti
senf/PPI/SocketSink.test.cc
senf/PPI/SocketSource.test.cc
senf/PPI/predecl.hh
senf/Packets/80211Bundle/RadiotapPacket.hh
senf/Packets/80211Bundle/WLANPacket.hh
senf/Packets/80221Bundle/MIHPacket.hh
senf/Packets/GenericTLV.ct
senf/Packets/ListBParser.cti
senf/Packets/ListParser.ih
senf/Packets/MPEGDVBBundle/MPESection.hh
senf/Packets/Packet.test.cc
senf/Packets/PacketInterpreter.ct
senf/Packets/PacketInterpreter.cti
senf/Packets/PacketInterpreter.hh
senf/Packets/PacketParser.hh
senf/Packets/PacketRegistry.ih
senf/Packets/PacketTypes.hh
senf/Packets/VariantParser.ct
senf/Packets/VariantParser.ih
senf/Packets/VectorParser.ct
senf/Packets/VectorParser.cti
senf/Scheduler/FIFORunner.hh
senf/Scheduler/FdEvent.hh
senf/Scheduler/SignalEvent.hh
senf/Scheduler/TimerEvent.hh
senf/Scheduler/TimerEvent.test.cc
senf/Socket/ClientSocketHandle.cti
senf/Socket/ClientSocketHandle.hh
senf/Socket/NetdeviceController.hh
senf/Socket/ProtocolClientSocketHandle.cti
senf/Socket/ProtocolServerSocketHandle.cti
senf/Socket/Protocols/INet/INet6Address.hh
senf/Socket/Protocols/INet/RawINetSocketHandle.test.cc
senf/Socket/Protocols/INet/TCPSocketHandle.test.cc
senf/Socket/Protocols/INet/UDPSocketHandle.test.cc
senf/Socket/Protocols/INet/net.test.cc [new file with mode: 0644]
senf/Socket/Protocols/INet/net.test.hh
senf/Socket/Protocols/Raw/EUI64.hh
senf/Socket/Protocols/Raw/MACAddress.hh
senf/Socket/SocketHandle.cc
senf/Socket/SocketHandle.cti
senf/Socket/SocketProtocol.hh
senf/Utils/Console/ConfigFile.hh
senf/Utils/Console/OverloadedCommand.cc
senf/Utils/Console/Parse.cc
senf/Utils/Console/Parse.hh
senf/Utils/Console/Parse.ih
senf/Utils/Console/ParsedCommand.hh
senf/Utils/Console/ProgramOptions.hh
senf/Utils/Console/SysInfo.cc
senf/Utils/Console/SysInfo.hh
senf/Utils/Console/UDPServer.test.cc
senf/Utils/Logger/AreaRegistry.hh
senf/Utils/Logger/AreaRegistry.ih
senf/Utils/Logger/Config.ih
senf/Utils/Logger/Parameters.ih
senf/Utils/Logger/StreamRegistry.hh
senf/Utils/Logger/SyslogUDPTarget.test.cc
senf/Utils/Logger/Target.hh
senf/Utils/Termlib/Telnet.hh
senf/Utils/intrusive_refcount.hh
senf/Utils/mpl.test.cc
senf/Utils/senfassert.hh
site_scons/SparseTestHack.py
site_scons/senfutil.py
site_scons/site_tools/Boost.py

index b7f1a2f..64044a8 100644 (file)
@@ -14,7 +14,7 @@ def CheckSTLCopyN(context):
                  ('<ext/algorithm>', '__gnu_cxx::copy_n', 'GNUCXX') ]
     for include, name, define in versions:
         ret = context.TryCompile("#include %s\n"
-                                 "int main(int,char**) { int *a,*b; %s(a,0,b); }\n"
+                                 "int main(int,char**) { int *a (NULL); int *b (NULL); %s(a,0,b); }\n"
                                  % (include, name),
                                  ".cc")
         if ret:
index 67fdc5d..8566c0f 100644 (file)
@@ -101,11 +101,13 @@ env.Append(
                                '--param','large-function-growth=10000',
                                '--param', 'large-function-insns=10000',
                                '--param','inline-unit-growth=10000' ],
-    INLINE_OPTS_NORMAL     = [ '-finline-limit=5000', '--param', 'inline-unit-growth=60' ],
-    INLINE_OPTS            = [ '$INLINE_OPTS_NORMAL' ],
+    INLINE_OPTS_GCC        = [ '-finline-limit=5000', '--param', 'inline-unit-growth=60' ],
+    INLINE_OPTS            = [ '${str(CXX).split("/")[-1] == "g++" and "$INLINE_OPTS_GCC" or None}' ],
+    CXXFLAGS_CLANG         = [ '-Wno-unneeded-internal-declaration' ], # needed for BOOST_PARAMETER_KEYWORD
     CXXFLAGS               = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long', '$INLINE_OPTS',
                                '-pipe', '$CXXFLAGS_', '-fno-strict-aliasing', 
-                               "${profile and '-pg' or None}" ],
+                               "${profile and '-pg' or None}",
+                               '${str(CXX).split("/")[-1] == "clang++" and "$CXXFLAGS_CLANG" or None}' ],
     CXXFLAGS_final         = [ '-O3', '-fno-threadsafe-statics','-fno-stack-protector',
                                "${profile and ' ' or '-ffunction-sections'}" ],
     CXXFLAGS_normal        = [ '-O2', '-g' ],
@@ -183,7 +185,7 @@ SConscript('SConfigure')
 
 env.Append(LIBS = [ '$LIBSENF$LIBADDSUFFIX',
                     '$BOOSTREGEXLIB', '$BOOSTSIGNALSLIB',
-                    '$BOOSTFSLIB', '$BOOSTSYSTEMLIB' ])
+                    '$BOOSTFSLIB', '$BOOSTSYSTEMLIB', '$BOOSTDATETIMELIB' ])
 
 ###########################################################################
 
index a2741ec..8b60a5e 100644 (file)
@@ -343,7 +343,7 @@ namespace module {
         RouteInfoBase routes_;
 
         template <class Source, class Target>
-        friend class detail::RouteHelper;
+        friend struct detail::RouteHelper;
         friend class senf::ppi::ModuleManager;
         friend class connector::Connector;
         friend class senf::ppi::detail::EventBindingBase;
index cc66892..d5d6105 100644 (file)
@@ -107,7 +107,7 @@ namespace ppi {
 
 #ifndef DOXYGEN
         struct RunGuard;
-        friend class RunGuard;
+        friend struct RunGuard;
 #endif
 
         ModuleRegistry moduleRegistry_;
@@ -121,7 +121,7 @@ namespace ppi {
         senf::console::ScopedDirectory<> consoleDir_;
 
         friend class module::Module;
-        friend class Initializable;
+        friend struct Initializable;
     };
 
 }}
index 4db6ebd..135c517 100644 (file)
@@ -95,7 +95,7 @@ namespace ppi {
 
 namespace module {
 
-    namespace detail { class MultiConnectorMixinAccess; }
+    namespace detail { struct MultiConnectorMixinAccess; }
 
     /** \brief Multi-Connector management
 
@@ -287,7 +287,7 @@ namespace module {
 
         void disconnected(ConnectorType_ const & c);
 
-        friend class detail::MultiConnectorMixinAccess;
+        friend struct detail::MultiConnectorMixinAccess;
         friend class detail::MultiConnectorWrapper<Self_,ConnectorType_>;
 
         ContainerType_ connectors_;
@@ -324,7 +324,7 @@ namespace module {
 
         void disconnected(ConnectorType_ const & c);
 
-        friend class detail::MultiConnectorMixinAccess;
+        friend struct detail::MultiConnectorMixinAccess;
         friend class detail::MultiConnectorWrapper<Self_,ConnectorType_>;
 
         ContainerType_ connectors_;
@@ -350,7 +350,7 @@ namespace module {
 
         void disconnected(ConnectorType_ const & c);
 
-        friend class detail::MultiConnectorMixinAccess;
+        friend struct detail::MultiConnectorMixinAccess;
         friend class detail::MultiConnectorWrapper<Self_,ConnectorType_>;
     };
 
index 04b14aa..a2d60b4 100644 (file)
@@ -138,7 +138,7 @@ SENF_AUTO_UNIT_TEST(passiveQueueingSocketSink)
         BOOST_CHECK_EQUAL( data, input );
     }
 
-    runPPI( senf::ClockService::milliseconds(250));
+    runPPI( senf::ClockService::milliseconds(500));
     BOOST_CHECK_EQUAL( udpSink.qAlgorithm().size(), 0);
 }
 
index 8478393..cafaf11 100644 (file)
 namespace {
 
     unsigned calls (0u);
-    float ppss[] = { 13.333333f, 20.f, 13.333333f, 20.f, 13.333333f, 20.f };
 
     float pps;
     float bps;
 
     void collectPPS(float packetsPerSecond)
     {
+        static float ppss[] = { 13.333333f, 20.f, 13.333333f, 20.f, 13.333333f, 20.f };
         // 2 + 3 + 2 + 3 + 2 + 3 packets / interval
         // -> 13.333333 + 20. + 13.333333 + 20. + 13.333333 + 20. / 6 pps
         // -> 16.666666 pps
index 8458ac6..db9612e 100644 (file)
@@ -163,8 +163,8 @@ senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
 ForwardingRouteImplementation(module::Module & module, Source & source, Target & target)
     : Base(module,source,target)
 {
-    registerRoute(source);
-    registerRoute(target);
+    Base::registerRoute(source);
+    Base::registerRoute(target);
 }
 
 template <class Source, class Target>
@@ -172,8 +172,8 @@ prefix_
 senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
 ~ForwardingRouteImplementation()
 {
-    unregisterRoute(this->source());
-    unregisterRoute(this->target());
+    Base::unregisterRoute(this->source());
+    Base::unregisterRoute(this->target());
 }
 
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
index 4d9256b..6b55e36 100644 (file)
@@ -67,10 +67,6 @@ namespace {
         return (boost::format("localhost:%d") % port(i)).str();
     }
 
-    std::string localhost6str(unsigned i)
-    {
-        return (boost::format("[::1]:%d") % port(i)).str();
-    }
 }
 
 SENF_AUTO_UNIT_TEST(passiveSocketSink)
index 52f34d3..f7b416c 100644 (file)
@@ -71,10 +71,6 @@ namespace {
         return (boost::format("localhost:%d") % port(i)).str();
     }
 
-    std::string localhost6str(unsigned i)
-    {
-        return (boost::format("[::1]:%d") % port(i)).str();
-    }
 }
 
 SENF_AUTO_UNIT_TEST(socketSource)
index fc0fb62..80ba4aa 100644 (file)
@@ -74,7 +74,7 @@ namespace ppi {
     namespace module {
         class Module;
         namespace detail {
-            template <class Source, class Target> class RouteHelper;
+            template <class Source, class Target> struct RouteHelper;
         }
         class PassiveJoin;
         class PriorityJoin;
index a292428..04e1f9c 100644 (file)
@@ -58,7 +58,7 @@ namespace senf {
 
         SENF_PARSER_FINALIZE ( RadiotapPacketParser_Flags );
 
-        friend class RadiotapPacketParser;
+        friend struct RadiotapPacketParser;
     };
 
     /** \brief Parse in Radiotap Header channel frequency and flag field
@@ -300,7 +300,7 @@ namespace senf {
         static OffsetMap offsetMap_;
         OffsetTable const * currentTable_;
 
-        friend class RadiotapPacketType;
+        friend struct RadiotapPacketType;
     };
 
     /** \brief Radiotap packet
index 0db8889..d56f9c9 100644 (file)
@@ -255,7 +255,7 @@ namespace senf
         MACAddressParser destinationAddress() const;
         MACAddressParser bssid() const;
 
-        friend class WLANPacket_DataFrameType;
+        friend struct WLANPacket_DataFrameType;
     };
 
     /** \brief WLAN Data frame packet
index af90a4b..87bf23a 100644 (file)
@@ -85,7 +85,7 @@ namespace senf {
             version_() = 1;
         }
 
-        friend class MIHPacketType;
+        friend struct MIHPacketType;
     };
 
     /** \brief MIH packet
index a2df5c0..fd798b6 100644 (file)
@@ -87,7 +87,7 @@ prefix_ void senf::GenericTLVParserBase<Base>::value_(ForwardReadableRange const
     //typename boost::range_difference<ForwardReadableRange>::type rangeSize ( boost::size(range));
     unsigned rangeSize ( boost::size(range));
     if ( rangeSize != this->length() )
-        resize( bytes(), rangeSize + senf::bytes(self()) );
+        Base::resize( bytes(), rangeSize + senf::bytes(self()) );
     std::copy( boost::begin(range), boost::end(range), boost::next(
             this->i(), senf::bytes( self())) );
     this->length_() = rangeSize;
index 1129e88..5c2deb9 100644 (file)
@@ -155,9 +155,9 @@ update(container_type const & c)
     data_iterator i (AuxPolicy::WrapperPolicy::adjust(c.i(), c.state()));
     data_iterator j (i);
     for (size_type n (n_); n; --n, std::advance(j,senf::bytes(ElementParser(j,c.state())))) ;
-    aux( std::distance(i,j), c.i(), c.state() );
+    AuxPolicy::WrapperPolicy::aux( std::distance(i,j), c.i(), c.state() );
 #else
-    aux ( aux(c.i(),c.state()) + c.data().size() - container_size_, c.i(), c.state() );
+    AuxPolicy::WrapperPolicy::aux( aux(c.i(),c.state()) + c.data().size() - container_size_, c.i(), c.state() );
 #endif
     container_size_ = c.data().size();
 }
@@ -177,7 +177,7 @@ senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::container_policy::
 setEnd(container_type const & c, iterator_data & d)
     const
 {
-    return boost::next(AuxPolicy::WrapperPolicy::adjust(c.i(), c.state()),aux(c.i(),c.state()));
+    return boost::next(AuxPolicy::WrapperPolicy::adjust(c.i(), c.state()),AuxPolicy::WrapperPolicy::aux(c.i(),c.state()));
 }
 
 template <class ElementParser, class AuxPolicy>
index 291c88b..428ff72 100644 (file)
@@ -67,7 +67,7 @@ namespace detail {
 
     private:
         friend class boost::iterator_core_access;
-        template <class P> friend class ListParser_Container;
+        friend class ListParser_Container<typename Container::policy>;
 
         value_type dereference() const;
         bool equal(ListParser_Iterator const & other) const;
index a384c2e..0286242 100644 (file)
@@ -103,7 +103,7 @@ namespace senf {
         UInt32Parser crc() const { return parse<UInt32Parser>( data().size()-4 ); }
         boost::uint32_t calcCrc() const;
 
-        friend class MPESectionType;
+        friend struct MPESectionType;
 
     private:
         typedef boost::crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0, false, false> crc32_t;
index c714924..776dbfd 100644 (file)
@@ -149,14 +149,6 @@ namespace {
     std::ostream & operator<<(std::ostream & os, ComplexEmptyAnnotation const & v)
     { os << "(empty)"; return os; }
 
-    struct InvalidAnnotation
-    {
-        std::string value;
-    };
-
-    std::ostream & operator<<(std::ostream & os, InvalidAnnotation const & v)
-    { os << v.value; return os; }
-
 }
 
 SENF_AUTO_UNIT_TEST(packet)
@@ -388,6 +380,16 @@ SENF_AUTO_UNIT_TEST(packetAnnotation)
 
 #ifdef COMPILE_CHECK
 
+namespace {
+    struct InvalidAnnotation
+    {
+        std::string value;
+    };
+
+    std::ostream & operator<<(std::ostream & os, InvalidAnnotation const & v)
+    { os << v.value; return os; }
+}
+    
 COMPILE_FAIL(invalidAnnotation)
 {
 #if 0 // The traits check fails for user defined but trivial constructors so ...
index 1225872..3499dd3 100644 (file)
@@ -180,7 +180,7 @@ senf::PacketInterpreter<PacketType>::createInsertBefore(PacketInterpreterBase::p
 // virtual interface
 
 template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::optional_range
+prefix_ senf::PacketInterpreterBase::optional_range
 senf::PacketInterpreter<PacketType>::v_nextPacketRange()
 {
     return type::nextPacketRange(ConcretePacket<PacketType>(ptr(this)));
@@ -223,14 +223,14 @@ prefix_ senf::TypeIdValue senf::PacketInterpreter<PacketType>::v_type()
 }
 
 template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::factory_t
+prefix_ senf::PacketInterpreterBase::factory_t
 senf::PacketInterpreter<PacketType>::v_factory()
 {
     return factory();
 }
 
 template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::factory_t
+prefix_ senf::PacketInterpreterBase::factory_t
 senf::PacketInterpreter<PacketType>::v_nextPacketType()
 {
     return type::nextPacketType(ConcretePacket<PacketType>(ptr(this)));
index 459580b..e4604e4 100644 (file)
@@ -59,7 +59,7 @@ prefix_ Annotation & senf::PacketInterpreterBase::annotation()
 // senf::PacketInterpreter<PacketType>
 
 template <class PacketType>
-prefix_ typename senf::PacketInterpreter<PacketType>::factory_t
+prefix_ senf::PacketInterpreterBase::factory_t
 senf::PacketInterpreter<PacketType>::factory()
 {
     return & factory_;
@@ -177,14 +177,14 @@ senf::PacketInterpreter<PacketType>::PacketInterpreter(detail::PacketImpl * impl
 // 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());
index 5696bd2..d7fb09b 100644 (file)
 namespace senf {
 
     template <class PacketType> class PacketInterpreter;
+    
+    void intrusive_ptr_add_ref(PacketInterpreterBase const * p);
+    void intrusive_ptr_release(PacketInterpreterBase const * p);
 
+    
     /** \brief Internal: Base packet interpreter class
 
         \internal
@@ -232,16 +236,13 @@ namespace senf {
         friend class detail::PacketImpl;
         friend class intrusive_refcount_base;
         template <class PacketType> friend class PacketInterpreter;
-        friend class detail::packet::test::TestDriver;
+        friend struct detail::packet::test::TestDriver;
         friend class PacketParserBase;
 
         friend void senf::intrusive_ptr_add_ref(PacketInterpreterBase const *);
         friend void senf::intrusive_ptr_release(PacketInterpreterBase const *);
     };
 
-    void intrusive_ptr_add_ref(PacketInterpreterBase const * p);
-    void intrusive_ptr_release(PacketInterpreterBase const * p);
-
     /** \brief Internal: Concrete packet interpreter
 
         \internal
@@ -401,9 +402,9 @@ namespace senf {
 
         static const FactoryImpl factory_;
 
-        friend class detail::packet::test::TestDriver;
+        friend struct detail::packet::test::TestDriver;
         friend class PacketInterpreterBase;
-        friend class FactoryImpl;
+        friend struct FactoryImpl;
     };
 
     /** \brief Invalid packet chain operation
index fb41642..3f09e61 100644 (file)
@@ -388,7 +388,7 @@ namespace senf {
         PacketData * data_;
 
         template <class Parser> friend class SafePacketParserWrapper;
-        friend class ParserProtector;
+        friend struct ParserProtector;
     };
 
     /** \brief Return raw size parsed by the given parser object
@@ -408,8 +408,8 @@ namespace senf {
     template <class Parser>
     PacketParserBase::size_type bytes(Parser const & p);
 
-    namespace detail { template <class Parser> class ParserInitBytes; }
-    namespace detail { template <class Parser> class ParserIsFixed; }
+    namespace detail { template <class Parser> struct ParserInitBytes; }
+    namespace detail { template <class Parser> struct ParserIsFixed; }
 
     /** \brief Return number of bytes to allocate to new object of given type
 
index c5d3ac4..322153a 100644 (file)
@@ -120,7 +120,7 @@ namespace detail {
                         std::greater<int> > >,
                 boost::multi_index::ordered_unique<
                     boost::multi_index::tag<ByType>,
-                    boost::multi_index::mem_fun<Entry const,std::type_info const &,&Entry::type>,
+                    boost::multi_index::const_mem_fun<Entry,std::type_info const &,&Entry::type>,
                     TypeInfoCompare> >
         {};
 
index 1d6c16b..3672ddf 100644 (file)
@@ -78,7 +78,7 @@ namespace packet {
 
 namespace test {
 
-    class TestDriver;
+    struct TestDriver;
 
 }}}}
 
index 587b054..34e3866 100644 (file)
@@ -43,7 +43,7 @@ prefix_ void senf::VariantParser<AuxPolicy,Parsers>::init()
     size_type oldSize( bytes() );
     typedef typename boost::mpl::at<parsers, boost::mpl::int_<N> >::type NewParser;
 
-    if (oldSize < senf::init_bytes<NewParser>::value) {
+    if (oldSize <= senf::init_bytes<NewParser>::value) {
         data_iterator j (i());
         std::advance(j, oldSize);
         std::fill(i(), j, 0u);
index f7361e4..039b1a8 100644 (file)
@@ -155,7 +155,7 @@ namespace detail {
         template <BOOST_PP_CAT(name, _chooser_value_type) (*KeyFn)()>                             \
         struct BOOST_PP_CAT(name, _key_value_template)                                            \
             : public senf::detail::VariantKey<BOOST_PP_CAT(name, _chooser_value_type), KeyFn> {}; \
-        template <class T, T (*K)()> friend class senf::detail::VariantKey;                       \
+        template <class T, T (*K)()> friend struct senf::detail::VariantKey;                       \
         typedef senf::detail::VariantKeyTransform<                                                \
             BOOST_PP_CAT(name,_chooser_value_type),                                               \
             boost::mpl::vector<                                                                   \
index 9df474b..dbc2644 100644 (file)
@@ -42,7 +42,7 @@ template <class ElementParser, class AuxPolicy>
 prefix_ void senf::VectorParser<ElementParser,AuxPolicy>::init()
     const
 {
-    aux(0, i(), state());
+    AuxPolicy::aux(0, i(), state());
     iterator i (begin());
     iterator const e (end());
     for (; i!=e; ++i)
index f6a2650..1a4efe3 100644 (file)
@@ -50,7 +50,7 @@ prefix_ senf::VectorParser<ElementParser,AuxPolicy>::VectorParser(AuxPolicy poli
 {}
 
 template <class ElementParser, class AuxPolicy>
-prefix_ typename senf::VectorParser<ElementParser,AuxPolicy>::size_type
+prefix_ senf::PacketInterpreterBase::size_type
 senf::VectorParser<ElementParser,AuxPolicy>::bytes()
     const
 {
@@ -60,11 +60,11 @@ senf::VectorParser<ElementParser,AuxPolicy>::bytes()
 // Container interface
 
 template <class ElementParser, class AuxPolicy>
-prefix_ typename senf::VectorParser<ElementParser,AuxPolicy>::size_type
+prefix_ senf::PacketInterpreterBase::size_type
 senf::VectorParser<ElementParser,AuxPolicy>::size()
     const
 {
-    return aux(i(),state());
+    return AuxPolicy::aux(i(),state());
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -79,7 +79,7 @@ prefix_ typename senf::VectorParser<ElementParser,AuxPolicy>::iterator
 senf::VectorParser<ElementParser,AuxPolicy>::begin()
     const
 {
-    return iterator(adjust(i(),state()),state());
+    return iterator(AuxPolicy::adjust(i(),state()),state());
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -191,7 +191,7 @@ prefix_ typename senf::VectorParser_Container<ElementParser,AuxPolicy>::size_typ
 senf::VectorParser_Container<ElementParser,AuxPolicy>::size()
     const
 {
-    return aux(i(),state());
+    return AuxPolicy::WrapperPolicy::aux(i(),state());
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -206,7 +206,7 @@ prefix_ typename senf::VectorParser_Container<ElementParser,AuxPolicy>::iterator
 senf::VectorParser_Container<ElementParser,AuxPolicy>::begin()
     const
 {
-    return iterator(adjust(i(),state()),state());
+    return iterator( AuxPolicy::WrapperPolicy::adjust(i(),state()),state());
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -347,7 +347,7 @@ senf::VectorParser_Container<ElementParser,AuxPolicy>::bytes()
 template <class ElementParser, class AuxPolicy>
 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::setSize(size_type value)
 {
-    aux(value, i(),state());
+    AuxPolicy::WrapperPolicy::aux(value, i(),state());
 }
 
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
index 3265fc1..733d05a 100644 (file)
@@ -53,7 +53,7 @@ namespace detail {
         : public singleton<FIFORunner>
     {
     public:
-        struct TaskInfo;
+        class TaskInfo;
 
     private:
         struct TaskListTag;
index 8d3209d..24c4997 100644 (file)
@@ -170,7 +170,7 @@ namespace scheduler {
         int events_;
         int signaledEvents_;
 
-        friend class detail::FdSetCompare;
+        friend struct detail::FdSetCompare;
         friend class detail::FdDispatcher;
         friend class detail::FileDispatcher;
     };
index e9fa890..f2d3b45 100644 (file)
@@ -51,7 +51,7 @@ namespace scheduler {
         typedef boost::intrusive::iset_base_hook<SignalSetTag> SignalSetBase;
         struct SignalSetCompare;
         struct FindNumericSignal;
-        struct SignalDispatcher;
+        class SignalDispatcher;
     }
 
     /** \brief UNIX signal event
@@ -108,8 +108,8 @@ namespace scheduler {
         Callback cb_;
         siginfo_t siginfo_;
 
-        friend class detail::SignalSetCompare;
-        friend class detail::FindNumericSignal;
+        friend struct detail::SignalSetCompare;
+        friend struct detail::FindNumericSignal;
         friend class detail::SignalDispatcher;
     };
 
index fcf20d0..396d8fd 100644 (file)
@@ -131,7 +131,7 @@ namespace scheduler {
         ClockService::clock_type timeout_;
 
         friend class detail::TimerDispatcher;
-        friend class detail::TimerSetCompare;
+        friend struct detail::TimerSetCompare;
     };
 
 }}
index 878b740..5f47c3c 100644 (file)
@@ -117,21 +117,21 @@ namespace {
         tm.timeout(randomDelay());
     }
 
-    void preCb()
-    {
-        haveCb = false;
-    }
-
-    void postCb()
-    {
-        if (! haveCb)
-            std::cerr << senf::scheduler::now() << '\n';
-    }
-
-    void idleCb(senf::scheduler::TimerEvent & tm)
-    {
-        tm.timeout( senf::scheduler::now());
-    }
+//    void preCb()
+//    {
+//        haveCb = false;
+//    }
+//
+//    void postCb()
+//    {
+//        if (! haveCb)
+//            std::cerr << senf::scheduler::now() << '\n';
+//    }
+//
+//    void idleCb(senf::scheduler::TimerEvent & tm)
+//    {
+//        tm.timeout( senf::scheduler::now());
+//    }
 
     void jitterTest()
     {
index 7ab7a70..66d8d83 100644 (file)
@@ -156,12 +156,12 @@ senf::ClientSocketHandle<SPolicy>::operator=(ClientSocketHandle<OtherPolicy> oth
 // senf::ClientSocketHandle<SPolicy>::read
 
 #ifndef DOXYGEN
+
 template <class SPolicy>
 template <class ForwardWritableRange>
-prefix_ typename boost::range_iterator<ForwardWritableRange>::type
-senf::ClientSocketHandle<SPolicy>::
-read(ForwardWritableRange const & range,
-     typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned> >::type *)
+prefix_ typename boost::disable_if<boost::is_convertible<ForwardWritableRange,unsigned>,
+typename boost::range_iterator<ForwardWritableRange>::type>::type
+senf::ClientSocketHandle<SPolicy>::read(ForwardWritableRange const & range)
 {
     return detail::ReadRange<
         ClientSocketHandle<SPolicy>,
@@ -183,10 +183,9 @@ read(ForwardWritableRange const & range)
 #ifndef DOXYGEN
 template <class SPolicy>
 template <class ForwardWritableRange>
-prefix_ typename boost::range_iterator<ForwardWritableRange>::type
-senf::ClientSocketHandle<SPolicy>::
-read(ForwardWritableRange & range,
-     typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned> >::type *)
+prefix_ typename boost::disable_if<boost::is_convertible<ForwardWritableRange,unsigned>,
+typename boost::range_iterator<ForwardWritableRange>::type>::type
+senf::ClientSocketHandle<SPolicy>::read(ForwardWritableRange & range)
 {
     return detail::ReadRange<
         ClientSocketHandle<SPolicy>,
index 67539b3..6c8fb93 100644 (file)
@@ -181,12 +181,14 @@ namespace senf {
             \c recv.
         */
         std::string  read         (unsigned limit=0);
-        template <class ForwardWritableRange>
+
 #       ifndef DOXYGEN
-        typename boost::range_iterator<ForwardWritableRange>::type
-                     read         (ForwardWritableRange const & range,
-                                   typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned> >::type * = 0);
+        template <class ForwardWritableRange>
+        typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned>,
+        typename boost::range_iterator<ForwardWritableRange>::type>::type
+        read(ForwardWritableRange const & range);
 #       else
+        template <class ForwardWritableRange>
         typename boost::range_iterator<ForwardWritableRange>::type
                      read         (ForwardWritableRange const & range);
                                         ///< Read data into range
@@ -204,9 +206,9 @@ namespace senf {
 #       endif
 #       ifndef DOXYGEN
         template <class ForwardWritableRange>
-        typename boost::range_iterator<ForwardWritableRange>::type
-                     read         (ForwardWritableRange & range,
-                                   typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned> >::type * = 0);
+        typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned>,
+        typename boost::range_iterator<ForwardWritableRange>::type>::type
+        read(ForwardWritableRange & range);
 #       else
         template <class ForwardWritableRange>
         typename boost::range_iterator<ForwardWritableRange>::type
index 7c146f7..98897ff 100644 (file)
@@ -43,7 +43,7 @@ struct ifreq;
 
 namespace senf {
 
-    class MACAddress;
+    struct MACAddress;
 
 
     /** \brief Netdevice Controller
index 4a98bc1..5a3c70e 100644 (file)
@@ -85,10 +85,10 @@ template <class SocketProtocol>
 prefix_ senf::ProtocolClientSocketHandle<SocketProtocol>
 senf::ProtocolClientSocketHandle<SocketProtocol>::cast_dynamic(FileHandle handle)
 {
-    ClientSocketHandle<typename SocketProtocol::Policy> h(
+    ClientSocketHandle<typename SocketProtocol::Policy> h (
         ClientSocketHandle<typename SocketProtocol::Policy>::cast_dynamic(handle));
     // throw std::bad_cast if the protocol is invalid
-    dynamic_cast<SocketProtocol const &>(static_cast<SocketBody&>(FileHandle::body(h)).protocol());
+    IGNORE( dynamic_cast<SocketProtocol const &>(static_cast<SocketBody&>(FileHandle::body(h)).protocol()) );
     return cast_static(handle);
 }
 
index 5b02eae..2e99444 100644 (file)
@@ -85,10 +85,10 @@ template <class SocketProtocol>
 prefix_ senf::ProtocolServerSocketHandle<SocketProtocol>
 senf::ProtocolServerSocketHandle<SocketProtocol>::cast_dynamic(FileHandle handle)
 {
-    ServerSocketHandle<typename SocketProtocol::Policy> h(
+    ServerSocketHandle<typename SocketProtocol::Policy> h (
         ServerSocketHandle<typename SocketProtocol::Policy>::cast_dynamic(handle));
     // throw std::bad_cast if the protocol is invalid
-    dynamic_cast<SocketProtocol const &>(static_cast<SocketBody&>(FileHandle::body(h)).protocol());
+    IGNORE( dynamic_cast<SocketProtocol const &>(static_cast<SocketBody&>(FileHandle::body(h)).protocol()) );
     return cast_static(handle);
 }
 
index 505ca3d..ea6767e 100644 (file)
@@ -48,8 +48,8 @@
 
 namespace senf {
 
-    class EUI64;
-    class MACAddress;
+    struct EUI64;
+    struct MACAddress;
     class INet6Network;
 
     /** \brief INet6 network address
index 2526f54..cbac5cb 100644 (file)
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
-#include <sys/wait.h>
 #include <unistd.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include "RawINetSocketHandle.hh"
-#include <iostream>
+#include "net.test.hh"
 
 #include <senf/Utils/auto_unit_test.hh>
 #include <boost/test/test_tools.hpp>
 
-namespace {
-
-    void error(char const * fn, char const * proc="")
-    {
-        std::cerr << "\n" << proc << ((*proc)?": ":"") << fn << ": " << strerror(errno) << std::endl;
-    }
-
-    void fail(char const * proc, char const * fn)
-    {
-        error(fn,proc);
-        _exit(1);
-    }
-
-    int server_pid = 0;
-
-    void start(void (*fn)())
-    {
-        server_pid = ::fork();
-        if (server_pid < 0) BOOST_FAIL("fork()");
-        if (server_pid == 0) {
-            (*fn)();
-            _exit(0);
-        }
-    }
-
-    void wait()
-    {
-        int status;
-        if (waitpid(server_pid,&status,0)<0)
-            BOOST_FAIL("waitpid()");
-        BOOST_CHECK_EQUAL( status , 0 );
-    }
-
-    void stop()
-    {
-        if (server_pid) {
-            kill(server_pid,9);
-            wait();
-            server_pid = 0;
-        }
-    }
-
-}
-
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 
+using namespace senf::test;
+
 namespace {
 
     void server_v4() //listen for packets with proto=47 (GRE) and resend them with proto=48
index 4bb827b..ccb413a 100644 (file)
@@ -48,7 +48,7 @@
 #define prefix_
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-//-/////////////////////////////////////////////////////////////////////////////////////////////////
+using namespace senf::test;
 
 namespace {
 
index 2efb5a4..2d4186a 100644 (file)
@@ -48,7 +48,7 @@
 #define prefix_
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-//-/////////////////////////////////////////////////////////////////////////////////////////////////
+using namespace senf::test;
 
 namespace {
 
@@ -75,28 +75,28 @@ namespace {
         if (close(sock) < 0) fail("server_v4","close()");
     }
 
-    void server_v6()
-    {
-        int sock = socket(PF_INET6,SOCK_DGRAM,0);
-        if (sock<0) fail("server_v6","socket()");
-        struct sockaddr_in6 sin;
-        ::memset(&sin,0,sizeof(sin));
-        sin.sin6_family = AF_INET6;
-        sin.sin6_port = htons(port(0));
-        sin.sin6_addr = in6addr_loopback;
-        if (bind(sock,(struct sockaddr *)&sin,sizeof(sin))<0) fail("server_v6","bind()");
-
-        sin.sin6_port = htons(port(1));
-        char buffer[1024];
-        while (1) {
-            int n = read(sock,buffer,1024);
-            if (n == 4 && strncmp(buffer,"QUIT",4) == 0)
-                break;
-            sendto(sock,buffer,n,0,(struct sockaddr *)&sin,sizeof(sin));
-        }
-
-        if (close(sock) < 0) fail("server_v6","close()");
-    }
+//    void server_v6()
+//    {
+//        int sock = socket(PF_INET6,SOCK_DGRAM,0);
+//        if (sock<0) fail("server_v6","socket()");
+//        struct sockaddr_in6 sin;
+//        ::memset(&sin,0,sizeof(sin));
+//        sin.sin6_family = AF_INET6;
+//        sin.sin6_port = htons(port(0));
+//        sin.sin6_addr = in6addr_loopback;
+//        if (bind(sock,(struct sockaddr *)&sin,sizeof(sin))<0) fail("server_v6","bind()");
+//
+//        sin.sin6_port = htons(port(1));
+//        char buffer[1024];
+//        while (1) {
+//            int n = read(sock,buffer,1024);
+//            if (n == 4 && strncmp(buffer,"QUIT",4) == 0)
+//                break;
+//            sendto(sock,buffer,n,0,(struct sockaddr *)&sin,sizeof(sin));
+//        }
+//
+//        if (close(sock) < 0) fail("server_v6","close()");
+//    }
 
 }
 
diff --git a/senf/Socket/Protocols/INet/net.test.cc b/senf/Socket/Protocols/INet/net.test.cc
new file mode 100644 (file)
index 0000000..aee08d1
--- /dev/null
@@ -0,0 +1,124 @@
+// $Id$
+//
+// Copyright (C) 2009
+// 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 <g0dil@berlios.de>
+
+/** \file
+    \brief net.test public header */
+
+#include "net.test.hh"
+
+// Custom includes
+#include <iostream>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <boost/format.hpp>
+#include <senf/Utils/auto_unit_test.hh>
+#include <boost/test/test_tools.hpp>
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+namespace {
+    int base_pid = 0;
+    int server_pid = 0;
+}
+
+void senf::test::error(char const * fn, char const * proc)
+{
+    std::cerr << "\n" << proc << ((*proc)?": ":"") << fn << ": " << strerror(errno) << std::endl;
+}
+
+void senf::test::fail(char const * proc, char const * fn)
+{
+    error(fn,proc);
+    _exit(1);
+}
+
+void senf::test::start(void (*fn)())
+{
+    if (! base_pid)
+        base_pid = ::getpid();
+    server_pid = ::fork();
+    if (server_pid < 0) BOOST_FAIL("fork()");
+    if (server_pid == 0) {
+        signal(SIGCHLD, SIG_IGN);
+        (*fn)();
+        _exit(0);
+    }
+    signal(SIGCHLD, SIG_DFL);
+    sleep(1);
+}
+
+void senf::test::wait()
+{
+    int status;
+    if (waitpid(server_pid,&status,0)<0)
+        BOOST_FAIL("waitpid()");
+    BOOST_CHECK_EQUAL( status , 0 );
+}
+
+void senf::test::stop()
+{
+    if (server_pid) {
+        kill(server_pid,9);
+        wait();
+        server_pid = 0;
+    }
+}
+
+unsigned senf::test::port(unsigned i)
+{
+    if (! base_pid)
+        base_pid = ::getpid();
+    return 23456u + (((base_pid^(base_pid>>8)^(base_pid>>16)^(base_pid>>24))&0xff)<<2) + i;
+}
+
+std::string senf::test::localhost4str(unsigned i)
+{
+    return (boost::format("localhost:%d") % port(i)).str();
+}
+
+std::string senf::test::localhost6str(unsigned i)
+{
+    return (boost::format("[::1]:%d") % port(i)).str();
+}
+
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+//#include "net.test.cci"
+//#include "net.test.ct"
+//#include "net.test.cti"
+
+\f
+// Local Variables:
+// mode: c++
+// fill-column: 100
+// comment-column: 40
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// End:
index 325a9bf..7818a5e 100644 (file)
 #define HH_SENF_senf_Socket_Protocols_INet_net_test_ 1
 
 // Custom includes
-#include <boost/format.hpp>
-#include <boost/test/test_tools.hpp>
+#include <string>
 
-//#include "net.test.mpp"
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-namespace {
-
-    void error(char const * fn, char const * proc="")
-    {
-        std::cerr << "\n" << proc << ((*proc)?": ":"") << fn << ": " << strerror(errno) << std::endl;
-    }
-
-    void fail(char const * proc, char const * fn)
-    {
-        error(fn,proc);
-        _exit(1);
-    }
-
-    int base_pid = 0;
-    int server_pid = 0;
-
-    void start(void (*fn)())
-    {
-        if (! base_pid)
-            base_pid = ::getpid();
-        server_pid = ::fork();
-        if (server_pid < 0) BOOST_FAIL("fork()");
-        if (server_pid == 0) {
-            signal(SIGCHLD, SIG_IGN);
-            (*fn)();
-            _exit(0);
-        }
-        signal(SIGCHLD, SIG_DFL);
-        sleep(1);
-    }
-
-    void wait()
-    {
-        int status;
-        if (waitpid(server_pid,&status,0)<0)
-            BOOST_FAIL("waitpid()");
-        BOOST_CHECK_EQUAL( status , 0 );
-    }
-
-    void stop()
-    {
-        if (server_pid) {
-            kill(server_pid,9);
-            wait();
-            server_pid = 0;
-        }
-    }
-
-    unsigned port(unsigned i)
-    {
-        if (! base_pid)
-            base_pid = ::getpid();
-        return 23456u + (((base_pid^(base_pid>>8)^(base_pid>>16)^(base_pid>>24))&0xff)<<2) + i;
-    }
-
-    std::string localhost4str(unsigned i)
-    {
-        return (boost::format("localhost:%d") % port(i)).str();
-    }
-
-    std::string localhost6str(unsigned i)
-    {
-        return (boost::format("[::1]:%d") % port(i)).str();
-    }
-
-}
+namespace senf {
+namespace test {
+
+    void error(char const * fn, char const * proc="");
+
+    void fail(char const * proc, char const * fn);
+
+    void start(void (*fn)());
+
+    void wait();
+
+    void stop();
+
+    unsigned port(unsigned i);
+
+    std::string localhost4str(unsigned i);
+
+    std::string localhost6str(unsigned i);
+
+}}
 
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 //#include "net.test.cci"
index 2acb090..0866f85 100644 (file)
@@ -43,7 +43,7 @@
 
 namespace senf {
 
-    class MACAddress;
+    struct MACAddress;
 
     /** \brief EUI-64 data type
 
@@ -78,22 +78,16 @@ namespace senf {
 
         \ingroup addr_group
      */
-    class EUI64
+    struct EUI64
         : public boost::array<boost::uint8_t,8>,
           public senf::comparable_safe_bool<EUI64>
     {
-    public:
         //-////////////////////////////////////////////////////////////////////////
         ///\name Structors and default members
         //\{
 
         static EUI64 const None;        ///< The empty (0) address
 
-        // default copy constructor
-        // default copy assignment
-        // default destructor
-        // no conversion constructors
-
         explicit EUI64(boost::uint64_t v=0u); ///< Construct EUI-64
         explicit EUI64(senf::NoInit_t);       ///< Construct <em>uninitialized</em> EUI-64
 
index 154d9f0..c28c048 100644 (file)
@@ -45,7 +45,7 @@
 
 namespace senf {
 
-    class EUI64;
+    struct EUI64;
 
     /** \brief Ethernet MAC address
 
index 7f42415..2eea009 100644 (file)
@@ -72,16 +72,6 @@ prefix_ bool senf::SocketBody::v_eof()
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::detail::StateMapOrdering
 
-namespace {
-    bool contains(std::string::const_iterator b, std::string::const_iterator e, char c)
-    {
-        for (; b != e; ++b)
-            if (*b == c)
-                return true;
-        return false;
-    }
-}
-
 prefix_ std::string senf::detail::dumpState(SocketStateMap const & map)
 {
     std::stringstream s;
index b2d9f7c..73c808f 100644 (file)
@@ -164,7 +164,7 @@ prefix_ bool senf::check_socket_cast(Source handle)
     // for two reasons:
     // a) since the handle is passed back by value, we cannot return
     //    something like a null handle
-    // b) it is simpler to implement cast_dynamic throwig bad_cast on
+    // b) it is simpler to implement cast_dynamic throwing bad_cast on
     //    failure than implementing cast_check
     try {
         Target::cast_dynamic(handle);
index 4d6346c..d12c562 100644 (file)
@@ -99,7 +99,7 @@ namespace senf {
     /// \addtogroup protocol_group
     //\{
 
-    class SocketPolicyBase;
+    struct SocketPolicyBase;
 
     /** \brief Socket Protocol base class
 
index 9b1504a..b4237fd 100644 (file)
@@ -70,7 +70,7 @@ namespace console {
         ///\name Structors and default members
         //\{
 
-        explicit ConfigFile(std::string const & filename, DirectoryNode & root = root());
+        explicit ConfigFile(std::string const & filename, DirectoryNode & root = senf::console::root());
                                         ///< Create ConfigFile object for \a filename
                                         /**< The \a filename configuration file will be parsed using
                                              parse() calls. All configuration statements will be
@@ -94,7 +94,7 @@ namespace console {
 
         \related ConfigFile
      */
-    void parseFile(std::string const & filename, DirectoryNode & root = root());
+    void parseFile(std::string const & filename, DirectoryNode & root = senf::console::root());
 
     /** \brief ConfigBundle source reading a configuration file
 
index e311adf..3c8f47b 100644 (file)
@@ -120,7 +120,7 @@ prefix_ void senf::console::OverloadedCommandNode::v_help(std::ostream & os)
                     for (; k != k_end; ++k)
                         if (k->name == arg.name && k->defaultValue == arg.defaultValue) {
                             if (! arg.doc.empty() && k->doc.empty()) {
-                                k->doc == arg.doc;
+                                k->doc = arg.doc;
                                 haveDocumentedArg = true;
                             }
                             break;
index ff3bc51..e36c7c5 100644 (file)
@@ -297,9 +297,10 @@ namespace classic {
 #endif
 
     template <>
-    struct position_policy<senf::console::detail::FilePositionWithIndex>
+    class position_policy<senf::console::detail::FilePositionWithIndex>
         : public position_policy<file_position>
     {
+    public:
         typedef position_policy<file_position> Base;
 
         void next_line(senf::console::detail::FilePositionWithIndex & pos)
@@ -481,27 +482,27 @@ senf::console::CommandParser::parseIncremental(std::string const & commands, Cal
 
 prefix_ bool senf::console::CommandParser::isSpecialChar(char ch)
 {
-    return Impl::Grammar::special_p.test(ch);
+    return Impl::Grammar::special_p().test(ch);
 }
 
 prefix_ bool senf::console::CommandParser::isPunctuationChar(char ch)
 {
-    return Impl::Grammar::punctuation_p.test(ch);
+    return Impl::Grammar::punctuation_p().test(ch);
 }
 
 prefix_ bool senf::console::CommandParser::isSpaceChar(char ch)
 {
-    return Impl::Grammar::space_p.test(ch);
+    return Impl::Grammar::space_p().test(ch);
 }
 
 prefix_ bool senf::console::CommandParser::isInvalidChar(char ch)
 {
-    return Impl::Grammar::invalid_p.test(ch);
+    return Impl::Grammar::invalid_p().test(ch);
 }
 
 prefix_ bool senf::console::CommandParser::isWordChar(char ch)
 {
-    return Impl::Grammar::word_p.test(ch);
+    return Impl::Grammar::word_p().test(ch);
 }
 
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
index a49c473..4be39ff 100644 (file)
 namespace senf {
 namespace console {
 
-    namespace detail { class FilePositionWithIndex; }
+    namespace detail { struct FilePositionWithIndex; }
 
     namespace detail { struct ParserAccess; }
 
@@ -656,7 +656,7 @@ namespace console {
 
         boost::scoped_ptr<Impl> impl_;
 
-        friend class SetIncremental;
+        friend struct SetIncremental;
     };
 
 }}
index 5fc5c5c..a2dc6b3 100644 (file)
@@ -126,12 +126,30 @@ namespace detail {
         //-/////////////////////////////////////////////////////////////////////////////////////////
         // charachter sets
 
-        static boost_spirit::chset<> special_p;
-        static boost_spirit::chset<> punctuation_p;
-        static boost_spirit::chset<> space_p;
-        static boost_spirit::chset<> invalid_p;
-        static boost_spirit::chset<> word_p;
-        static boost_spirit::distinct_parser<> keyword_p;
+        static boost_spirit::chset<> & special_p() {
+            static boost_spirit::chset<> p ("/(){};\"");
+            return p;
+        }
+        static boost_spirit::chset<> & punctuation_p() {
+            static boost_spirit::chset<> p (",=");
+            return p;
+        }
+        static boost_spirit::chset<> & space_p() {
+            static boost_spirit::chset<> p (" \t\n\r");
+            return p;
+        }
+        static boost_spirit::chset<> & invalid_p() {
+            static boost_spirit::chset<> p ((boost_spirit::chset<>('\0') | boost_spirit::chset<>("\x01-\x20")) - space_p() );
+            return p;
+        }
+        static boost_spirit::chset<> & word_p() {
+            static boost_spirit::chset<> p (boost_spirit::anychar_p - special_p() - punctuation_p() - space_p() - invalid_p());
+            return p;
+        }
+        static boost_spirit::distinct_parser<> & keyword_p() {
+            static boost_spirit::distinct_parser<> p (word_p() | boost_spirit::ch_p('/'));
+            return p;
+        }
 
         //-/////////////////////////////////////////////////////////////////////////////////////////
         // Errors
@@ -234,20 +252,20 @@ namespace detail {
                     ;
 
                 builtin
-                    =    self.keyword_p("cd")
+                    =    self.keyword_p()("cd")
                       >> path_expected(path)
                       >> eps_p                    [ bind(&PD::builtin_cd)(d_, path_) ]
-                    |    self.keyword_p("ls")
+                    |    self.keyword_p()("ls")
                       >> ! path
                       >> eps_p                    [ bind(&PD::builtin_ls)(d_, path_) ]
-                    |    self.keyword_p("ll")
+                    |    self.keyword_p()("ll")
                       >> ! path
                       >> eps_p                    [ bind(&PD::builtin_ll)(d_, path_) ]
-                    |    self.keyword_p("lr")
+                    |    self.keyword_p()("lr")
                       >> ! path
                       >> eps_p                    [ bind(&PD::builtin_lr)(d_, path_) ]
-                    |    self.keyword_p("exit")   [ bind(&PD::builtin_exit)(d_) ]
-                    |    self.keyword_p("help")
+                    |    self.keyword_p()("exit")   [ bind(&PD::builtin_exit)(d_) ]
+                    |    self.keyword_p()("help")
                       >> ! path
                       >> eps_p                    [ bind(&PD::builtin_help)(d_, path_) ]
                     ;
@@ -361,7 +379,7 @@ namespace detail {
                          | ch_p(';')                [ token_ = construct_<Token>(
                                                           Token::CommandTerminator,
                                                           ";") ]
-                         | self.punctuation_p       [ token_ = construct_<Token>(
+                         | self.punctuation_p()     [ token_ = construct_<Token>(
                                                           Token::OtherPunctuation,
                                                           construct_<std::string>(1u, arg1),
                                                           pos_) ]
@@ -372,7 +390,7 @@ namespace detail {
                     =    eps_p                    [ pos_ = positionOf(arg1) ]
                       >> lexeme_d
                          [
-                             (+ self.word_p)      [ str_ = construct_<std::string>(arg1, arg2) ]
+                             (+ self.word_p())    [ str_ = construct_<std::string>(arg1, arg2) ]
                          ]
                       >> eps_p                    [ token_ = construct_<Token>(
                                                         Token::Word,
@@ -401,12 +419,12 @@ namespace detail {
                     ;
 
                 skip
-                    =    self.space_p | comment_p('#')
+                    =    self.space_p() | comment_p('#')
                     ;
 
                 //-/////////////////////////////////////////////////////////////////////////////////
 
-                start_parsers(
+                this->start_parsers(
                     command,            // CommandParser
                     skip,               // SkipParser
                     arguments,          // ArgumentsParser
@@ -435,19 +453,6 @@ namespace detail {
         };
     };
 
-    template <class PD> boost_spirit::chset<> CommandGrammar<PD>::special_p (
-        "/(){};\"");
-    template <class PD> boost_spirit::chset<> CommandGrammar<PD>::punctuation_p (
-        ",=");
-    template <class PD> boost_spirit::chset<> CommandGrammar<PD>::space_p (
-        " \t\n\r");
-    template <class PD> boost_spirit::chset<> CommandGrammar<PD>::invalid_p (
-        (boost_spirit::chset<>('\0') | boost_spirit::chset<>("\x01-\x20")) - space_p );
-    template <class PD> boost_spirit::chset<> CommandGrammar<PD>::word_p (
-        boost_spirit::anychar_p - special_p - punctuation_p - space_p - invalid_p);
-    template <class PD> boost_spirit::distinct_parser<> CommandGrammar<PD>::keyword_p (
-        word_p | boost_spirit::ch_p('/'));
-
 #endif
 
 }}}
index 7b34dd9..6a6e56b 100644 (file)
@@ -54,7 +54,7 @@
 namespace senf {
 namespace console {
 
-    namespace detail { class ArgumentInfoBase; }
+    namespace detail { struct ArgumentInfoBase; }
 
     /** \brief CommandOverload implementation with automatic argument parsing
 
@@ -552,7 +552,7 @@ namespace console {
         template <class O, unsigned i, bool f>
         friend class ParsedArgumentAttributor;
 
-        friend class detail::ParsedCommandAddNodeAccess;
+        friend struct detail::ParsedCommandAddNodeAccess;
     };
 
 #ifndef DOXYGEN
@@ -573,7 +573,7 @@ namespace console {
         template <class O, unsigned i, bool f>
         friend class ParsedArgumentAttributor;
 
-        friend class detail::ParsedCommandAddNodeAccess;
+        friend struct detail::ParsedCommandAddNodeAccess;
     };
 
 #endif
index f5e1c9d..1a69357 100644 (file)
@@ -77,7 +77,7 @@ namespace console {
         ///\name Structors and default members
         //\{
 
-        ProgramOptions(int argc, char const ** argv, DirectoryNode & root = root());
+        ProgramOptions(int argc, char const ** argv, DirectoryNode & root = senf::console::root());
                                         ///< Create ProgramOptions parser for given options
                                         /**< The given argc/argv values are those passed to main by
                                              the operating system. Especially argv[0] is \e not an
@@ -118,7 +118,7 @@ namespace console {
 
         \related ProgramOptions
      */
-    void parseOptions(int argc, char const ** argv, DirectoryNode & root = root());
+    void parseOptions(int argc, char const ** argv, DirectoryNode & root = senf::console::root());
 
     /** \brief ConfigBundle source reading command line options
 
index 052d06e..24fe120 100644 (file)
@@ -39,7 +39,7 @@
 #define prefix_
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-prefix_ senf::console::SysInfo::Proxy::Proxy(std::string const & descr, unsigned pos)
+prefix_ senf::console::SysInfo::Proxy::Proxy(std::string const & descr, int pos)
 {
     SysInfo::instance().addEntry( descr, pos);
 }
@@ -49,7 +49,7 @@ prefix_ senf::console::SysInfo::SysInfo()
     sysdir().add("info", factory::Command(&SysInfo::dump, this));
 }
 
-prefix_ void senf::console::SysInfo::addEntry(std::string const & descr, unsigned pos)
+prefix_ void senf::console::SysInfo::addEntry(std::string const & descr, int pos)
 {
     if (pos < 0)
         descr_.push_back( descr);
index 16970f0..354aa82 100644 (file)
@@ -46,11 +46,11 @@ namespace console {
         friend class singleton<SysInfo>;
         using singleton<SysInfo>::instance;
 
-        void addEntry(std::string const & descr, unsigned pos=-1);
+        void addEntry(std::string const & descr, int pos=-1);
         void dump(std::ostream & os) const;
 
         struct Proxy {
-            Proxy(std::string const & descr, unsigned pos=-1);
+            Proxy(std::string const & descr, int pos=-1);
         };
 
     private:
index 5c4ec85..c335765 100644 (file)
@@ -62,11 +62,6 @@ namespace {
         return (boost::format("localhost:%d") % port(i)).str();
     }
 
-    std::string localhost6str(unsigned i)
-    {
-        return (boost::format("[::1]:%d") % port(i)).str();
-    }
-
     unsigned nread (0);
     unsigned flags (0);
     std::string data;
index 41640d3..927f922 100644 (file)
@@ -91,7 +91,7 @@ namespace log {
         Registry registry_;
 
         friend class senf::singleton<AreaRegistry>;
-        friend class detail::AreaBase;
+        friend struct detail::AreaBase;
         friend class Target;
     };
 
index bb587d3..73c0662 100644 (file)
@@ -47,7 +47,7 @@ namespace log {
 
 namespace detail {
 
-    class StreamBase;
+    struct StreamBase;
 
     /** \brief Internal: Area base class */
     struct AreaBase
index 8ed7edf..9607133 100644 (file)
@@ -98,11 +98,11 @@ namespace detail {
 
 #define SENF_LOG_PREDECL_long(seq)                                                                \
     BOOST_PP_SEQ_FOLD_RIGHT( SENF_LOG_PREDECL_,                                                   \
-                             class SENF_PP_SEQ_BACK(seq);,                                        \
+                             struct SENF_PP_SEQ_BACK(seq);,                                        \
                              BOOST_PP_SEQ_POP_BACK(seq) )
 
 #define SENF_LOG_PREDECL_short(seq)                                                               \
-   BOOST_PP_IF( SENF_LOG_IS_NA( SENF_PP_SEQ_BACK(seq) ), ; , class SENF_PP_SEQ_BACK(seq); )
+   BOOST_PP_IF( SENF_LOG_IS_NA( SENF_PP_SEQ_BACK(seq) ), ; , struct SENF_PP_SEQ_BACK(seq); )
 
 #define SENF_LOG_PREDECL(seq)                                                                     \
     BOOST_PP_CAT(SENF_LOG_PREDECL_,                                                               \
index 7c16f3d..9ea6675 100644 (file)
 namespace senf {
 namespace log {
 
-    class DefaultArea;
-    class Debug;
-    class NONE;
+    struct DefaultArea;
+    struct Debug;
+    struct NONE;
 
 namespace detail {
 
-    class StreamBase;
-    class AreaBase;
-    class LevelBase;
-    class AliasBase;
+    struct StreamBase;
+    struct AreaBase;
+    struct LevelBase;
+    struct AliasBase;
 
     /// Internal: Parameter extractor
     template <class Base, class Param, unsigned N>
index acabace..0dcf900 100644 (file)
@@ -84,7 +84,7 @@ namespace log {
         Registry registry_;
 
         friend class senf::singleton<StreamRegistry>;
-        friend class detail::StreamBase;
+        friend struct detail::StreamBase;
         friend class Target;
     };
 
index e496935..94d9c8b 100644 (file)
@@ -55,16 +55,6 @@ namespace {
         return 23456u + (((base_pid^(base_pid>>8)^(base_pid>>16)^(base_pid>>24))&0xff)<<2) + i;
     }
 
-    std::string localhost4str(unsigned i)
-    {
-        return (boost::format("localhost:%d") % port(i)).str();
-    }
-
-    std::string localhost6str(unsigned i)
-    {
-        return (boost::format("[::1]:%d") % port(i)).str();
-    }
-
 }
 
 SENF_AUTO_UNIT_TEST(syslogUDPTarget)
index 8fa2177..2f91814 100644 (file)
@@ -56,7 +56,7 @@ namespace senf {
 namespace log {
 
     namespace detail { class TargetRegistry; }
-    namespace detail { class AreaBase; }
+    namespace detail { struct AreaBase; }
     namespace detail { struct LogParameters; }
     namespace detail { struct StreamBase; }
 
@@ -409,7 +409,7 @@ namespace log {
 
         console::LazyDirectory consoleDir_;
 
-        friend class detail::AreaBase;
+        friend struct detail::AreaBase;
         friend class detail::TargetRegistry;
     };
 
index 8314743..e8d41ca 100644 (file)
@@ -332,7 +332,7 @@ namespace term {
         ClockService::clock_type requestTimeout_;
         scheduler::TimerEvent timeout_;
 
-        friend class TelnetHandler;
+        friend struct TelnetHandler;
     };
 
     /** \brief Telnet handler base class
index e7ba553..897b21b 100644 (file)
 namespace senf {
 
     template <class Self> class intrusive_refcount_t;
+    
+    template <class Self>
+    void intrusive_ptr_add_ref(intrusive_refcount_t<Self> const * p);
+    template <class Self>
+    void intrusive_ptr_release(intrusive_refcount_t<Self> const * p);
+    
 
     /** \brief Reference count mixin interface baseclass
 
@@ -162,11 +168,6 @@ namespace senf {
         intrusive_refcount();
     };
 
-    template <class Self>
-    void intrusive_ptr_add_ref(intrusive_refcount_t<Self> const * p);
-    template <class Self>
-    void intrusive_ptr_release(intrusive_refcount_t<Self> const * p);
-
 }
 
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
index 806e39f..01ac225 100644 (file)
@@ -91,7 +91,7 @@ namespace {
 
 #   define Begin() SENF_MPL_SLOT_DEF(accum, 0)
 #   define Add(n) SENF_MPL_SLOT_SET(accum, SENF_MPL_SLOT_GET(accum)+n)
-#   define End() BOOST_STATIC_CONSTANT(unsigned, total = SENF_MPL_SLOT_GET(accum))
+#   define End() BOOST_STATIC_CONSTANT(unsigned long, total = SENF_MPL_SLOT_GET(accum))
 
     struct Test
     {
index ef27006..7b86d5e 100644 (file)
@@ -32,6 +32,7 @@
 #define HH_SENF_Utils_senfassert_ 1
 
 // Custom includes
+#include "IgnoreValue.hh"
 
 //#include "senfassert.mpp"
 //-/////////////////////////////////////////////////////////////////////////////////////////////////
@@ -39,7 +40,7 @@
 #ifndef SENF_DEBUG
 
 #   define SENF_ASSERT(x, comment)
-#   define SENF_ASSERT_EXPRESSION(expression, comment) expression
+#   define SENF_ASSERT_EXPRESSION(expression, comment) senf::IGNORE( expression )
 
 #else
 
index 7242786..56cbada 100644 (file)
@@ -81,7 +81,7 @@ def setup(env):
     env['BUILDERS']['BoostUnitTest'] = AutoObjectBoostUnitTest
     env['_UNIT_TEST_LIST'] = []
     env.Append(EXTRA_LIBS = [ '$BOOSTREGEXLIB', '$BOOSTSIGNALSLIB',
-                       '$BOOSTFSLIB', '$BOOSTSYSTEMLIB' ])
+                       '$BOOSTFSLIB', '$BOOSTSYSTEMLIB', '$BOOSTDATETIMELIB' ])
 
 # This needs to be called after all build targets have been set
 # up. This is important since the list of object targets needs to be
index 9ec7dc6..8216902 100644 (file)
@@ -169,7 +169,8 @@ def SetupForSENF(env, senf_path = [], flavor=None):
         CXXFLAGS          = [ '-Wno-long-long', '-fno-strict-aliasing' ],
         LINKFLAGS         = [ '-rdynamic' ],
         LIBS              = [ 'senf$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB',
-                              '$BOOSTSIGNALSLIB', '$BOOSTFSLIB', '$BOOSTSYSTEMLIB' ],
+                              '$BOOSTSIGNALSLIB', '$BOOSTFSLIB', '$BOOSTSYSTEMLIB',
+                              '$BOOSTDATETIMELIB' ],
         )
 
     try:
index 202ed96..326bf5f 100644 (file)
@@ -212,6 +212,7 @@ def generate(env):
         BOOSTFSLIB        = 'boost_filesystem$_BOOST_VARIANT',
         BOOSTIOSTREAMSLIB = 'boost_iostreams$_BOOST_VARIANT',
         BOOSTSIGNALSLIB   = 'boost_signals$_BOOST_VARIANT',
+        BOOSTDATETIMELIB  = 'boost_date_time$_BOOST_VARIANT',
         
         _BOOSTSYSTEMLIB   = '${HAS_BOOST_SYSTEM and "boost_system" or ""}',
         BOOSTSYSTEMLIB    = '$_BOOSTSYSTEMLIB',