EHS
SArray.h
Go to the documentation of this file.
1#pragma once
2
3#include "EHS.h"
4#include "Log.h"
5
6namespace ehs
7{
9 template<typename T, typename N = UInt_64>
10 class SArray
11 {
12 private:
13 T* data;
14 N size;
15
16 public:
18 {
19 delete[] data;
20 }
21
23 : data(nullptr), size(0)
24 {
25 }
26
27 SArray(const N size)
28 : data(new T[size]), size(size)
29 {
30 }
31
32 SArray(const SArray& sArray)
33 : data(new T[sArray.size]), size(sArray.size)
34 {
35 for (N i = 0; i < size; ++i)
36 data[i] = sArray.data[i];
37 }
38
39 SArray(SArray&& sArray) noexcept
40 : data(sArray.data), size(sArray.size)
41 {
42 sArray.data = nullptr;
43 sArray.size = 0;
44 }
45
46 SArray& operator=(const SArray& pArray)
47 {
48 if (this == &pArray)
49 return *this;
50
51 delete[] data;
52 data = new T[pArray.size];
53 for (N i = 0; i < pArray.size; ++i)
54 data[i] = pArray.data[i];
55
56 size = pArray.size;
57
58 return *this;
59 }
60
61 SArray& operator=(SArray&& pArray) noexcept
62 {
63 if (this == &pArray)
64 return *this;
65
66 delete[] data;
67 data = pArray.data;
68 size = pArray.size;
69
70 pArray.data = nullptr;
71 pArray.size = 0;
72
73 return *this;
74 }
75
76 operator const T* () const
77 {
78 return data;
79 }
80
81 operator T* ()
82 {
83 return data;
84 }
85
86 void Insert(const N index, T value)
87 {
88 if (index >= size)
89 {
90 EHS_LOG_INT(LogType::WARN, 0, "Cannot insert value at " + Str_8::FromNum(index) + " because it is outside of array range of " + size + ".");
91 return;
92 }
93
94 for (N i = size; i > index + 1; --i)
95 data[i - 1] = std::move(data[i - 2]);
96
97 data[index] = std::move(value);
98 }
99
100 void SetSize(const N newSize)
101 {
102 size = newSize;
103 }
104
105 N Size() const
106 {
107 return size;
108 }
109 };
110}
#define EHS_LOG_INT(type, code, msg)
Definition: Log.h:137
This container is useful for sorting arrays efficiently.
Definition: SArray.h:11
~SArray()
Definition: SArray.h:17
SArray(SArray &&sArray) noexcept
Definition: SArray.h:39
N Size() const
Definition: SArray.h:105
void Insert(const N index, T value)
Definition: SArray.h:86
void SetSize(const N newSize)
Definition: SArray.h:100
SArray & operator=(SArray &&pArray) noexcept
Definition: SArray.h:61
SArray & operator=(const SArray &pArray)
Definition: SArray.h:46
SArray()
Definition: SArray.h:22
SArray(const SArray &sArray)
Definition: SArray.h:32
SArray(const N size)
Definition: SArray.h:27
static Str< Char_8, UInt_64 > FromNum(const SInt_64 num)
Definition: Str.h:1399
Definition: Anchor.h:6