Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cPairSort.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cPairSort_H
7 #define _INC_cPairSort_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cArraySort.h"
13 #include "cPair.h"
14 
15 namespace Gray
16 {
17  template <class _TYPE_PAIR, class _TYPE_KEY>
18  class cPairSortBase : public cArraySorted < _TYPE_PAIR*, _TYPE_PAIR*, _TYPE_KEY >
19  {
23 
24  public:
25  virtual ~cPairSortBase()
26  {
27  }
28 
29  ITERATE_t InitAssocElements(const _TYPE_PAIR* pInit, size_t iSizeElement = sizeof(_TYPE_PAIR))
30  {
32  ITERATE_t i = 0;
33  for (;; i++)
34  {
35  BYTE* pData = ((BYTE*)pInit) + (i*iSizeElement);
36  if (!*((_TYPE_KEY*)pData))
37  break;
38  SetAtGrow(i, (_TYPE_PAIR*)pData);
39  }
40  this->QSort();
41  return i;
42  }
43  virtual COMPARE_t CompareKey(KEY_t Key, REF_t Data2) const override
44  {
47  return cValT::Compare(Key, *((_TYPE_KEY*)Data2));
48  }
49  virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
50  {
52  return cValT::Compare(*((_TYPE_KEY*)Data1), *((_TYPE_KEY*)Data2));
53  }
54  _TYPE_PAIR* FindArgForKey(_TYPE_KEY Key) const
55  {
58  if (index < 0)
59  return nullptr;
60  return this->GetAt(index);
61  }
62  };
63 
64  template < class _TYPE_A, class _TYPE_B >
65  class cPairSortVal : public cPairSortBase < cPair< _TYPE_A, _TYPE_B>, _TYPE_A >
66  {
70  };
71 
72  template < class _TYPE_A, class _TYPE_B>
73  class cPairSortStr : public cPairSortBase < cPair< _TYPE_A, _TYPE_B>, const ATOMCHAR_t* >
74  {
78 
79  public:
80  virtual ~cPairSortStr()
81  {
82  }
83 
84  virtual COMPARE_t CompareKey(KEY_t pszKey, REF_t Data2) const override
85  {
88  return StrT::CmpI((const ATOMCHAR_t*)pszKey, *(const ATOMCHAR_t**)Data2);
89  }
90  virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
91  {
93  return StrT::CmpI(*(const ATOMCHAR_t**)Data1, *(const ATOMCHAR_t**)Data2);
94  }
95  _TYPE_B FindKeyRetB(const ATOMCHAR_t* pszKey) const
96  {
97  PAIR_t* pEntry = this->FindArgForKey(pszKey);
98  if (pEntry == nullptr)
99  {
100  return (_TYPE_B)k_ITERATE_BAD;
101  }
102  return pEntry->get_B();
103  }
104  };
105 };
106 
107 #endif
void SetAtGrow(ITERATE_t nIndex, const TYPE & newElement)
Definition: cArray.h:308
const TYPE & GetAt(ITERATE_t nIndex) const
Definition: cArray.h:162
Definition: cArraySort.h:24
ITERATE_t FindIForKey(KEY_t key) const
Definition: cArraySort.h:68
SUPER_t::REF_t REF_t
Definition: cArraySort.h:33
void QSort()
Definition: cArray.h:722
ARG_TYPE REF_t
How to refer to this? value or ref or pointer?
Definition: cArray.h:449
Definition: cPairSort.h:19
_TYPE_PAIR * FindArgForKey(_TYPE_KEY Key) const
Definition: cPairSort.h:54
virtual ~cPairSortBase()
Definition: cPairSort.h:25
ITERATE_t InitAssocElements(const _TYPE_PAIR *pInit, size_t iSizeElement=sizeof(_TYPE_PAIR))
Definition: cPairSort.h:29
virtual COMPARE_t CompareKey(KEY_t Key, REF_t Data2) const override
Definition: cPairSort.h:43
virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
Definition: cPairSort.h:49
Definition: cPairSort.h:74
_TYPE_B FindKeyRetB(const ATOMCHAR_t *pszKey) const
Definition: cPairSort.h:95
virtual COMPARE_t CompareData(REF_t Data1, REF_t Data2) const noexcept override
Definition: cPairSort.h:90
virtual COMPARE_t CompareKey(KEY_t pszKey, REF_t Data2) const override
Definition: cPairSort.h:84
virtual ~cPairSortStr()
Definition: cPairSort.h:80
Definition: cPairSort.h:66
_TYPE_B get_B() const noexcept
Definition: cPair.h:177
Definition: cPair.h:249
< 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
char ATOMCHAR_t
the char form (UNICODE or not) for an atom. (for symbolic names)
Definition: StrConst.h:15
const ITERATE_t k_ITERATE_BAD
Definition: Index.h:30
uint16 index
Definition: sample3.cpp:29
static __DECL_IMPORT COMPARE_t __stdcall CmpI(const TYPE *pszStr1, const TYPE *pszStr2)
static COMPARE_t Compare(const TYPE &a, const TYPE &b) noexcept
Definition: cValT.h:46