Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cArraySort.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cArraySort_H
8 #define _INC_cArraySort_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "cArray.h"
14 #include "StrT.h"
15 #include "cValT.h"
16 #include "cUnitTestDecl.h"
17 
18 namespace Gray
19 {
20  UNITTEST2_PREDEF(cArraySort);
21 
22  template<class TYPE, class TYPE_ARG, typename TYPE_KEY>
23  class cArraySorted : public cArrayTyped < TYPE, TYPE_ARG >
24  {
29 
30  public:
32  typedef TYPE_KEY KEY_t;
33  typedef typename SUPER_t::REF_t REF_t;
34 
35  protected:
36  virtual COMPARE_t CompareKey(KEY_t key1, REF_t Data2) const
37  {
41  return cMem::Compare(&key1, &Data2, sizeof(TYPE_KEY));
42  }
43 
44  bool RemoveArgKey(REF_t pObj, KEY_t key)
45  {
48  if (index <= k_ITERATE_BAD)
49  return false;
50  TYPE_ARG pObjOld = this->GetAt(index);
51  if (!(pObjOld == pObj)) // not the current one !! weird!
52  {
53  ASSERT(0);
54  return false;
55  }
56  this->RemoveAt(index);
57  return true;
58  }
59 
60  public:
61  virtual ~cArraySorted()
62  {
63  // Make this virtual to allow derived classes to override this and make destructors work.
64  }
65 
66  ITERATE_t FindINear(REF_t pNew, COMPARE_t& iCompareRes) const;
67  ITERATE_t FindINearKey(KEY_t key, COMPARE_t& iCompareRes) const;
69  {
72  COMPARE_t iCompareRes;
73  ITERATE_t index = FindINearKey(key, iCompareRes);
74  if (iCompareRes != COMPARE_Equal)
75  return k_ITERATE_BAD;
76  return index;
77  }
78 
79  ITERATE_t FindIFirstForKey(TYPE_KEY nKey) const
80  {
83  ITERATE_t i = this->FindIForKey(nKey);
84  if (i < 0)
85  return k_ITERATE_BAD;
86  // Walk Back to get First.
87  for (;;)
88  {
89  if (--i < 0)
90  break;
91  if (CompareKey(nKey, this->GetAt(i)) != COMPARE_Equal)
92  break;
93  }
94  return(i + 1);
95  }
96  ITERATE_t FindILastForKey(TYPE_KEY nKey) const
97  {
100  ITERATE_t i = this->FindIForKey(nKey);
101  if (i < 0)
102  return k_ITERATE_BAD;
103  // Walk Forward to get Last.
104  for (;;)
105  {
106  if (++i >= this->GetSize())
107  break;
108  if (CompareKey(nKey, this->GetAt(i)) != COMPARE_Equal)
109  break;
110  }
111  return(i - 1); // last
112  }
113 
114  ITERATE_t AddPresorted(ITERATE_t index, COMPARE_t iCompareRes, TYPE_ARG pNew)
115  {
117  if (iCompareRes > 0) // key is greater than existing element at index. so put it after.
118  {
119  index++;
120  }
121  this->InsertAt(index, pNew);
122  return index;
123  }
124  bool RemoveKey(TYPE_KEY key)
125  {
127  ITERATE_t index = FindIForKey(key);
128  if (index <= k_ITERATE_BAD)
129  return false;
130  this->RemoveAt(index);
131  return true;
132  }
133 
134  ITERATE_t Add(TYPE_ARG pNew);
135 
136  void AddArray(const SUPER_t& a)
137  {
139  for (ITERATE_t i = 0; i < a.GetSize(); i++)
140  {
141  Add(a[i]);
142  }
143  }
144  };
145 
146  template<class TYPE, class TYPE_ARG, typename TYPE_KEY>
148  {
155 
156  ITERATE_t iHigh = this->GetSize() - 1;
157  if (iHigh < 0)
158  {
159  riCompareRes = COMPARE_Less;
160  return 0;
161  }
162 
163  ITERATE_t iLow = 0;
164  ITERATE_t i = 0;
165  COMPARE_t iCompareRes = COMPARE_Less;
166  while (iLow <= iHigh)
167  {
168  i = (iHigh + iLow) / 2;
169  iCompareRes = this->CompareData(pNew, this->ConstElementAt(i)); // virtual call.
170  if (iCompareRes == COMPARE_Equal)
171  break;
172  if (iCompareRes > 0)
173  {
174  iLow = i + 1;
175  }
176  else
177  {
178  iHigh = i - 1;
179  }
180  }
181  riCompareRes = iCompareRes;
182  return i;
183  }
184 
185  template<class TYPE, class TYPE_ARG, typename TYPE_KEY>
187  {
190  COMPARE_t iCompareRes;
191  ITERATE_t index = FindINear(pNew, iCompareRes);
192  if (iCompareRes == COMPARE_Equal)
193  {
194  // duplicates don't normally happen, but just replace the old one just in case.
195  // DestructElements is called automatically for previous.
196  this->SetAt(index, pNew);
197  return index;
198  }
199  return AddPresorted(index, iCompareRes, pNew);
200  }
201 
202  template<class TYPE, class TYPE_ARG, typename TYPE_KEY>
204  {
212 
213  ITERATE_t iHigh = this->GetSize() - 1;
214  if (iHigh < 0)
215  {
216  riCompareRes = COMPARE_Less;
217  return 0;
218  }
219 
220  ITERATE_t iLow = 0;
221  ITERATE_t i = 0;
222  COMPARE_t iCompareRes = COMPARE_Less;
223  while (iLow <= iHigh)
224  {
225  i = (iHigh + iLow) / 2;
226  iCompareRes = CompareKey(key, this->ConstElementAt(i));
227  if (iCompareRes == COMPARE_Equal)
228  break;
229  if (iCompareRes > 0)
230  {
231  iLow = i + 1;
232  }
233  else
234  {
235  iHigh = i - 1;
236  }
237  }
238 
239  riCompareRes = iCompareRes;
240  return i;
241  }
242 
243  //********************************************************************
244 
245  template<class TYPE>
246  class cArraySortVal : public cArraySorted < TYPE, TYPE, TYPE >
247  {
253 
254  public:
256  typedef typename SUPER_t::KEY_t KEY_t;
257  typedef typename SUPER_t::REF_t REF_t;
258 
259  protected:
260  virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
261  {
262  return cValT::Compare(Data1, Data2);
263  }
264  virtual COMPARE_t CompareKey(KEY_t Data1, REF_t Data2) const override
265  {
266  return cValT::Compare(Data1, Data2);
267  }
268 
269  public:
270  virtual ~cArraySortVal()
271  {
272  }
273 
274  bool RemoveArgKey(TYPE Data1)
275  {
276  return SUPER_t::RemoveArgKey(Data1, Data1);
277  }
278  };
279 
280  template<class TYPE, typename _TYPECH = char >
281  class cArraySortStructName : public cArraySorted < TYPE, const TYPE&, const _TYPECH* >
282  {
287 
288  public:
290  typedef typename SUPER_t::REF_t REF_t;
291  typedef typename SUPER_t::KEY_t KEY_t;
292 
293  protected:
294  virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
295  {
296  return StrT::CmpI<_TYPECH>(Data1.get_Name(), Data2.get_Name());
297  }
298  virtual COMPARE_t CompareKey(KEY_t key1, REF_t Data2) const override
299  {
300  return StrT::CmpI<_TYPECH>(key1, Data2.get_Name());
301  }
302 
303  public:
305  {}
306 
307  const TYPE* FindArgForKey(KEY_t key1) const
308  {
310  ITERATE_t index = FindIForKey(key1);
311  if (index < 0)
312  return nullptr;
313  return &(this->ConstElementAt(index));
314  }
315  };
316 
317  template<class TYPE, typename TYPE_KEY = int >
318  class cArraySortStructValue : public cArraySorted < TYPE, const TYPE&, TYPE_KEY >
319  {
325 
326  public:
328  typedef typename SUPER_t::REF_t REF_t;
329  typedef typename SUPER_t::KEY_t KEY_t;
330 
331  protected:
332  virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
333  {
335  TYPE_KEY key1 = Data1.get_SortValue();
336  TYPE_KEY key2 = Data2.get_SortValue();
337  COMPARE_t iDiff = cValT::Compare(key1, key2);
338  if (iDiff == COMPARE_Equal) // allow duplicate get_SortValue() but NOT duplicate objects!
339  return cValT::Compare((INT_PTR)&Data1, (INT_PTR)&Data2);
340  return iDiff;
341  }
342  virtual COMPARE_t CompareKey(KEY_t key1, REF_t Base) const override
343  {
344  TYPE_KEY key2 = Base.get_SortValue();
345  return cValT::Compare(key1, key2);
346  }
347  public:
349  {}
350 
351  const TYPE* FindArgForKey(KEY_t key1) const
352  {
354  ITERATE_t index = FindIForKey(key1);
355  if (index < 0)
356  return nullptr;
357  return &(this->ConstElementAt(index));
358  }
359  };
360 
361  template<class TYPE, typename _TYPE_HASH = HASHCODE_t >
362  class cArraySortStructHash : public cArraySorted < TYPE, const TYPE&, _TYPE_HASH >
363  {
367 
368  public:
370  typedef typename SUPER_t::REF_t REF_t;
371  typedef typename SUPER_t::KEY_t KEY_t;
372 
373  protected:
374  virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
375  {
377  _TYPE_HASH key1 = Data1.get_HashCode();
378  _TYPE_HASH key2 = Data2.get_HashCode();
379  return cValT::Compare(key1, key2);
380  }
381  virtual COMPARE_t CompareKey(KEY_t key1, REF_t Data2) const override
382  {
385  _TYPE_HASH key2 = Data2.get_HashCode();
386  return cValT::Compare(key1, key2);
387  }
388  public:
390  {}
391 
392  const TYPE* FindArgForKey(KEY_t key1) const
393  {
395  ITERATE_t index = FindIForKey(key1);
396  if (index < 0)
397  return nullptr;
398  return &(this->ConstElementAt(index));
399  }
400  };
401 
402  //********************************************************************
403 
404  template<class TYPE, class TYPE_PTR = TYPE, typename TYPE_KEY = TYPE>
405  class cArraySortFacade : public cArraySorted < TYPE, TYPE_PTR, TYPE_KEY >
406  {
411 
412  public:
414  typedef typename SUPER_t::REF_t REF_t;
415  typedef typename SUPER_t::ELEM_t ELEM_t; //
416 
417  protected:
418  virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
419  {
422  return ::memcmp(pData1, pData2, sizeof(*pData1));
423  }
424 
425  public:
427  {
428  // Make sure virtuals are called correctly if storing a facade.
429  this->RemoveAll();
430  }
431 
432  bool IsValidIndex(ITERATE_t i) const noexcept
433  {
435  if (!SUPER_t::IsValidIndex(i))
436  return false;
437  return this->GetAt(i) != nullptr ;
438  }
439 
440  REF_t GetAt(ITERATE_t index) const noexcept
441  {
443  return this->ConstElementAt(index);
444  }
445  REF_t GetAtCheck(ITERATE_t nIndex) const
446  {
448  if (!this->IsValidIndex(nIndex))
449  {
450  return nullptr;
451  }
452  return this->ConstElementAt(nIndex);
453  }
454 
455  TYPE_PTR FindArgForKey(TYPE_KEY key1) const noexcept
456  {
457  ITERATE_t index = this->FindIForKey(key1);
458  if (index < 0)
459  return nullptr;
460  return this->GetAt(index);
461  }
462  ITERATE_t FindIForAC_BRUTEFORCE(const TYPE_PTR pData) const
463  {
467  if (pData == nullptr)
468  return k_ITERATE_BAD;
469  for (ITERATE_t nIndex = 0; nIndex < this->GetSize(); nIndex++)
470  {
471  if (this->m_pData[nIndex] == pData)
472  return nIndex;
473  }
474  return k_ITERATE_BAD;
475  }
476 
478  {
479  if (!this->GetSize())
480  {
481  return nullptr;
482  }
483  return SUPER_t::PopHead();
484  }
485  ELEM_t PopTail()
486  {
487  if (!this->GetSize())
488  {
489  return nullptr;
490  }
491  return SUPER_t::PopTail();
492  }
493 
494  void DeleteAll()
495  {
496  // NOTE: this may not always be safe for the type!
497  for (int i = 0; i < this->GetSize(); i++)
498  {
499  delete this->GetAt(i);
500  }
502  }
503  };
504 
505  template<class TYPE, class TYPE_PTR, typename TYPE_KEY>
506  class cArraySortFacadeValue : public cArraySortFacade < TYPE, TYPE_PTR, TYPE_KEY >
507  {
511 
512  public:
514  typedef typename SUPER_t::REF_t REF_t;
515  typedef typename SUPER_t::KEY_t KEY_t;
516 
517  protected:
518  virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
519  {
521  ASSERT(pData1 != nullptr);
522  ASSERT(pData2 != nullptr);
523  KEY_t key1 = pData1->get_SortValue();
524  KEY_t key2 = pData2->get_SortValue();
525  COMPARE_t iDiff = cValT::Compare(key1, key2);
526  if (iDiff == COMPARE_Equal) // allow duplicate get_SortValue() but NOT duplicate objects!
527  return cValT::Compare((INT_PTR)pData1, (INT_PTR)pData2);
528  return iDiff;
529  }
530  virtual COMPARE_t CompareKey(KEY_t key1, TYPE_PTR pBase) const override
531  {
532  if (pBase == nullptr)
533  return COMPARE_Greater;
534  KEY_t key2 = pBase->get_SortValue();
535  return cValT::Compare(key1, key2);
536  }
537 
538  public:
540  {}
541 
542  ITERATE_t FindIForAK(const TYPE_PTR pBase) const
543  {
546  if (pBase == nullptr)
547  return k_ITERATE_BAD;
548  TYPE_KEY nKey = pBase->get_SortValue();
549  ITERATE_t i = this->FindIFirstForKey(nKey);
550  if (i < 0)
551  return k_ITERATE_BAD;
552  for (;;)
553  {
554  if (this->GetAt(i) == pBase) // since sorted values are allowed to duplicate.
555  return i;
556  if (++i >= this->GetSize())
557  break;
558  }
559  // This probably shouldn't happen? pBase is not in the array!
560  return k_ITERATE_BAD; // FindIForAC(pBase); // just do a brute force search.
561  }
562 
563  bool RemoveArgKey(TYPE_PTR pBase)
564  {
565  ITERATE_t i = FindIForAK(pBase);
566  if (i < 0)
567  return false;
569  return true;
570  }
571  };
572 
573  template<class TYPE, typename TYPE_KEY>
574  class cArraySortPtrValue : public cArraySortFacadeValue < TYPE*, TYPE*, TYPE_KEY >
575  {
577  };
578 
579  template<class TYPE, class TYPE_PTR, typename _TYPE_HASH = HASHCODE_t >
580  class cArraySortFacadeHash : public cArraySortFacade < TYPE, TYPE_PTR, _TYPE_HASH >
581  {
585 
586  public:
588  typedef typename SUPER_t::REF_t REF_t;
589  typedef typename SUPER_t::KEY_t KEY_t;
590 
591  public:
593  {}
594 
595  virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
596  {
598  _TYPE_HASH key1 = pData1->get_HashCode();
599  _TYPE_HASH key2 = pData2->get_HashCode();
600  return cValT::Compare(key1, key2);
601  }
602  virtual COMPARE_t CompareKey(KEY_t key1, REF_t pData2) const override
603  {
606  _TYPE_HASH key2 = pData2->get_HashCode();
607  return cValT::Compare(key1, key2);
608  }
609  };
610 
611  template<class TYPE, typename TYPE_KEY>
612  class cArraySortPtrHash : public cArraySortFacadeHash < TYPE*, TYPE*, TYPE_KEY >
613  {
615  };
616 
617 
618  template<class TYPE, typename _TYPECH = GChar_t>
619  class cArraySortPtrName : public cArraySortFacade < TYPE*, TYPE*, const _TYPECH* >
620  {
624 
625  public:
627  typedef typename SUPER_t::REF_t REF_t;
628  typedef typename SUPER_t::KEY_t KEY_t;
629 
630  protected:
631  virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
632  {
634  ASSERT(pData1 != nullptr);
635  ASSERT(pData2 != nullptr);
636  return StrT::CmpI<_TYPECH>(pData1->get_Name(), pData2->get_Name());
637  }
638  virtual COMPARE_t CompareKey(KEY_t key1, REF_t pObj) const override
639  {
640  ASSERT(key1 != nullptr);
641  ASSERT(pObj != nullptr);
642  return StrT::CmpI<_TYPECH>(key1, pObj->get_Name());
643  }
644 
645  public:
647  {}
648 
650  {
651  if (pBase == nullptr)
652  return k_ITERATE_BAD;
653  return SUPER_t::FindIForKey(pBase->get_Name());
654  }
655  bool RemoveArgKey(KEY_t pBase)
656  {
657  if (pBase == nullptr)
658  return false;
659  return SUPER_t::RemoveArgKey(pBase, pBase->get_Name());
660  }
661  };
662 }
663 #endif // _INC_cArraySort_H
#define TYPE
Definition: StrT.cpp:38
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define UNITTEST2_PREDEF(x)
Definition: cUnitTestDecl.h:19
void RemoveAll()
Clean up.
Definition: cArray.h:230
const TYPE & GetAt(ITERATE_t nIndex) const
Definition: cArray.h:162
void InsertAt(ITERATE_t nIndex, ARG_TYPE newElement)
Definition: cArray.h:341
TYPE * m_pData
the actual array of data
Definition: cArray.h:108
ITERATE_t GetSize() const noexcept
Definition: cArray.h:137
void RemoveAt(ITERATE_t nIndex)
Definition: cArray.h:367
Definition: cArraySort.h:581
virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
Definition: cArraySort.h:595
cArraySortFacade< TYPE, TYPE_PTR, _TYPE_HASH > SUPER_t
Definition: cArraySort.h:587
virtual COMPARE_t CompareKey(KEY_t key1, REF_t pData2) const override
Definition: cArraySort.h:602
virtual ~cArraySortFacadeHash()
Definition: cArraySort.h:592
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:589
SUPER_t::REF_t REF_t
Definition: cArraySort.h:588
Definition: cArraySort.h:507
virtual COMPARE_t CompareKey(KEY_t key1, TYPE_PTR pBase) const override
Definition: cArraySort.h:530
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:515
ITERATE_t FindIForAK(const TYPE_PTR pBase) const
Definition: cArraySort.h:542
SUPER_t::REF_t REF_t
Definition: cArraySort.h:514
bool RemoveArgKey(TYPE_PTR pBase)
Definition: cArraySort.h:563
cArraySortFacade< TYPE, TYPE_PTR, TYPE_KEY > SUPER_t
Definition: cArraySort.h:513
virtual ~cArraySortFacadeValue()
Definition: cArraySort.h:539
virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
Definition: cArraySort.h:518
Definition: cArraySort.h:406
TYPE_PTR FindArgForKey(TYPE_KEY key1) const noexcept
Definition: cArraySort.h:455
ELEM_t PopHead()
Definition: cArraySort.h:477
cArraySorted< TYPE, TYPE_PTR, TYPE_KEY > SUPER_t
Definition: cArraySort.h:413
REF_t GetAt(ITERATE_t index) const noexcept
Definition: cArraySort.h:440
ELEM_t PopTail()
Definition: cArraySort.h:485
ITERATE_t FindIForAC_BRUTEFORCE(const TYPE_PTR pData) const
Definition: cArraySort.h:462
void DeleteAll()
Definition: cArraySort.h:494
bool IsValidIndex(ITERATE_t i) const noexcept
Definition: cArraySort.h:432
virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
Definition: cArraySort.h:418
SUPER_t::REF_t REF_t
Definition: cArraySort.h:414
REF_t GetAtCheck(ITERATE_t nIndex) const
Definition: cArraySort.h:445
SUPER_t::ELEM_t ELEM_t
Definition: cArraySort.h:415
virtual ~cArraySortFacade()
Definition: cArraySort.h:426
Definition: cArraySort.h:613
Definition: cArraySort.h:620
virtual COMPARE_t CompareData(REF_t pData1, REF_t pData2) const noexcept override
Definition: cArraySort.h:631
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:628
cArraySortFacade< TYPE *, TYPE *, const _TYPECH * > SUPER_t
Definition: cArraySort.h:626
virtual ~cArraySortPtrName()
Definition: cArraySort.h:646
ITERATE_t FindIForAK(REF_t pBase) const
Definition: cArraySort.h:649
bool RemoveArgKey(KEY_t pBase)
Definition: cArraySort.h:655
SUPER_t::REF_t REF_t
Definition: cArraySort.h:627
virtual COMPARE_t CompareKey(KEY_t key1, REF_t pObj) const override
Definition: cArraySort.h:638
Definition: cArraySort.h:575
Definition: cArraySort.h:363
virtual COMPARE_t CompareKey(KEY_t key1, REF_t Data2) const override
Definition: cArraySort.h:381
virtual ~cArraySortStructHash()
Definition: cArraySort.h:389
SUPER_t::REF_t REF_t
Definition: cArraySort.h:370
const TYPE * FindArgForKey(KEY_t key1) const
Definition: cArraySort.h:392
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:371
virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
Definition: cArraySort.h:374
cArraySorted< TYPE, const TYPE &, _TYPE_HASH > SUPER_t
Definition: cArraySort.h:369
Definition: cArraySort.h:282
SUPER_t::REF_t REF_t
Definition: cArraySort.h:290
virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
Definition: cArraySort.h:294
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:291
virtual COMPARE_t CompareKey(KEY_t key1, REF_t Data2) const override
Definition: cArraySort.h:298
const TYPE * FindArgForKey(KEY_t key1) const
Definition: cArraySort.h:307
virtual ~cArraySortStructName()
Definition: cArraySort.h:304
cArraySorted< TYPE, const TYPE &, const _TYPECH * > SUPER_t
Definition: cArraySort.h:289
Definition: cArraySort.h:319
virtual COMPARE_t CompareKey(KEY_t key1, REF_t Base) const override
Definition: cArraySort.h:342
virtual ~cArraySortStructValue()
Definition: cArraySort.h:348
virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
Definition: cArraySort.h:332
cArraySorted< TYPE, const TYPE &, TYPE_KEY > SUPER_t
Definition: cArraySort.h:327
const TYPE * FindArgForKey(KEY_t key1) const
Definition: cArraySort.h:351
SUPER_t::REF_t REF_t
Definition: cArraySort.h:328
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:329
Definition: cArraySort.h:247
SUPER_t::KEY_t KEY_t
Definition: cArraySort.h:256
virtual COMPARE_t CompareKey(KEY_t Data1, REF_t Data2) const override
Definition: cArraySort.h:264
virtual ~cArraySortVal()
Definition: cArraySort.h:270
SUPER_t::REF_t REF_t
Definition: cArraySort.h:257
bool RemoveArgKey(TYPE Data1)
Definition: cArraySort.h:274
virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
Definition: cArraySort.h:260
cArraySorted< TYPE, TYPE, TYPE > SUPER_t
Definition: cArraySort.h:255
Definition: cArraySort.h:24
ITERATE_t FindINearKey(KEY_t key, COMPARE_t &iCompareRes) const
Definition: cArraySort.h:203
ITERATE_t AddPresorted(ITERATE_t index, COMPARE_t iCompareRes, TYPE_ARG pNew)
Definition: cArraySort.h:114
ITERATE_t FindIForKey(KEY_t key) const
Definition: cArraySort.h:68
SUPER_t::REF_t REF_t
Definition: cArraySort.h:33
ITERATE_t FindINear(REF_t pNew, COMPARE_t &iCompareRes) const
Definition: cArraySort.h:147
cArrayTyped< TYPE, TYPE_ARG > SUPER_t
Definition: cArraySort.h:31
ITERATE_t FindIFirstForKey(TYPE_KEY nKey) const
Definition: cArraySort.h:79
void AddArray(const SUPER_t &a)
Definition: cArraySort.h:136
ITERATE_t FindILastForKey(TYPE_KEY nKey) const
Definition: cArraySort.h:96
virtual ~cArraySorted()
Definition: cArraySort.h:61
bool RemoveArgKey(REF_t pObj, KEY_t key)
Definition: cArraySort.h:44
bool RemoveKey(TYPE_KEY key)
Definition: cArraySort.h:124
virtual COMPARE_t CompareKey(KEY_t key1, REF_t Data2) const
Definition: cArraySort.h:36
ITERATE_t Add(TYPE_ARG pNew)
Definition: cArraySort.h:186
TYPE_KEY KEY_t
Definition: cArraySort.h:32
Definition: cArray.h:437
REF_t ConstElementAt(ITERATE_t nIndex) const
Definition: cArray.h:534
bool IsValidIndex(ITERATE_t i) const noexcept
Definition: cArray.h:495
TYPE_ARG REF_t
How to refer to this? value or ref or pointer?
Definition: cArray.h:449
ELEM_t PopTail()
Definition: cArray.h:642
TYPE ELEM_t
What type is stored.
Definition: cArray.h:448
ELEM_t PopHead()
Definition: cArray.h:635
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
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
const ITERATE_t k_ITERATE_BAD
Definition: Index.h:30
@ COMPARE_Less
VARCMP_LT.
Definition: cValT.h:22
@ COMPARE_Greater
VARCMP_GT.
Definition: cValT.h:24
@ COMPARE_Equal
VARCMP_EQ.
Definition: cValT.h:23
uint16 index
Definition: sample3.cpp:29
static COMPARE_t Compare(const void *p1, const void *p2, size_t nSizeBlock) noexcept
Definition: cMem.h:78
static COMPARE_t Compare(const TYPE &a, const TYPE &b) noexcept
Definition: cValT.h:46