From cee0c7ef7d5522c44100848c4f64c92fbeebdfaf Mon Sep 17 00:00:00 2001 From: Jessica James Date: Mon, 29 Nov 2021 23:15:39 -0600 Subject: [PATCH] Rename 'ptr' to 'data', remove various methods from ReadableString and ReferenceString --- src/common/Database.cpp | 4 +- src/common/INIConfig.cpp | 8 +-- src/common/IRC_Client.cpp | 62 ++++++++-------- src/common/Socket.cpp | 2 +- src/include/Jupiter/HTTP_QueryString.h | 4 +- src/include/Jupiter/Hash.h | 10 +-- src/include/Jupiter/IRC_Client.h | 14 ++-- src/include/Jupiter/Readable_String.h | 10 +-- src/include/Jupiter/Readable_String_Imp.h | 4 +- src/include/Jupiter/Reference_String.h | 84 +--------------------- src/include/Jupiter/Reference_String_Imp.h | 83 +-------------------- src/include/Jupiter/String_Imp.h | 23 +++--- src/include/Jupiter/String_Type.h | 14 ++-- src/include/Jupiter/String_Type_Imp.h | 75 +++++++++---------- 14 files changed, 115 insertions(+), 282 deletions(-) diff --git a/src/common/Database.cpp b/src/common/Database.cpp index 71e8ede..e7d9b38 100644 --- a/src/common/Database.cpp +++ b/src/common/Database.cpp @@ -128,7 +128,7 @@ bool Jupiter::Database::append(Jupiter::DataBuffer &data) bool Jupiter::Database::append(Jupiter::ReadableString &file, Jupiter::DataBuffer &data) { char *str = new char[file.size() + 1]; - memcpy(str, file.ptr(), file.size() * sizeof(char)); + memcpy(str, file.data(), file.size() * sizeof(char)); str[file.size()] = '\0'; bool r = Jupiter::Database::append(str, data); delete[] str; @@ -161,7 +161,7 @@ bool Jupiter::Database::append(FILE *file, Jupiter::DataBuffer &data) bool Jupiter::Database::create_database(const Jupiter::ReadableString &file, const Jupiter::DataBuffer *header) { char *str = new char[file.size() + 1]; - memcpy(str, file.ptr(), file.size() * sizeof(char)); + memcpy(str, file.data(), file.size() * sizeof(char)); str[file.size()] = '\0'; bool r = Jupiter::Database::create_database(str, header); delete[] str; diff --git a/src/common/INIConfig.cpp b/src/common/INIConfig.cpp index 3f28e66..161242d 100644 --- a/src/common/INIConfig.cpp +++ b/src/common/INIConfig.cpp @@ -214,7 +214,7 @@ bool Jupiter::INIConfig::read_internal(const char *in_filename) { end = itr + buffer.size(); // Reset line - line = std::string_view(buffer.ptr(), 0); + line = std::string_view(buffer.data(), 0); // Parse buffer for lines while (itr != end) @@ -223,7 +223,7 @@ bool Jupiter::INIConfig::read_internal(const char *in_filename) { if (*itr == '\n' || *itr == '\r') { // Process line - line = std::string_view(buffer.ptr(), itr - buffer.ptr()); + line = std::string_view(buffer.data(), itr - buffer.data()); if (!line.empty()) process_line(); @@ -242,7 +242,7 @@ bool Jupiter::INIConfig::read_internal(const char *in_filename) { if (*itr != '\n' && *itr != '\r') { // Shift buffer and break - buffer.shiftRight(itr - buffer.ptr()); + buffer.shiftRight(itr - buffer.data()); break; } } @@ -253,7 +253,7 @@ bool Jupiter::INIConfig::read_internal(const char *in_filename) { } // Process data remaining in buffer as a line - line = std::string_view(buffer.ptr(), buffer.size()); + line = std::string_view(buffer.data(), buffer.size()); if (!line.empty()) process_line(); diff --git a/src/common/IRC_Client.cpp b/src/common/IRC_Client.cpp index a159231..483717c 100644 --- a/src/common/IRC_Client.cpp +++ b/src/common/IRC_Client.cpp @@ -666,7 +666,7 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { // Parse supported channel types pos = line.find("CHANTYPES="_jrs); if (pos != Jupiter::INVALID_INDEX) { - m_chan_types = line.substring(pos + 10, line.find(' ')); + m_chan_types = line.substr(pos + 10, line.find(' ')); } } break; @@ -792,10 +792,9 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { std::string_view channel_name = getLineToken(2); if (!channel_name.empty()) { size_t pos = line.find('!', 0); - auto message = Jupiter::ReferenceString::substring(line, line.find(':', 1) + 1, - line.size()); + auto message = jessilib::split_once_view(line, ':').second; if (pos < line.find(' ')) { - auto nick = Jupiter::ReferenceString::substring(line, 1, pos); + auto nick = line.substr(1, pos); this->OnNotice(channel_name, nick, message); for (auto& plugin: Jupiter::plugins) { plugin->OnNotice(this, channel_name, nick, message); @@ -814,10 +813,10 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { } else if (jessilib::equalsi(command_token, "NICK"sv)) { auto nick = getSender(line); - Jupiter::ReferenceString newnick = Jupiter::ReferenceString::substring(line, - line.find(' ', 1) + 1); - if (newnick.isNotEmpty() && newnick[0] == ':') - newnick.shiftRight(1); + std::string_view newnick = jessilib::split_once_view(line, ' ').second; + if (!newnick.empty() && newnick[0] == ':') { + newnick.remove_prefix(1); + } if (nick.equalsi(m_nickname)) { m_nickname = newnick; } @@ -876,8 +875,8 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { Jupiter::ReferenceString reason; size_t pos = line.find(':', 1); - if (pos != Jupiter::INVALID_INDEX) - reason = Jupiter::ReferenceString::substring(line, pos + 1); + if (pos != std::string_view::npos) + reason = line.substr(pos + 1); this->OnPart(channel_name, nick, reason); @@ -910,8 +909,8 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { size_t pos = line.find(':', 1); Jupiter::ReferenceString reason; - if (pos != Jupiter::INVALID_INDEX) - reason = Jupiter::ReferenceString::substring(line, pos + 1); + if (pos != std::string_view::npos) + reason = line.substr(pos + 1); this->OnKick(channel_name, kicker, kicked_nickname, reason); @@ -937,8 +936,7 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { } else if (jessilib::equalsi(command_token, "QUIT"sv)) { Jupiter::ReferenceString nick = getSender(line); - Jupiter::ReferenceString message = Jupiter::ReferenceString::substring(line, - line.find(':', 1) + 1); + std::string_view message = jessilib::split_once_view(line.substr(1), ':').second; auto user = getUser(nick); if (user != nullptr) { for (auto& channel: m_channels) { @@ -957,11 +955,10 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { else if (jessilib::equalsi(command_token, "INVITE"sv)) { Jupiter::ReferenceString inviter = getSender(line); std::string_view invited_nickname = getLineToken(2); - Jupiter::ReferenceString chan = Jupiter::ReferenceString::substring(line, - line.find(':', 1) + 1); - this->OnInvite(chan, inviter, invited_nickname); + std::string_view channel_name = jessilib::split_once_view(line.substr(1), ':').second; + this->OnInvite(channel_name, inviter, invited_nickname); for (auto& plugin: Jupiter::plugins) { - plugin->OnInvite(this, chan, inviter, invited_nickname); + plugin->OnInvite(this, channel_name, inviter, invited_nickname); } } else if (jessilib::equalsi(command_token, "MODE"sv)) { @@ -1040,8 +1037,7 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { // else if CHGHOST else if (numeric == Reply::NAMREPLY) { // Some names. std::string_view channel_name = getLineToken(4); - Jupiter::ReferenceString names = Jupiter::ReferenceString::substring(line, - line.find(':', 1) + 1); + std::string_view names = jessilib::split_once_view(line.substr(1), ':').second; Channel* channel = getChannel(channel_name); if (channel != nullptr) { @@ -1082,7 +1078,7 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { } else if (w1 == "ERROR"sv) { - Jupiter::ReferenceString reason = Jupiter::ReferenceString::substring(line, line.find(':') + 1); + std::string_view reason = jessilib::split_once_view(line, ':').second; this->OnError(reason); for (auto& plugin : Jupiter::plugins) { plugin->OnError(this, reason); @@ -1095,7 +1091,7 @@ int Jupiter::IRC::Client::process_line(std::string_view in_line) { { Jupiter::StringS auth_str = m_nickname + '\0' + m_sasl_account + '\0' + m_sasl_password; - char *enc = Jupiter::base64encode(auth_str.ptr(), auth_str.size()); + char *enc = Jupiter::base64encode(auth_str.data(), auth_str.size()); m_socket->send("AUTHENTICATE "_jrs + enc + ENDL); delete[] enc; } @@ -1170,7 +1166,7 @@ void Jupiter::IRC::Client::disconnect(bool stayDead) void Jupiter::IRC::Client::disconnect(const Jupiter::ReadableString &message, bool stayDead) { - m_socket->send(Jupiter::StringS::Format("QUIT :%.*s" ENDL, message.size(), message.ptr())); + m_socket->send(Jupiter::StringS::Format("QUIT :%.*s" ENDL, message.size(), message.data())); Jupiter::IRC::Client::disconnect(stayDead); } @@ -1337,7 +1333,7 @@ double Jupiter::IRC::Client::readConfigDouble(const Jupiter::ReadableString &key void Jupiter::IRC::Client::writeToLogs(const Jupiter::ReadableString &message) { if (m_log_file != nullptr) { - fwrite(message.ptr(), sizeof(char), message.size(), m_log_file); + fwrite(message.data(), sizeof(char), message.size(), m_log_file); fputs("\r\n", m_log_file); fflush(m_log_file); } @@ -1436,15 +1432,15 @@ bool Jupiter::IRC::Client::registerClient() { * User Implementation */ -const Jupiter::ReadableString &Jupiter::IRC::Client::User::getNickname() const { +std::string_view Jupiter::IRC::Client::User::getNickname() const { return m_nickname; } -const Jupiter::ReadableString &Jupiter::IRC::Client::User::getUsername() const { +std::string_view Jupiter::IRC::Client::User::getUsername() const { return m_username; } -const Jupiter::ReadableString &Jupiter::IRC::Client::User::getHostname() const { +std::string_view Jupiter::IRC::Client::User::getHostname() const { return m_hostname; } @@ -1459,7 +1455,7 @@ size_t Jupiter::IRC::Client::User::getChannelCount() const { Jupiter::IRC::Client::Channel::Channel(const Jupiter::ReadableString &in_name, Jupiter::IRC::Client *in_parent) { auto to_lower = [&in_name]() { Jupiter::String result(in_name.size()); - const char *itr = in_name.ptr(); + const char *itr = in_name.data(); const char *end = itr + in_name.size(); while (itr != end) @@ -1494,7 +1490,7 @@ std::shared_ptr Jupiter::IRC::Client::Chann ++user->m_channel_count; - m_users[channel_user->getNickname()] = channel_user; + m_users[Jupiter::ReferenceString{channel_user->getNickname()}] = channel_user; return channel_user; } @@ -1505,7 +1501,7 @@ std::shared_ptr Jupiter::IRC::Client::Chann ++user->m_channel_count; - m_users[channel_user->getNickname()] = channel_user; + m_users[Jupiter::ReferenceString{channel_user->getNickname()}] = channel_user; return channel_user; } @@ -1595,15 +1591,15 @@ const Jupiter::ReadableString &Jupiter::IRC::Client::Channel::User::getPrefixes( return m_prefixes; } -const Jupiter::ReadableString &Jupiter::IRC::Client::Channel::User::getNickname() const { +std::string_view Jupiter::IRC::Client::Channel::User::getNickname() const { return m_user->getNickname(); } -const Jupiter::ReadableString &Jupiter::IRC::Client::Channel::User::getUsername() const { +std::string_view Jupiter::IRC::Client::Channel::User::getUsername() const { return m_user->getUsername(); } -const Jupiter::ReadableString &Jupiter::IRC::Client::Channel::User::getHostname() const { +std::string_view Jupiter::IRC::Client::Channel::User::getHostname() const { return m_user->getHostname(); } diff --git a/src/common/Socket.cpp b/src/common/Socket.cpp index 61d5596..ed01d1b 100644 --- a/src/common/Socket.cpp +++ b/src/common/Socket.cpp @@ -502,7 +502,7 @@ int Jupiter::Socket::send(const char *data, size_t datalen) { } int Jupiter::Socket::send(const Jupiter::ReadableString &str) { - return this->send(str.ptr(), str.size()); + return this->send(str.data(), str.size()); } int Jupiter::Socket::send(std::string_view str) { diff --git a/src/include/Jupiter/HTTP_QueryString.h b/src/include/Jupiter/HTTP_QueryString.h index d18dc61..f7a8c02 100644 --- a/src/include/Jupiter/HTTP_QueryString.h +++ b/src/include/Jupiter/HTTP_QueryString.h @@ -39,7 +39,7 @@ namespace Jupiter { public: QueryString() = delete; - inline QueryString(const Jupiter::ReadableString &query_string) : QueryString(query_string.ptr(), query_string.size()) {} + inline QueryString(const Jupiter::ReadableString &query_string) : QueryString(query_string.data(), query_string.size()) {} inline QueryString(const char *ptr, size_t str_size); }; @@ -52,7 +52,7 @@ namespace Jupiter public: HTMLFormResponse() = delete; inline HTMLFormResponse(std::string_view query_string) : HTMLFormResponse(query_string.data(), query_string.size()) {} - inline HTMLFormResponse(const Jupiter::ReadableString &query_string) : HTMLFormResponse(query_string.ptr(), query_string.size()) {} + inline HTMLFormResponse(const Jupiter::ReadableString &query_string) : HTMLFormResponse(query_string.data(), query_string.size()) {} inline HTMLFormResponse(const char *ptr, size_t str_size); using TableType = std::unordered_map, std::equal_to<>>; #ifdef __cpp_lib_generic_unordered_lookup diff --git a/src/include/Jupiter/Hash.h b/src/include/Jupiter/Hash.h index baefd0f..d948760 100644 --- a/src/include/Jupiter/Hash.h +++ b/src/include/Jupiter/Hash.h @@ -77,7 +77,7 @@ template inline R Jupiter::calcsum(const T *in_data, siz template inline R Jupiter::calcsum(const Jupiter::Readable_String &str) { - return Jupiter::calcsum(str.ptr(), str.size()); + return Jupiter::calcsum(str.data(), str.size()); } /** fnv1 implementation */ @@ -93,7 +93,7 @@ template inline uint64_t Jupiter::fnv1(const T *data, size_t length) template inline uint64_t Jupiter::fnv1(const Jupiter::Readable_String &data) { - return Jupiter::fnv1(reinterpret_cast(data.ptr()), reinterpret_cast(data.ptr() + data.size())); + return Jupiter::fnv1(reinterpret_cast(data.data()), reinterpret_cast(data.data() + data.size())); } template inline uint32_t Jupiter::fnv1_32(const T &data) @@ -108,7 +108,7 @@ template inline uint32_t Jupiter::fnv1_32(const T *data, size_t leng template inline uint32_t Jupiter::fnv1_32(const Jupiter::Readable_String &data) { - return Jupiter::fnv1_32(reinterpret_cast(data.ptr()), reinterpret_cast(data.ptr() + data.size())); + return Jupiter::fnv1_32(reinterpret_cast(data.data()), reinterpret_cast(data.data() + data.size())); } template inline uint64_t Jupiter::fnv1a(const T &data) @@ -123,7 +123,7 @@ template inline uint64_t Jupiter::fnv1a(const T *data, size_t length template inline uint64_t Jupiter::fnv1a(const Jupiter::Readable_String &data) { - return Jupiter::fnv1a(data.ptr(), data.size()); + return Jupiter::fnv1a(data.data(), data.size()); } template inline uint32_t Jupiter::fnv1a_32(const T &data) @@ -138,7 +138,7 @@ template inline uint32_t Jupiter::fnv1a_32(const T *data, size_t len template inline uint32_t Jupiter::fnv1a_32(const Jupiter::Readable_String &data) { - return Jupiter::fnv1a_32(data.ptr(), data.size()); + return Jupiter::fnv1a_32(data.data(), data.size()); } #endif // _HASH_H_HEADER \ No newline at end of file diff --git a/src/include/Jupiter/IRC_Client.h b/src/include/Jupiter/IRC_Client.h index cd7890e..30eec2f 100644 --- a/src/include/Jupiter/IRC_Client.h +++ b/src/include/Jupiter/IRC_Client.h @@ -218,21 +218,21 @@ namespace Jupiter * * @return String containing the user's nickname. */ - const Jupiter::ReadableString &getNickname() const; + std::string_view getNickname() const; /** * @brief Fetches the user's username. * * @return String containing the user's username. */ - const Jupiter::ReadableString &getUsername() const; + std::string_view getUsername() const; /** * @brief Fetches the user's hostname. * * @return String containing the user's hostname. */ - const Jupiter::ReadableString &getHostname() const; + std::string_view getHostname() const; /** * @brief Returns the number of channels the user shares with the local client. @@ -244,7 +244,7 @@ namespace Jupiter /** Private members */ private: unsigned int m_channel_count = 0; - Jupiter::StringS m_nickname; + std::string m_nickname; Jupiter::StringS m_username; Jupiter::StringS m_hostname; }; @@ -284,21 +284,21 @@ namespace Jupiter * * @return String containing the user's nickname. */ - const Jupiter::ReadableString &getNickname() const; + std::string_view getNickname() const; /** * @brief Fetches the user's username. * * @return String containing the user's username. */ - const Jupiter::ReadableString &getUsername() const; + std::string_view getUsername() const; /** * @brief Fetches the user's hostname. * * @return String containing the user's hostname. */ - const Jupiter::ReadableString &getHostname() const; + std::string_view getHostname() const; /** * @brief Returns the number of channels the user shares with the local client. diff --git a/src/include/Jupiter/Readable_String.h b/src/include/Jupiter/Readable_String.h index 4ab4d65..a42e89e 100644 --- a/src/include/Jupiter/Readable_String.h +++ b/src/include/Jupiter/Readable_String.h @@ -51,7 +51,7 @@ namespace Jupiter * * @return Pointer to the underlying string of elements. */ - virtual const T *ptr() const = 0; // RENAME; 'data' + virtual const T *data() const = 0; // KEEP /** * @brief Returns the number of elements in the String. @@ -102,12 +102,12 @@ namespace Jupiter virtual ~Readable_String() = default; /** Access operator */ - inline const T &operator[](size_t index) const { return this->ptr()[index]; }; + inline const T &operator[](size_t index) const { return this->data()[index]; }; /** Comparative operators */ inline bool operator==(const Readable_String& right)const{ return operator==(std::basic_string_view{right}); } inline bool operator==(const std::basic_string& right)const{ return operator==(std::basic_string_view{right}); } - inline bool operator==(const std::basic_string_view& right)const{ return std::basic_string_view(ptr(), size()) == right; } + inline bool operator==(const std::basic_string_view& right)const{ return std::basic_string_view(data(), size()) == right; } inline bool operator==(const T right)const{ return this->size() == 1 && this->get(0) == right; } inline bool operator==(std::nullptr_t) = delete; inline bool operator!=(const Readable_String &right)const{ return !operator==(right); } @@ -128,8 +128,8 @@ namespace Jupiter inline bool operator>=(const T right)const{ return !operator<(right); } /** Conversion operators */ - explicit inline operator std::basic_string() const { return std::basic_string(this->ptr(), this->size()); } - inline operator std::basic_string_view() const { return std::basic_string_view(this->ptr(), this->size()); } + explicit inline operator std::basic_string() const { return std::basic_string(this->data(), this->size()); } + inline operator std::basic_string_view() const { return std::basic_string_view(this->data(), this->size()); } }; /** Generic Readable String Type */ diff --git a/src/include/Jupiter/Readable_String_Imp.h b/src/include/Jupiter/Readable_String_Imp.h index fccac2b..9384d6c 100644 --- a/src/include/Jupiter/Readable_String_Imp.h +++ b/src/include/Jupiter/Readable_String_Imp.h @@ -69,7 +69,7 @@ template size_t Jupiter::Readable_String::find(const Jupiter::Rea template bool Jupiter::Readable_String::equalsi(const Jupiter::Readable_String &in) const { - return this->equalsi(in.ptr(), in.size()); + return this->equalsi(in.data(), in.size()); } template bool Jupiter::Readable_String::equalsi(const std::basic_string &in) const @@ -130,7 +130,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_implsecure(sizeof(size_t) + data->size() * sizeof(Y)); buffer->push(data->size()); - buffer->push(reinterpret_cast(data->ptr()), data->size() * sizeof(Y)); + buffer->push(reinterpret_cast(data->data()), data->size() * sizeof(Y)); }; }; diff --git a/src/include/Jupiter/Reference_String.h b/src/include/Jupiter/Reference_String.h index 1509d28..4eac17d 100644 --- a/src/include/Jupiter/Reference_String.h +++ b/src/include/Jupiter/Reference_String.h @@ -53,89 +53,11 @@ namespace Jupiter * * @return Pointer to the underlying string of elements. */ - const T *ptr() const override; - - /** - * @brief Truncates the string by a specified number of elements. - * - * @param n Number of elements to remove from the tail. - * @return New size of the String. - */ - virtual size_t truncate(size_t n); - - /** - * @brief Erases the string (sets the string's length to 0) - */ - void erase(); - - /** - * @brief Shifts the string pointer to the left. - * - * @param length Number of elements to shift - * @return Number of elements shifted to the left. - */ - size_t shiftLeft(size_t length); - - /** - * @brief Shifts the string pointer to the right. - * - * @param length Number of elements to shift - * @return Number of elements shifted. - */ - size_t shiftRight(size_t length); - - /** - * @brief Sets the reference to point to an input string. - * - * @param in String containing the data to be referenced. - * @return New size of the String. - */ - size_t set(const Jupiter::Readable_String &in); - size_t set(const std::basic_string &in); - size_t set(const T *in, size_t len); - size_t set(const T *in); - - /** - * @brief Creates a partial copy of the string. - * - * @param pos Position in the string to start copying from. - * @return String containing a partial copy of the original string. - */ - Reference_String substring(size_t pos) const; - - /** - * @brief Creates a partial copy of the string. - * - * @param pos Position in the string to start copying from. - * @param length Number of characters to copy. - * @return String containing a partial copy of the original string. - */ - Reference_String substring(size_t pos, size_t length) const; - - /** - * @brief Creates a partial copy of the string. - * - * @param in String to get a partial copy of. - * @param pos Position in the string to start copying from. - * @return String containing a partial copy of the original string. - */ - static Reference_String substring(const Jupiter::Readable_String &in, size_t pos); - static Reference_String substring(const T *in, size_t pos); - - /** - * @brief Creates a partial copy of the string. - * - * @param in String to get a partial copy of. - * @param pos Position in the string to start copying from. - * @param length Number of characters to copy. - * @return String containing a partial copy of the original string. - */ - static Reference_String substring(const Jupiter::Readable_String &in, size_t pos, size_t length); - static Reference_String substring(const T *in, size_t pos, size_t length); + const T* data() const override; /** Mutative operators */ - inline Reference_String& operator-=(size_t right) { this->truncate(right); return *this; }; - inline Reference_String& operator=(const Readable_String &right) { std::basic_string_view::operator=({right.ptr(), right.size()}); return *this; }; + inline Reference_String& operator=(const Readable_String &right) { std::basic_string_view::operator=({ + right.data(), right.size()}); return *this; }; inline Reference_String& operator=(const Reference_String &right) = default; inline Reference_String& operator=(const std::basic_string &right) { std::basic_string_view::operator=(right); return *this; }; inline Reference_String& operator=(const std::basic_string_view &right) { std::basic_string_view::operator=(right); return *this; }; diff --git a/src/include/Jupiter/Reference_String_Imp.h b/src/include/Jupiter/Reference_String_Imp.h index a42862a..861afcc 100644 --- a/src/include/Jupiter/Reference_String_Imp.h +++ b/src/include/Jupiter/Reference_String_Imp.h @@ -48,96 +48,17 @@ template Jupiter::Reference_String::Reference_String(const T *in) } template Jupiter::Reference_String::Reference_String(const Jupiter::Readable_String& in) - : Reference_String(in.ptr(), in.size()) { + : Reference_String(in.data(), in.size()) { } template size_t Jupiter::Reference_String::size() const { return std::basic_string_view::size(); } -template const T* Jupiter::Reference_String::ptr() const { +template const T* Jupiter::Reference_String::data() const { return std::basic_string_view::data(); } -// truncate - -template size_t Jupiter::Reference_String::truncate(size_t n) { - std::basic_string_view::remove_suffix(std::min(n, size())); - return size(); -} - -// erase - -template void Jupiter::Reference_String::erase() { - std::basic_string_view::remove_suffix(size()); -} - -// shift - -template size_t Jupiter::Reference_String::shiftLeft(size_t len) { - *this = std::basic_string_view{ this->data() - len, size() }; - return len; -} - -template size_t Jupiter::Reference_String::shiftRight(size_t len) { - len = std::min(len, size()); - this->remove_prefix(len); - return len; -} - -// set - -template size_t Jupiter::Reference_String::set(const Jupiter::Readable_String &in) { - return this->set(in.ptr(), in.size()); -} - -template size_t Jupiter::Reference_String::set(const std::basic_string &in) { - *this = in; - return size(); -} - -template size_t Jupiter::Reference_String::set(const T *in, size_t len) { - *this = std::basic_string_view{ in, len }; - return size(); -} - -template size_t Jupiter::Reference_String::set(const T *in) { - if (in == nullptr) { - *this = std::basic_string_view{}; - } - *this = std::basic_string_view{ in }; - return size(); -} - -template Jupiter::Reference_String Jupiter::Reference_String::substring(size_t pos) const { - return Jupiter::Reference_String::substring(*this, pos); -} - -template Jupiter::Reference_String Jupiter::Reference_String::substring(size_t pos, size_t len) const { - return Jupiter::Reference_String::substring(*this, pos, len); -} - -template Jupiter::Reference_String Jupiter::Reference_String::substring(const Jupiter::Readable_String &in, size_t pos) { - pos = std::min(pos, in.size()); - return Jupiter::Reference_String(in.ptr() + pos, in.size() - pos); -} - -template Jupiter::Reference_String Jupiter::Reference_String::substring(const T *in, size_t pos) { - return Jupiter::Reference_String(in + pos); -} - -template Jupiter::Reference_String Jupiter::Reference_String::substring(const Jupiter::Readable_String &in, size_t pos, size_t len) { - if (pos + len > in.size()) { - return Jupiter::Reference_String::substring(in, pos); - } - - return Jupiter::Reference_String(in.ptr() + pos, len); -} - -template Jupiter::Reference_String Jupiter::Reference_String::substring(const T *in, size_t pos, size_t len) { - return Jupiter::Reference_String(in + pos, len); -} - // Jupiter::DataBuffer specialization template<> struct _Jupiter_DataBuffer_partial_specialization_impl { diff --git a/src/include/Jupiter/String_Imp.h b/src/include/Jupiter/String_Imp.h index 9cf2166..334eb50 100644 --- a/src/include/Jupiter/String_Imp.h +++ b/src/include/Jupiter/String_Imp.h @@ -69,11 +69,13 @@ template Jupiter::String_Strict::String_Strict(Jupiter::String_St { } -template Jupiter::String_Strict::String_Strict(const Jupiter::String_Strict &in) : Jupiter::String_Strict::String_Strict(in.ptr(), in.size()) +template Jupiter::String_Strict::String_Strict(const Jupiter::String_Strict &in) : Jupiter::String_Strict::String_Strict( + in.data(), in.size()) { } -template Jupiter::String_Strict::String_Strict(const Jupiter::Readable_String &in) : Jupiter::String_Strict::String_Strict(in.ptr(), in.size()) +template Jupiter::String_Strict::String_Strict(const Jupiter::Readable_String &in) : Jupiter::String_Strict::String_Strict( + in.data(), in.size()) { } @@ -112,7 +114,7 @@ template Jupiter::String_Strict::String_Strict(const Jupiter::Rea if (lhs.isNotEmpty()) { - itr = lhs.ptr(); + itr = lhs.data(); end = itr + lhs.size(); *Jupiter::String_Type::str = *itr; while (++itr != end) @@ -126,7 +128,8 @@ template Jupiter::String_Strict::String_Strict(const Jupiter::Rea Jupiter::String_Type::str = Jupiter::Shift_String_Type::base; } -template Jupiter::String_Strict::String_Strict(const Jupiter::Readable_String &lhs, const Jupiter::Readable_String &rhs) : String_Strict(lhs, rhs.ptr(), rhs.size()) +template Jupiter::String_Strict::String_Strict(const Jupiter::Readable_String &lhs, const Jupiter::Readable_String &rhs) : String_Strict(lhs, + rhs.data(), rhs.size()) { } @@ -145,7 +148,7 @@ template Jupiter::String_Strict::String_Strict(const Jupiter::Rea if (lhs.isNotEmpty()) { - itr = lhs.ptr(); + itr = lhs.data(); end = itr + lhs.size(); *Jupiter::String_Type::str = *itr; while (++itr != end) @@ -383,7 +386,8 @@ template Jupiter::String_Loose::String_Loose(const Jupiter::Strin Jupiter::String_Type::str[Jupiter::String_Type::length] = in.get(Jupiter::String_Type::length); } -template Jupiter::String_Loose::String_Loose(const Jupiter::Readable_String &in) : Jupiter::String_Loose::String_Loose(in.ptr(), in.size()) +template Jupiter::String_Loose::String_Loose(const Jupiter::Readable_String &in) : Jupiter::String_Loose::String_Loose( + in.data(), in.size()) { } @@ -433,7 +437,7 @@ template Jupiter::String_Loose::String_Loose(const Jupiter::Reada if (lhs.isNotEmpty()) { - itr = lhs.ptr(); + itr = lhs.data(); end = itr + lhs.size(); *Jupiter::String_Type::str = *itr; while (++itr != end) @@ -447,7 +451,8 @@ template Jupiter::String_Loose::String_Loose(const Jupiter::Reada Jupiter::String_Type::str = Jupiter::Shift_String_Type::base; } -template Jupiter::String_Loose::String_Loose(const Jupiter::Readable_String &lhs, const Jupiter::Readable_String &rhs) : String_Loose(lhs, rhs.ptr(), rhs.size()) +template Jupiter::String_Loose::String_Loose(const Jupiter::Readable_String &lhs, const Jupiter::Readable_String &rhs) : String_Loose(lhs, + rhs.data(), rhs.size()) { } @@ -466,7 +471,7 @@ template Jupiter::String_Loose::String_Loose(const Jupiter::Reada if (lhs.isNotEmpty()) { - itr = lhs.ptr(); + itr = lhs.data(); end = itr + lhs.size(); *Jupiter::String_Type::str = *itr; while (++itr != end) diff --git a/src/include/Jupiter/String_Type.h b/src/include/Jupiter/String_Type.h index f02e293..bd25be2 100644 --- a/src/include/Jupiter/String_Type.h +++ b/src/include/Jupiter/String_Type.h @@ -47,20 +47,12 @@ namespace Jupiter { public: - /** - * @brief Fetches an element from the string. - * - * @param index Index of the element to return. - * @return The element located at the specified index. - */ - const T &get(size_t index) const; - /** * @brief Returns the number of elements in the String. * * @return Number of elements in the string. */ - size_t size() const; + size_t size() const override; /** * @brief Returns the maximum number of elements the String can contain, @@ -76,7 +68,7 @@ namespace Jupiter * * @return Pointer to the underlying string of elements. */ - const T *ptr() const; + const T *data() const override; /** * @brief Sets the String's contents based on the format string and input variables. @@ -283,6 +275,8 @@ namespace Jupiter inline String_Type &operator=(const T *right) { this->set(right); return *this; }; inline String_Type &operator=(const T right) { this->set(right); return *this; }; + using Readable_String::operator[]; + /** * @brief Default constructor for the String_Type class. */ diff --git a/src/include/Jupiter/String_Type_Imp.h b/src/include/Jupiter/String_Type_Imp.h index 5f53119..205358a 100644 --- a/src/include/Jupiter/String_Type_Imp.h +++ b/src/include/Jupiter/String_Type_Imp.h @@ -41,11 +41,6 @@ template Jupiter::String_Type::String_Type(Jupiter::String_Type const T &Jupiter::String_Type::get(size_t index) const -{ - return Jupiter::String_Type::str[index]; -} - template size_t Jupiter::String_Type::size() const { return Jupiter::String_Type::length; @@ -56,7 +51,7 @@ template size_t Jupiter::String_Type::capacity() const return this->size(); } -template const T *Jupiter::String_Type::ptr() const +template const T *Jupiter::String_Type::data() const { return Jupiter::String_Type::str; } @@ -179,32 +174,32 @@ template<> inline void Jupiter::String_Type::processEscapeSequences() size_t index = 0; while (index + 1 != Jupiter::String_Type::length) { - if (this->get(index) == '\\') + if (operator[](index) == '\\') { - switch (this->get(++index)) + switch (operator[](++index)) { case '0': case '1': case '2': case '3': - if (index + 1 != Jupiter::String_Type::length && Jupiter_isOctal(this->get(index + 1))) + if (index + 1 != Jupiter::String_Type::length && Jupiter_isOctal(operator[](index + 1))) { - if (index + 2 != Jupiter::String_Type::length && Jupiter_isOctal(this->get(index + 2))) - this->replace(index - 1, 4, static_cast(Jupiter_getOctal(this->get(index))) << 6 | static_cast(Jupiter_getOctal(this->get(index + 1))) << 3 | static_cast(Jupiter_getOctal(this->get(index + 2)))); + if (index + 2 != Jupiter::String_Type::length && Jupiter_isOctal(operator[](index + 2))) + this->replace(index - 1, 4, static_cast(Jupiter_getOctal(operator[](index))) << 6 | static_cast(Jupiter_getOctal(operator[](index + 1))) << 3 | static_cast(Jupiter_getOctal(operator[](index + 2)))); else - this->replace(index - 1, 3, static_cast(Jupiter_getOctal(this->get(index))) << 3 | static_cast(Jupiter_getOctal(this->get(index + 1)))); + this->replace(index - 1, 3, static_cast(Jupiter_getOctal(operator[](index))) << 3 | static_cast(Jupiter_getOctal(operator[](index + 1)))); } else - this->replace(index - 1, 2, static_cast(Jupiter_getOctal(this->get(index)))); + this->replace(index - 1, 2, static_cast(Jupiter_getOctal(operator[](index)))); break; case '4': case '5': case '6': case '7': - if (index + 1 != Jupiter::String_Type::length && Jupiter_isOctal(this->get(index + 1))) - this->replace(index - 1, 3, static_cast(Jupiter_getOctal(this->get(index))) << 3 | static_cast(Jupiter_getOctal(this->get(index + 1)))); + if (index + 1 != Jupiter::String_Type::length && Jupiter_isOctal(operator[](index + 1))) + this->replace(index - 1, 3, static_cast(Jupiter_getOctal(operator[](index))) << 3 | static_cast(Jupiter_getOctal(operator[](index + 1)))); else - this->replace(index - 1, 2, static_cast(Jupiter_getOctal(this->get(index)))); + this->replace(index - 1, 2, static_cast(Jupiter_getOctal(operator[](index)))); break; case 'a': this->replace(index - 1, 2, '\a'); @@ -241,20 +236,20 @@ template<> inline void Jupiter::String_Type::processEscapeSequences() break; case 'x': if (Jupiter::String_Type::length >= index + 2 - && Jupiter_isHex(this->get(index + 1)) && Jupiter_isHex(this->get(index + 2))) - this->replace(index - 1, 4, static_cast(Jupiter_getHex(this->get(index + 1))) << 4 | static_cast(Jupiter_getHex(this->get(index + 2)))); + && Jupiter_isHex(operator[](index + 1)) && Jupiter_isHex(operator[](index + 2))) + this->replace(index - 1, 4, static_cast(Jupiter_getHex(operator[](index + 1))) << 4 | static_cast(Jupiter_getHex(operator[](index + 2)))); break; case 'U': if (Jupiter::String_Type::length >= index + 8 - && Jupiter_isHex(this->get(index + 1)) && Jupiter_isHex(this->get(index + 2)) && Jupiter_isHex(this->get(index + 3)) && Jupiter_isHex(this->get(index + 4)) && Jupiter_isHex(this->get(index + 5)) && Jupiter_isHex(this->get(index + 6)) && Jupiter_isHex(this->get(index + 7)) && Jupiter_isHex(this->get(index + 8))) + && Jupiter_isHex(operator[](index + 1)) && Jupiter_isHex(operator[](index + 2)) && Jupiter_isHex(operator[](index + 3)) && Jupiter_isHex(operator[](index + 4)) && Jupiter_isHex(operator[](index + 5)) && Jupiter_isHex(operator[](index + 6)) && Jupiter_isHex(operator[](index + 7)) && Jupiter_isHex(operator[](index + 8))) { - uint32_t codepoint = static_cast(Jupiter_getHex(this->get(index + 1))) << 4 | static_cast(Jupiter_getHex(this->get(index + 2))); + uint32_t codepoint = static_cast(Jupiter_getHex(operator[](index + 1))) << 4 | static_cast(Jupiter_getHex(operator[](index + 2))); codepoint <<= 8; - codepoint |= static_cast(Jupiter_getHex(this->get(index + 3))) << 4 | static_cast(Jupiter_getHex(this->get(index + 4))); + codepoint |= static_cast(Jupiter_getHex(operator[](index + 3))) << 4 | static_cast(Jupiter_getHex(operator[](index + 4))); codepoint <<= 8; - codepoint |= static_cast(Jupiter_getHex(this->get(index + 5))) << 4 | static_cast(Jupiter_getHex(this->get(index + 6))); + codepoint |= static_cast(Jupiter_getHex(operator[](index + 5))) << 4 | static_cast(Jupiter_getHex(operator[](index + 6))); codepoint <<= 8; - codepoint |= static_cast(Jupiter_getHex(this->get(index + 7))) << 4 | static_cast(Jupiter_getHex(this->get(index + 8))); + codepoint |= static_cast(Jupiter_getHex(operator[](index + 7))) << 4 | static_cast(Jupiter_getHex(operator[](index + 8))); if (codepoint <= 0x007F) this->replace(index - 1, 10, static_cast(codepoint)); else if (codepoint <= 0x07FF) @@ -288,11 +283,11 @@ template<> inline void Jupiter::String_Type::processEscapeSequences() break; case 'u': if (Jupiter::String_Type::length >= index + 4 - && Jupiter_isHex(this->get(index + 1)) && Jupiter_isHex(this->get(index + 2)) && Jupiter_isHex(this->get(index + 3)) && Jupiter_isHex(this->get(index + 4))) + && Jupiter_isHex(operator[](index + 1)) && Jupiter_isHex(operator[](index + 2)) && Jupiter_isHex(operator[](index + 3)) && Jupiter_isHex(operator[](index + 4))) { - uint16_t codepoint = static_cast(Jupiter_getHex(this->get(index + 1))) << 4 | static_cast(Jupiter_getHex(this->get(index + 2))); + uint16_t codepoint = static_cast(Jupiter_getHex(operator[](index + 1))) << 4 | static_cast(Jupiter_getHex(operator[](index + 2))); codepoint <<= 8; - codepoint |= static_cast(Jupiter_getHex(this->get(index + 3))) << 4 | static_cast(Jupiter_getHex(this->get(index + 4))); + codepoint |= static_cast(Jupiter_getHex(operator[](index + 3))) << 4 | static_cast(Jupiter_getHex(operator[](index + 4))); if (codepoint <= 0x007F) this->replace(index - 1, 6, static_cast(codepoint)); else if (codepoint <= 0x07FF) @@ -377,7 +372,7 @@ template size_t Jupiter::String_Type::set(size_t index, const T * template size_t Jupiter::String_Type::set(size_t index, const Jupiter::Readable_String &in) { - return this->set(index, in.ptr(), in.size()); + return this->set(index, in.data(), in.size()); } template size_t Jupiter::String_Type::set(size_t index, const std::basic_string &in) @@ -402,7 +397,7 @@ template size_t Jupiter::String_Type::set(const T *in, size_t inS template size_t Jupiter::String_Type::set(const Jupiter::Readable_String &in) { - return this->set(in.ptr(), in.size()); + return this->set(in.data(), in.size()); } template size_t Jupiter::String_Type::set(const std::basic_string &in) @@ -431,7 +426,7 @@ template size_t Jupiter::String_Type::insert(size_t index, const this->setBufferSize(Jupiter::String_Type::length + 1); for (size_t i = Jupiter::String_Type::length; i != index; i--) - Jupiter::String_Type::str[i] = this->get(i-1); + Jupiter::String_Type::str[i] = operator[](i-1); Jupiter::String_Type::str[index] = value; return ++Jupiter::String_Type::length; @@ -451,7 +446,7 @@ template size_t Jupiter::String_Type::insert(size_t index, const this->setBufferSize(Jupiter::String_Type::length + value.size()); size_t i; for (i = Jupiter::String_Type::length + value.size() - 1; i != index + value.size() - 1; i--) - Jupiter::String_Type::str[i] = this->get(i - value.size()); + Jupiter::String_Type::str[i] = operator[](i - value.size()); while (i != index) { @@ -554,7 +549,7 @@ template size_t Jupiter::String_Type::replace(size_t index, size_ } template size_t Jupiter::String_Type::replace(size_t index, size_t targetSize, const Jupiter::Readable_String &value) { - return this->replace(index, targetSize, value.ptr(), value.size()); + return this->replace(index, targetSize, value.data(), value.size()); } template size_t Jupiter::String_Type::replace(size_t index, size_t targetSize, std::basic_string_view value) { @@ -565,7 +560,7 @@ template size_t Jupiter::String_Type::replace(const T &target, co { for (size_t i = 0; i != Jupiter::String_Type::length; i++) { - if (this->get(i) == target) + if (operator[](i) == target) Jupiter::String_Type::str[i] = value; } return Jupiter::String_Type::length; @@ -584,7 +579,7 @@ template size_t Jupiter::String_Type::replace(const T *target, si while (j <= Jupiter::String_Type::length - targetSize) { k = 0; - while (this->get(j + k) == target[k]) + while (operator[](j + k) == target[k]) { if (++k == targetSize) // match found { @@ -610,7 +605,7 @@ template size_t Jupiter::String_Type::replace(const T *target, si template size_t Jupiter::String_Type::replace(const Jupiter::Readable_String &target, const T &value) { - return this->replace(target.ptr(), target.size(), value); + return this->replace(target.data(), target.size(), value); } template size_t Jupiter::String_Type::replace(const T *target, size_t targetSize, const T *value, size_t valueSize) @@ -634,7 +629,7 @@ template size_t Jupiter::String_Type::replace(const T *target, si while (i <= Jupiter::String_Type::length - targetSize) { j = 0; - while (this->get(i + j) == target[j]) + while (operator[](i + j) == target[j]) { if (++j == targetSize) { @@ -685,7 +680,7 @@ template size_t Jupiter::String_Type::replace(const T *target, si while (j <= Jupiter::String_Type::length - targetSize) { k = 0; - while (this->get(j + k) == target[k]) + while (operator[](j + k) == target[k]) { if (++k == targetSize) // match found { @@ -713,17 +708,17 @@ template size_t Jupiter::String_Type::replace(const T *target, si template size_t Jupiter::String_Type::replace(const T *target, size_t targetSize, const Jupiter::Readable_String &value) { - return this->replace(target, targetSize, value.ptr(), value.size()); + return this->replace(target, targetSize, value.data(), value.size()); } template size_t Jupiter::String_Type::replace(const Jupiter::Readable_String &target, const T *value, size_t valueSize) { - return this->replace(target.ptr(), target.size(), value, valueSize); + return this->replace(target.data(), target.size(), value, valueSize); } template size_t Jupiter::String_Type::replace(const Jupiter::Readable_String &target, const Jupiter::Readable_String &value) { - return this->replace(target.ptr(), target.size(), value.ptr(), value.size()); + return this->replace(target.data(), target.size(), value.data(), value.size()); } template size_t Jupiter::String_Type::replace(std::basic_string_view target, std::basic_string_view value) @@ -743,7 +738,7 @@ template size_t Jupiter::String_Type::concat(const T *in, size_t template size_t Jupiter::String_Type::concat(const Jupiter::Readable_String &in) { - return this->concat(in.ptr(), in.size()); + return this->concat(in.data(), in.size()); } template size_t Jupiter::String_Type::concat(const std::basic_string &in)