X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FParsedCommand.cti;h=e37906c81b4a5a91fa8d2e5b7b4d9517defd406e;hb=259da4c692259311c6ec99566b57f5ed1e68e93e;hp=72f372ee91568081637551c35f482272fa3519ba;hpb=01e02e262ea327678dfa0c3f7a66d50ed91924d5;p=senf.git diff --git a/Console/ParsedCommand.cti b/Console/ParsedCommand.cti index 72f372e..e37906c 100644 --- a/Console/ParsedCommand.cti +++ b/Console/ParsedCommand.cti @@ -34,20 +34,50 @@ ///////////////////////////////cti.p/////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// +// senf::console::detail::ArgumentInfoBase + +prefix_ senf::console::detail::ArgumentInfoBase::ArgumentInfoBase(std::string const & type_) + : type (type_), name (), hasDefault (false) +{} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::detail::ArgumentInfo + +template +prefix_ typename senf::console::detail::ArgumentInfo::ptr +senf::console::detail::ArgumentInfo::create() +{ + return ptr(new ArgumentInfo()); +} + +template +prefix_ senf::console::detail::ArgumentInfo::ArgumentInfo() + : ArgumentInfoBase ( ArgumentTraits::description() ), + defaultValue () +{} + +template +prefix_ std::string senf::console::detail::ArgumentInfo::defaultValueStr() + const +{ + return hasDefault ? ArgumentTraits::str(defaultValue) : ""; +} + +/////////////////////////////////////////////////////////////////////////// // senf::console::ParsedCommandOverloadBase template -prefix_ senf::console::detail::ParameterInfo & +prefix_ senf::console::detail::ArgumentInfo & senf::console::ParsedCommandOverloadBase::arg(unsigned n) const { - return dynamic_cast &>(arg(n)); + return dynamic_cast &>(arg(n)); } template prefix_ void senf::console::ParsedCommandOverloadBase::addParameter() { - parameters_.push_back(detail::ParameterInfo::create()); + parameters_.push_back(detail::ArgumentInfo::create()); } /////////////////////////////////////////////////////////////////////////// @@ -87,11 +117,11 @@ senf::console::ParsedCommandAttributor::ParsedCommandAttributor(Overlo {} /////////////////////////////////////////////////////////////////////////// -// senf::console::ParsedAttributeAttributorBase +// senf::console::ParsedArgumentAttributorBase template prefix_ Self -senf::console::ParsedAttributeAttributorBase::doc(std::string const & doc) +senf::console::ParsedArgumentAttributorBase::doc(std::string const & doc) const { this->ParsedCommandAttributorBase::nodeDoc(doc); @@ -99,7 +129,7 @@ senf::console::ParsedAttributeAttributorBase::doc(std::string con } template -prefix_ Self senf::console::ParsedAttributeAttributorBase:: +prefix_ Self senf::console::ParsedArgumentAttributorBase:: overloadDoc(std::string const & doc) const { @@ -109,91 +139,95 @@ overloadDoc(std::string const & doc) template prefix_ -senf::console::ParsedAttributeAttributorBase:: -ParsedAttributeAttributorBase(Overload & overload, unsigned index) +senf::console::ParsedArgumentAttributorBase:: +ParsedArgumentAttributorBase(Overload & overload, unsigned index) : ParsedCommandAttributor (overload, index) {} /////////////////////////////////////////////////////////////////////////// -// senf::console::ParsedAttributeAttributor +// senf::console::ParsedArgumentAttributor template -template -prefix_ typename senf::console::ParsedAttributeAttributor::next_type -senf::console::ParsedAttributeAttributor:: -argInfo(ArgumentPack const & args) +prefix_ typename senf::console::ParsedArgumentAttributor::next_type +senf::console::ParsedArgumentAttributor::arg() const { - typedef typename boost::parameter::binding< - ArgumentPack, tag::detail::default_value_>::type default_value_t; - return argInfo( args, boost::is_same() ); + return next(); } template template -prefix_ typename senf::console::ParsedAttributeAttributor::next_type -senf::console::ParsedAttributeAttributor:: -argInfo(ArgumentPack const & args, boost::mpl::true_) +prefix_ typename senf::console::ParsedArgumentAttributor::next_type +senf::console::ParsedArgumentAttributor:: +argInfo(ArgumentPack const & args) const { - return argInfo( args[tag::name_ | ""], - args[tag::description_ | ""] ); +# define HaveArg(tag) boost::is_same< \ + typename boost::parameter::binding::type, void >() + + argInfo( kw::name, args, HaveArg(kw::type::name) ); + argInfo( kw::description, args, HaveArg(kw::type::description) ); + argInfo( kw::default_value, args, HaveArg(kw::type::default_value) ); + return next(); + +# undef HaveArg } template +template +prefix_ void senf::console::ParsedArgumentAttributor:: +argInfo(Kw const &, ArgumentPack const &, boost::mpl::true_) + const +{} + +template template -prefix_ typename senf::console::ParsedAttributeAttributor::next_type -senf::console::ParsedAttributeAttributor:: -argInfo(ArgumentPack const & args, boost::mpl::false_) +prefix_ void senf::console::ParsedArgumentAttributor:: +argInfo(boost::parameter::keyword const &, ArgumentPack const & args, + boost::mpl::false_) const { - return argInfo( args[tag::name_ | ""], - args[tag::description_ | ""], - args[tag::default_value_ | value_type()] ); + this->argName(args[kw::name]); } template -prefix_ typename senf::console::ParsedAttributeAttributor::next_type -senf::console::ParsedAttributeAttributor::argInfo(std::string const & name, - std::string const & doc) +template +prefix_ void senf::console::ParsedArgumentAttributor:: +argInfo(boost::parameter::keyword const &, ArgumentPack const & args, + boost::mpl::false_) const { - this->argName(name); - this->argDoc(doc); - return next(); + this->argDoc(args[kw::description]); } template -prefix_ typename senf::console::ParsedAttributeAttributor::next_type -senf::console::ParsedAttributeAttributor::argInfo(std::string const & name, - std::string const & doc, - value_type const & value) +template +prefix_ void senf::console::ParsedArgumentAttributor:: +argInfo(boost::parameter::keyword const &, ArgumentPack const & args, + boost::mpl::false_) const { - this->argName(name); - this->argDoc(doc); - defaultValue(value); - return next(); + this->defaultValue(args[kw::default_value]); } template prefix_ -senf::console::ParsedAttributeAttributor:: -ParsedAttributeAttributor(Overload & overload) - : ParsedAttributeAttributorBase (overload, index) +senf::console::ParsedArgumentAttributor:: +ParsedArgumentAttributor(Overload & overload) + : ParsedArgumentAttributorBase (overload, index) {} template -prefix_ senf::console::ParsedAttributeAttributor -senf::console::ParsedAttributeAttributor::next() +prefix_ typename senf::console::ParsedArgumentAttributor::next_type +senf::console::ParsedArgumentAttributor::next() const { - return ParsedAttributeAttributor(this->overload()); + return ParsedArgumentAttributor(this->overload()); } template -prefix_ void senf::console::ParsedAttributeAttributor:: +prefix_ void senf::console::ParsedArgumentAttributor:: defaultValue(value_type const & value) const { @@ -201,13 +235,14 @@ defaultValue(value_type const & value) } /////////////////////////////////////////////////////////////////////////// -// senf::console::ParsedAttributeAttributor +// senf::console::ParsedArgumentAttributor template prefix_ -senf::console::ParsedAttributeAttributor:: -ParsedAttributeAttributor(Overload & overload) - : ParsedCommandAttributor (overload, index) +senf::console::ParsedArgumentAttributor:: +ParsedArgumentAttributor(Overload & overload) + : ParsedArgumentAttributorBase< Overload, + ParsedArgumentAttributor > (overload, index) {} /////////////////////////////////////////////////////////////////////////// @@ -251,7 +286,7 @@ namespace { } template -prefix_ senf::console::ParsedAttributeAttributor< +prefix_ senf::console::ParsedArgumentAttributor< senf::console::ParsedCommandOverload< typename senf::console::detail::ParsedCommandTraits::traits> > senf::console::senf_console_add_node(DirectoryNode & node, std::string const & name, @@ -264,7 +299,7 @@ senf::console::senf_console_add_node(DirectoryNode & node, std::string const & n typedef detail::ParsedCommandTraits CmdTraits; typedef ParsedCommandOverload Overload; - typedef ParsedAttributeAttributor Attributor; + typedef ParsedArgumentAttributor Attributor; return Attributor( cmdNode.add( CreateParsedCommandOverload< @@ -272,7 +307,7 @@ senf::console::senf_console_add_node(DirectoryNode & node, std::string const & n } template -prefix_ senf::console::ParsedAttributeAttributor< +prefix_ senf::console::ParsedArgumentAttributor< senf::console::ParsedCommandOverload< typename senf::console::detail::ParsedCommandTraits::traits> > senf::console:: @@ -287,7 +322,7 @@ senf_console_add_node(DirectoryNode & node, Owner & owner, std::string const & n typedef detail::ParsedCommandTraits CmdTraits; typedef ParsedCommandOverload Overload; - typedef ParsedAttributeAttributor Attributor; + typedef ParsedArgumentAttributor Attributor; return Attributor( cmdNode.add( CreateParsedCommandOverload< @@ -295,6 +330,23 @@ senf_console_add_node(DirectoryNode & node, Owner & owner, std::string const & n senf::membind(fn,&owner)) ) ); } +/////////////////////////////////////////////////////////////////////////// +// senf::console::detail::CheckVoidReturn + +template +template +prefix_ void senf::console::detail::CheckVoidReturn::call(Fn fn, std::ostream & os) +{ + ReturnValueTraits::format(fn(),os); + os << "\n"; +} + +template +prefix_ void senf::console::detail::CheckVoidReturn::call(Fn fn, std::ostream & os) +{ + fn(); +} + ///////////////////////////////cti.e/////////////////////////////////////// #undef prefix_