From e4940eae3b8331afe540b5c31db1ca79b7f3cb35 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 7 Sep 2025 21:37:18 +0530 Subject: [PATCH 1/9] HF --- Src/IACore/imp/inl/IACore/memory/allocator/general.inl | 2 +- Src/IACore/inc/hpp/IACore/Definitions.hpp | 6 ------ Src/IACoreTest/CMakeLists.txt | 2 -- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Src/IACore/imp/inl/IACore/memory/allocator/general.inl b/Src/IACore/imp/inl/IACore/memory/allocator/general.inl index 36371b3..dfb64de 100644 --- a/Src/IACore/imp/inl/IACore/memory/allocator/general.inl +++ b/Src/IACore/imp/inl/IACore/memory/allocator/general.inl @@ -47,7 +47,7 @@ namespace ia UNUSED(hint); const size_type size = (sizeof(value_type) * count); const auto ptr = reinterpret_cast(_ia_malloc(size + alignment + sizeof(PVOID))); - const auto aligned_ptr = reinterpret_cast(ptr + sizeof(PVOID) + alignment - (ptr % alignment)); + const auto aligned_ptr = (size_type)(ptr + sizeof(PVOID) + alignment - (ptr % alignment)); *(reinterpret_cast(aligned_ptr-sizeof(PVOID))) = ptr; return reinterpret_cast(aligned_ptr); } diff --git a/Src/IACore/inc/hpp/IACore/Definitions.hpp b/Src/IACore/inc/hpp/IACore/Definitions.hpp index 02ad0ac..3d7e1d9 100644 --- a/Src/IACore/inc/hpp/IACore/Definitions.hpp +++ b/Src/IACore/inc/hpp/IACore/Definitions.hpp @@ -27,12 +27,6 @@ #include #include -#if defined (_MSC_VER ) -#if !defined(__clang__) -#error "IA software does not support compilation with MSVC. Please use Clang on Windows platforms." -#endif -#endif - #define IAC_SEC_LEVEL(v) (IACORE_SECURITY_LEVEL >= v) #define IA_DEFINED_TRUE(o) (defined(o) && (o > 0)) diff --git a/Src/IACoreTest/CMakeLists.txt b/Src/IACoreTest/CMakeLists.txt index 03f16c3..d92992b 100644 --- a/Src/IACoreTest/CMakeLists.txt +++ b/Src/IACoreTest/CMakeLists.txt @@ -1,8 +1,6 @@ add_executable(IACoreTest imp/cpp/Main.cpp) target_compile_options(IACoreTest PRIVATE - "-g" - "-O0" "-D__IA_DEBUG=1" ) From ada777c758d322389f9dbc7457ed774f62360ec3 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 7 Sep 2025 22:25:46 +0530 Subject: [PATCH 2/9] HF --- .../Interface/StreamReader.interface.inl | 57 +++++++++-------- .../inl/IACore/StreamReader/StreamReader.inl | 63 ++++++++----------- .../interface/stringstream.interface.inl | 5 ++ 3 files changed, 60 insertions(+), 65 deletions(-) diff --git a/Src/IACore/imp/inl/IACore/StreamReader/Interface/StreamReader.interface.inl b/Src/IACore/imp/inl/IACore/StreamReader/Interface/StreamReader.interface.inl index 9e79dcd..94c9a80 100644 --- a/Src/IACore/imp/inl/IACore/StreamReader/Interface/StreamReader.interface.inl +++ b/Src/IACore/imp/inl/IACore/StreamReader/Interface/StreamReader.interface.inl @@ -16,13 +16,16 @@ #pragma once +#include +#include + namespace ia { class IStreamReader { public: - STATIC SharedPtr Create(IN PCCHAR filePath); - STATIC SharedPtr Create(IN Vector &&data); + STATIC RefPtr Create(IN PCCHAR filePath); + STATIC RefPtr Create(IN Vector &&data); public: PURE_VIRTUAL(BOOL CompareBytes(IN PCUINT8 data, IN INT64 length) CONST); @@ -44,20 +47,20 @@ namespace ia class MemoryStreamReader : public IStreamReader { public: - STATIC SharedPtr Create(IN Vector &&data); + STATIC INLINE RefPtr Create(IN Vector &&data); public: - BOOL CompareBytes(IN PCUINT8 data, IN INT64 length) CONST; + INLINE BOOL CompareBytes(IN PCUINT8 data, IN INT64 length) CONST; - Vector Read(); - Vector Read(IN INT64 size); - VOID Read(IN INT64 size, IN PUINT8 buffer); - Vector ReadAndInflate(IN INT64 size); + INLINE Vector Read(); + INLINE Vector Read(IN INT64 size); + INLINE VOID Read(IN INT64 size, IN PUINT8 buffer); + INLINE Vector ReadAndInflate(IN INT64 size); - UINT8 Read8(); - UINT16 Read16(); - UINT32 Read32(); - UINT64 Read64(); + INLINE UINT8 Read8(); + INLINE UINT16 Read16(); + INLINE UINT32 Read32(); + INLINE UINT64 Read64(); VOID Skip(IN INT64 size) { @@ -79,28 +82,28 @@ namespace ia Vector m_buffer; private: - MemoryStreamReader(IN Vector &&data); + INLINE MemoryStreamReader(IN Vector &&data); }; class FileStreamReader : public IStreamReader { public: - STATIC SharedPtr Create(IN PCCHAR filePath); + STATIC INLINE RefPtr Create(IN PCCHAR filePath); - ~FileStreamReader(); + INLINE ~FileStreamReader(); public: - BOOL CompareBytes(IN PCUINT8 data, IN INT64 length) CONST; + INLINE BOOL CompareBytes(IN PCUINT8 data, IN INT64 length) CONST; - Vector Read(); - Vector Read(IN INT64 size); - VOID Read(IN INT64 size, IN PUINT8 buffer); - Vector ReadAndInflate(IN INT64 size); + INLINE Vector Read(); + INLINE Vector Read(IN INT64 size); + INLINE VOID Read(IN INT64 size, IN PUINT8 buffer); + INLINE Vector ReadAndInflate(IN INT64 size); - UINT8 Read8(); - UINT16 Read16(); - UINT32 Read32(); - UINT64 Read64(); + INLINE UINT8 Read8(); + INLINE UINT16 Read16(); + INLINE UINT32 Read32(); + INLINE UINT64 Read64(); VOID Skip(IN INT64 size) { @@ -121,15 +124,15 @@ namespace ia FILE *m_filePtr{}; private: - FileStreamReader(IN PCCHAR filePath); + INLINE FileStreamReader(IN PCCHAR filePath); }; - SharedPtr IStreamReader::Create(IN PCCHAR filePath) + INLINE RefPtr IStreamReader::Create(IN PCCHAR filePath) { return FileStreamReader::Create(filePath); } - SharedPtr IStreamReader::Create(IN Vector &&data) + INLINE RefPtr IStreamReader::Create(IN Vector &&data) { return MemoryStreamReader::Create(std::move(data)); } diff --git a/Src/IACore/imp/inl/IACore/StreamReader/StreamReader.inl b/Src/IACore/imp/inl/IACore/StreamReader/StreamReader.inl index eb85b09..aaca260 100644 --- a/Src/IACore/imp/inl/IACore/StreamReader/StreamReader.inl +++ b/Src/IACore/imp/inl/IACore/StreamReader/StreamReader.inl @@ -20,7 +20,7 @@ namespace ia { - SharedPtr MemoryStreamReader::Create(IN Vector &&data) + RefPtr MemoryStreamReader::Create(IN Vector &&data) { struct make_shared_enabler : public MemoryStreamReader { @@ -39,7 +39,7 @@ namespace ia BOOL MemoryStreamReader::CompareBytes(IN PCUINT8 data, IN INT64 length) const { - DXF_ASSERT((m_cursor + length) <= m_buffer.size()); + IA_RELEASE_ASSERT((m_cursor + length) <= m_buffer.size()); return !memcmp(&m_buffer[m_cursor], data, length); } @@ -61,26 +61,20 @@ namespace ia VOID MemoryStreamReader::Read(IN INT64 size, IN PUINT8 buffer) { - DXF_ASSERT((m_cursor + size) <= m_buffer.size()); + IA_RELEASE_ASSERT((m_cursor + size) <= m_buffer.size()); memcpy_s(buffer, size, &m_buffer[m_cursor], size); m_cursor += size; } - Vector MemoryStreamReader::ReadAndInflate(IN INT64 size) - { - const auto d = Read(size); - return Inflate(d.data(), d.size()); - } - UINT8 MemoryStreamReader::Read8() { - DXF_ASSERT((m_cursor + 1) <= m_buffer.size()); + IA_RELEASE_ASSERT((m_cursor + 1) <= m_buffer.size()); return m_buffer[m_cursor++]; } UINT16 MemoryStreamReader::Read16() { - DXF_ASSERT((m_cursor + 2) <= m_buffer.size()); + IA_RELEASE_ASSERT((m_cursor + 2) <= m_buffer.size()); const auto r = *reinterpret_cast(&m_buffer[m_cursor]); m_cursor += 2; return r; @@ -88,7 +82,7 @@ namespace ia UINT32 MemoryStreamReader::Read32() { - DXF_ASSERT((m_cursor + 4) <= m_buffer.size()); + IA_RELEASE_ASSERT((m_cursor + 4) <= m_buffer.size()); const auto r = *reinterpret_cast(&m_buffer[m_cursor]); m_cursor += 4; return r; @@ -96,7 +90,7 @@ namespace ia UINT64 MemoryStreamReader::Read64() { - DXF_ASSERT((m_cursor + 8) <= m_buffer.size()); + IA_RELEASE_ASSERT((m_cursor + 8) <= m_buffer.size()); const auto r = *reinterpret_cast(&m_buffer[m_cursor]); m_cursor += 8; return r; @@ -105,7 +99,7 @@ namespace ia namespace ia { - SharedPtr FileStreamReader::Create(IN PCCHAR filePath) + RefPtr FileStreamReader::Create(IN PCCHAR filePath) { struct make_shared_enabler : public FileStreamReader { @@ -121,7 +115,7 @@ namespace ia { fopen_s(&m_filePtr, filePath, "rb"); if (!m_filePtr) - throw RuntimeError(BuildString("No such file or directory: ", filePath)); + THROW_FILE_OPEN_READ(filePath); } FileStreamReader ::~FileStreamReader() @@ -132,78 +126,71 @@ namespace ia BOOL FileStreamReader::CompareBytes(IN PCUINT8 data, IN INT64 length) CONST { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); STATIC Vector TmpBuffer; if (TmpBuffer.size() < length) TmpBuffer.resize(length); - DXF_RELEASE_ASSERT(fread(TmpBuffer.data(), 1, length, m_filePtr) == length); + IA_RELEASE_ASSERT(fread(TmpBuffer.data(), 1, length, m_filePtr) == length); return !memcmp(TmpBuffer.data(), data, length); } Vector FileStreamReader::Read() { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); Vector result; const auto s = ftell(m_filePtr); fseek(m_filePtr, 0, SEEK_END); const auto e = ftell(m_filePtr); fseek(m_filePtr, s, SEEK_SET); result.resize(e - s); - DXF_RELEASE_ASSERT(fread(result.data(), 1, result.size(), m_filePtr) == result.size()); + IA_RELEASE_ASSERT(fread(result.data(), 1, result.size(), m_filePtr) == result.size()); return result; } Vector FileStreamReader::Read(IN INT64 size) { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); Vector result; result.resize(size); - DXF_RELEASE_ASSERT(fread(result.data(), 1, size, m_filePtr) == size); + IA_RELEASE_ASSERT(fread(result.data(), 1, size, m_filePtr) == size); return result; } VOID FileStreamReader::Read(IN INT64 size, IN PUINT8 buffer) { - DXF_RELEASE_ASSERT(m_filePtr); - DXF_RELEASE_ASSERT(fread(buffer, 1, size, m_filePtr) == size); - } - - Vector FileStreamReader::ReadAndInflate(IN INT64 size) - { - DXF_RELEASE_ASSERT(m_filePtr); - const auto d = Read(size); - return Inflate(d.data(), d.size()); + IA_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(fread(buffer, 1, size, m_filePtr) == size); } UINT8 FileStreamReader::Read8() { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); UINT8 result; - DXF_RELEASE_ASSERT(fread(&result, 1, 1, m_filePtr) == 1); + IA_RELEASE_ASSERT(fread(&result, 1, 1, m_filePtr) == 1); return result; } UINT16 FileStreamReader::Read16() { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); UINT16 result; - DXF_RELEASE_ASSERT(fread(&result, 2, 1, m_filePtr) == 1); + IA_RELEASE_ASSERT(fread(&result, 2, 1, m_filePtr) == 1); return result; } UINT32 FileStreamReader::Read32() { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); UINT32 result; - DXF_RELEASE_ASSERT(fread(&result, 4, 1, m_filePtr) == 1); + IA_RELEASE_ASSERT(fread(&result, 4, 1, m_filePtr) == 1); return result; } UINT64 FileStreamReader::Read64() { - DXF_RELEASE_ASSERT(m_filePtr); + IA_RELEASE_ASSERT(m_filePtr); UINT64 result; - DXF_RELEASE_ASSERT(fread(&result, 8, 1, m_filePtr) == 1); + IA_RELEASE_ASSERT(fread(&result, 8, 1, m_filePtr) == 1); return result; } } // namespace ia \ No newline at end of file diff --git a/Src/IACore/imp/inl/IACore/stream/interface/stringstream.interface.inl b/Src/IACore/imp/inl/IACore/stream/interface/stringstream.interface.inl index 1efbe05..9fc1619 100644 --- a/Src/IACore/imp/inl/IACore/stream/interface/stringstream.interface.inl +++ b/Src/IACore/imp/inl/IACore/stream/interface/stringstream.interface.inl @@ -38,6 +38,11 @@ namespace ia StringStream& operator<<(IN CONST String& v) { m_impl << v.c_str(); return *this; } + VOID clear() + { + m_impl.clear(); + } + private: std::stringstream m_impl; }; From 8e2e118dd51b56786a9ae0dda33a7e3ec208ce24 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Mon, 8 Sep 2025 19:54:50 +0530 Subject: [PATCH 3/9] HF --- Src/IACore/imp/inl/IACore/string/string.inl | 6 +++++- Src/IACore/inc/hpp/IACore/File.hpp | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Src/IACore/imp/inl/IACore/string/string.inl b/Src/IACore/imp/inl/IACore/string/string.inl index 7631644..3cb69af 100644 --- a/Src/IACore/imp/inl/IACore/string/string.inl +++ b/Src/IACore/imp/inl/IACore/string/string.inl @@ -276,7 +276,11 @@ namespace ia const auto count = last - first; res.reserve((count/stride) + 2); const auto end = start + count + 1; - for(size_type i = start; i < end; i += stride) new (&res.m_data[res.m_count++]) value_type(Base::m_data[i]); + for(size_type i = start; i < end; i += stride) + { + new (&res.m_data[res.m_count++]) value_type(Base::m_data[i]); + if(!Base::m_data[i]) break; + } res.back() = '\0'; return IA_MOVE(res); } diff --git a/Src/IACore/inc/hpp/IACore/File.hpp b/Src/IACore/inc/hpp/IACore/File.hpp index 7f489c6..7f2fa5c 100644 --- a/Src/IACore/inc/hpp/IACore/File.hpp +++ b/Src/IACore/inc/hpp/IACore/File.hpp @@ -121,10 +121,10 @@ namespace ia if constexpr (includeExtension) return path.slice(t + 1, path.end()); - return path.slice(t + 1, path.begin() + (path.rfind('.') - t) - 1); + return path.slice(t + 1, path.rfind('.')); } - String ExtractDirectoryFromPath(IN CONST String &path) + template STATIC String ExtractDirectoryFromPath(IN CONST String &path) { constexpr char pathDelimiter = '/'; @@ -132,7 +132,10 @@ namespace ia if (t == path.end()) return "./"; - return path.slice(0, t + 1); + if CONSTEXPR (includeTrailingSlash) + return path.slice(path.begin(), t + 1); + else + return path.slice(path.begin(), t); } private: From 26debb55349094c58c92b3822a62480d38182571 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Thu, 11 Sep 2025 13:07:20 +0530 Subject: [PATCH 4/9] Logger Tag --- Src/IACore/inc/hpp/IACore/Logger.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Src/IACore/inc/hpp/IACore/Logger.hpp b/Src/IACore/inc/hpp/IACore/Logger.hpp index 0eb0551..01ca8bd 100644 --- a/Src/IACore/inc/hpp/IACore/Logger.hpp +++ b/Src/IACore/inc/hpp/IACore/Logger.hpp @@ -23,25 +23,25 @@ namespace ia class Logger { public: - template STATIC VOID Info(Args... args) + template STATIC VOID Info(PCCHAR tag, Args... args) { StringStream ss; UNUSED((ss << ... << args)); - printf("\033[32m[INFO]: %s\033[39m\n", ss.str().c_str()); + printf("\033[32m[INFO]: [%s] %s\033[39m\n", tag, ss.str().c_str()); } - template STATIC VOID Warn(Args... args) + template STATIC VOID Warn(PCCHAR tag, Args... args) { StringStream ss; UNUSED((ss << ... << args)); - printf("\033[33m[WARN]: %s\033[39m\n", ss.str().c_str()); + printf("\033[33m[WARN]: [%s] %s\033[39m\n", tag, ss.str().c_str()); } - template STATIC VOID Error(Args... args) + template STATIC VOID Error(PCCHAR tag, Args... args) { StringStream ss; UNUSED((ss << ... << args)); - printf("\033[31m[ERROR]: %s\033[39m\n", ss.str().c_str()); + printf("\033[31m[ERROR]: [%s] %s\033[39m\n", tag, ss.str().c_str()); } private: From 0fd33d958e626a605d5d8629329383fda45b380c Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Thu, 11 Sep 2025 13:09:06 +0530 Subject: [PATCH 5/9] Logger Tag --- Src/IACoreTest/imp/cpp/Main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Src/IACoreTest/imp/cpp/Main.cpp b/Src/IACoreTest/imp/cpp/Main.cpp index a23b074..db6b1bf 100644 --- a/Src/IACoreTest/imp/cpp/Main.cpp +++ b/Src/IACoreTest/imp/cpp/Main.cpp @@ -10,7 +10,7 @@ template VOID print(IN CONST Span<_value_type>& s) { for(const auto& v: s) - Logger::Info(v); + Logger::Info("IACore", v); } int main(int argc, char* argv[]) From bb2a0501d56bfd3eec7777dcb1d1578b93f68d77 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Fri, 3 Oct 2025 19:25:58 +0530 Subject: [PATCH 6/9] Fixes --- Src/IACore/inc/hpp/IACore/Definitions.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Src/IACore/inc/hpp/IACore/Definitions.hpp b/Src/IACore/inc/hpp/IACore/Definitions.hpp index 3d7e1d9..2f35f41 100644 --- a/Src/IACore/inc/hpp/IACore/Definitions.hpp +++ b/Src/IACore/inc/hpp/IACore/Definitions.hpp @@ -149,6 +149,9 @@ #define IA_MAX_POSSIBLE_SIZE (static_cast(0x7FFFFFFFFFFFF)) #define IA_MAX_STRING_LENGTH (IA_MAX_POSSIBLE_SIZE >> 8) +#define IA_VERSION_TYPE UINT64 +#define IA_MAKE_VERSION(major, minor, patch) ((static_cast(major) & 0xFFFFFF) << 40) | ((static_cast(minor) & 0xFFFFFF) << 16) | (static_cast(patch) & 0xFFFF) + #define __CC_BLACK "\033[30m" #define __CC_RED "\033[31m" #define __CC_GREEN "\033[32m" From b38dc220be3948778e3c9233a42da5269aa02600 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Fri, 3 Oct 2025 19:39:54 +0530 Subject: [PATCH 7/9] Fixes --- Src/IACore/inc/hpp/IACore/Definitions.hpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Src/IACore/inc/hpp/IACore/Definitions.hpp b/Src/IACore/inc/hpp/IACore/Definitions.hpp index 2f35f41..58767f5 100644 --- a/Src/IACore/inc/hpp/IACore/Definitions.hpp +++ b/Src/IACore/inc/hpp/IACore/Definitions.hpp @@ -152,6 +152,17 @@ #define IA_VERSION_TYPE UINT64 #define IA_MAKE_VERSION(major, minor, patch) ((static_cast(major) & 0xFFFFFF) << 40) | ((static_cast(minor) & 0xFFFFFF) << 16) | (static_cast(patch) & 0xFFFF) +#if defined(_MSC_VER) + #define IA_DLL_EXPORT __declspec(dllexport) + #define IA_DLL_IMPORT __declspec(dllimport) +#elif defined(__GNUC__) + #define IA_DLL_EXPORT __attribute__((visibility("default"))) + #define IA_DLL_IMPORT +#else + #define IA_DLL_EXPORT + #define IA_DLL_IMPORT +#endif + #define __CC_BLACK "\033[30m" #define __CC_RED "\033[31m" #define __CC_GREEN "\033[32m" From 66299a7cafbda745f270a1cd9f823a6b21452703 Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 5 Oct 2025 01:50:51 +0530 Subject: [PATCH 8/9] Fixes --- Src/IACore/inc/hpp/IACore/Exception.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Src/IACore/inc/hpp/IACore/Exception.hpp b/Src/IACore/inc/hpp/IACore/Exception.hpp index 39fad19..c933923 100644 --- a/Src/IACore/inc/hpp/IACore/Exception.hpp +++ b/Src/IACore/inc/hpp/IACore/Exception.hpp @@ -131,7 +131,9 @@ private: DO(SECURITY_BYPASS) #define DEFINE_THROWER(name) \ template NORETURN VOID THROW_##name(Args... args) { \ - throw RuntimeException(ExceptionKind::name, BuildString(args...)); \ + const auto msg = BuildString(args...); \ + printf(#name " %s\n", msg.c_str()); \ + throw RuntimeException(ExceptionKind::name, msg); \ } FOR_EACH_RUNTIME_EXCEPT_TYPE(DEFINE_THROWER); #undef DEFINE_THROWER From a73cc7e69c42beafc67c11c509f0c69c5445728f Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 5 Oct 2025 16:17:06 +0530 Subject: [PATCH 9/9] Android Logger Support --- Src/IACore/inc/hpp/IACore/Exception.hpp | 4 ++-- Src/IACore/inc/hpp/IACore/Logger.hpp | 29 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Src/IACore/inc/hpp/IACore/Exception.hpp b/Src/IACore/inc/hpp/IACore/Exception.hpp index c933923..0cbb5dc 100644 --- a/Src/IACore/inc/hpp/IACore/Exception.hpp +++ b/Src/IACore/inc/hpp/IACore/Exception.hpp @@ -16,7 +16,7 @@ #pragma once -#include +#include namespace ia { enum class ExceptionKind { @@ -132,7 +132,7 @@ private: #define DEFINE_THROWER(name) \ template NORETURN VOID THROW_##name(Args... args) { \ const auto msg = BuildString(args...); \ - printf(#name " %s\n", msg.c_str()); \ + Logger::Error("EXCEPT", "(", #name, "): ", msg); \ throw RuntimeException(ExceptionKind::name, msg); \ } FOR_EACH_RUNTIME_EXCEPT_TYPE(DEFINE_THROWER); diff --git a/Src/IACore/inc/hpp/IACore/Logger.hpp b/Src/IACore/inc/hpp/IACore/Logger.hpp index 01ca8bd..086830d 100644 --- a/Src/IACore/inc/hpp/IACore/Logger.hpp +++ b/Src/IACore/inc/hpp/IACore/Logger.hpp @@ -18,6 +18,10 @@ #include +#ifdef __ANDROID__ +#include +#endif + namespace ia { class Logger @@ -27,21 +31,44 @@ namespace ia { StringStream ss; UNUSED((ss << ... << args)); - printf("\033[32m[INFO]: [%s] %s\033[39m\n", tag, ss.str().c_str()); +#ifdef __ANDROID__ + __android_log_print(ANDROID_LOG_DEBUG, "IAApp", ss.str().c_str()); +#else + printf("\033[0;37m[INFO]: [%s] %s\033[39m\n", tag, ss.str().c_str()); +#endif + } + + template STATIC VOID Success(PCCHAR tag, Args... args) + { + StringStream ss; + UNUSED((ss << ... << args)); +#ifdef __ANDROID__ + __android_log_print(ANDROID_LOG_INFO, "IAApp", ss.str().c_str()); +#else + printf("\033[32m[SUCCESS]: [%s] %s\033[39m\n", tag, ss.str().c_str()); +#endif } template STATIC VOID Warn(PCCHAR tag, Args... args) { StringStream ss; UNUSED((ss << ... << args)); +#ifdef __ANDROID__ + __android_log_print(ANDROID_LOG_DEBUG, "IAApp", ss.str().c_str()); +#else printf("\033[33m[WARN]: [%s] %s\033[39m\n", tag, ss.str().c_str()); +#endif } template STATIC VOID Error(PCCHAR tag, Args... args) { StringStream ss; UNUSED((ss << ... << args)); +#ifdef __ANDROID__ + __android_log_print(ANDROID_LOG_ERROR, "IAApp", ss.str().c_str()); +#else printf("\033[31m[ERROR]: [%s] %s\033[39m\n", tag, ss.str().c_str()); +#endif } private: