X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FParsedCommand.cti;h=72f372ee91568081637551c35f482272fa3519ba;hb=01e02e262ea327678dfa0c3f7a66d50ed91924d5;hp=60b7fdeaee33f454e0464453431c02af1a67971d;hpb=5209d7573f53f4b32730833af00668f5c0e56147;p=senf.git diff --git a/Console/ParsedCommand.cti b/Console/ParsedCommand.cti index 60b7fde..72f372e 100644 --- a/Console/ParsedCommand.cti +++ b/Console/ParsedCommand.cti @@ -28,6 +28,7 @@ // Custom includes #include "../Utils/membind.hh" #include +#include #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// @@ -58,6 +59,158 @@ prefix_ void senf::console::ParsedCommandOverloadBase::addParameter() #include BOOST_PP_ITERATE() /////////////////////////////////////////////////////////////////////////// +// senf::console::ParsedCommandAttributorBase + +template +prefix_ void senf::console::ParsedCommandAttributorBase::defaultValue(Type const & value) + const +{ + overload().arg(index_).defaultValue = value; + overload().arg(index_).hasDefault = true; +} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::ParsedCommandAttributor + +template +prefix_ Overload & senf::console::ParsedCommandAttributor::overload() + const +{ + return static_cast(ParsedCommandAttributorBase::overload()); +} + +template +prefix_ +senf::console::ParsedCommandAttributor::ParsedCommandAttributor(Overload & overload, + unsigned index) + : ParsedCommandAttributorBase (overload, index) +{} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::ParsedAttributeAttributorBase + +template +prefix_ Self +senf::console::ParsedAttributeAttributorBase::doc(std::string const & doc) + const +{ + this->ParsedCommandAttributorBase::nodeDoc(doc); + return static_cast(*this); +} + +template +prefix_ Self senf::console::ParsedAttributeAttributorBase:: +overloadDoc(std::string const & doc) + const +{ + this->ParsedCommandAttributorBase::overloadDoc(doc); + return static_cast(*this); +} + +template +prefix_ +senf::console::ParsedAttributeAttributorBase:: +ParsedAttributeAttributorBase(Overload & overload, unsigned index) + : ParsedCommandAttributor (overload, index) +{} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::ParsedAttributeAttributor + +template +template +prefix_ typename senf::console::ParsedAttributeAttributor::next_type +senf::console::ParsedAttributeAttributor:: +argInfo(ArgumentPack const & args) + const +{ + typedef typename boost::parameter::binding< + ArgumentPack, tag::detail::default_value_>::type default_value_t; + return argInfo( args, boost::is_same() ); +} + +template +template +prefix_ typename senf::console::ParsedAttributeAttributor::next_type +senf::console::ParsedAttributeAttributor:: +argInfo(ArgumentPack const & args, boost::mpl::true_) + const +{ + return argInfo( args[tag::name_ | ""], + args[tag::description_ | ""] ); + +} + +template +template +prefix_ typename senf::console::ParsedAttributeAttributor::next_type +senf::console::ParsedAttributeAttributor:: +argInfo(ArgumentPack const & args, boost::mpl::false_) + const +{ + return argInfo( args[tag::name_ | ""], + args[tag::description_ | ""], + args[tag::default_value_ | value_type()] ); +} + +template +prefix_ typename senf::console::ParsedAttributeAttributor::next_type +senf::console::ParsedAttributeAttributor::argInfo(std::string const & name, + std::string const & doc) + const +{ + this->argName(name); + this->argDoc(doc); + return next(); +} + +template +prefix_ typename senf::console::ParsedAttributeAttributor::next_type +senf::console::ParsedAttributeAttributor::argInfo(std::string const & name, + std::string const & doc, + value_type const & value) + const +{ + this->argName(name); + this->argDoc(doc); + defaultValue(value); + return next(); +} + +template +prefix_ +senf::console::ParsedAttributeAttributor:: +ParsedAttributeAttributor(Overload & overload) + : ParsedAttributeAttributorBase (overload, index) +{} + +template +prefix_ senf::console::ParsedAttributeAttributor +senf::console::ParsedAttributeAttributor::next() + const +{ + return ParsedAttributeAttributor(this->overload()); +} + +template +prefix_ void senf::console::ParsedAttributeAttributor:: +defaultValue(value_type const & value) + const +{ + ParsedCommandAttributorBase::defaultValue(value); +} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::ParsedAttributeAttributor + +template +prefix_ +senf::console::ParsedAttributeAttributor:: +ParsedAttributeAttributor(Overload & overload) + : ParsedCommandAttributor (overload, index) +{} + +/////////////////////////////////////////////////////////////////////////// // namespace members namespace { @@ -98,8 +251,9 @@ namespace { } template -prefix_ senf::console::ParsedCommandOverload< - typename senf::console::detail::ParsedCommandTraits::traits> & +prefix_ senf::console::ParsedAttributeAttributor< + senf::console::ParsedCommandOverload< + typename senf::console::detail::ParsedCommandTraits::traits> > senf::console::senf_console_add_node(DirectoryNode & node, std::string const & name, Function fn, int) { @@ -108,15 +262,19 @@ senf::console::senf_console_add_node(DirectoryNode & node, std::string const & n ? dynamic_cast(node(name)) : node.add(name, OverloadedCommandNode::create()) ); - typedef senf::console::detail::ParsedCommandTraits CmdTraits; + typedef detail::ParsedCommandTraits CmdTraits; + typedef ParsedCommandOverload Overload; + typedef ParsedAttributeAttributor Attributor; - return cmdNode.add( CreateParsedCommandOverload< - typename CmdTraits::traits, ! CmdTraits::has_ostream_arg>::create(fn) ); + return Attributor( + cmdNode.add( CreateParsedCommandOverload< + typename CmdTraits::traits, ! CmdTraits::has_ostream_arg>::create(fn) ) ); } template -prefix_ senf::console::ParsedCommandOverload< - typename senf::console::detail::ParsedCommandTraits::traits> & +prefix_ senf::console::ParsedAttributeAttributor< + senf::console::ParsedCommandOverload< + typename senf::console::detail::ParsedCommandTraits::traits> > senf::console:: senf_console_add_node(DirectoryNode & node, Owner & owner, std::string const & name, Function fn, int, @@ -127,11 +285,14 @@ senf_console_add_node(DirectoryNode & node, Owner & owner, std::string const & n ? dynamic_cast(node(name)) : node.add(name, OverloadedCommandNode::create()) ); - typedef senf::console::detail::ParsedCommandTraits CmdTraits; + typedef detail::ParsedCommandTraits CmdTraits; + typedef ParsedCommandOverload Overload; + typedef ParsedAttributeAttributor Attributor; - return cmdNode.add( CreateParsedCommandOverload< - typename CmdTraits::traits, ! CmdTraits::has_ostream_arg>::create( - senf::membind(fn,&owner)) ); + return Attributor( + cmdNode.add( CreateParsedCommandOverload< + typename CmdTraits::traits, ! CmdTraits::has_ostream_arg>::create( + senf::membind(fn,&owner)) ) ); } ///////////////////////////////cti.e///////////////////////////////////////