diff options
Diffstat (limited to 'src/nodemanager.h')
-rw-r--r-- | src/nodemanager.h | 172 |
1 files changed, 14 insertions, 158 deletions
diff --git a/src/nodemanager.h b/src/nodemanager.h index 85b7955..8909eb1 100644 --- a/src/nodemanager.h +++ b/src/nodemanager.h @@ -27,10 +27,8 @@ */ #pragma once -#include <list> #include <string> -#include <stdio.h> -#include <exception> +#include <utility> #include "node.h" #include "nodetree.h" @@ -43,173 +41,31 @@ public: NodeManager(); ~NodeManager(); - void init(std::string filename); + void init(const std::string& filename); - NodeIdList createNode(nodeid_t parentid, nodeid_t id, nodeid_t insertbeforeid) throw (std::exception); - NodeIdList updateNode(nodeid_t id, const std::string &name, - const std::string &value) throw (std::exception); - NodeIdList removeNode(nodeid_t id) throw (std::exception); + NodeIdList createNode(nodeid_t parentid, nodeid_t id, + nodeid_t insertbeforeid); - NodeIdListPair moveNode(nodeid_t id, nodeid_t newParent, nodeid_t beforeId) throw (std::exception); + NodeIdList updateNode(nodeid_t id, const std::string& name, + const std::string& value); - NodeIdList subNodes(nodeid_t) throw (std::exception); + NodeIdList removeNode(nodeid_t id); - NodeTree tree; + NodeIdListPair moveNode(nodeid_t id, nodeid_t newParent, nodeid_t beforeId); - node_t node(nodeid_t t); + NodeIdList subNodes(nodeid_t id); - void flushNodes(); + node_t node(nodeid_t t); nodeid_t createId(); - bool hasId(nodeid_t id); private: - // NodeIdList ancestorList(nodeid_t node); - nodeid_t idCount; - node_t nextNode(); + void flushNodes(); + bool hasId(nodeid_t id); + bool isProtected(nodeid_t id) const; std::string file; + NodeTree tree; }; -#ifndef FOOBAR extern NodeManager node_manager; -#endif - - -#if 0 - -/* -Node: - id - subnodes -// tags - title - description -// primary_assignment -// secondary_assignment - - -Protocol: - -Server -> client: - update [id] [title] [description]; - move [id] [x] [y]; - add [id] [title] [description] [x] [y]; - del [id] - -Client -> server: - update [id] [title] [description]; - move [id] [x] [y]; - add [title] [description] [x] [y]; - del [id] - -title and description are " encapsulated utf-8 string with " escaped with a backslash. -x and y are integers as strings -id are an integer as a string - */ - -/* -typedef struct { - int x, y; - int id; - std::string title; - std::string desc; -} node_t; -*/ -/* -protocol: - add_node title description parent_id - del_node id - update_node id title description - move_node id parent - copy_node id parent -*/ - - - -//typedef std::list<node_t> NodeList; - -class CompareByParentid -{ -public: - bool operator()(const node_t &a, const node_t &b) const - { - return a.parent_id < b.parent_id; - } -}; - -class NodeList - : public std::list<node_t> -{ -public: - NodeList() {} - ~NodeList(){} - - void insert(node_t t) - { - if(t.id == t.parent_id) - { - return; - } - printf("inserting node %d with parent %d\n", t.id, t.parent_id); - - if(t.parent_id == -1) - { - std::list<node_t>::push_front(t); - return; - } - - std::list<node_t>::iterator it; - for(it = begin(); it != end(); ++it) - { - printf("\tcomparing %d and %d\n", t.parent_id, it->id); - if(t.parent_id == it->id) - { - break; - } - } - assert(it != end()); - - std::list<node_t>::insert(++it, t); - - //std::list<node_t>::push_back(t); - //std::list<node_t>::sort(CompareByParentid()); - } - - void move(node_t t) - { - std::list<node_t>::iterator it; - for(it = begin(); it != end(); it++) - { - if(t.id == it->id) - { - break; - } - } - assert(it != end()); - //if(it != end()) - //{ - std::list<node_t>::erase(it); - //} - insert(t); - } - - void push_back(node_t t) - { - insert(t); - } - -private: - std::list<node_t> list; -}; - - -extern NodeList nodelist; - -//typedef std::priority_queue<node_t, std::vector<node_t>, CompareByParentid> NodeList; - -node_t create_node(std::string title, std::string desc, /*int x, int y*/ int parent_id); - -NodeList load_nodelist_from_file(std::string file); -bool save_nodelist_to_file(NodeList t, std::string file); -#endif/*0*/ |