Utils/Logger: Remove dependency on libboost_datetime
[senf.git] / Console / ParsedCommand.mpp
index a1c5e46..c5ffd18 100644 (file)
@@ -95,6 +95,8 @@ public:
     template <unsigned n>
     detail::ArgumentInfo<typename boost::mpl::at_c<arg_types, n>::type> & arg() const;
 
+    void function(Function fn);
+
 protected:
 
 private:
@@ -131,6 +133,8 @@ public:
     template <unsigned n>
     detail::ArgumentInfo<typename boost::mpl::at_c<arg_types, n>::type> & arg() const;
 
+    void function(Function fn);
+
 protected:
 
 private:
@@ -178,6 +182,14 @@ arg() const
 }
 
 template <class FunctionTraits, class ReturnValue>
+void
+senf::console::ParsedCommandOverload<FunctionTraits, ReturnValue, BOOST_PP_ITERATION() >::
+function(Function fn)
+{
+    function_ = fn;
+}
+
+template <class FunctionTraits, class ReturnValue>
 prefix_
 senf::console::ParsedCommandOverload<FunctionTraits, ReturnValue, BOOST_PP_ITERATION()>::
 ParsedCommandOverload(Function fn)
@@ -211,6 +223,14 @@ arg() const
 }
 
 template <class FunctionTraits>
+void
+senf::console::ParsedCommandOverload<FunctionTraits, void, BOOST_PP_ITERATION() >::
+function(Function fn)
+{
+    function_ = fn;
+}
+
+template <class FunctionTraits>
 prefix_
 senf::console::ParsedCommandOverload<FunctionTraits, void, BOOST_PP_ITERATION() >::
 ParsedCommandOverload(Function fn)
@@ -232,9 +252,12 @@ prefix_ void senf::console::ParsedCommandOverload<FunctionTraits, ReturnValue, B
 v_execute(std::ostream & os, ParseCommandInfo const & command)
     const
 {
-    if ( command.arguments().size() > BOOST_PP_ITERATION() )
+    // We NEED to know the number of arguments beforehand so we can assign default values
+    // correctly ... hrmpf ...
+    unsigned nArgs ( command.arguments().size() );
+    if ( nArgs > BOOST_PP_ITERATION() )
         throw SyntaxErrorException("invalid number of arguments");
-    int nDefaults ( BOOST_PP_ITERATION() - command.arguments().size() );
+    int nDefaults ( BOOST_PP_ITERATION() - nArgs );
 
     typedef typename boost::range_const_reverse_iterator<ParseCommandInfo::ArgumentsRange>::type
         riterator;
@@ -268,9 +291,12 @@ prefix_ void senf::console::ParsedCommandOverload<FunctionTraits, void, BOOST_PP
 v_execute(std::ostream & os, ParseCommandInfo const & command)
     const
 {
-    if ( command.arguments().size() > BOOST_PP_ITERATION() )
+    // We NEED to know the number of arguments beforehand so we can assign default values
+    // correctly ... hrmpf ...
+    unsigned nArgs ( command.arguments().size() );
+    if ( nArgs > BOOST_PP_ITERATION() )
         throw SyntaxErrorException("invalid number of arguments");
-    int nDefaults ( BOOST_PP_ITERATION() - command.arguments().size() );
+    int nDefaults ( BOOST_PP_ITERATION() - nArgs );
 
     typedef typename boost::range_const_reverse_iterator<ParseCommandInfo::ArgumentsRange>::type
         riterator;