mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
Database: Add forward/reverse iterator
This allows the database to be treated as a single collection of strings, but can be used to avoid loading the entire database when only interested in recent entries. Related to issue #245.
This commit is contained in:
parent
ea3bbd0e85
commit
557fd4cb34
2 changed files with 245 additions and 0 deletions
|
@ -38,6 +38,60 @@
|
|||
|
||||
class Database
|
||||
{
|
||||
public:
|
||||
|
||||
class iterator
|
||||
{
|
||||
private:
|
||||
friend class Database;
|
||||
typedef std::vector <Datafile>::iterator files_iterator;
|
||||
typedef std::vector <std::string>::const_iterator lines_iterator;
|
||||
typedef std::string value_type;
|
||||
|
||||
files_iterator files_it;
|
||||
files_iterator files_end;
|
||||
|
||||
lines_iterator lines_it;
|
||||
lines_iterator lines_end;
|
||||
|
||||
iterator (files_iterator fbegin, files_iterator fend);
|
||||
|
||||
public:
|
||||
iterator& operator++ ();
|
||||
iterator& operator++ (int);
|
||||
iterator& operator-- ();
|
||||
bool operator== (const iterator & other) const;
|
||||
bool operator!= (const iterator & other) const;
|
||||
const value_type& operator* () const;
|
||||
const value_type* operator-> () const;
|
||||
};
|
||||
|
||||
class reverse_iterator
|
||||
{
|
||||
private:
|
||||
friend class Database;
|
||||
typedef std::vector <Datafile>::reverse_iterator files_iterator;
|
||||
typedef std::vector <std::string>::const_reverse_iterator lines_iterator;
|
||||
typedef std::string value_type;
|
||||
|
||||
files_iterator files_it;
|
||||
files_iterator files_end;
|
||||
|
||||
lines_iterator lines_it;
|
||||
lines_iterator lines_end;
|
||||
|
||||
reverse_iterator(files_iterator fbegin, files_iterator fend);
|
||||
|
||||
public:
|
||||
reverse_iterator& operator++ ();
|
||||
reverse_iterator& operator++ (int);
|
||||
reverse_iterator& operator-- ();
|
||||
bool operator== (const reverse_iterator & other) const;
|
||||
bool operator!= (const reverse_iterator & other) const;
|
||||
const value_type& operator* () const;
|
||||
const value_type* operator-> () const;
|
||||
};
|
||||
|
||||
public:
|
||||
Database () = default;
|
||||
void initialize (const std::string&, Journal& journal);
|
||||
|
@ -53,6 +107,11 @@ public:
|
|||
|
||||
std::string dump () const;
|
||||
|
||||
iterator begin ();
|
||||
iterator end ();
|
||||
reverse_iterator rbegin ();
|
||||
reverse_iterator rend ();
|
||||
|
||||
private:
|
||||
unsigned int getDatafile (int, int);
|
||||
std::vector <Range> segmentRange (const Range&);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue