Add cpp members to DqnArray
This commit is contained in:
parent
3d61d66388
commit
f9de41b6c0
82
dqn.h
82
dqn.h
@ -429,36 +429,24 @@ struct DqnArray
|
|||||||
u64 count;
|
u64 count;
|
||||||
u64 capacity;
|
u64 capacity;
|
||||||
T *data;
|
T *data;
|
||||||
|
|
||||||
|
void Init (const size_t capacity, DqnMemAPI memAPI = DqnMemAPI_DefaultUseCalloc());
|
||||||
|
bool Free ();
|
||||||
|
bool Grow ();
|
||||||
|
T *Push (const T item);
|
||||||
|
void Pop ();
|
||||||
|
T *Get (u64 index);
|
||||||
|
bool Clear ();
|
||||||
|
bool Remove (u64 index);
|
||||||
|
bool RemoveStable(u64 index);
|
||||||
};
|
};
|
||||||
|
|
||||||
FILE_SCOPE const char *const DQN_MEM_API_CALLBACK_RESULT_TYPE_INCORRECT =
|
FILE_SCOPE const char *const DQN_MEM_API_CALLBACK_RESULT_TYPE_INCORRECT =
|
||||||
"DqnMemAPICallbackResult type is incorrect";
|
"DqnMemAPICallbackResult type is incorrect";
|
||||||
|
|
||||||
// Implementation taken from Milton, developed by Serge at
|
|
||||||
// https://github.com/serge-rgb/milton#license
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool DqnArray_Free(DqnArray<T> *array)
|
bool DqnArray_Init(DqnArray<T> *const array, const size_t capacity,
|
||||||
{
|
const DqnMemAPI memAPI = DqnMemAPI_DefaultUseCalloc())
|
||||||
if (array && array->data)
|
|
||||||
{
|
|
||||||
// TODO(doyle): Right now we assume free always works, and it probably should?
|
|
||||||
size_t sizeToFree = (size_t)array->capacity * sizeof(T);
|
|
||||||
DqnMemAPICallbackInfo info = DqnMemAPIInternal_CallbackInfoAskFree(
|
|
||||||
array->memAPI, array->data, sizeToFree);
|
|
||||||
array->memAPI.callback(info, NULL);
|
|
||||||
array->data = NULL;
|
|
||||||
|
|
||||||
array->count = 0;
|
|
||||||
array->capacity = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
bool DqnArray_Init(DqnArray<T> *array, size_t capacity,
|
|
||||||
DqnMemAPI memAPI = DqnMemAPI_DefaultUseCalloc())
|
|
||||||
{
|
{
|
||||||
if (!array) return false;
|
if (!array) return false;
|
||||||
if (array->data) DqnArray_Free(array);
|
if (array->data) DqnArray_Free(array);
|
||||||
@ -482,8 +470,30 @@ bool DqnArray_Init(DqnArray<T> *array, size_t capacity,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Implementation taken from Milton, developed by Serge at
|
||||||
|
// https://github.com/serge-rgb/milton#license
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool DqnArray_Grow(DqnArray<T> *array)
|
bool DqnArray_Free(DqnArray<T> *const array)
|
||||||
|
{
|
||||||
|
if (array && array->data)
|
||||||
|
{
|
||||||
|
// TODO(doyle): Right now we assume free always works, and it probably should?
|
||||||
|
size_t sizeToFree = (size_t)array->capacity * sizeof(T);
|
||||||
|
DqnMemAPICallbackInfo info = DqnMemAPIInternal_CallbackInfoAskFree(
|
||||||
|
array->memAPI, array->data, sizeToFree);
|
||||||
|
array->memAPI.callback(info, NULL);
|
||||||
|
array->data = NULL;
|
||||||
|
|
||||||
|
array->count = 0;
|
||||||
|
array->capacity = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool DqnArray_Grow(DqnArray<T> *const array)
|
||||||
{
|
{
|
||||||
if (!array || !array->data) return false;
|
if (!array || !array->data) return false;
|
||||||
|
|
||||||
@ -518,7 +528,7 @@ bool DqnArray_Grow(DqnArray<T> *array)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T *DqnArray_Push(DqnArray<T> *array, T item)
|
T *DqnArray_Push(DqnArray<T> *const array, const T item)
|
||||||
{
|
{
|
||||||
if (!array) return NULL;
|
if (!array) return NULL;
|
||||||
|
|
||||||
@ -544,7 +554,7 @@ void DqnArray_Pop(DqnArray<T> *array)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T *DqnArray_Get(DqnArray<T> *array, u64 index)
|
T *DqnArray_Get(DqnArray<T> *const array, const u64 index)
|
||||||
{
|
{
|
||||||
T *result = NULL;
|
T *result = NULL;
|
||||||
if (index >= 0 && index <= array->count) result = &array->data[index];
|
if (index >= 0 && index <= array->count) result = &array->data[index];
|
||||||
@ -552,7 +562,7 @@ T *DqnArray_Get(DqnArray<T> *array, u64 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool DqnArray_Clear(DqnArray<T> *array)
|
bool DqnArray_Clear(DqnArray<T> *const array)
|
||||||
{
|
{
|
||||||
if (array)
|
if (array)
|
||||||
{
|
{
|
||||||
@ -564,7 +574,7 @@ bool DqnArray_Clear(DqnArray<T> *array)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool DqnArray_Remove(DqnArray<T> *array, u64 index)
|
bool DqnArray_Remove(DqnArray<T> *const array, const u64 index)
|
||||||
{
|
{
|
||||||
if (!array) return false;
|
if (!array) return false;
|
||||||
if (index >= array->count) return false;
|
if (index >= array->count) return false;
|
||||||
@ -583,7 +593,7 @@ bool DqnArray_Remove(DqnArray<T> *array, u64 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool DqnArray_RemoveStable(DqnArray<T> *array, u64 index)
|
bool DqnArray_RemoveStable(DqnArray<T> *const array, const u64 index)
|
||||||
{
|
{
|
||||||
if (!array) return false;
|
if (!array) return false;
|
||||||
if (index >= array->count) return false;
|
if (index >= array->count) return false;
|
||||||
@ -609,6 +619,17 @@ bool DqnArray_RemoveStable(DqnArray<T> *array, u64 index)
|
|||||||
array->count--;
|
array->count--;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T> void DqnArray<T>::Init (const size_t capacity, DqnMemAPI memAPI) { DqnArray_Init(this, capacity, memAPI); }
|
||||||
|
template <typename T> bool DqnArray<T>::Free () { return DqnArray_Free(this); }
|
||||||
|
template <typename T> bool DqnArray<T>::Grow () { return DqnArray_Grow(this);}
|
||||||
|
template <typename T> T* DqnArray<T>::Push (const T item) { return DqnArray_Push(this, item); }
|
||||||
|
template <typename T> void DqnArray<T>::Pop () { DqnArray_Pop(this); }
|
||||||
|
template <typename T> T* DqnArray<T>::Get (const u64 index) { return DqnArray_Get(this, index); }
|
||||||
|
template <typename T> bool DqnArray<T>::Clear() { return DqnArray_Clear (this); }
|
||||||
|
template <typename T> bool DqnArray<T>::Remove (const u64 index) { return DqnArray_Remove(this, index); }
|
||||||
|
template <typename T> bool DqnArray<T>::RemoveStable(const u64 index) { return DqnArray_RemoveStable(this, u64 index); }
|
||||||
|
|
||||||
#endif // DQN_CPP_MODE
|
#endif // DQN_CPP_MODE
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -957,7 +978,6 @@ typedef struct DqnFile
|
|||||||
u32 permissionFlags;
|
u32 permissionFlags;
|
||||||
void *handle;
|
void *handle;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
} DqnFile;
|
} DqnFile;
|
||||||
|
|
||||||
// NOTE: W(ide) versions of functions only work on Win32, since Unix is UTF-8 compatible.
|
// NOTE: W(ide) versions of functions only work on Win32, since Unix is UTF-8 compatible.
|
||||||
|
Loading…
Reference in New Issue
Block a user