From 60ca284e3a6255f657cc44ca189f610266e3ac00 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Thu, 25 Aug 2011 22:13:47 -0400 Subject: [PATCH] TDB2::get - Implemented high-level accessors for tasks, by ID and UUID. This permits full DOM implementation. --- src/TDB2.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/TDB2.h | 5 ++++ 2 files changed, 77 insertions(+) diff --git a/src/TDB2.cpp b/src/TDB2.cpp index 115bc2891..54be1cf3f 100644 --- a/src/TDB2.cpp +++ b/src/TDB2.cpp @@ -555,6 +555,78 @@ int TDB2::next_id () return _id++; } +//////////////////////////////////////////////////////////////////////////////// +// Locate task by ID. +bool TDB2::get (int id, Task& task) +{ + // First load and scan pending. + if (! pending._loaded_tasks) + pending.load_tasks (); + + std::vector ::iterator i; + for (i = pending._tasks.begin (); i != pending._tasks.end (); ++i) + { + if (i->id == id) + { + task = *i; + return true; + } + } + + // Next load and scan completed. + // Note that this is harmless, because it is only performed if the above + // load and search fails. + if (! completed._loaded_tasks) + completed.load_tasks (); + + for (i = completed._tasks.begin (); i != completed._tasks.end (); ++i) + { + if (i->id == id) + { + task = *i; + return true; + } + } + + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +// Locate task by UUID. +bool TDB2::get (const std::string& uuid, Task& task) +{ + // First load and scan pending. + if (! pending._loaded_tasks) + pending.load_tasks (); + + std::vector ::iterator i; + for (i = pending._tasks.begin (); i != pending._tasks.end (); ++i) + { + if (i->get ("uuid") == uuid) + { + task = *i; + return true; + } + } + + // Next load and scan completed. + // Note that this is harmless, because it is only performed if the above + // load and search fails. + if (! completed._loaded_tasks) + completed.load_tasks (); + + for (i = completed._tasks.begin (); i != completed._tasks.end (); ++i) + { + if (i->get ("uuid") == uuid) + { + task = *i; + return true; + } + } + + return false; +} + //////////////////////////////////////////////////////////////////////////////// bool TDB2::verifyUniqueUUID (const std::string& uuid) { diff --git a/src/TDB2.h b/src/TDB2.h index 86dee9431..34a70d37a 100644 --- a/src/TDB2.h +++ b/src/TDB2.h @@ -59,6 +59,7 @@ public: void load_lines (); void load_contents (); + // ID <--> UUID mapping. std::string uuid (int); int id (const std::string&); @@ -98,6 +99,10 @@ public: int gc (); int next_id (); + // Generalized task accessors. + bool get (int, Task&); + bool get (const std::string&, Task&); + void dump (); private: