Updated bsconf to the latest from uSTL
[ttodo.git] / tde.h
blob21022e52bff41079a57cebc7133f45f1b43174eb
1 // This file is part of a terminal todo application.
2 //
3 // Copyright (C) 2006 by Mike Sharov <msharov@users.sourceforge.net>
4 // This file is free software, distributed under the MIT License.
5 //
6 // tde.h
7 //
9 #ifndef TDE_H_27699F347D16DF25781577481B852F4D
10 #define TDE_H_27699F347D16DF25781577481B852F4D
12 #include "config.h"
14 //----------------------------------------------------------------------
16 /// ToDo list entry.
17 class CTodoItem {
18 public:
19 enum EPriority {
20 priority_Directory,
21 priority_Highest,
22 priority_High,
23 priority_Medium,
24 priority_Low,
25 priority_Lowest,
26 priority_Last
28 typedef uint32_t id_t;
29 typedef const string& rctext_t;
30 typedef const CTodoItem& rcself_t;
31 private:
32 inline time_t MakeTimeT (uint32_t v) const { return (sizeof(time_t) > 4 ? ((time_t(m_Epoch) << 32) | v) : v); }
33 const char* TimeTText (uint32_t v) const;
34 public:
35 CTodoItem (id_t id = 0);
36 void read (istream& is);
37 void write (ostream& os) const;
38 size_t stream_size (void) const;
39 void MarkComplete (uint8_t progress = 100);
40 inline uint32_t Progress (void) const { return (m_Progress); }
41 inline bool Complete (void) const { return (Progress() == 100); }
42 inline time_t Created (void) const { return (MakeTimeT (m_Created)); }
43 inline time_t Done (void) const { return (MakeTimeT (m_Done)); }
44 inline const char* CreatedDateText (void) const { return (TimeTText (m_Created)); }
45 inline const char* DoneDateText (void) const { return (TimeTText (m_Done)); }
46 inline id_t Id (void) const { return (m_Id); }
47 inline bool HasSublist (void) const { return (m_bHasSublist); }
48 inline void SetHasSublist (bool v) { m_bHasSublist = v; }
49 inline rctext_t Text (void) const { return (m_Text); }
50 inline rctext_t Comment (void) const { return (m_Comment); }
51 inline void SetText (rctext_t v) { m_Text = v; }
52 inline void SetComment (rctext_t v) { m_Comment = v; }
53 inline uint8_t Refs (void) const { return (m_Refs); }
54 inline bool AddRef (void) { return (m_Refs < UINT8_MAX ? ++m_Refs : false); }
55 inline bool DelRef (void) { return (m_Refs > 0 ? --m_Refs : false); }
56 inline uint8_t Priority (void) const { return (m_Priority); }
57 inline void SetPriority (EPriority v) { m_Priority = v; }
58 inline bool operator< (rcself_t v) const { return (Id() < v.Id()); }
59 inline bool operator== (rcself_t v) const { return (Id() == v.Id()); }
60 private:
61 string m_Text; ///< Description of what to do.
62 string m_Comment; ///< Completion comment.
63 uint32_t m_Epoch; ///< Upper half of time_t for dates.
64 uint32_t m_Created; ///< When it was created.
65 uint32_t m_Started; ///< When work started.
66 uint32_t m_Effort; ///< How much work has been done on it.
67 uint32_t m_Due; ///< When it should be completed.
68 uint32_t m_Done; ///< When it was completed.
69 id_t m_Id; ///< Unique id of the entry.
70 uint8_t m_Priority; ///< Priority value. See #EPriority.
71 uint8_t m_Progress; ///< Percent complete.
72 uint8_t m_bHasSublist; ///< true if there are dependencies.
73 uint8_t m_Refs; ///< Number of dependent items.
76 //----------------------------------------------------------------------
78 /// Provides dependency links between todo items.
79 class CTodoDep {
80 public:
81 typedef CTodoItem::id_t itemid_t;
82 typedef const CTodoDep& rcself_t;
83 public:
84 CTodoDep (itemid_t item = 0, itemid_t dep = 0) : m_ItemId (item), m_DepId (dep) { }
85 inline bool operator< (rcself_t v) const { return (m_ItemId < v.m_ItemId); }
86 inline bool operator== (rcself_t v) const { return (m_ItemId == v.m_ItemId); }
87 inline void read (istream& is) { is >> m_ItemId >> m_DepId; }
88 inline void write (ostream& os) const { os << m_ItemId << m_DepId; }
89 inline size_t stream_size (void) const { return (stream_size_of (m_ItemId) + stream_size_of (m_DepId)); }
90 public:
91 itemid_t m_ItemId; ///< Item id that has ...
92 itemid_t m_DepId; ///< ... this dependency.
95 //----------------------------------------------------------------------
97 enum { c_RootItemId };
99 //----------------------------------------------------------------------
101 typedef vector<CTodoItem> tdevec_t;
102 typedef vector<CTodoDep> tddepmap_t;
104 STD_STREAMABLE (CTodoItem)
105 STD_STREAMABLE (CTodoDep)
107 #endif