From 56b44b7defe4029378d2b2496bc449fb6676aeb1 Mon Sep 17 00:00:00 2001 From: Alex Larbe Date: Sun, 5 Oct 2025 10:47:24 +0100 Subject: [PATCH] eui/message: Implemented MessageString --- CMakeLists.txt | 13 +++++-- include/message/euiMessageString.h | 42 +++++++++++++++++++++ src/message/euiMessageString.cpp | 60 ++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 include/message/euiMessageString.h create mode 100644 src/message/euiMessageString.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c0458ae..4f3b0b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,11 @@ project(eui CXX ASM) -add_library(eui OBJECT - include/euiControlBase.h +file(GLOB_RECURSE HEADER_FILES "include/*.h") +file(GLOB_RECURSE SRC "src/*.cpp") - src/euiControlBase.cpp +add_library(eui OBJECT + ${HEADER_FILES} + ${SRC} ) target_compile_options(eui PRIVATE -fno-exceptions) @@ -15,3 +17,8 @@ if(NOT TARGET agl) add_subdirectory(../agl) endif() target_link_libraries(eui PUBLIC agl) +if(NOT TARGET sead) + add_subdirectory(../sead) +endif() + +target_link_libraries(eui PUBLIC sead) diff --git a/include/message/euiMessageString.h b/include/message/euiMessageString.h new file mode 100644 index 0000000..3d7c23c --- /dev/null +++ b/include/message/euiMessageString.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +namespace eui { + +class MessageString { +public: + class iterator { + public: + iterator(const char16_t* ptr, u32 index = 0) : mPtr(ptr), mIndex(index) {} + + + private: + const char16_t* mPtr; + u32 mIndex; + }; + + MessageString(); + MessageString(s32 len, const char16_t* str); + MessageString(const char16_t* str, const char16_t* str2); + MessageString(const sead::SafeStringBase& str); + MessageString(const MessageString& messageStr); + + void operator=(const MessageString& str); + const char16_t* operator[](s32 i) const; + + iterator begin() const; + iterator end() const; + iterator toIterator(s32 len) const; + bool tryMakeTagStrippedString(sead::BufferedSafeStringBase* str) const; + + const char16_t* getStr() const { return mStr; } + s32 getStrLen() const { return mStrLen; } + +private: + const char16_t* mStr; + u32 mStrLen; +}; + +} // namespace eui diff --git a/src/message/euiMessageString.cpp b/src/message/euiMessageString.cpp new file mode 100644 index 0000000..36f49f3 --- /dev/null +++ b/src/message/euiMessageString.cpp @@ -0,0 +1,60 @@ +#include "message/euiMessageString.h" + +#include + +namespace eui { + +MessageString::MessageString() { + mStr = nullptr; + mStrLen = 0; +} + +MessageString::MessageString(s32 len, const char16_t* str) { + mStr = str; + mStrLen = len; +} + +MessageString::MessageString(const char16_t* str, const char16_t* str2) { + mStr = str; + mStrLen = (str2 - str); +} + +MessageString::MessageString(const sead::SafeStringBase& str) { + mStr = str.cstr(); + mStrLen = str.calcLength(); +} + +MessageString::MessageString(const MessageString& str) { + mStr = str.getStr(); + mStrLen = str.getStrLen(); +} + +void MessageString::operator=(const MessageString& str) { + mStr = str.getStr(); + mStrLen = str.getStrLen(); +} + +const char16_t* MessageString::operator[](s32 i) const { + return mStrLen <= i ? &mStr[0] : &mStr[i]; +} + +MessageString::iterator MessageString::begin() const { + return { mStr }; +} + +MessageString::iterator MessageString::end() const { + return { + mStr, + mStrLen + }; +} + +MessageString::iterator MessageString::toIterator(s32 len) const { + u32 size = mStrLen <= len ? mStrLen : len; + return { + mStr, + size + }; +} + +} // namespace eui