Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cGraphData.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_GraphData_H
7 #define _INC_GraphData_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "CGraphCfg.h"
14 
15 namespace GrayGraph
16 {
18  {
21 
22  public:
25 
26  public:
28  : m_val(0)
29  , m_time(0)
30  {
31  }
33  : m_val(val)
34  , m_time(CVT_TIME_TO_BASE(time))
35  {
36  }
37  };
38 
40  {
43  public:
46  GraphVal_t m_valAvg; // Stats for the block.
47 
48  public:
49  virtual ITERATE_t get_PointQty() const = 0;
50 
52  {
53  ASSERT(get_PointQty());
54  return m_valMin;
55  }
57  {
58  ASSERT(get_PointQty());
59  return m_valMax;
60  }
62  {
63  ASSERT(get_PointQty());
64  return m_valAvg;
65  }
66  };
67 
69  {
74  private:
75  CArray <CGraphPoint, CGraphPoint&> m_aPoints; // Time sorted array of values to graph.
76  private:
77  void Copy(const CGraphBlock& block);
78  void RecalcStats();
79  public:
80  CGraphBlock& operator = (const CGraphBlock & block)
81  {
82  m_aPoints.RemoveAll();
83  Copy(block);
84  return *this;
85  }
86 
87  virtual ITERATE_t get_PointQty() const override
88  {
89  return(m_aPoints.GetSize());
90  }
91 
93  {
94  //ASSERT(i<get_PointQty());
95  return(&(m_aPoints.ElementAt(i)));
96  }
97  const CGraphPoint* GetPoint(ITERATE_t i) const
98  {
99  //ASSERT(i<get_PointQty());
100  return(&(const_cast <CGraphBlock*>(this)->m_aPoints.ElementAt(i)));
101  }
103  {
104  //ASSERT(i<get_PointQty());
105  return(GetPoint(i)->m_val);
106  }
108  {
109  //ASSERT(i<get_PointQty());
110  return(GetPoint(i)->m_time);
111  }
112 
113  void Decimate();
114  ITERATE_t FindPointIndexForTime(CGraphTime timeVal, COMPARE_t& iCompare) const;
115 
117  {
119  ASSERT(get_PointQty());
120  return(GetPointTime(0));
121  }
123  {
125  ASSERT(get_PointQty());
126  return(GetPointTime(get_PointQty() - 1));
127  }
128 
129  ITERATE_t AddPoint(GraphVal_t iVal, CGraphTime time);
130  ITERATE_t AddPoints(CGraphTime timestart, const GraphVal_t* piVal, ITERATE_t iQty, int iTimeInterval);
131 
132  void SplitBlock(CGraphBlock* pBlockOld, CGraphTime timeVal);
133 
134  CGraphBlock();
135  CGraphBlock(const CGraphBlock& block); // copy constructor
136  ~CGraphBlock();
137  };
138 
140  {
143  private:
144  ITERATE_t m_iPointQty;
145 
146  // Store data in blocks.
148 
149  // Operations
150  private:
151  ITERATE_t get_BlockQty() const
152  {
153  return(m_Blocks.GetSize());
154  }
155  const CGraphBlock* GetBlock(ITERATE_t i) const
156  {
157  // MFC CArray has the annoying habit of copying referenced objects unless const.
158  return(&(const_cast<CGraphData*>(this)->m_Blocks.ElementAt(i)));
159  }
160 
161  ITERATE_t FindBlockForTime(CGraphTime timeVal, COMPARE_t& iCompare, ITERATE_t& iBlock) const;
162  void RecalcStats();
163 
164  public:
165  // void SetTimeGapSize( cTimeSpan iTimeGapSize );
166  CGraphData();
167  ~CGraphData();
168 
169  virtual ITERATE_t get_PointQty() const override
170  {
171  return(m_iPointQty);
172  }
173 
175  {
176  ASSERT(get_PointQty());
177  return(GetBlock(0)->get_TimeFirst());
178  }
180  {
181  ASSERT(get_PointQty());
182  return(GetBlock(get_BlockQty() - 1)->get_TimeLast());
183  }
184 
185  bool GetBoundRect(CGraphRect& rectBound) const
186  {
187  if (get_PointQty() == 0)
188  return false;
189  rectBound.left = (GraphVal_t)CVT_TIME_TO_BASE(get_TimeFirst());
190  rectBound.right = (GraphVal_t)CVT_TIME_TO_BASE(get_TimeLast());
191  rectBound.top = get_ValMin();
192  rectBound.bottom = get_ValMax();
193  return true;
194  }
195 
196  ITERATE_t FindPointIndexForTime(CGraphTime timeVal, COMPARE_t& iCompare) const;
197  const CGraphPoint* GetPoint(ITERATE_t i) const;
198 
199  ITERATE_t AddPoint(GraphVal_t iVal, CGraphTime time);
200  ITERATE_t AddPoints(CGraphTime timestart, const GraphVal_t* piVal, ITERATE_t iQty, int iTimeInterval);
201 
202  ITERATE_t ExportFileBin(CFile& File, CGraphTime timeStart, CGraphTime timeStop);
203  ITERATE_t ExportFileText(CStdioFile& File, CGraphTime timeStart, CGraphTime timeStop);
204  ITERATE_t ImportFileBin(CFile& File);
205  ITERATE_t ImportFileText(CStdioFile& File);
206  };
207 };
208 
209 #endif // !defined(_INC_GraphData_H)
#define GRAYGRAPH_LINK
Definition: GrayGraph.h:19
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define CVT_TIME_TO_BASE(t)
Definition: cGraphCfg.h:63
Definition: cGraphData.h:69
CGraphTime GetPointTime(ITERATE_t i) const
Definition: cGraphData.h:107
CGraphTime get_TimeFirst() const
Definition: cGraphData.h:116
const CGraphPoint * GetPoint(ITERATE_t i) const
Definition: cGraphData.h:97
CGraphTime get_TimeLast() const
Definition: cGraphData.h:122
GraphVal_t GetPointVal(ITERATE_t i) const
Definition: cGraphData.h:102
virtual ITERATE_t get_PointQty() const override
Definition: cGraphData.h:87
CGraphPoint * GetPointPtr(ITERATE_t i)
Definition: cGraphData.h:92
Definition: cGraphData.h:140
CGraphTime get_TimeLast() const
Definition: cGraphData.h:179
virtual ITERATE_t get_PointQty() const override
Definition: cGraphData.h:169
CGraphTime get_TimeFirst() const
Definition: cGraphData.h:174
bool GetBoundRect(CGraphRect &rectBound) const
Definition: cGraphData.h:185
Definition: cGraphData.h:18
CGraphPoint()
Definition: cGraphData.h:27
CGraphPoint(GraphVal_t val, CGraphTime time)
Definition: cGraphData.h:32
GraphTime_t m_time
x = time when did this sample occur? CGraphTime
Definition: cGraphData.h:23
GraphVal_t m_val
y = value to plot.
Definition: cGraphData.h:24
Definition: cGraphData.h:40
GraphVal_t get_ValAvg() const
Definition: cGraphData.h:61
virtual ITERATE_t get_PointQty() const =0
GraphVal_t m_valMax
Definition: cGraphData.h:45
GraphVal_t m_valAvg
Definition: cGraphData.h:46
GraphVal_t get_ValMin() const
Definition: cGraphData.h:51
GraphVal_t m_valMin
Definition: cGraphData.h:44
GraphVal_t get_ValMax() const
Definition: cGraphData.h:56
Definition: cRectT.h:23
TYPE bottom
Definition: cRectT.h:35
TYPE right
Definition: cRectT.h:35
TYPE left
Definition: cRectT.h:35
TYPE top
Definition: cRectT.h:35
Definition: cArray.h:99
void RemoveAll()
Clean up.
Definition: cArray.h:230
TYPE & ElementAt(ITERATE_t nIndex)
Definition: cArray.h:167
ITERATE_t GetSize() const noexcept
Definition: cArray.h:137
Definition: cFile.h:84
Definition: cFileText.h:28
Definition: cTimeFile.h:31
Definition: GrayGraph.cpp:29
double GraphVal_t
this is the value type we are plotting. Must also be able to hold GraphTime_t.
Definition: cGraphCfg.h:66
FILETIME_t GraphTime_t
Definition: cGraphCfg.h:59
int COMPARE_t
result of compare. 0=same, 1=a>b, -1=a<b
Definition: cValT.h:17
int ITERATE_t
like size_t but signed
Definition: Index.h:28