Faro Engine 0.0.0.b519570 (main)
Loading...
Searching...
No Matches
Array.hpp
Go to the documentation of this file.
1#pragma once
2#include "../Primitives.hpp"
3#include <vector>
4#include <algorithm>
5#include <functional>
6
7namespace Faro
8{
9 template<class T>
10 class Array
11 {
12 typedef typename std::vector<T>::iterator iterator;
13 typedef typename std::vector<T>::const_iterator const_iterator;
14
15 public:
17
18 Array(std::initializer_list<T> list)
19 {
20 data = list;
21 }
22
23 Array(const Array<T>& copy) { data = copy.data; }
24 Array(Array<T>& copy) { data = copy.data; }
25
26 void Add(const T& object) { data.push_back(object); }
27 void Add(T&& object) { data.push_back(object); }
28
29 void Add(Array<T>& otherArray) { for (T& value : otherArray) Add(value); }
30
31 void Insert(const T& object, uint32 index) { data.insert(object, index); }
32 void Insert(T&& object, uint32 index) { data.insert(object, index); }
33
34 void RemoveAt(uint32 index)
35 {
36 data.erase(begin() + index);
37 }
38
39 void RemoveAt(uint32 index, uint32 amount)
40 {
41 data.erase(begin() + index, amount);
42 }
43
44 void Remove(T object)
45 {
46 int32 id = Find(object);
47 if (id != -1) data.erase(data.begin() + id);
48 }
49
50 void MoveTo(T object, uint32 index)
51 {
52 int32 current_position = Find(object);
53 if (current_position == -1 || current_position == index) { return; }
54
55 if(current_position - (int32)index > 0)
56 {
57 std::rotate(begin() + index, begin() + current_position, begin() + current_position + 1);
58 }
59 else
60 {
61 std::rotate(begin() + current_position, begin() + current_position + 1, begin() + index + 1);
62 }
63 }
64
65 bool Contains(T object)
66 {
67 return std::find(data.begin(), data.end(), object) != data.end();
68 }
69
70 int32 Find(T object)
71 {
72 iterator pos = std::find(data.begin(), data.end(), object);
73 if (pos == data.end()) return -1;
74 return pos - data.begin();
75 }
76
77 uint32 Size() { return data.size(); }
78
79 void Resize(uint16 size) { data.resize(size); }
80
81 bool Empty() { return Size() == 0; }
82
83 bool IsValidIndex(int32 index)
84 {
85 return index >= 0 && index < Size() - 1;
86 }
87
88 void Invert()
89 {
90 std::reverse(begin(), end());
91 }
92
94 {
95 Array<T> copy(data);
96 copy.Invert();
97 return copy;
98 }
99
100 template<class NewType>
102 {
103 Array<NewType> copy;
104 for(T& value : data)
105 {
106 copy.Add((NewType)value);
107 }
108 return copy;
109 }
110
111 void Clear()
112 {
113 data.clear();
114 }
115
116 void Sort(std::function<bool(T& , T&)> function)
117 {
118 std::sort(data.begin(), data.end(), function);
119 }
120
121 const T& operator [](int index) const
122 {
123 return data[index];
124 }
125
126 T& operator [](int index)
127 {
128 return data[index];
129 }
130
131 T* Data()
132 {
133 return &data[0];
134 }
135
136 T& First()
137 {
138 return data.front();
139 }
140
141 T& Last()
142 {
143 return data.back();
144 }
145
146 // for loop iteration
147 iterator begin() { return data.begin(); }
148 iterator end() { return data.end(); }
149 const_iterator begin() const { return data.cbegin(); }
150 const_iterator end() const { return data.cend(); }
151 const_iterator cbegin() const { return data.cbegin(); }
152 const_iterator cend() const { return data.cend(); }
153
154 private:
155 std::vector<T> data;
156 };
157
158}
Definition Array.hpp:11
iterator end()
Definition Array.hpp:148
T * Data()
Definition Array.hpp:131
void Insert(T &&object, uint32 index)
Definition Array.hpp:32
void Insert(const T &object, uint32 index)
Definition Array.hpp:31
const_iterator end() const
Definition Array.hpp:150
void MoveTo(T object, uint32 index)
Definition Array.hpp:50
Array()
Definition Array.hpp:16
bool Contains(T object)
Definition Array.hpp:65
T & First()
Definition Array.hpp:136
iterator begin()
Definition Array.hpp:147
Array(Array< T > &copy)
Definition Array.hpp:24
void Add(T &&object)
Definition Array.hpp:27
Array< T > Reverse()
Definition Array.hpp:93
T & Last()
Definition Array.hpp:141
void Invert()
Definition Array.hpp:88
void RemoveAt(uint32 index)
Definition Array.hpp:34
void Remove(T object)
Definition Array.hpp:44
void Sort(std::function< bool(T &, T &)> function)
Definition Array.hpp:116
Array(std::initializer_list< T > list)
Definition Array.hpp:18
bool Empty()
Definition Array.hpp:81
void Add(const T &object)
Definition Array.hpp:26
void Clear()
Definition Array.hpp:111
Array(const Array< T > &copy)
Definition Array.hpp:23
const_iterator cend() const
Definition Array.hpp:152
Array< NewType > Cast()
Definition Array.hpp:101
uint32 Size()
Definition Array.hpp:77
void Resize(uint16 size)
Definition Array.hpp:79
const_iterator cbegin() const
Definition Array.hpp:151
const T & operator[](int index) const
Definition Array.hpp:121
void Add(Array< T > &otherArray)
Definition Array.hpp:29
int32 Find(T object)
Definition Array.hpp:70
void RemoveAt(uint32 index, uint32 amount)
Definition Array.hpp:39
const_iterator begin() const
Definition Array.hpp:149
bool IsValidIndex(int32 index)
Definition Array.hpp:83
Definition Array.hpp:8
int32_t int32
Definition Primitives.hpp:13
uint16_t uint16
Definition Primitives.hpp:9
uint32_t uint32
Definition Primitives.hpp:12