changed: DirContainer - uses std::list instead of std::vector as the main container

we do not have to rebuild indexes after deleting some items
added:   DirContainer::DelById(long id)
changed: Dirs::CheckRootDir() addes the root dir if there is no one
added:   Dirs::DeleteDir(long id) - deletes specified directory (and its contents)
         (from the cache and the database)
added:   Db::DelDirById(long id) - deletes a dir from the database 
         and its first children
added:   standard function rm can delete directories


git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@487 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2009-02-06 13:12:03 +00:00
parent 7d73d048c8
commit 951d0e8653
18 changed files with 303 additions and 102 deletions

View File

@@ -10,7 +10,7 @@
#ifndef headerfiledircontainer
#define headerfiledircontainer
#include <vector>
#include <list>
#include <map>
#include "item.h"
#include "log.h"
@@ -20,9 +20,9 @@ class DirContainer
{
public:
typedef std::vector<Item> Table;
typedef Table::iterator Iterator;
typedef Table::size_type SizeType;
typedef std::list<Item> Table;
typedef Table::iterator Iterator;
typedef Table::size_type SizeType;
typedef std::map<long, Iterator> TableId;
typedef std::multimap<long, Iterator> TableParent;
@@ -43,6 +43,8 @@ public:
Iterator FindId(long id);
bool DelById(long id);
ParentIterator ParentBegin();
ParentIterator ParentEnd();
ParentSizeType ParentSize();
@@ -53,17 +55,14 @@ public:
private:
void AddIndexes(Iterator item);
void RebuildIndexes();
// main table with dirs
Table table;
// true if there is a root dir in the table
bool is_root;
// root dir
SizeType root_index;
// root
Iterator root_iter;
// indexes
TableId table_id;