Updated GUI library
This commit is contained in:
77
code/lib/array.h
Normal file
77
code/lib/array.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifndef _PIUMA_LIB_ARRAY_H_
|
||||
#define _PIUMA_LIB_ARRAY_H_
|
||||
|
||||
#include "types.h"
|
||||
#include "math.h"
|
||||
#include <assert.h>
|
||||
|
||||
template<typename T>
|
||||
struct Array
|
||||
{
|
||||
T *data = NULL;
|
||||
u64 count = 0;
|
||||
u64 capacity = 0;
|
||||
|
||||
inline void reserve(u64 new_capacity = 4)
|
||||
{
|
||||
new_capacity = maximum(new_capacity, count);
|
||||
if(new_capacity > capacity)
|
||||
{
|
||||
data = (T*)realloc(data, sizeof(T) * new_capacity);
|
||||
capacity = new_capacity;
|
||||
}
|
||||
}
|
||||
|
||||
inline void clear()
|
||||
{
|
||||
count = 0;
|
||||
}
|
||||
|
||||
inline void reset()
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
count = 0;
|
||||
capacity = 0;
|
||||
}
|
||||
|
||||
inline void push(T element)
|
||||
{
|
||||
if(count + 1 >= capacity)
|
||||
reserve(maximum(count + 1, capacity * 2));
|
||||
data[count++] = element;
|
||||
}
|
||||
|
||||
inline void push_unchecked(T element)
|
||||
{
|
||||
data[count++] = element;
|
||||
}
|
||||
|
||||
inline bool pop(T *element = NULL)
|
||||
{
|
||||
if(count <= 0)
|
||||
return false;
|
||||
count--;
|
||||
if(element) *element = data[count];
|
||||
return true;
|
||||
}
|
||||
|
||||
inline T pop_unchecked()
|
||||
{
|
||||
return data[--count];
|
||||
}
|
||||
|
||||
inline T &operator[](u64 index)
|
||||
{
|
||||
return data[index];
|
||||
}
|
||||
|
||||
inline T &last()
|
||||
{
|
||||
return data[count - 1];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user