Disable sso strings because problems.
This commit is contained in:
		
							parent
							
								
									398ca0bc96
								
							
						
					
					
						commit
						2d7b942010
					
				
							
								
								
									
										68
									
								
								dqn.h
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								dqn.h
									
									
									
									
									
								
							| @ -435,16 +435,18 @@ struct DqnMemStack | |||||||
| 
 | 
 | ||||||
| class DqnString | class DqnString | ||||||
| { | { | ||||||
| 	char       sso[128]; |  | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| 	DqnMemAPI  memAPI; | 	DqnMemAPI  memAPI; | ||||||
| 	char      *str; |  | ||||||
| 	i32        len;              // Len of the string in bytes not including null-terminator
 | 	i32        len;              // Len of the string in bytes not including null-terminator
 | ||||||
| 	i32        max;              // The maximum capacity not including space for null-terminator.
 | 	i32        max;              // The maximum capacity not including space for null-terminator.
 | ||||||
|  | 	char      *str; | ||||||
| 
 | 
 | ||||||
| 	// Initialisation API
 | 	// Initialisation API
 | ||||||
| 	// =============================================================================================
 | 	// =============================================================================================
 | ||||||
|  | 	void Init              (DqnMemAPI api = DqnMemAPI::HeapAllocator()); | ||||||
|  | 	void Init              (DqnMemStack *const stack); | ||||||
|  | 
 | ||||||
| 	// return: False if (size < 0) or (memAPI allocation failed).
 | 	// return: False if (size < 0) or (memAPI allocation failed).
 | ||||||
| 	bool InitSize          (i32 size, DqnMemStack *const stack); | 	bool InitSize          (i32 size, DqnMemStack *const stack); | ||||||
| 	bool InitSize          (i32 size, DqnMemAPI api = DqnMemAPI::HeapAllocator()); | 	bool InitSize          (i32 size, DqnMemAPI api = DqnMemAPI::HeapAllocator()); | ||||||
| @ -486,11 +488,6 @@ struct DqnSmartString : public DqnString | |||||||
| 	~DqnSmartString() { this->Free(); } | 	~DqnSmartString() { this->Free(); } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // TODO(doyle): Remove this? I only want it to return the string if we can guarantee initialisation.
 |  | ||||||
| // returns: Initialised string,
 |  | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(i32 const len, DqnMemAPI    const api = DqnMemAPI::HeapAllocator()); |  | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(i32 const len, DqnMemStack *const stack); |  | ||||||
| 
 |  | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemAPI    const api = DqnMemAPI::HeapAllocator()); | DQN_FILE_SCOPE DqnString DqnString_(DqnMemAPI    const api = DqnMemAPI::HeapAllocator()); | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemStack *const stack); | DQN_FILE_SCOPE DqnString DqnString_(DqnMemStack *const stack); | ||||||
| 
 | 
 | ||||||
| @ -5289,32 +5286,43 @@ DQN_FILE_SCOPE i32 Dqn_I32ToWstr(i32 value, wchar_t *buf, i32 bufSize) | |||||||
| 
 | 
 | ||||||
| // #DqnString Impleemntation
 | // #DqnString Impleemntation
 | ||||||
| // =================================================================================================
 | // =================================================================================================
 | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(i32 const len, DqnMemAPI api) | // TODO(doyle): SSO requires handling assign/copy op when copying strings, we need to reassign the
 | ||||||
| { | //              str to point to the new copy's SSO buffer which sort of breaks the way I want to use
 | ||||||
| 	DqnString result; | //              strings. So disabled for now.
 | ||||||
| 	bool init = result.InitSize(len, api); | // #define DQN_STRING_ENABLE_SSO
 | ||||||
| 	DQN_ASSERT_HARD(init); |  | ||||||
| 	return result; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(i32 const len, DqnMemStack *const stack) |  | ||||||
| { |  | ||||||
| 	DqnString result = DqnString_(len, DqnMemAPI::StackAllocator(stack)); |  | ||||||
| 	return result; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemAPI api) | DQN_FILE_SCOPE DqnString DqnString_(DqnMemAPI api) | ||||||
| { | { | ||||||
| 	DqnString result = DqnString_(0, api); | 	DqnString result; | ||||||
|  | 	result.Init(api); | ||||||
|  | 
 | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemStack *const stack) | DQN_FILE_SCOPE DqnString DqnString_(DqnMemStack *const stack) | ||||||
| { | { | ||||||
| 	DqnString result = DqnString_(0, stack); | 	DqnString result; | ||||||
|  | 	result.Init(stack); | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void DqnString::Init(DqnMemAPI api) | ||||||
|  | { | ||||||
|  | 	this->memAPI = api; | ||||||
|  | #if defined(DQN_STRING_ENABLE_SSO) | ||||||
|  | 	this->sso[0] = 0; | ||||||
|  | #endif | ||||||
|  | 	this->str    = nullptr; | ||||||
|  | 	this->len    = 0; | ||||||
|  | 	this->max    = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void DqnString::Init(DqnMemStack *const stack) | ||||||
|  | { | ||||||
|  | 	DqnMemAPI api = DqnMemAPI::StackAllocator(stack); | ||||||
|  | 	this->Init(api); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool DqnString::InitSize(const i32 size, DqnMemStack *const stack) | bool DqnString::InitSize(const i32 size, DqnMemStack *const stack) | ||||||
| { | { | ||||||
| 	bool result = this->InitSize(size, DqnMemAPI::StackAllocator(stack)); | 	bool result = this->InitSize(size, DqnMemAPI::StackAllocator(stack)); | ||||||
| @ -5325,11 +5333,13 @@ bool DqnString::InitSize(i32 size, DqnMemAPI api) | |||||||
| { | { | ||||||
| 	// NOTE: CHAR_COUNT is (ARRAY_COUNT - 1) to leave the last spot as the implicit null-terminator.
 | 	// NOTE: CHAR_COUNT is (ARRAY_COUNT - 1) to leave the last spot as the implicit null-terminator.
 | ||||||
| 	DQN_ASSERT(size >= 0); | 	DQN_ASSERT(size >= 0); | ||||||
|  | #if defined(DQN_STRING_ENABLE_SSO) | ||||||
| 	if (size < DQN_CHAR_COUNT(this->sso)) | 	if (size < DQN_CHAR_COUNT(this->sso)) | ||||||
| 	{ | 	{ | ||||||
| 		this->str = &(this->sso[0]); | 		this->str = &(this->sso[0]); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
|  | #endif | ||||||
| 	{ | 	{ | ||||||
| 		size_t allocSize = sizeof(*(this->str)) * (size + 1); | 		size_t allocSize = sizeof(*(this->str)) * (size + 1); | ||||||
| 		this->str        = (char *)api.Alloc(allocSize, /*zeroClear*/false); | 		this->str        = (char *)api.Alloc(allocSize, /*zeroClear*/false); | ||||||
| @ -5452,10 +5462,12 @@ bool DqnString::Expand(const i32 newMax) | |||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | #if defined(DQN_STRING_ENABLE_SSO) | ||||||
| 	if (newMax < DQN_CHAR_COUNT(this->sso)) | 	if (newMax < DQN_CHAR_COUNT(this->sso)) | ||||||
| 	{ | 	{ | ||||||
| 		DQN_ASSERT(this->memAPI.IsValid()); | 		DQN_ASSERT(this->memAPI.IsValid()); | ||||||
| 		DQN_ASSERT(this->sso == this->str); | 		DQN_ASSERT(this->sso == this->str || this->str == nullptr); | ||||||
|  | 		this->str = this->sso; | ||||||
| 		this->max = newMax; | 		this->max = newMax; | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| @ -5466,6 +5478,7 @@ bool DqnString::Expand(const i32 newMax) | |||||||
| 		DQN_ASSERT(newMax >= DQN_CHAR_COUNT(this->sso)); | 		DQN_ASSERT(newMax >= DQN_CHAR_COUNT(this->sso)); | ||||||
| 		this->str = nullptr; | 		this->str = nullptr; | ||||||
| 	} | 	} | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	size_t allocSize = sizeof(*(this->str)) * (newMax + 1); | 	size_t allocSize = sizeof(*(this->str)) * (newMax + 1); | ||||||
| 	char *result     = nullptr; | 	char *result     = nullptr; | ||||||
| @ -5475,19 +5488,23 @@ bool DqnString::Expand(const i32 newMax) | |||||||
| 
 | 
 | ||||||
| 	if (result) | 	if (result) | ||||||
| 	{ | 	{ | ||||||
|  | #if defined(DQN_STRING_ENABLE_SSO) | ||||||
| 		if (usingSSO) | 		if (usingSSO) | ||||||
| 			DqnMem_Copy(result, this->sso, this->max); | 			DqnMem_Copy(result, this->sso, this->max); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 		this->str = (char *)result; | 		this->str = (char *)result; | ||||||
| 		this->max = newMax; | 		this->max = newMax; | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
|  | #if defined(DQN_STRING_ENABLE_SSO) | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		// Restore the pointer to the SSO to return to the original state from before this call.
 | 		// Restore the pointer to the SSO to return to the original state from before this call.
 | ||||||
| 		if (usingSSO) | 		if (usingSSO) | ||||||
| 			this->str = this->sso; | 			this->str = this->sso; | ||||||
| 	} | 	} | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
| @ -5587,12 +5604,15 @@ void DqnString::Free() | |||||||
| { | { | ||||||
| 	if (this->str) | 	if (this->str) | ||||||
| 	{ | 	{ | ||||||
|  | #if defined(DQN_STRING_ENABLE_SSO) | ||||||
| 		if (this->str == this->sso) | 		if (this->str == this->sso) | ||||||
| 		{ | 		{ | ||||||
| 			this->sso[0] = '\0'; | 			this->sso[0] = '\0'; | ||||||
| 			this->str    = nullptr; | 			this->str    = nullptr; | ||||||
| 		} | 		} | ||||||
| 		else if (this->memAPI.IsValid()) | 		else | ||||||
|  | #endif | ||||||
|  | 		if (this->memAPI.IsValid()) | ||||||
| 		{ | 		{ | ||||||
| 			this->memAPI.Free(this->str, this->len); | 			this->memAPI.Free(this->str, this->len); | ||||||
| 			this->str = nullptr; | 			this->str = nullptr; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user