7 #ifndef _INC_cArraySort_H
8 #define _INC_cArraySort_H
22 template<
class TYPE,
class TYPE_ARG,
typename TYPE_KEY>
50 TYPE_ARG pObjOld = this->
GetAt(index);
51 if (!(pObjOld == pObj))
146 template<
class TYPE,
class TYPE_ARG,
typename TYPE_KEY>
166 while (iLow <= iHigh)
168 i = (iHigh + iLow) / 2;
169 iCompareRes = this->CompareData(pNew, this->ConstElementAt(i));
181 riCompareRes = iCompareRes;
185 template<
class TYPE,
class TYPE_ARG,
typename TYPE_KEY>
196 this->SetAt(
index, pNew);
199 return AddPresorted(
index, iCompareRes, pNew);
202 template<
class TYPE,
class TYPE_ARG,
typename TYPE_KEY>
223 while (iLow <= iHigh)
225 i = (iHigh + iLow) / 2;
226 iCompareRes = CompareKey(key, this->ConstElementAt(i));
239 riCompareRes = iCompareRes;
280 template<
class TYPE,
typename _TYPECH =
char >
296 return StrT::CmpI<_TYPECH>(Data1.get_Name(), Data2.get_Name());
300 return StrT::CmpI<_TYPECH>(key1, Data2.get_Name());
317 template<
class TYPE,
typename TYPE_KEY =
int >
335 TYPE_KEY key1 = Data1.get_SortValue();
336 TYPE_KEY key2 = Data2.get_SortValue();
344 TYPE_KEY key2 = Base.get_SortValue();
361 template<
class TYPE,
typename _TYPE_HASH = HASHCODE_t >
377 _TYPE_HASH key1 = Data1.get_HashCode();
378 _TYPE_HASH key2 = Data2.get_HashCode();
385 _TYPE_HASH key2 = Data2.get_HashCode();
404 template<
class TYPE,
class TYPE_PTR = TYPE,
typename TYPE_KEY = TYPE>
422 return ::memcmp(pData1, pData2,
sizeof(*pData1));
437 return this->
GetAt(i) != nullptr ;
460 return this->
GetAt(index);
467 if (pData ==
nullptr)
471 if (this->
m_pData[nIndex] == pData)
497 for (
int i = 0; i < this->
GetSize(); i++)
499 delete this->
GetAt(i);
505 template<
class TYPE,
class TYPE_PTR,
typename TYPE_KEY>
521 ASSERT(pData1 !=
nullptr);
522 ASSERT(pData2 !=
nullptr);
523 KEY_t key1 = pData1->get_SortValue();
524 KEY_t key2 = pData2->get_SortValue();
532 if (pBase ==
nullptr)
534 KEY_t key2 = pBase->get_SortValue();
546 if (pBase ==
nullptr)
548 TYPE_KEY nKey = pBase->get_SortValue();
554 if (this->
GetAt(i) == pBase)
573 template<
class TYPE,
typename TYPE_KEY>
579 template<
class TYPE,
class TYPE_PTR,
typename _TYPE_HASH = HASHCODE_t >
598 _TYPE_HASH key1 = pData1->get_HashCode();
599 _TYPE_HASH key2 = pData2->get_HashCode();
606 _TYPE_HASH key2 = pData2->get_HashCode();
611 template<
class TYPE,
typename TYPE_KEY>
618 template<
class TYPE,
typename _TYPECH = GChar_t>
634 ASSERT(pData1 !=
nullptr);
635 ASSERT(pData2 !=
nullptr);
636 return StrT::CmpI<_TYPECH>(pData1->get_Name(), pData2->get_Name());
642 return StrT::CmpI<_TYPECH>(key1, pObj->get_Name());
651 if (pBase ==
nullptr)
657 if (pBase ==
nullptr)
#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
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