///////////////////////////////////////////////////////////////////////////
// senf::console::GenericNode
+prefix_ senf::console::GenericNode::~GenericNode()
+{}
+
prefix_ std::string const & senf::console::GenericNode::name()
const
{
return name_;
}
-prefix_ senf::console::GenericNode::GenericNode(std::string const & name, bool managed)
- : name_ (name), managed_ (managed)
-{}
+prefix_ senf::console::GenericNode::GenericNode(std::string const & name)
+ : name_ (name), parent_ (0)
+{
+ ///\fixme Provide a default name if 'name' is empty ?
+}
prefix_ void senf::console::GenericNode::name(std::string const & name)
{
node.name_ = name;
}
-prefix_ senf::console::DirectoryNode & senf::console::GenericNode::parent()
+prefix_ boost::shared_ptr<senf::console::DirectoryNode> senf::console::GenericNode::parent()
const
{
- SENF_ASSERT( parent_ );
- return *parent_;
+ return boost::static_pointer_cast<DirectoryNode>(
+ parent_ ? parent_->shared_from_this() : ptr() );
}
-prefix_ bool senf::console::GenericNode::managed()
- const
+prefix_ senf::console::GenericNode::ptr senf::console::GenericNode::thisptr()
{
- return managed_;
+ return shared_from_this();
}
-prefix_ bool senf::console::GenericNode::release()
+prefix_ senf::console::GenericNode::cptr senf::console::GenericNode::thisptr()
+ const
{
- // Beware ! call release() first so the call is not short-circuited way !
- return intrusive_refcount_base::release() && managed_;
+ return shared_from_this();
}
///////////////////////////////////////////////////////////////////////////
// senf::console::DirectoryNode
-prefix_ void senf::console::DirectoryNode::add(std::auto_ptr<GenericNode> node, bool uniquify)
-{
- SENF_ASSERT( node->managed() );
- add(GenericNode::ptr(node.release()), uniquify);
-}
-
-prefix_ void senf::console::DirectoryNode::add(GenericNode & node, bool uniquify)
+prefix_ senf::console::GenericNode &
+senf::console::DirectoryNode::add(std::auto_ptr<GenericNode> node, bool uniquify)
{
- SENF_ASSERT( ! node.managed() );
- add(GenericNode::ptr(&node),uniquify);
+ GenericNode::ptr p (node.release());
+ add(p, uniquify);
+ return *p;
}
prefix_ senf::console::DirectoryNode &
senf::console::DirectoryNode::operator[](std::string const & name)
const
{
- return dynamic_cast<DirectoryNode&>(lookup(name));
+ return dynamic_cast<DirectoryNode&>(get(name));
}
prefix_ senf::console::CommandNode &
senf::console::DirectoryNode::operator()(std::string const & name)
const
{
- return dynamic_cast<CommandNode&>(lookup(name));
+ return dynamic_cast<CommandNode&>(get(name));
+}
+
+prefix_ senf::console::DirectoryNode &
+senf::console::DirectoryNode::mkdir(std::string const & name)
+{
+ return static_cast<DirectoryNode &>(
+ add(std::auto_ptr<GenericNode>(new DirectoryNode(name))));
+}
+
+prefix_ senf::console::DirectoryNode::ChildrenRange senf::console::DirectoryNode::children()
+ const
+{
+ return boost::make_iterator_range(children_.begin(), children_.end());
}
-prefix_ senf::console::DirectoryNode::DirectoryNode(std::string const & name, bool managed)
- : GenericNode(name, managed)
+prefix_ senf::console::DirectoryNode::DirectoryNode(std::string const & name)
+ : GenericNode(name)
{}
+prefix_ senf::console::DirectoryNode::ptr senf::console::DirectoryNode::thisptr()
+{
+ return boost::static_pointer_cast<DirectoryNode>(shared_from_this());
+}
+
+prefix_ senf::console::DirectoryNode::cptr senf::console::DirectoryNode::thisptr()
+ const
+{
+ return boost::static_pointer_cast<DirectoryNode const>(shared_from_this());
+}
+
///////////////////////////////////////////////////////////////////////////
// senf::console::CommandNode
-prefix_ senf::console::CommandNode::CommandNode(std::string const & name, bool managed)
- : GenericNode(name, managed)
+prefix_ senf::console::CommandNode::CommandNode(std::string const & name)
+ : GenericNode(name)
{}
+prefix_ senf::console::CommandNode::ptr senf::console::CommandNode::thisptr()
+{
+ return boost::static_pointer_cast<CommandNode>(shared_from_this());
+}
+
+prefix_ senf::console::CommandNode::cptr senf::console::CommandNode::thisptr()
+ const
+{
+ return boost::static_pointer_cast<CommandNode const>(shared_from_this());
+}
+
///////////////////////////////cci.e///////////////////////////////////////
#undef prefix_