From a0246bf996f5f23628bfd42ef146a1cc137c7e09 Mon Sep 17 00:00:00 2001 From: Doyle T Date: Fri, 29 Jun 2018 18:07:54 +1000 Subject: [PATCH] Update for unix compliance again --- DqnFixedString.cpp | 2 +- DqnUnitTest.cpp | 17 ++++++------ dqn.h | 65 +++++++++++++++++++--------------------------- makefile | 4 +-- 4 files changed, 38 insertions(+), 50 deletions(-) diff --git a/DqnFixedString.cpp b/DqnFixedString.cpp index 0035795..c9b1f54 100644 --- a/DqnFixedString.cpp +++ b/DqnFixedString.cpp @@ -24,7 +24,7 @@ void DqnFixedString_Test() { DqnFixedString<512> str = DQN_SLICE("hello world"); DQN_ASSERT(str.Sprintf("hello %s", "sailor")); - DQN_ASSERT(DqnStr_Cmp(str.str, "hello sailor") == 0); + DQN_ASSERTM(DqnStr_Cmp(str.str, "hello sailor") == 0, "Result: %s", str.str); Log(Status::Ok, "Sprintf"); } diff --git a/DqnUnitTest.cpp b/DqnUnitTest.cpp index c01abf1..9397f71 100644 --- a/DqnUnitTest.cpp +++ b/DqnUnitTest.cpp @@ -136,7 +136,6 @@ void LogHeader(char const *funcName) } #include "DqnFixedString.cpp" -#include "DqnOS.cpp" void HandmadeMathVerifyMat4(DqnMat4 dqnMat, hmm_mat4 hmmMat) { @@ -1180,7 +1179,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) DqnArray array(memAPI); if (1) { - DQN_ASSERT(array.Reserve(1)); + array.Reserve(1); DQN_ASSERT(array.max >= 1); DQN_ASSERT(array.count == 0); @@ -1313,7 +1312,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) if (1) { - DQN_ASSERT(array.Reserve(1)); + array.Reserve(1); DQN_ASSERT(array.max >= 1); DQN_ASSERT(array.count == 0); Log(Status::Ok, "Empty array"); @@ -1327,7 +1326,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) DqnV2 c = DqnV2(5, 6); DqnV2 d = DqnV2(7, 8); - DQN_ASSERT(array.Reserve(16)); + array.Reserve(16); DQN_ASSERT(array.max >= 16); DQN_ASSERT(array.count == 0); @@ -1376,7 +1375,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) DqnV2 c = DqnV2(5, 6); DqnV2 d = DqnV2(7, 8); - DQN_ASSERT(array.Reserve(16)); + array.Reserve(16); DQN_ASSERT(array.Push(a)); DQN_ASSERT(array.Push(b)); @@ -1605,7 +1604,7 @@ void DqnArray_Test() if (1) { DqnArray array = {}; - DQN_ASSERT(array.Reserve(1)); + array.Reserve(1); DqnArray_TestRealDataInternal(&array); } @@ -1617,7 +1616,7 @@ void DqnArray_Test() { auto memGuard0 = stack.TempRegionGuard(); DqnArray array(&stack.myHeadAPI); - DQN_ASSERT(array.Reserve(1)); + array.Reserve(1); DqnArray_TestRealDataInternal(&array); } @@ -1626,7 +1625,7 @@ void DqnArray_Test() { auto memGuard0 = stack.TempRegionGuard(); DqnArray array(&stack.myHeadAPI); - DQN_ASSERT(array.Reserve(128)); + array.Reserve(128); stack.Push(1024); DqnArray_TestRealDataInternal(&array); } @@ -2898,7 +2897,7 @@ int main(void) DqnFixedString_Test(); #ifdef DQN_PLATFORM_HEADER - DqnOS_Test(); + // DqnOS_Test(); DqnFile_Test(); DqnTimer_Test(); DqnJobQueue_Test(); diff --git a/dqn.h b/dqn.h index ee6b6bc..4d3e196 100644 --- a/dqn.h +++ b/dqn.h @@ -1147,9 +1147,9 @@ struct DqnArray void Free () { if (data) { memAPI->Free(data); } *this = {}; } T *Front () { DQN_ASSERT(count > 0); return data + 0; } T *Back () { DQN_ASSERT(count > 0); return data + (count - 1); } - bool Resize (isize newCount) { if (newCount > max) Reserve(GrowCapacity_(newCount)); count = newCount; } - bool Resize (isize newCount, T const *v) { if (newCount > max) Reserve(GrowCapacity_(newCount)); if (newCount > count) for (isize n = count; n < newCount; n++) data[n] = *v; count = newCount; } - bool Reserve (isize newMax); + void Resize (isize newCount) { if (newCount > max) Reserve(GrowCapacity_(newCount)); count = newCount; } + void Resize (isize newCount, T const *v) { if (newCount > max) Reserve(GrowCapacity_(newCount)); if (newCount > count) for (isize n = count; n < newCount; n++) data[n] = *v; count = newCount; } + void Reserve (isize newMax); T *Push (T const &v) { return Insert(count, &v, 1); } T *Push (T const *v, isize numItems = 1) { return Insert(count, v, numItems); } void Pop () { if (count > 0) count--; } @@ -1174,10 +1174,7 @@ template T *DqnArray::Insert(isize index, T const *v, isize numIt isize const off = (data + index) - data; isize const newCount = count + numItems; - if (newCount >= max && !Reserve(GrowCapacity_(newCount))) - { - return nullptr; - } + if (newCount >= max) Reserve(GrowCapacity_(newCount)); count = newCount; T *start = data + off; @@ -1198,24 +1195,27 @@ template void DqnArray::EraseStable(isize index) count--; } -template bool DqnArray::Reserve(isize newMax) +template void DqnArray::Reserve(isize newMax) { - if (newMax <= max) return true; - + // TODO(doyle): Super hard asserts + if (newMax <= max) return; if (data) { T *newData = (T *)memAPI->Realloc(data, max * sizeof(T), newMax * sizeof(T)); + DQN_ASSERT(newData); if (newData) { data = newData; max = newMax; } - return newData; + } + else + { + data = (T *)memAPI->Alloc(newMax * sizeof(T)); + max = newMax; + DQN_ASSERT(data); } - data = (T *)memAPI->Alloc(newMax * sizeof(T)); - max = newMax; - return data; } #if 0 @@ -3622,7 +3622,7 @@ void DqnAllocatorMetadata::Init(bool boundsGuard) this->boundsGuardSize = sizeof(HEAD_GUARD_VALUE); LOCAL_PERSIST DqnMemAPI heap = DqnMemAPI::HeapAllocator(); this->allocations.memAPI = &heap; - DQN_ASSERT(this->allocations.Reserve(128)); + this->allocations.Reserve(128); } else { @@ -8057,13 +8057,8 @@ DQN_FILE__LIST_DIR(DqnFile__PlatformListDir) #endif // DQN__WIN32_PLATFORM #ifdef DQN__UNIX_PLATFORM -FILE_SCOPE bool DqnFile__UnixGetFileSizeWithStat(FILE *file, char const *path, usize *size) +FILE_SCOPE bool DqnFile__UnixGetFileSize(char const *path, usize *size) { - if (!file) - { - return false; - } - struct stat fileStat = {}; if (stat(path, &fileStat)) { @@ -8077,6 +8072,12 @@ FILE_SCOPE bool DqnFile__UnixGetFileSizeWithStat(FILE *file, char const *path, u // But there can also be zero-byte files, we can't be sure. So manual check by counting bytes if (*size == 0) { + FILE *file = fopen(path, "r"); + if (!file) + { + return false; + } + u64 fileSizeInBytes = 0; char c = fgetc(file); @@ -8142,16 +8143,15 @@ DqnFile__UnixOpen(char const *path, DqnFile *file, u32 flags, DqnFile::Action ac // TODO(doyle): Use open syscall // TODO(doyle): Query errno - file->handle = reinterpret_cast(fopen(path, mode)); - if (!DqnFile__UnixGetFileSize(reinterpret_cast(file->handle), path, &file->size)) + if (!DqnFile__UnixGetFileSize(path, &file->size)) { // TODO(doyle): Logging - fclose(handle); return false; } + file->handle = reinterpret_cast(fopen(path, mode)); file->flags = flags; - return true; + return file->handle; } DQN_FILE__LIST_DIR(DqnFile__PlatformListDir) @@ -8210,7 +8210,7 @@ DQN_FILE__LIST_DIR(DqnFile__PlatformListDir) *numFiles = currNumFiles; while (dirFile) { - DqnStr_Copy(list[listIndex++], dirFile->d_name, DQN_ARRAY_COUNT(dirFile->d_name)); + DqnMem_Copy(list[listIndex++], dirFile->d_name, DQN_ARRAY_COUNT(dirFile->d_name)); dirFile = readdir(dirHandle); } closedir(dirHandle); @@ -8470,18 +8470,7 @@ bool DqnFile::GetFileSize(char const *path, usize *size) #elif defined(DQN__UNIX_PLATFORM) // TODO(doyle): Error logging - if (!DqnFile__UnixGetFileSizeWithStat(path, size)) return false; - - // NOTE: 0 size can occur in some instances where files are generated on demand, - // i.e. /proc/cpuinfo - if (*size == 0) - { - // If stat fails, then do a manual byte count - FILE *handle = fopen(path, "r"); - *size = DqnFile__UnixGetFileSizeManual(handle, false); - fclose(handle); - } - + if (!DqnFile__UnixGetFileSize(path, size)) return false; return true; #endif } diff --git a/makefile b/makefile index c92ba35..5fa4116 100644 --- a/makefile +++ b/makefile @@ -1,3 +1,3 @@ -all: dqn_unit_test.cpp +all: DqnUnitTest.cpp mkdir -p bin - g++ -std=c++14 -o bin/dqn_unit_test dqn_unit_test.cpp -lm -Wall -pthread -ggdb + g++ -std=c++14 -o bin/DqnUnitTest DqnUnitTest.cpp -lm -Wall -pthread -ggdb