From 1ead32d84a166c25f59682d6bd37d5022ffcf9a2 Mon Sep 17 00:00:00 2001 From: Ilusha Date: Sat, 16 Mar 2024 12:07:49 +0300 Subject: [PATCH] tmp --- {Language => .wip/Language}/CMakeLists.txt | 0 .../Language}/private/Grammar.cpp | 0 .../Language}/private/LanguageCommon.cpp | 0 .../Language}/public/Automata.hpp | 0 .../Language}/public/ContextFreeAutomata.hpp | 0 .../Language}/public/ContextFreeCompiler.hpp | 0 .../Language}/public/Grammar.hpp | 0 .../Language}/public/LanguageCommon.hpp | 0 {Language => .wip/Language}/public/Parser.hpp | 0 .../Language}/public/RegularAutomata.hpp | 0 .../Language}/public/RegularCompiler.hpp | 0 .../Language}/public/SimpleParser.hpp | 0 {Language => .wip/Language}/tests/Test.hpp | 0 {Language => .wip/Language}/tests/Tests.cpp | 0 Allocators/private/HeapAllocatorGlobal.cpp | 26 ++++++-- Allocators/public/HeapAllocatorGlobal.hpp | 6 +- CMakeLists.txt | 4 +- Callstack/private/Callstack.cpp | 7 +- Callstack/public/Callstack.hpp | 2 + Connection/CMakeLists.txt | 8 +-- Connection/private/ConnectionCommon.cpp | 6 -- Connection/private/LocalConnection.cpp | 9 ++- Connection/public/ConnectionCommon.hpp | 5 +- Connection/public/LocalConnection.hpp | 10 +-- Connection/public/Network.hpp | 2 +- Connection/public/RemoteConnection.hpp | 3 +- Connection/tests/Test.cpp | 18 +----- Containers/public/Buffer2D.hpp | 13 ++-- DataAnalysis/CMakeLists.txt | 11 ++-- DataAnalysis/applications/NumRecApp.cpp | 9 --- DataAnalysis/applications/NumRecTraining.cpp | 61 +++++++----------- DataAnalysis/private/DataAnalysisCommon.cpp | 2 +- DataAnalysis/tests/Tests.cpp | 11 +++- Externals/CMakeLists.txt | 1 - Externals/asio | 2 +- Graphics/CMakeLists.txt | 11 ++-- Graphics/examples/Font.ttf | Bin 0 -> 42624 bytes Graphics/private/GraphicsCommon.cpp | 3 +- Graphics/private/bindings/Canvas.cpp | 4 +- Graphics/public/Graphics.hpp | 4 +- Graphics/public/GraphicsCommon.hpp | 3 +- LibraryViewer/CMakeLists.txt | 2 +- LibraryViewer/applications/Entry.cpp | 4 +- LibraryViewer/private/Library.cpp | 4 +- LibraryViewer/public/Library.hpp | 1 + Math/CMakeLists.txt | 9 ++- Math/private/MathCommon.cpp | 44 ------------- Math/private/Topology.cpp | 2 - Math/private/Trig.cpp | 1 - Math/public/ComplexNumbers.hpp | 2 +- Math/public/MathCommon.hpp | 16 +---- Math/public/Vec.hpp | 2 +- Math/tests/Tests.cpp | 13 +--- Modules/private/Utils.cpp | 2 +- Modules/public/Archiver.hpp | 27 ++++++++ Modules/public/Module.hpp | 1 + Modules/tests/Test.cpp | 2 +- Objects/CMakeLists.txt | 8 +-- Objects/private/core/module.cpp | 2 - RayTracer/CMakeLists.txt | 18 ++---- RayTracer/applications/Rayt.cpp | 16 ++--- RayTracer/applications/Rayt.hpp | 5 +- RayTracer/applications/SceneLoad.cpp | 8 +-- RayTracer/private/RayTracer.cpp | 8 +-- RayTracer/public/RayTracer.hpp | 2 +- RayTracer/tests/Test.cpp | 21 ++---- Strings/CMakeLists.txt | 6 +- Strings/private/Strings.cpp | 2 +- Strings/tests/Test.cpp | 2 +- Widgets/CMakeLists.txt | 8 +-- Widgets/private/WidgetConfig.cpp | 2 +- 71 files changed, 199 insertions(+), 282 deletions(-) rename {Language => .wip/Language}/CMakeLists.txt (100%) rename {Language => .wip/Language}/private/Grammar.cpp (100%) rename {Language => .wip/Language}/private/LanguageCommon.cpp (100%) rename {Language => .wip/Language}/public/Automata.hpp (100%) rename {Language => .wip/Language}/public/ContextFreeAutomata.hpp (100%) rename {Language => .wip/Language}/public/ContextFreeCompiler.hpp (100%) rename {Language => .wip/Language}/public/Grammar.hpp (100%) rename {Language => .wip/Language}/public/LanguageCommon.hpp (100%) rename {Language => .wip/Language}/public/Parser.hpp (100%) rename {Language => .wip/Language}/public/RegularAutomata.hpp (100%) rename {Language => .wip/Language}/public/RegularCompiler.hpp (100%) rename {Language => .wip/Language}/public/SimpleParser.hpp (100%) rename {Language => .wip/Language}/tests/Test.hpp (100%) rename {Language => .wip/Language}/tests/Tests.cpp (100%) delete mode 100644 Connection/private/ConnectionCommon.cpp create mode 100644 Graphics/examples/Font.ttf delete mode 100644 Math/private/MathCommon.cpp diff --git a/Language/CMakeLists.txt b/.wip/Language/CMakeLists.txt similarity index 100% rename from Language/CMakeLists.txt rename to .wip/Language/CMakeLists.txt diff --git a/Language/private/Grammar.cpp b/.wip/Language/private/Grammar.cpp similarity index 100% rename from Language/private/Grammar.cpp rename to .wip/Language/private/Grammar.cpp diff --git a/Language/private/LanguageCommon.cpp b/.wip/Language/private/LanguageCommon.cpp similarity index 100% rename from Language/private/LanguageCommon.cpp rename to .wip/Language/private/LanguageCommon.cpp diff --git a/Language/public/Automata.hpp b/.wip/Language/public/Automata.hpp similarity index 100% rename from Language/public/Automata.hpp rename to .wip/Language/public/Automata.hpp diff --git a/Language/public/ContextFreeAutomata.hpp b/.wip/Language/public/ContextFreeAutomata.hpp similarity index 100% rename from Language/public/ContextFreeAutomata.hpp rename to .wip/Language/public/ContextFreeAutomata.hpp diff --git a/Language/public/ContextFreeCompiler.hpp b/.wip/Language/public/ContextFreeCompiler.hpp similarity index 100% rename from Language/public/ContextFreeCompiler.hpp rename to .wip/Language/public/ContextFreeCompiler.hpp diff --git a/Language/public/Grammar.hpp b/.wip/Language/public/Grammar.hpp similarity index 100% rename from Language/public/Grammar.hpp rename to .wip/Language/public/Grammar.hpp diff --git a/Language/public/LanguageCommon.hpp b/.wip/Language/public/LanguageCommon.hpp similarity index 100% rename from Language/public/LanguageCommon.hpp rename to .wip/Language/public/LanguageCommon.hpp diff --git a/Language/public/Parser.hpp b/.wip/Language/public/Parser.hpp similarity index 100% rename from Language/public/Parser.hpp rename to .wip/Language/public/Parser.hpp diff --git a/Language/public/RegularAutomata.hpp b/.wip/Language/public/RegularAutomata.hpp similarity index 100% rename from Language/public/RegularAutomata.hpp rename to .wip/Language/public/RegularAutomata.hpp diff --git a/Language/public/RegularCompiler.hpp b/.wip/Language/public/RegularCompiler.hpp similarity index 100% rename from Language/public/RegularCompiler.hpp rename to .wip/Language/public/RegularCompiler.hpp diff --git a/Language/public/SimpleParser.hpp b/.wip/Language/public/SimpleParser.hpp similarity index 100% rename from Language/public/SimpleParser.hpp rename to .wip/Language/public/SimpleParser.hpp diff --git a/Language/tests/Test.hpp b/.wip/Language/tests/Test.hpp similarity index 100% rename from Language/tests/Test.hpp rename to .wip/Language/tests/Test.hpp diff --git a/Language/tests/Tests.cpp b/.wip/Language/tests/Tests.cpp similarity index 100% rename from Language/tests/Tests.cpp rename to .wip/Language/tests/Tests.cpp diff --git a/Allocators/private/HeapAllocatorGlobal.cpp b/Allocators/private/HeapAllocatorGlobal.cpp index 98b1c53..c46df45 100644 --- a/Allocators/private/HeapAllocatorGlobal.cpp +++ b/Allocators/private/HeapAllocatorGlobal.cpp @@ -32,6 +32,7 @@ tp::MemHead* tp::HeapAllocGlobal::mEntry = nullptr; tp::ualni tp::HeapAllocGlobal::mNumAllocations = 0; std::mutex tp::HeapAllocGlobal::mMutex; bool tp::HeapAllocGlobal::mIgnore = true; +bool tp::HeapAllocGlobal::mEnableCallstack = false; #ifdef MEM_STACK_TRACE tp::CallStackCapture tp::HeapAllocGlobal::mCallstack; @@ -109,7 +110,7 @@ ALLOCATE: // 3) Trace the stack #ifdef MEM_STACK_TRACE // check if somewhat decides to call new within static variable initialization - head->mCallStack = mCallstack.getSnapshot(); + head->mCallStack = (mEnableCallstack && mCallstack.initialized) ? mCallstack.getSnapshot() : nullptr; #endif mMutex.unlock(); @@ -144,20 +145,19 @@ void HeapAllocGlobal::deallocate(void* aPtr) { if (head == mEntry) { mEntry = head->mPrev; } - mMutex.unlock(); - + if (!head->mIgnored) { // 3) Check the wrap if (memCompareVal(wrap_top, WRAP_SIZE, WRAP_VAL)) { #ifdef MEM_STACK_TRACE - mCallstack.printSnapshot(head->mCallStack); + if (head->mCallStack) mCallstack.printSnapshot(head->mCallStack); #endif ASSERT(!"Allocated Block Wrap Corrupted!") } if (memCompareVal(wrap_bottom, WRAP_SIZE, WRAP_VAL)) { #ifdef MEM_STACK_TRACE - mCallstack.printSnapshot(head->mCallStack); + if (head->mCallStack) mCallstack.printSnapshot(head->mCallStack); #endif ASSERT(!"Allocated Block Wrap Corrupted!") } @@ -168,6 +168,8 @@ void HeapAllocGlobal::deallocate(void* aPtr) { #endif } + mMutex.unlock(); + // 5) free the block free(head); } @@ -183,7 +185,7 @@ bool HeapAllocGlobal::checkLeaks() { #ifdef MEM_STACK_TRACE for (auto iter = mEntry; iter; iter = iter->mPrev) { - if (!iter->mIgnored) mCallstack.printSnapshot(iter->mCallStack); + if (!iter->mIgnored && iter->mCallStack) mCallstack.printSnapshot(iter->mCallStack); } #endif @@ -211,6 +213,18 @@ ualni HeapAllocGlobal::getNAllocations() { return mNumAllocations; } +void HeapAllocGlobal::enableCallstack() { + mMutex.lock(); + mEnableCallstack = true; + mMutex.unlock(); +} + +void HeapAllocGlobal::disableCallstack() { + mMutex.lock(); + mEnableCallstack = false; + mMutex.unlock(); +} + HeapAllocGlobal::~HeapAllocGlobal() = default; #endif diff --git a/Allocators/public/HeapAllocatorGlobal.hpp b/Allocators/public/HeapAllocatorGlobal.hpp index fa4d43c..8c8b892 100644 --- a/Allocators/public/HeapAllocatorGlobal.hpp +++ b/Allocators/public/HeapAllocatorGlobal.hpp @@ -12,6 +12,7 @@ namespace tp { static struct MemHead* mEntry; static std::mutex mMutex; static bool mIgnore; + static bool mEnableCallstack; #ifdef MEM_STACK_TRACE // Save stack on allocation call static CallStackCapture mCallstack; #endif @@ -29,7 +30,10 @@ namespace tp { static void startIgnore(); static void stopIgnore(); static ualni getNAllocations(); - + + static void enableCallstack(); + static void disableCallstack(); + public: [[nodiscard]] bool checkWrap() const { return false; } void checkValid() {} diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cfe586..989e7e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,9 +15,9 @@ add_subdirectory(Modules) add_subdirectory(Callstack) add_subdirectory(Containers) add_subdirectory(Math) -add_subdirectory(Allocators) add_subdirectory(Strings) -add_subdirectory(Language) +add_subdirectory(Allocators) +# add_subdirectory(Language) add_subdirectory(Externals) add_subdirectory(Connection) add_subdirectory(Graphics) diff --git a/Callstack/private/Callstack.cpp b/Callstack/private/Callstack.cpp index 93df3cd..eb1f68c 100644 --- a/Callstack/private/Callstack.cpp +++ b/Callstack/private/Callstack.cpp @@ -59,6 +59,8 @@ CallStackCapture::CallStackCapture() { platformInit(); + + initialized = true; } const CallStackCapture::CallStack* CallStackCapture::getSnapshot() { @@ -101,7 +103,10 @@ void CallStackCapture::clear() { mSymbols.removeAll(); } -CallStackCapture::~CallStackCapture() { free(mBuff); } +CallStackCapture::~CallStackCapture() { + free(mBuff); + initialized = false; +} // ---------------------------------- Platform Depended ---------------------------------- // diff --git a/Callstack/public/Callstack.hpp b/Callstack/public/Callstack.hpp index fd0406d..aac0e3c 100644 --- a/Callstack/public/Callstack.hpp +++ b/Callstack/public/Callstack.hpp @@ -9,6 +9,8 @@ namespace tp { public: typedef tp::alni FramePointer; + bool initialized = false; + enum { MAX_CALL_DEPTH_CAPTURE = 16, MAX_CALL_CAPTURES_MEM_SIZE_MB = 32, diff --git a/Connection/CMakeLists.txt b/Connection/CMakeLists.txt index ed81180..a4487b7 100644 --- a/Connection/CMakeLists.txt +++ b/Connection/CMakeLists.txt @@ -8,11 +8,11 @@ file(GLOB HEADERS "./public/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC ./public/) target_include_directories(${PROJECT_NAME} PRIVATE ${BINDINGS_INCLUDE}) -target_link_libraries(${PROJECT_NAME} PUBLIC Strings) +target_link_libraries(${PROJECT_NAME} PUBLIC Modules) ### -------------------------- Tests -------------------------- ### enable_testing() file(GLOB TEST_SOURCES "./tests/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) \ No newline at end of file +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) \ No newline at end of file diff --git a/Connection/private/ConnectionCommon.cpp b/Connection/private/ConnectionCommon.cpp deleted file mode 100644 index d9a05fe..0000000 --- a/Connection/private/ConnectionCommon.cpp +++ /dev/null @@ -1,6 +0,0 @@ - -#include "ConnectionCommon.hpp" - -static tp::ModuleManifest* sModuleDependencies[] = { &tp::gModuleStrings, nullptr }; - -tp::ModuleManifest tp::gModuleConnection = ModuleManifest("Storage", nullptr, nullptr, sModuleDependencies); \ No newline at end of file diff --git a/Connection/private/LocalConnection.cpp b/Connection/private/LocalConnection.cpp index 7689181..efe7648 100644 --- a/Connection/private/LocalConnection.cpp +++ b/Connection/private/LocalConnection.cpp @@ -7,7 +7,8 @@ using namespace tp; bool LocalConnection::Location::exists() const { - FILE* file = fopen(mLocation.read(), "r"); + // TODO : fixme + FILE* file = fopen(mLocation.c_str(), "r"); if (file) { // File exists, close it and return 1 fclose(file); @@ -23,10 +24,8 @@ bool LocalConnection::connect(const Location& location, const Type& connectionIn auto handle = new LocalConnectionContext(); switch (connectionInfo.getType()) { - case Type::READ: handle->open(location.getLocation().read(), true); break; - - case Type::WRITE: handle->open(location.getLocation().read(), false); break; - + case Type::READ: handle->open(location.getLocation().c_str(), true); break; + case Type::WRITE: handle->open(location.getLocation().c_str(), false); break; default: break; }; diff --git a/Connection/public/ConnectionCommon.hpp b/Connection/public/ConnectionCommon.hpp index 9d8f1f4..5014f4a 100644 --- a/Connection/public/ConnectionCommon.hpp +++ b/Connection/public/ConnectionCommon.hpp @@ -1,10 +1,9 @@ #pragma once -#include "Strings.hpp" +#include "Module.hpp" +#include namespace tp { - extern ModuleManifest gModuleConnection; - class Connection { public: typedef ualni SizeBytes; diff --git a/Connection/public/LocalConnection.hpp b/Connection/public/LocalConnection.hpp index 2e6dbbf..bdde90b 100644 --- a/Connection/public/LocalConnection.hpp +++ b/Connection/public/LocalConnection.hpp @@ -9,20 +9,20 @@ namespace tp { class LocalConnection : public Connection { public: class Location { - String mLocation; + std::string mLocation; public: Location() : mLocation("tmp"){}; - explicit Location(const String& location) : + explicit Location(const std::string& location) : mLocation(location) {} - void setLocation(const String& location) { mLocation = location; } - [[nodiscard]] const String& getLocation() const { return mLocation; } + void setLocation(const std::string& location) { mLocation = location; } + [[nodiscard]] const std::string& getLocation() const { return mLocation; } [[nodiscard]] bool exists() const; }; public: - LocalConnection(){ MODULE_SANITY_CHECK(gModuleConnection) }; + LocalConnection() = default; virtual ~LocalConnection() { if (mStatus.isOpened()) LocalConnection::disconnect(); diff --git a/Connection/public/Network.hpp b/Connection/public/Network.hpp index 604e0b2..215de31 100644 --- a/Connection/public/Network.hpp +++ b/Connection/public/Network.hpp @@ -1,6 +1,6 @@ #pragma once -#include "Common.hpp" +#include "Module.hpp" namespace tp { class ServerContext; diff --git a/Connection/public/RemoteConnection.hpp b/Connection/public/RemoteConnection.hpp index 13c3f5e..4bb7ed2 100644 --- a/Connection/public/RemoteConnection.hpp +++ b/Connection/public/RemoteConnection.hpp @@ -1,7 +1,6 @@ #pragma once #include "ConnectionCommon.hpp" -#include "List.hpp" namespace tp { @@ -17,7 +16,7 @@ namespace tp { }; public: - RemoteConnection(){ MODULE_SANITY_CHECK(gModuleConnection) }; + RemoteConnection() = default; virtual ~RemoteConnection() { if (mStatus.isOpened()) RemoteConnection::disconnect(); diff --git a/Connection/tests/Test.cpp b/Connection/tests/Test.cpp index 92542be..5c180af 100644 --- a/Connection/tests/Test.cpp +++ b/Connection/tests/Test.cpp @@ -14,14 +14,14 @@ SUITE(Connection) { { LocalConnection file; - file.connect(LocalConnection::Location(String("tmp2.txt")), LocalConnection::Type(false)); + file.connect(LocalConnection::Location(std::string("tmp2.txt")), LocalConnection::Type(false)); file.writeBytes(data, 6); file.disconnect(); } { LocalConnection file; - file.connect(LocalConnection::Location(String("tmp2.txt")), LocalConnection::Type(true)); + file.connect(LocalConnection::Location(std::string("tmp2.txt")), LocalConnection::Type(true)); file.readBytes(dataRead, 6); file.disconnect(); } @@ -35,17 +35,5 @@ SUITE(Connection) { } int main() { - - tp::ModuleManifest* deps[] = { &tp::gModuleConnection, nullptr }; - tp::ModuleManifest testModule("ConnectionTest", nullptr, nullptr, deps); - - if (!testModule.initialize()) { - return 1; - } - - bool res = UnitTest::RunAllTests(); - - testModule.deinitialize(); - - return res; + return UnitTest::RunAllTests(); } \ No newline at end of file diff --git a/Containers/public/Buffer2D.hpp b/Containers/public/Buffer2D.hpp index cb34689..e3d8e23 100644 --- a/Containers/public/Buffer2D.hpp +++ b/Containers/public/Buffer2D.hpp @@ -8,16 +8,17 @@ namespace tp { template using ConstSizeBuffer2D = ConstSizeBuffer, tSizeY>; + + typedef ualni Index; + + struct Index2D { + Index x = 0; + Index y = 0; + }; template class Buffer2D { public: - typedef ualni Index; - - struct Index2D { - Index x = 0; - Index y = 0; - }; typedef SelectValueOrReference tTypeArg; diff --git a/DataAnalysis/CMakeLists.txt b/DataAnalysis/CMakeLists.txt index dcfff1e..1463460 100644 --- a/DataAnalysis/CMakeLists.txt +++ b/DataAnalysis/CMakeLists.txt @@ -22,11 +22,8 @@ add_executable(NumRecApp applications/NumRecApp.cpp) target_link_libraries(NumRecApp ${PROJECT_NAME} Connection ImageIO) ### -------------------------- Tests -------------------------- ### -enable_testing() file(GLOB TEST_SOURCES "./tests/*.cpp" "./tests/*/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) - -target_include_directories(${PROJECT_NAME}Tests PUBLIC ./applications/) - -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_include_directories(Test${PROJECT_NAME} PUBLIC ./applications/) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) diff --git a/DataAnalysis/applications/NumRecApp.cpp b/DataAnalysis/applications/NumRecApp.cpp index 081c622..421612a 100644 --- a/DataAnalysis/applications/NumRecApp.cpp +++ b/DataAnalysis/applications/NumRecApp.cpp @@ -62,16 +62,7 @@ int main(int argc, char** argv) { imageName = argv[1]; } - ModuleManifest* deps[] = { &gModuleDataAnalysis, &gModuleConnection, nullptr }; - ModuleManifest module = ModuleManifest("NumRec", nullptr, nullptr, deps); - - if (!module.initialize()) { - return 1; - } - executeCmd(imageName); - module.deinitialize(); - return 0; } \ No newline at end of file diff --git a/DataAnalysis/applications/NumRecTraining.cpp b/DataAnalysis/applications/NumRecTraining.cpp index f7e3050..69cd71c 100644 --- a/DataAnalysis/applications/NumRecTraining.cpp +++ b/DataAnalysis/applications/NumRecTraining.cpp @@ -24,12 +24,12 @@ void writeImage(const Buffer& image, const char* name) { struct Dataset { ualni length = 0; - Pair imageSize = { 0, 0 }; + std::pair imageSize = { 0, 0 }; Buffer labels; Buffer> images; }; -bool loadDataset(Dataset& out, const String& location) { +bool loadDataset(Dataset& out, const std::string& location) { LocalConnection dataset; dataset.connect(LocalConnection::Location(location), LocalConnection::Type(true)); @@ -207,51 +207,38 @@ public: }; int main() { - ModuleManifest* deps[] = { &gModuleDataAnalysis, &gModuleConnection, nullptr }; - ModuleManifest module = ModuleManifest("NumRec", nullptr, nullptr, deps); + NumberRec app; - if (!module.initialize()) { - return 1; - } + auto numBatches = 10; + auto trainRange = Range(0, 50000); + auto testRange = Range(50000, 70000); - { - NumberRec app; + auto batchSize = trainRange.idxDiff() / numBatches; - auto numBatches = 10; - auto trainRange = Range(0, 50000); - auto testRange = Range(50000, 70000); + for (auto epoch : Range(1)) { + printf("Epoch %i\n", epoch.index()); - auto batchSize = trainRange.idxDiff() / numBatches; + for (auto batchIdx : Range(trainRange.idxDiff() / batchSize)) { + printf(" - Batch :%i \n", batchIdx.index()); - for (auto epoch : Range(1)) { - printf("Epoch %i\n", epoch.index()); + auto batchRange = Range(trainRange.idxBegin() + batchSize * batchIdx, trainRange.idxBegin() + batchSize * (batchIdx + 1)); - for (auto batchIdx : Range(trainRange.idxDiff() / batchSize)) { - printf(" - Batch :%i \n", batchIdx.index()); + app.trainStep(batchRange); - auto batchRange = Range(trainRange.idxBegin() + batchSize * batchIdx, trainRange.idxBegin() + batchSize * (batchIdx + 1)); - - app.trainStep(batchRange); - - printf("Cost on batch data : %f\n", app.test(batchRange)); - } - - printf("Cost on test data : %f\n\n", app.test(testRange)); + printf("Cost on batch data : %f\n", app.test(batchRange)); } - auto errors = 0; - for (auto i : testRange) { - if (app.testIncorrect(i)) { - errors++; - } - // app.debLog(i); - // app.displayImage(i); - } - - printf("\n\nIncorrect - %i out of %i (%f)\n\n", errors, testRange.idxDiff(), (halnf) errors / (halnf) testRange.idxDiff()); + printf("Cost on test data : %f\n\n", app.test(testRange)); } - module.deinitialize(); + auto errors = 0; + for (auto i : testRange) { + if (app.testIncorrect(i)) { + errors++; + } + // app.debLog(i); + // app.displayImage(i); + } - return 0; + printf("\n\nIncorrect - %i out of %i (%f)\n\n", errors, testRange.idxDiff(), (halnf) errors / (halnf) testRange.idxDiff()); } \ No newline at end of file diff --git a/DataAnalysis/private/DataAnalysisCommon.cpp b/DataAnalysis/private/DataAnalysisCommon.cpp index d128c83..1085e20 100644 --- a/DataAnalysis/private/DataAnalysisCommon.cpp +++ b/DataAnalysis/private/DataAnalysisCommon.cpp @@ -4,6 +4,6 @@ #include "MathCommon.hpp" namespace tp { - static ModuleManifest* deps[] = { &gModuleMath, &gModuleContainers, &gModuleAllocators, nullptr }; + static ModuleManifest* deps[] = { &gModuleAllocators, nullptr }; ModuleManifest gModuleDataAnalysis = ModuleManifest("DataAnalysis", nullptr, nullptr, deps); } diff --git a/DataAnalysis/tests/Tests.cpp b/DataAnalysis/tests/Tests.cpp index 739bca3..95eeec1 100644 --- a/DataAnalysis/tests/Tests.cpp +++ b/DataAnalysis/tests/Tests.cpp @@ -24,22 +24,27 @@ SUITE(FCNN) { } FCNN nn(layers); - halnf steppingValue = 100; + halnf steppingValue = 0.01; - for (auto i : Range(50)) { + halnf cost = 0; + + for (auto i : Range(150)) { nn.evaluate(input, output); nn.calcGrad(outputExpected); nn.applyGrad(steppingValue); + cost = nn.calcCost(outputExpected); printf("Loss %f \n", nn.calcCost(outputExpected)); } + + CHECK(cost < 0.1f); } } int main() { - tp::ModuleManifest* deps[] = { &tp::gModuleDataAnalysis, &tp::gModuleUtils, nullptr }; + tp::ModuleManifest* deps[] = { &tp::gModuleDataAnalysis, nullptr }; tp::ModuleManifest testModule("DataAnalysisTest", nullptr, nullptr, deps); if (!testModule.initialize()) { diff --git a/Externals/CMakeLists.txt b/Externals/CMakeLists.txt index a1a21d8..01dd9da 100644 --- a/Externals/CMakeLists.txt +++ b/Externals/CMakeLists.txt @@ -32,7 +32,6 @@ endif() #add_subdirectory(unittest-cpp) add_subdirectory(lalr) - add_subdirectory(glfw) project(Imgui) diff --git a/Externals/asio b/Externals/asio index 3a7078a..ed5db1b 160000 --- a/Externals/asio +++ b/Externals/asio @@ -1 +1 @@ -Subproject commit 3a7078a2002c670d98ee3044802a5086f3e49634 +Subproject commit ed5db1b50136bace796062c1a6eab0df9a74f8fa diff --git a/Graphics/CMakeLists.txt b/Graphics/CMakeLists.txt index c0174f8..47a1788 100644 --- a/Graphics/CMakeLists.txt +++ b/Graphics/CMakeLists.txt @@ -10,11 +10,14 @@ file(GLOB HEADERS "./public/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC ./public/) target_include_directories(${PROJECT_NAME} PRIVATE ${BINDINGS_INCLUDE}) -target_link_libraries(${PROJECT_NAME} PUBLIC Strings Math Utils) +target_link_libraries(${PROJECT_NAME} PUBLIC Strings Math Allocators) target_link_libraries(${PROJECT_NAME} PRIVATE ${BINDINGS_LIBS}) ### -------------------------- Examples -------------------------- ### -add_executable(${PROJECT_NAME}Example ./examples/Example.cpp) -target_link_libraries(${PROJECT_NAME}Example ${PROJECT_NAME} ${BINDINGS_LIBS}) -target_include_directories(${PROJECT_NAME}Example PRIVATE ${BINDINGS_INCLUDE}) +add_executable(Example${PROJECT_NAME} ./examples/Example.cpp) +target_link_libraries(Example${PROJECT_NAME} ${PROJECT_NAME} ${BINDINGS_LIBS}) +target_include_directories(Example${PROJECT_NAME} PRIVATE ${BINDINGS_INCLUDE}) + + +file(COPY "examples/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") diff --git a/Graphics/examples/Font.ttf b/Graphics/examples/Font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8a630544c99ec9956153ebd9509abeac421c6d75 GIT binary patch literal 42624 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, alignNVG); - nvgText(mContext->vg, centerX, centerY, string.read(), nullptr); + nvgText(mContext->vg, centerX, centerY, string, nullptr); popClamp(); } diff --git a/Graphics/public/Graphics.hpp b/Graphics/public/Graphics.hpp index ff7bea3..4885b90 100644 --- a/Graphics/public/Graphics.hpp +++ b/Graphics/public/Graphics.hpp @@ -2,7 +2,7 @@ #include "GraphicsCommon.hpp" -// TODO : fix this ugly shit +// TODO : ugly namespace tp { class Window; @@ -85,7 +85,7 @@ namespace tp { void pushClamp(const RectF& rec); void popClamp(); void rect(const RectF& rec, const RGBA& col, halnf round = 0); - void text(const String&, const RectF&, halnf size, Align, halnf marging, const RGBA&); + void text(const char*, const RectF&, halnf size, Align, halnf marging, const RGBA&); // TODO : API diff --git a/Graphics/public/GraphicsCommon.hpp b/Graphics/public/GraphicsCommon.hpp index 33466d6..df31c8f 100644 --- a/Graphics/public/GraphicsCommon.hpp +++ b/Graphics/public/GraphicsCommon.hpp @@ -2,9 +2,10 @@ #include "Color.hpp" #include "Rect.hpp" -#include "Strings.hpp" #include "Timing.hpp" +#include "Allocators.hpp" + namespace tp { extern ModuleManifest gModuleGraphics; } \ No newline at end of file diff --git a/LibraryViewer/CMakeLists.txt b/LibraryViewer/CMakeLists.txt index becb208..10494b8 100644 --- a/LibraryViewer/CMakeLists.txt +++ b/LibraryViewer/CMakeLists.txt @@ -11,7 +11,7 @@ file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp" "./applications/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE} ./ext/) -target_link_libraries(${PROJECT_NAME} PUBLIC Graphics Connection Widgets) +target_link_libraries(${PROJECT_NAME} PUBLIC Graphics Connection Widgets Strings) target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS}) file(COPY "library" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}") diff --git a/LibraryViewer/applications/Entry.cpp b/LibraryViewer/applications/Entry.cpp index b394300..696073c 100644 --- a/LibraryViewer/applications/Entry.cpp +++ b/LibraryViewer/applications/Entry.cpp @@ -33,7 +33,7 @@ void runApp() { auto area = window->getCanvas().getAvaliableArea(); - gui.proc(window->getEvents(), {}, { area.x, area.y, area.z, area.w }); + gui.proc(window->getEvents(), { area.x, area.y, area.z, area.w }, { area.x, area.y, area.z, area.w }); gui.draw(window->getCanvas()); // tp::sleep(100); @@ -54,6 +54,8 @@ int main() { return 1; } + tp::HeapAllocGlobal::disableCallstack(); + runApp(); binModule.deinitialize(); diff --git a/LibraryViewer/private/Library.cpp b/LibraryViewer/private/Library.cpp index 70fb249..2d63696 100644 --- a/LibraryViewer/private/Library.cpp +++ b/LibraryViewer/private/Library.cpp @@ -7,7 +7,7 @@ #include namespace tp { - static ModuleManifest* deps[] = { &gModuleGraphics, &gModuleConnection, &gModuleWidgets, nullptr }; + static ModuleManifest* deps[] = { &gModuleGraphics, &gModuleStrings, &gModuleAllocators, nullptr }; ModuleManifest gModuleLibraryViewer = ModuleManifest("LibraryViewer", nullptr, nullptr, deps); } @@ -51,7 +51,7 @@ bool Library::loadJson(const String& path) { LocalConnection libraryFile; Buffer libraryFileMem; - if (!libraryFile.connect(LocalConnection::Location(path), LocalConnection::Type(true))) return false; + if (!libraryFile.connect(LocalConnection::Location(path.read()), LocalConnection::Type(true))) return false; libraryFileMem.reserve(libraryFile.size()); libraryFile.readBytes(libraryFileMem.getBuff(), libraryFile.size()); diff --git a/LibraryViewer/public/Library.hpp b/LibraryViewer/public/Library.hpp index dba60f7..41e900d 100644 --- a/LibraryViewer/public/Library.hpp +++ b/LibraryViewer/public/Library.hpp @@ -1,6 +1,7 @@ #pragma once #include "Window.hpp" +#include "Strings.hpp" typedef tp::ualni SongId; enum class SONG_FORMAT { WAV, FLAC, NONE }; diff --git a/Math/CMakeLists.txt b/Math/CMakeLists.txt index cff35d3..919e11c 100644 --- a/Math/CMakeLists.txt +++ b/Math/CMakeLists.txt @@ -5,11 +5,10 @@ file(GLOB SOURCES "./private/*.cpp") file(GLOB HEADERS "./public/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC ./public/) -target_link_libraries(${PROJECT_NAME} PUBLIC Allocators) +target_link_libraries(${PROJECT_NAME} PUBLIC Containers) ### -------------------------- Tests -------------------------- ### -enable_testing() file(GLOB TEST_SOURCES "./tests/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) diff --git a/Math/private/MathCommon.cpp b/Math/private/MathCommon.cpp deleted file mode 100644 index 405c761..0000000 --- a/Math/private/MathCommon.cpp +++ /dev/null @@ -1,44 +0,0 @@ - -/// whoaoao wtf - -#include "MathCommon.hpp" -#include "Allocators.hpp" - -static tp::ModuleManifest* sModuleDependencies[] = { &tp::gModuleAllocators, nullptr }; - -tp::ModuleManifest tp::gModuleMath = ModuleManifest("Math", nullptr, nullptr, sModuleDependencies); - -tp::alnf std_sin(tp::alnf radians); -tp::alnf std_tan(tp::alnf radians); -tp::alnf std_cos(tp::alnf radians); -tp::alnf std_acos(tp::alnf val); -tp::alnf std_sqrt(tp::alnf val); -tp::alnf std_rad(tp::alnf val); -tp::alnf std_deg(tp::alnf val); -tp::alnf std_atan2(tp::alnf X, tp::alnf Y); -tp::alnf std_atan(tp::alnf val); -tp::alnf std_log2(tp::alnf val); - -tp::alnf tp::sin(const tp::alnf radians) { return std_sin((halnf) radians); } -tp::alnf tp::tan(const tp::alnf radians) { return std_tan((halnf) radians); } -tp::alnf tp::cos(const tp::alnf radians) { return std_cos((halnf) radians); } -tp::alnf tp::acos(const tp::alnf val) { return std_acos((halnf) val); } -tp::alnf tp::sqrt(const tp::alnf val) { return std_sqrt((halnf) val); } -tp::alnf tp::rad(const tp::alnf val) { return val * (PI / 180.f); } -tp::alnf tp::deg(const tp::alnf val) { return val * (180.f / PI); } -tp::alnf tp::atan2(const tp::alnf X, const tp::alnf Y) { return std_atan2((halnf) X, (halnf) Y); } -tp::alnf tp::atan(const tp::alnf val) { return std_atan((halnf) val); } -tp::alnf tp::log2(alnf val) { return std_log2(val); } - -#include - -tp::alnf std_sin(const tp::alnf radians) { return sinf((tp::halnf) radians); } -tp::alnf std_tan(const tp::alnf radians) { return tanf((tp::halnf) radians); } -tp::alnf std_cos(const tp::alnf radians) { return cosf((tp::halnf) radians); } -tp::alnf std_acos(const tp::alnf val) { return acos((tp::halnf) val); } -tp::alnf std_sqrt(const tp::alnf val) { return sqrt((tp::halnf) val); } -tp::alnf std_rad(const tp::alnf val) { return val * (PI / 180.f); } -tp::alnf std_deg(const tp::alnf val) { return val * (180.f / PI); } -tp::alnf std_atan2(const tp::alnf X, const tp::alnf Y) { return atan2((tp::halnf) X, (tp::halnf) Y); } -tp::alnf std_atan(const tp::alnf val) { return atan((tp::halnf) val); } -tp::alnf std_log2(const tp::alnf val) { return log2((tp::halnf) val); } diff --git a/Math/private/Topology.cpp b/Math/private/Topology.cpp index 336a5a6..7ce89df 100644 --- a/Math/private/Topology.cpp +++ b/Math/private/Topology.cpp @@ -1,8 +1,6 @@ #include "Topology.hpp" -#include "NewPlacement.hpp" - using namespace tp; Vec3F TrigCache::gHitPos; diff --git a/Math/private/Trig.cpp b/Math/private/Trig.cpp index 3bd22db..4ba274d 100644 --- a/Math/private/Trig.cpp +++ b/Math/private/Trig.cpp @@ -6,7 +6,6 @@ using namespace tp; Trig::Trig() { - MODULE_SANITY_CHECK(gModuleMath) p1.assign(0.f, 0.f, 0.f); p2.assign(0.f, 0.f, 0.f); p3.assign(0.f, 0.f, 0.f); diff --git a/Math/public/ComplexNumbers.hpp b/Math/public/ComplexNumbers.hpp index 35a6c57..acb4b23 100644 --- a/Math/public/ComplexNumbers.hpp +++ b/Math/public/ComplexNumbers.hpp @@ -18,7 +18,7 @@ namespace tp { [[nodiscard]] ComplexCart operator-(const ComplexCart& in) const { return { in.r - r, in.i - i }; } - [[nodiscard]] Number mod() const { return tp::sqrt(i * i + r * r); } + [[nodiscard]] Number mod() const { return sqrt(i * i + r * r); } [[nodiscard]] Number arg() const { return atan2(r, i); } diff --git a/Math/public/MathCommon.hpp b/Math/public/MathCommon.hpp index b38adc2..e7b74ce 100644 --- a/Math/public/MathCommon.hpp +++ b/Math/public/MathCommon.hpp @@ -13,17 +13,7 @@ #define SQRT2 1.4142135623730950488016887242 #define EXP 2.7182818284590452353602874714 -namespace tp { - extern ModuleManifest gModuleMath; +#include - alnf sin(alnf radians); - alnf tan(alnf radians); - alnf atan2(alnf X, alnf Y); - alnf atan(alnf val); - alnf cos(alnf radians); - alnf acos(alnf val); - alnf sqrt(alnf val); - alnf rad(alnf val); - alnf deg(alnf val); - alnf log2(alnf val); -} \ No newline at end of file +#define RAD(val) (val * (PI / 180.f)) +#define DEG(val) (val * (180.f / PI)) \ No newline at end of file diff --git a/Math/public/Vec.hpp b/Math/public/Vec.hpp index a904869..3e682e2 100644 --- a/Math/public/Vec.hpp +++ b/Math/public/Vec.hpp @@ -16,7 +16,7 @@ namespace tp { inline Type& set(ualni i, TypeArg arg) { return mBuff[i] = arg; } public: - Vec() { MODULE_SANITY_CHECK(gModuleMath) } + Vec() = default; explicit Vec(TypeArg val) { assign(val); } diff --git a/Math/tests/Tests.cpp b/Math/tests/Tests.cpp index b080b6e..ed6ed21 100644 --- a/Math/tests/Tests.cpp +++ b/Math/tests/Tests.cpp @@ -44,16 +44,5 @@ SUITE(Math) { } int main() { - tp::ModuleManifest* deps[] = { &tp::gModuleMath, &tp::gModuleUtils, nullptr }; - tp::ModuleManifest testModule("MathTest", nullptr, nullptr, deps); - - if (!testModule.initialize()) { - return 1; - } - - bool res = UnitTest::RunAllTests(); - - testModule.deinitialize(); - - return res; + return UnitTest::RunAllTests(); } diff --git a/Modules/private/Utils.cpp b/Modules/private/Utils.cpp index 1649628..2cef92c 100644 --- a/Modules/private/Utils.cpp +++ b/Modules/private/Utils.cpp @@ -9,7 +9,7 @@ void deinitializeCallStackCapture(); static bool initialize(const tp::ModuleManifest*) { initializeCallStackCapture(); - std::srand(std::time(nullptr)); + // std::srand(std::time(nullptr)); return true; } diff --git a/Modules/public/Archiver.hpp b/Modules/public/Archiver.hpp index 806230f..3e41897 100644 --- a/Modules/public/Archiver.hpp +++ b/Modules/public/Archiver.hpp @@ -2,6 +2,8 @@ #include "Common.hpp" +#include + namespace tp { // Used to transfer data to or from some sort of archive @@ -130,4 +132,29 @@ namespace tp { ualni mAddress = 0; ualni mFirstNotWritten = 0; }; + + struct StringArchiver { + std::string* val; + + StringArchiver(std::string& val) { this->val = &val; } + + template + void archiveRead(tArchiver& ar) { + ualni len; + ar >> len; + val->resize(len); + for (ualni i = 0; i < len; i++) { + ar >> (*val)[i]; + } + } + + template + void archiveWrite(tArchiver& ar) const { + ualni len = val->size(); + ar << len; + for (ualni i = 0; i < len; i++) { + ar << (*val)[i]; + } + } + }; } \ No newline at end of file diff --git a/Modules/public/Module.hpp b/Modules/public/Module.hpp index 06d29a7..c036678 100644 --- a/Modules/public/Module.hpp +++ b/Modules/public/Module.hpp @@ -2,6 +2,7 @@ #pragma once #include "Assert.hpp" +#include "Utils.hpp" #include "Common.hpp" #define MODULE_SANITY_CHECK(name) DEBUG_ASSERT(name.isInitialized() && "Modules Is Not Initialized" && #name) diff --git a/Modules/tests/Test.cpp b/Modules/tests/Test.cpp index 91714bb..0dee468 100644 --- a/Modules/tests/Test.cpp +++ b/Modules/tests/Test.cpp @@ -216,7 +216,7 @@ struct HasArchive()().archive(DeclareVal SUITE(BaseModule) { TEST(Basic) { - tp::ModuleManifest* ModuleDependencies[] = { &tp::gModuleBase, nullptr }; + tp::ModuleManifest* ModuleDependencies[] = { nullptr }; tp::ModuleManifest TestModule("Test", nullptr, nullptr, ModuleDependencies); REQUIRE CHECK(TestModule.initialize()); diff --git a/Objects/CMakeLists.txt b/Objects/CMakeLists.txt index 04c7e83..0af6b78 100644 --- a/Objects/CMakeLists.txt +++ b/Objects/CMakeLists.txt @@ -7,7 +7,7 @@ file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp" "./applications/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE}) -target_link_libraries(${PROJECT_NAME} PUBLIC Strings Math Connection LALR) +target_link_libraries(${PROJECT_NAME} PUBLIC Strings Math Connection LALR Strings) target_compile_definitions(${PROJECT_NAME} PUBLIC USERDATA_DESTROY_FAILED_TREE_ROOTS) ### -------------------------- Applications -------------------------- ### @@ -23,6 +23,6 @@ file(COPY "rsc/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") ### -------------------------- Tests -------------------------- ### file(GLOB TEST_SOURCES "./tests/*.cpp" "./tests/*/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) \ No newline at end of file +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) \ No newline at end of file diff --git a/Objects/private/core/module.cpp b/Objects/private/core/module.cpp index 464f4c5..faf2e44 100644 --- a/Objects/private/core/module.cpp +++ b/Objects/private/core/module.cpp @@ -77,9 +77,7 @@ static void deinit(const tp::ModuleManifest*) { static tp::ModuleManifest* sModuleDependencies[] = { // &tp::gModuleCompressor, - &tp::gModuleMath, &tp::gModuleStrings, - &tp::gModuleConnection, nullptr }; diff --git a/RayTracer/CMakeLists.txt b/RayTracer/CMakeLists.txt index 31d5a22..d40c663 100644 --- a/RayTracer/CMakeLists.txt +++ b/RayTracer/CMakeLists.txt @@ -3,26 +3,18 @@ project(RayTracer) ### ---------------------- Static Library --------------------- ### file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp") file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp" "./applications/*.hpp") - add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) - target_include_directories(${PROJECT_NAME} PUBLIC ./public/) target_link_libraries(${PROJECT_NAME} PUBLIC Math Connection) ### -------------------------- Applications -------------------------- ### -add_executable(rayt ./applications/Rayt.cpp applications/SceneLoad.cpp - applications/Rayt.hpp) - +add_executable(rayt ./applications/Rayt.cpp applications/SceneLoad.cpp applications/Rayt.hpp) target_link_libraries(rayt ${PROJECT_NAME} Lua ImageIO) - file(COPY "applications/rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") ### -------------------------- Tests -------------------------- ### -enable_testing() file(GLOB TEST_SOURCES "./tests/*.cpp" "./tests/*/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) - -target_include_directories(${PROJECT_NAME}Tests PUBLIC ./applications/) - -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++ ImageIO) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_include_directories(Test${PROJECT_NAME} PUBLIC ./applications/) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++ ImageIO) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) diff --git a/RayTracer/applications/Rayt.cpp b/RayTracer/applications/Rayt.cpp index cdb66f2..fb13aeb 100644 --- a/RayTracer/applications/Rayt.cpp +++ b/RayTracer/applications/Rayt.cpp @@ -23,8 +23,8 @@ void writeImage(const RayTracer::RenderBuffer& output, const char* name) { Buffer2D converted; converted.reserve(output.size()); - for (RayTracer::RenderBuffer::Index i = 0; i < output.size().x; i++) { - for (RayTracer::RenderBuffer::Index j = 0; j < output.size().y; j++) { + for (Index i = 0; i < output.size().x; i++) { + for (Index j = 0; j < output.size().y; j++) { converted.get({ i, j }).r = uint1(output.get({ i, j }).r * 255); converted.get({ i, j }).g = uint1(output.get({ i, j }).g * 255); converted.get({ i, j }).b = uint1(output.get({ i, j }).b * 255); @@ -51,7 +51,7 @@ void printStatus(const halnf* percentage) { } } -void renderCommand(const String& scenePath) { +void renderCommand(const std::string& scenePath) { Scene scene; RayTracer::RenderSettings settings; @@ -80,14 +80,6 @@ void renderCommand(const String& scenePath) { } int main(int argc, const char** argv) { - tp::ModuleManifest* deps[] = { &gModuleRayTracer, nullptr }; - tp::ModuleManifest module("Rayt", nullptr, nullptr, deps); - - if (module.initialize()) { - renderCommand("scene.lua"); - - module.deinitialize(); - } - + renderCommand("scene.lua"); return 0; } \ No newline at end of file diff --git a/RayTracer/applications/Rayt.hpp b/RayTracer/applications/Rayt.hpp index b5202b7..ad43ea5 100644 --- a/RayTracer/applications/Rayt.hpp +++ b/RayTracer/applications/Rayt.hpp @@ -1,6 +1,7 @@ #pragma once #include "RayTracer.hpp" -#include "Strings.hpp" -void loadScene(tp::Scene& scene, const tp::String& scenePath, tp::RayTracer::RenderSettings& settings); +#include + +void loadScene(tp::Scene& scene, const std::string& scenePath, tp::RayTracer::RenderSettings& settings); diff --git a/RayTracer/applications/SceneLoad.cpp b/RayTracer/applications/SceneLoad.cpp index 6b31e6d..a17e760 100644 --- a/RayTracer/applications/SceneLoad.cpp +++ b/RayTracer/applications/SceneLoad.cpp @@ -8,12 +8,12 @@ extern "C" { #include "OBJ_Loader.h" -bool loadMeshes(tp::Scene& scene, const tp::String& objetsPath) { +bool loadMeshes(tp::Scene& scene, const std::string& objetsPath) { using namespace tp; objl::Loader Loader; - if (!Loader.LoadFile(objetsPath.read())) { + if (!Loader.LoadFile(objetsPath.c_str())) { std::cout << "Failed to Load File. May have failed to find it or it was not an .obj file.\n"; return false; } @@ -123,7 +123,7 @@ int readLight(lua_State* L, tp::PointLight* light) { return 1; // Success } -void loadScene(tp::Scene& scene, const tp::String& scenePath, tp::RayTracer::RenderSettings& settings) { +void loadScene(tp::Scene& scene, const std::string& scenePath, tp::RayTracer::RenderSettings& settings) { lua_State* L = luaL_newstate(); luaL_openlibs(L); @@ -136,7 +136,7 @@ void loadScene(tp::Scene& scene, const tp::String& scenePath, tp::RayTracer::Ren lua_getglobal(L, "Meshes"); if (lua_isstring(L, -1)) { - tp::String meshesPath = lua_tostring(L, -1); + std::string meshesPath = lua_tostring(L, -1); if (!loadMeshes(scene, meshesPath)) { printf("No 'meshes' loaded - check ur .obj path and validate content of .obj .\n"); diff --git a/RayTracer/private/RayTracer.cpp b/RayTracer/private/RayTracer.cpp index 43cc16d..870ec6c 100644 --- a/RayTracer/private/RayTracer.cpp +++ b/RayTracer/private/RayTracer.cpp @@ -43,10 +43,6 @@ normal = n1 * barycentric.x + n2 * barycentric.y + n3 * barycentric.z; using namespace tp; -ModuleManifest* sDependencies[] = { &gModuleMath, &gModuleConnection, nullptr }; - -ModuleManifest tp::gModuleRayTracer = ModuleManifest("RayTracer", nullptr, nullptr, sDependencies); - void RayTracer::castRay(const Ray& ray, RayCastData& out, alnf farVal) { out.hit = false; @@ -167,8 +163,8 @@ void RayTracer::render(const Scene& scene, OutputBuffers& out, const RenderSetti col.b /= num; }; - for (auto i = 0; i < mSettings.size.x; i++) { - for (auto j = 0; j < mSettings.size.y; j++) { + for (ualni i = 0; i < mSettings.size.x; i++) { + for (ualni j = 0; j < mSettings.size.y; j++) { for (auto sample = 0; sample < mSettings.multisampling; sample++) { auto randX = randomFloat(); auto randY = randomFloat(); diff --git a/RayTracer/public/RayTracer.hpp b/RayTracer/public/RayTracer.hpp index 555fa9e..08ea94e 100644 --- a/RayTracer/public/RayTracer.hpp +++ b/RayTracer/public/RayTracer.hpp @@ -49,7 +49,7 @@ namespace tp { uhalni depth = 2; uhalni spray = 1; ualni multisampling = 1; - Vec2I size; + Vec2 size; }; struct OutputBuffers { diff --git a/RayTracer/tests/Test.cpp b/RayTracer/tests/Test.cpp index 3c1e2a2..170ef1c 100644 --- a/RayTracer/tests/Test.cpp +++ b/RayTracer/tests/Test.cpp @@ -18,8 +18,8 @@ void writeImage(const RayTracer::RenderBuffer& output) { Buffer2D converted; converted.reserve(output.size()); - for (RayTracer::RenderBuffer::Index i = 0; i < output.size().x; i++) { - for (RayTracer::RenderBuffer::Index j = 0; j < output.size().y; j++) { + for (Index i = 0; i < output.size().x; i++) { + for (Index j = 0; j < output.size().y; j++) { converted.get({ i, j }).r = uint1(output.get({ i, j }).r * 255); converted.get({ i, j }).g = uint1(output.get({ i, j }).g * 255); converted.get({ i, j }).b = uint1(output.get({ i, j }).b * 255); @@ -101,8 +101,8 @@ SUITE(RayTracer) { if (0) { writeImage(output.color); - for (auto i = 0; i < output.color.size().x; i++) { - for (auto j = 0; j < output.color.size().y; j++) { + for (Index i = 0; i < output.color.size().x; i++) { + for (Index j = 0; j < output.color.size().y; j++) { auto tmp = output.color.get({ i, j }); printf( "TEST(compareCols(output.get({%i, %i}), RGBA{ %ff, %ff, %ff, %ff }));\n", i, j, tmp.r, tmp.g, tmp.b, tmp.a @@ -114,16 +114,5 @@ SUITE(RayTracer) { } int main(int argc, char* argv[]) { - tp::ModuleManifest* ModuleDependencies[] = { &tp::gModuleRayTracer, nullptr }; - tp::ModuleManifest TestModule("TokenizerTest", nullptr, nullptr, ModuleDependencies); - - if (!TestModule.initialize()) { - return 1; - } - - bool res = UnitTest::RunAllTests(); - - TestModule.deinitialize(); - - return res; + return UnitTest::RunAllTests(); } diff --git a/Strings/CMakeLists.txt b/Strings/CMakeLists.txt index 1950322..f5577a7 100644 --- a/Strings/CMakeLists.txt +++ b/Strings/CMakeLists.txt @@ -10,6 +10,6 @@ target_link_libraries(${PROJECT_NAME} PUBLIC Allocators Containers) ### -------------------------- Tests -------------------------- ### enable_testing() file(GLOB TEST_SOURCES "./tests/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) \ No newline at end of file +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) \ No newline at end of file diff --git a/Strings/private/Strings.cpp b/Strings/private/Strings.cpp index 760d413..ef8c81e 100644 --- a/Strings/private/Strings.cpp +++ b/Strings/private/Strings.cpp @@ -12,6 +12,6 @@ bool initialize(const ModuleManifest*) { void deinitialize(const ModuleManifest*) { Logger::deinitializeGlobal(); } -static tp::ModuleManifest* sModuleDependencies[] = { &tp::gModuleContainers, &tp::gModuleAllocators, nullptr }; +static tp::ModuleManifest* sModuleDependencies[] = { &tp::gModuleAllocators, nullptr }; ModuleManifest tp::gModuleStrings = ModuleManifest("Strings", initialize, deinitialize, sModuleDependencies); \ No newline at end of file diff --git a/Strings/tests/Test.cpp b/Strings/tests/Test.cpp index bac008c..a70ee65 100644 --- a/Strings/tests/Test.cpp +++ b/Strings/tests/Test.cpp @@ -229,7 +229,7 @@ SUITE(Strings) { int main() { - tp::ModuleManifest* deps[] = { &tp::gModuleStrings, &tp::gModuleUtils, nullptr }; + tp::ModuleManifest* deps[] = { &tp::gModuleStrings, nullptr }; tp::ModuleManifest testModule("StringsTest", nullptr, nullptr, deps); if (!testModule.initialize()) { diff --git a/Widgets/CMakeLists.txt b/Widgets/CMakeLists.txt index 2909374..4253461 100644 --- a/Widgets/CMakeLists.txt +++ b/Widgets/CMakeLists.txt @@ -11,15 +11,13 @@ target_link_libraries(${PROJECT_NAME} PUBLIC Math Strings) ### -------------------------- Tests -------------------------- ### enable_testing() file(GLOB TEST_SOURCES "./tests/*.cpp") -add_executable(${PROJECT_NAME}Tests ${TEST_SOURCES}) -target_link_libraries(${PROJECT_NAME}Tests ${PROJECT_NAME} UnitTest++) -add_test(NAME ${PROJECT_NAME}Tests COMMAND ${PROJECT_NAME}Tests) +add_executable(Test${PROJECT_NAME} ${TEST_SOURCES}) +target_link_libraries(Test${PROJECT_NAME} ${PROJECT_NAME} UnitTest++) +add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME}) ### -------------------------- Applications -------------------------- ### add_executable(ExampleGui examples/Entry.cpp) - target_link_libraries(ExampleGui ${PROJECT_NAME} Graphics Imgui Nanovg glfw ${GLEW_LIB}) target_include_directories(ExampleGui PUBLIC ../Externals/glfw/include ${GLEW_INCLUDE_DIR}) - file(COPY "examples/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") \ No newline at end of file diff --git a/Widgets/private/WidgetConfig.cpp b/Widgets/private/WidgetConfig.cpp index be45cf5..87543d7 100644 --- a/Widgets/private/WidgetConfig.cpp +++ b/Widgets/private/WidgetConfig.cpp @@ -4,6 +4,6 @@ namespace tp { GlobalGUIConfig* gGlobalGUIConfig = nullptr; - ModuleManifest* deps[] = { &gModuleMath, &gModuleStrings, nullptr }; + ModuleManifest* deps[] = { &gModuleStrings, nullptr }; ModuleManifest gModuleWidgets = ModuleManifest("Widgets", nullptr, nullptr, deps); } \ No newline at end of file