X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FNode.cti;h=fcfa6fec0b22d8ef2e512f5326eaaf8afcd37c38;hb=3aced0177a1c69c7af338b4e66db8694a71873ae;hp=b7f118bc1fba6f53f672a651e9c8c16859cd2972;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Utils/Console/Node.cti b/senf/Utils/Console/Node.cti index b7f118b..fcfa6fe 100644 --- a/senf/Utils/Console/Node.cti +++ b/senf/Utils/Console/Node.cti @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -28,48 +28,40 @@ // Custom includes #define prefix_ inline -///////////////////////////////cti.p/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -// senf::console::NodeCreateTraits::Creator - -template -prefix_ typename senf::console::NodeCreateTraits::result_type -senf::console::NodeCreateTraits::Creator::create(DirectoryNode & node, - std::string const & name, - Object & ob) -{ - return senf_console_add_node(node, name, ob, 0); -} - -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::console::DirectoryNode template prefix_ NodeType & senf::console::DirectoryNode::add(std::string const & name, boost::shared_ptr node) { - SENF_ASSERT( ! node->parent() ); + SENF_ASSERT( ! node->parent(), "Node can only be added to tree once" ); node->name(name); add(node); return *node; } -template -prefix_ typename senf::console::NodeCreateTraits::result_type -senf::console::DirectoryNode::add(std::string const & name, Object const & ob) +template +prefix_ NodeType & senf::console::DirectoryNode:: +add(std::string const & name, NodeType & node, + typename boost::enable_if< boost::is_convertible >::type *) { - return NodeCreateTraits::Creator::create(*this, name, ob); + // This makes objects with implicit conversion operators work (hi, ScopedDirectory ..) + add(name, static_cast(node).thisptr()); + return node; } -template -prefix_ typename senf::console::NodeCreateTraits::result_type -senf::console::DirectoryNode::add(std::string const & name, Object & ob) +template +prefix_ typename Factory::result_type senf::console::DirectoryNode:: +add(std::string const & name, Factory const & factory, + typename boost::enable_if< boost::is_convertible >::type *) { - return NodeCreateTraits::Creator::create(*this, name, ob); + return factory.create(*this, name); } -///////////////////////////////cti.e/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_