Search:

SENF Extensible Network Framework

  • Home
  • Download
  • Wiki
  • BerliOS
  • ChangeLog
  • Browse SVN
  • Bug Tracker
  • Overview
  • Examples
  • HowTos
  • Glossary
  • PPI
  • Packets
  • Scheduler
  • Socket
  • Utils
  • Console
  • Daemon
  • Logger
  • Termlib
  • Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

OverloadedCommand.cci

Go to the documentation of this file.
00001 // $Id: OverloadedCommand.cci 1742 2010-11-04 14:51:56Z g0dil $
00002 //
00003 // Copyright (C) 2008
00004 // Fraunhofer (FOKUS)
00005 // Competence Center NETwork research (NET), St. Augustin, GERMANY
00006 //     Stefan Bund <g0dil@berlios.de>
00007 //
00008 // This program is free software; you can redistribute it and/or modify
00009 // it under the terms of the GNU General Public License as published by
00010 // the Free Software Foundation; either version 2 of the License, or
00011 // (at your option) any later version.
00012 //
00013 // This program is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 // GNU General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU General Public License
00019 // along with this program; if not, write to the
00020 // Free Software Foundation, Inc.,
00021 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00022 
00026 //#include "OverloadedCommand.ih"
00027 
00028 // Custom includes
00029 
00030 #define prefix_ inline
00031 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00032 
00033 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00034 // senf::console::OverloadedCommandNode
00035 
00036 prefix_ senf::console::OverloadedCommandNode::ptr senf::console::OverloadedCommandNode::create()
00037 {
00038     return ptr(new OverloadedCommandNode());
00039 }
00040 
00041 prefix_ senf::console::OverloadedCommandNode::ptr senf::console::OverloadedCommandNode::thisptr()
00042 {
00043     return boost::static_pointer_cast<OverloadedCommandNode>(shared_from_this());
00044 }
00045 
00046 prefix_ senf::console::OverloadedCommandNode::cptr senf::console::OverloadedCommandNode::thisptr()
00047     const
00048 {
00049     return boost::static_pointer_cast<OverloadedCommandNode const>(shared_from_this());
00050 }
00051 
00052 prefix_ senf::console::OverloadedCommandNode &
00053 senf::console::OverloadedCommandNode::doc(std::string const & doc)
00054 {
00055     doc_ = doc;
00056     return *this;
00057 }
00058 
00059 prefix_ senf::console::OverloadedCommandNode &
00060 senf::console::OverloadedCommandNode::shortdoc(std::string const & doc)
00061 {
00062     shortdoc_ = doc;
00063     return *this;
00064 }
00065 
00066 prefix_ unsigned
00067 senf::console::OverloadedCommandNode::overloadIndex(CommandOverload const & overload)
00068 {
00069     return find(overloads_.begin(), overloads_.end(), CommandOverload::cptr(&overload))
00070         - overloads_.begin() + 1;
00071 }
00072 
00073 prefix_ senf::console::OverloadedCommandNode::OverloadsRange
00074 senf::console::OverloadedCommandNode::overloads()
00075     const
00076 {
00077     return boost::make_iterator_range(overloads_.begin(), overloads_.end());
00078 }
00079 
00080 prefix_ senf::console::OverloadedCommandNode::OverloadedCommandNode()
00081 {}
00082 
00083 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00084 // senf::console::CommandOverload
00085 
00086 prefix_ senf::console::CommandOverload::~CommandOverload()
00087 {}
00088 
00089 prefix_ void senf::console::CommandOverload::execute(boost::any & rv, std::ostream & os,
00090                                                      ParseCommandInfo const & command)
00091 {
00092     v_execute(rv, os, command);
00093 }
00094 
00095 prefix_ void senf::console::CommandOverload::operator()(boost::any & rv, std::ostream & os,
00096                                                         ParseCommandInfo const & command)
00097 {
00098     execute(rv, os, command);
00099 }
00100 
00101 prefix_ unsigned senf::console::CommandOverload::numArguments()
00102     const
00103 {
00104     return v_numArguments();
00105 }
00106 
00107 prefix_ void senf::console::CommandOverload::argumentDoc(unsigned index, ArgumentDoc & doc)
00108     const
00109 {
00110     return v_argumentDoc(index,doc);
00111 }
00112 
00113 prefix_ std::string senf::console::CommandOverload::doc()
00114     const
00115 {
00116     return v_doc();
00117 }
00118 
00119 prefix_ senf::console::OverloadedCommandNode & senf::console::CommandOverload::node()
00120     const
00121 {
00122     SENF_ASSERT( node_, "Overload not added to any node yet" );
00123     return *node_;
00124 }
00125 
00126 prefix_ unsigned senf::console::CommandOverload::overloadIndex()
00127     const
00128 {
00129     return node().overloadIndex(*this);
00130 }
00131 
00132 prefix_ senf::console::CommandOverload::CommandOverload()
00133     : node_(0)
00134 {}
00135 
00136 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00137 // senf::console::SimpleCommandOverload
00138 
00139 prefix_ senf::console::SimpleCommandOverload::ptr
00140 senf::console::SimpleCommandOverload::create(Function fn)
00141 {
00142     return ptr(new SimpleCommandOverload(fn));
00143 }
00144 
00145 prefix_ senf::console::SimpleCommandOverload &
00146 senf::console::SimpleCommandOverload::doc(std::string const & doc)
00147 {
00148     doc_ = doc;
00149     return *this;
00150 }
00151 
00152 prefix_ senf::console::SimpleCommandOverload::SimpleCommandOverload(Function fn)
00153     : fn_ (fn)
00154 {}
00155 
00156 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00157 // senf::console::SimpleOverloadAttributor
00158 
00159 prefix_ senf::console::SimpleOverloadAttributor::
00160 SimpleOverloadAttributor(SimpleCommandOverload::Function fn)
00161     : overload_ (SimpleCommandOverload::create(fn))
00162 {}
00163 
00164 prefix_ senf::console::SimpleOverloadAttributor const &
00165 senf::console::SimpleOverloadAttributor::doc(std::string const & doc)
00166     const
00167 {
00168     doc_ = doc;
00169     return *this;
00170 }
00171 
00172 prefix_ senf::console::SimpleOverloadAttributor const &
00173 senf::console::SimpleOverloadAttributor::shortdoc(std::string const & doc)
00174     const
00175 {
00176     shortdoc_ = doc;
00177     return *this;
00178 }
00179 
00180 prefix_ senf::console::SimpleOverloadAttributor const &
00181 senf::console::SimpleOverloadAttributor::overloadDoc(std::string const & doc)
00182     const
00183 {
00184     overload_->doc(doc);
00185     return *this;
00186 }
00187 
00188 prefix_ senf::console::OverloadedCommandNode &
00189 senf::console::SimpleOverloadAttributor::create(DirectoryNode & dir, std::string const & name)
00190     const
00191 {
00192     OverloadedCommandNode & node (OverloadedCommandNode::insertOverload(dir, name, overload_));
00193     if (doc_) node.doc(*doc_);
00194     if (shortdoc_) node.shortdoc(*shortdoc_);
00195     return node;
00196 }
00197 
00198 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00199 #undef prefix_
00200 
00201 
00202 // Local Variables:
00203 // mode: c++
00204 // fill-column: 100
00205 // comment-column: 40
00206 // c-file-style: "senf"
00207 // indent-tabs-mode: nil
00208 // ispell-local-dictionary: "american"
00209 // compile-command: "scons -u test"
00210 // End:

Contact: senf-dev@lists.berlios.de | © 2006-2010 Fraunhofer Institute for Open Communication Systems, Network Research