Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cValT.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cValT_H
8 #define _INC_cValT_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "Index.h"
14 
15 namespace Gray
16 {
17  typedef int COMPARE_t;
19  {
22  COMPARE_Less = -1,
25  };
26 
27  struct GRAYCORE_LINK cValT // static. Value/Object of some type in memory.
28  {
32 
33  template <class TYPE>
34  static inline void Swap(TYPE& a, TYPE& b) noexcept
35  {
40  register TYPE x = a;
41  a = b;
42  b = x;
43  }
44 
45  template <class TYPE>
46  static inline COMPARE_t Compare(const TYPE& a, const TYPE& b) noexcept
47  {
54  if (a > b)
55  return COMPARE_Greater; // is greater than.
56  if (a == b)
57  return COMPARE_Equal; // is equal.
58  return COMPARE_Less; // must be less than.
59  }
60  };
61 
62  struct GRAYCORE_LINK cValArray // static. array of Value of some TYPE.
63  {
67 
68  template <class TYPE>
69  static inline bool IsFilledQty(const TYPE* pArray, ITERATE_t nBlocks, TYPE nFillValue) noexcept
70  {
72  for (ITERATE_t i = 0; i < nBlocks; i++)
73  {
74  if (pArray[i] != nFillValue)
75  return false;
76  }
77  return true;
78  }
79  template <class TYPE>
80  static inline bool IsFilledSize(const void* pArray, size_t nArraySizeBytes, TYPE nFillValue) noexcept
81  {
83  return IsFilledQty((const TYPE*)pArray, (ITERATE_t)(nArraySizeBytes / sizeof(TYPE)), nFillValue);
84  }
85 
86  template <class TYPE>
87  static inline bool IsEqualQty(const TYPE* pArray1, const TYPE* pArray2, ITERATE_t nBlocks) noexcept
88  {
90  for (ITERATE_t i = 0; i < nBlocks; i++)
91  {
92  if (pArray1[i] != pArray2[i])
93  return false;
94  }
95  return true;
96  }
97 
98  template <class TYPE>
99  static inline COMPARE_t CompareQty(const TYPE* pArray1, const TYPE* pArray2, ITERATE_t nBlocks) noexcept
100  {
102  for (ITERATE_t i = 0; i < nBlocks; i++)
103  {
104  if (pArray1[i] != pArray2[i])
105  return (COMPARE_t)(pArray1[i] - pArray2[i]);
106  }
107  return COMPARE_Equal;
108  }
109 
110  template <class TYPE>
111  static inline void FillQty(TYPE* pArray, ITERATE_t nBlocks, TYPE nFillValue=0) noexcept
112  {
115 
116  for (ITERATE_t i = 0; i < nBlocks; i++)
117  {
118  pArray[i] = nFillValue;
119  }
120  }
121  template <class TYPE>
122  static inline void ZeroQty(TYPE* pArray, ITERATE_t nBlocks) noexcept
123  {
125  for (ITERATE_t i = 0; i < nBlocks; i++)
126  {
127  pArray[i] = 0;
128  }
129  }
130 
131  template <class TYPE>
132  static inline void FillSize(void* pArray, size_t nArraySizeBytes, TYPE nFillValue) noexcept
133  {
137  FillQty((TYPE*)pArray, (ITERATE_t)(nArraySizeBytes / sizeof(TYPE)), nFillValue);
138  }
139 
140  template <class TYPE>
141  static inline void CopyQty(TYPE* pDst, const TYPE* pSrc, ITERATE_t nBlocks) noexcept
142  {
144  for (ITERATE_t i = 0; i < nBlocks; i++)
145  {
146  pDst[i] = pSrc[i];
147  }
148  }
149 
150  template <class TYPE>
151  static inline void CopyQtyRev(TYPE* pDst, const TYPE* pSrc, ITERATE_t nBlocks) noexcept
152  {
154  for (ITERATE_t i = nBlocks; i > 0;)
155  {
156  i--;
157  pDst[i] = pSrc[i];
158  }
159  }
160 
161  template <class TYPE>
162  static inline void ReverseArray(TYPE* pArray, size_t nArraySizeBytes) noexcept
163  {
167  size_t nQty = nArraySizeBytes / sizeof(TYPE);
168  TYPE* pMemBS = pArray;
169  TYPE* pMemBE = pArray + (nQty - 1);
170  for (; pMemBS < pMemBE; pMemBS++, pMemBE--)
171  {
172  cValT::Swap<TYPE>(*pMemBS, *pMemBE);
173  }
174  }
175  static void GRAYCALL ReverseArrayBlocks(void* pArray, size_t nArraySizeBytes, size_t iBlockSize);
176  };
177 
178  template <>
179  inline void cValArray::FillQty<BYTE>(BYTE* pData, ITERATE_t nBlocks, BYTE bFill) noexcept // static
180  {
182  ::memset(pData, bFill, (size_t)nBlocks);
183  }
184  template <>
185  inline void cValArray::FillSize<BYTE>(void* pData, size_t nSizeBlock, BYTE bFill) noexcept // static
186  {
188  ::memset(pData, bFill, nSizeBlock);
189  }
190 }
191 
192 #endif // _INC_cValT_H
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define TYPE
Definition: StrT.cpp:38
< 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
COMPARE_TYPE
Definition: cValT.h:19
@ COMPARE_Less
VARCMP_LT.
Definition: cValT.h:22
@ COMPARE_Greater
VARCMP_GT.
Definition: cValT.h:24
@ COMPARE_Equal
VARCMP_EQ.
Definition: cValT.h:23
Definition: cValT.h:63
static bool IsFilledQty(const TYPE *pArray, ITERATE_t nBlocks, TYPE nFillValue) noexcept
Definition: cValT.h:69
static void FillQty(TYPE *pArray, ITERATE_t nBlocks, TYPE nFillValue=0) noexcept
Definition: cValT.h:111
static void ReverseArray(TYPE *pArray, size_t nArraySizeBytes) noexcept
Definition: cValT.h:162
static bool IsEqualQty(const TYPE *pArray1, const TYPE *pArray2, ITERATE_t nBlocks) noexcept
Definition: cValT.h:87
static void CopyQtyRev(TYPE *pDst, const TYPE *pSrc, ITERATE_t nBlocks) noexcept
Definition: cValT.h:151
static void FillSize(void *pArray, size_t nArraySizeBytes, TYPE nFillValue) noexcept
Definition: cValT.h:132
static void ZeroQty(TYPE *pArray, ITERATE_t nBlocks) noexcept
Definition: cValT.h:122
static bool IsFilledSize(const void *pArray, size_t nArraySizeBytes, TYPE nFillValue) noexcept
Definition: cValT.h:80
static COMPARE_t CompareQty(const TYPE *pArray1, const TYPE *pArray2, ITERATE_t nBlocks) noexcept
Definition: cValT.h:99
static void CopyQty(TYPE *pDst, const TYPE *pSrc, ITERATE_t nBlocks) noexcept
Definition: cValT.h:141
Definition: cValT.h:28
static void Swap(TYPE &a, TYPE &b) noexcept
Definition: cValT.h:34
static COMPARE_t Compare(const TYPE &a, const TYPE &b) noexcept
Definition: cValT.h:46