Reduce number of references to m_List; reload it directly when possible.
[ttodo.git] / tde.h
blob73616f823e4e093928ea4d63fe858abd4049930b
1 // tde.h
2 //
4 #ifndef TDE_H_27699F347D16DF25781577481B852F4D
5 #define TDE_H_27699F347D16DF25781577481B852F4D
7 #include <ustl.h>
8 using namespace ustl;
10 /// ToDo list entry.
11 class CTodoEntry {
12 public:
13 enum EState {
14 state_Completed,
15 state_Last
17 enum EPriority {
18 priority_Highest,
19 priority_High,
20 priority_Medium,
21 priority_Low,
22 priority_Lowest,
23 priority_Last
25 typedef uint32_t id_t;
26 typedef const string& rctext_t;
27 typedef const CTodoEntry& rcself_t;
28 private:
29 inline time_t MakeTimeT (uint32_t v) const { return (sizeof(time_t) > 4 ? ((time_t(m_Epoch) << 32) | v) : v); }
30 const char* TimeTText (uint32_t v) const;
31 public:
32 CTodoEntry (id_t id = 0);
33 void read (istream& is);
34 void write (ostream& os) const;
35 size_t stream_size (void) const;
36 void MarkComplete (uint8_t progress = 100);
37 inline uint32_t Progress (void) const { return (m_Progress); }
38 inline bool Complete (void) const { return (Progress() == 100); }
39 inline time_t Created (void) const { return (MakeTimeT (m_Created)); }
40 inline time_t Done (void) const { return (MakeTimeT (m_Done)); }
41 inline const char* CreatedDateText (void) const { return (TimeTText (m_Created)); }
42 inline const char* DoneDateText (void) const { return (TimeTText (m_Done)); }
43 inline id_t Id (void) const { return (m_Id); }
44 inline bool HasSublist (void) const { return (m_bHasSublist); }
45 inline void SetHasSublist (bool v) { m_bHasSublist = v; }
46 inline rctext_t Text (void) const { return (m_Text); }
47 inline rctext_t Comment (void) const { return (m_Comment); }
48 inline void SetText (rctext_t v) { m_Text = v; }
49 inline void SetComment (rctext_t v) { m_Comment = v; }
50 inline uint8_t Refs (void) const { return (m_Refs); }
51 inline bool AddRef (void) { return (m_Refs < UINT8_MAX ? ++m_Refs : false); }
52 inline bool DelRef (void) { return (m_Refs > 0 ? --m_Refs : false); }
53 inline bool operator< (rcself_t v) const { return (Id() < v.Id()); }
54 inline bool operator== (rcself_t v) const { return (Id() == v.Id()); }
55 private:
56 string m_Text; ///< Description of what to do.
57 string m_Comment; ///< Completion comment.
58 uint32_t m_Epoch; ///< Upper half of time_t for dates.
59 uint32_t m_Created; ///< When it was created.
60 uint32_t m_Done; ///< When it was completed.
61 id_t m_Id; ///< Unique id of the entry.
62 uint8_t m_Priority; ///< Priority value. See #EPriority.
63 uint8_t m_Progress; ///< Percent complete.
64 uint8_t m_bHasSublist; ///< true if there are dependencies.
65 uint8_t m_Refs; ///< Number of dependent items.
68 typedef vector<CTodoEntry> todolist_t;
70 STD_STREAMABLE (CTodoEntry)
72 #endif