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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user