ArrayEx.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #if !defined(AFX_CARRAYEX_H__BE2C5983_CE26_11D3_BAE6_0000C0D475E2__INCLUDED_)
  2. #define AFX_CARRAYEX_H__BE2C5983_CE26_11D3_BAE6_0000C0D475E2__INCLUDED_
  3. //#if _MSC_VER > 1000
  4. #pragma once
  5. //#endif // _MSC_VER > 1000
  6. #include <afxtempl.h>
  7. template <class TYPE> class CArrayEx : public CArray<TYPE,TYPE>
  8. {
  9. public:
  10. inline const TYPE& operator[](int nIndex) const
  11. {
  12. ASSERT(0 <= nIndex && nIndex < GetSize());
  13. return (GetData()[nIndex]);
  14. };
  15. inline const TYPE& GetAt(int nIndex) const
  16. {
  17. ASSERT(0 <= nIndex && nIndex < GetSize());
  18. return (GetData()[nIndex]);
  19. };
  20. inline TYPE& operator[](int nIndex)
  21. {
  22. ASSERT(0 <= nIndex && nIndex < GetSize());
  23. return (GetData()[nIndex]);
  24. };
  25. void SortAscending()
  26. {
  27. qsort(GetData(), GetSize(), sizeof(TYPE), CArrayEx::CompareAscending);
  28. }
  29. void SortDescending()
  30. {
  31. qsort(GetData(), GetSize(), sizeof(TYPE), CArrayEx::CompareDescending);
  32. }
  33. static int CompareAscending(const void * p1, const void * p2)
  34. {
  35. return *(TYPE *)p1 - *(TYPE *)p2;
  36. }
  37. static int CompareDescending(const void * p1, const void * p2)
  38. {
  39. return *(TYPE *)p2 - *(TYPE *)p1;
  40. }
  41. BOOL Find(TYPE type)
  42. {
  43. LPVOID lpVoid = NULL;
  44. lpVoid = bsearch(&type, GetData(), GetSize(), sizeof(TYPE), CArrayEx::CompareAscending);
  45. if(lpVoid)
  46. return TRUE;
  47. return FALSE;
  48. }
  49. };
  50. typedef CArrayEx<int> ARRAY;
  51. #endif // !defined(AFX_OCARRAY_H__BE2C5983_CE26_11D3_BAE6_0000C0D475E2__INCLUDED_)