/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * nodetree.h * * Tue Mar 27 11:07:48 CEST 2012 * Copyright 2012 Jonas Suhr Christensen * jsc@umbraculum.org ****************************************************************************/ /* * This file is part of Munia. * * Munia is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Munia is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Munia; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #pragma once #include #include #include #include "node.h" class Node; typedef std::list NodeList; class Node { public: nodeid_t id; Node* parent; node_t data; NodeList children; std::string toXML(std::string prefix); }; class NodeTree { public: NodeTree(); ~NodeTree(); nodeid_t createId(); bool hasId(nodeid_t nodeid); NodeIdList insertAsChild(nodeid_t parentid, nodeid_t id, node_t data, nodeid_t insertBeforeId) throw (std::exception); NodeIdList remove(nodeid_t id) throw (std::exception); NodeIdList move(nodeid_t id, nodeid_t newParentId, nodeid_t insertBeforeId) throw (std::exception); NodeIdList updateData(nodeid_t id, const std::string &name, const std::string &value) throw (std::exception); node_t data(nodeid_t id) throw (std::exception); NodeIdList bfs(nodeid_t id) throw (std::exception); NodeIdList ancestorList(nodeid_t id) throw (std::exception); void toStdOut(); std::string toXML(); void fromXML(const std::string& xml); nodeid_t nextid; private: friend class XmlParser; Node* createNode(nodeid_t id); void insertChild(Node* parent, Node* child, nodeid_t insertBeforeId); Node* root; std::map id2node; };