From 2f2b11a19f68682f43df44eb54f59c3591cac1f7 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Wed, 30 Sep 2015 23:54:25 -0400 Subject: [PATCH] Fixed numerous minor errors discovered while attempting to compile on linux (support not yet restored). --- Jupiter/Base64.h | 2 + Jupiter/CString.h | 40 ++++++------ Jupiter/CString_Imp.h | 40 ++++++------ Jupiter/Functions.h | 2 + Jupiter/Readable_String.h | 6 +- Jupiter/Readable_String_Imp.h | 6 +- Jupiter/Reference_String.h | 18 +++--- Jupiter/Reference_String_Imp.h | 18 +++--- Jupiter/String.h | 56 ++++++++-------- Jupiter/String_Imp.h | 114 ++++++++++++++++----------------- Release/Jupiter.lib | Bin 289960 -> 289960 bytes 11 files changed, 153 insertions(+), 149 deletions(-) diff --git a/Jupiter/Base64.h b/Jupiter/Base64.h index f421198..982abc5 100644 --- a/Jupiter/Base64.h +++ b/Jupiter/Base64.h @@ -28,6 +28,7 @@ #if defined __cplusplus #include +#include namespace Jupiter { @@ -110,6 +111,7 @@ extern "C" #else #include #include +#include #endif // __cplusplus /** diff --git a/Jupiter/CString.h b/Jupiter/CString.h index 9980d67..f8ac7e1 100644 --- a/Jupiter/CString.h +++ b/Jupiter/CString.h @@ -189,9 +189,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - TokenizeResult tokenize(const T &separator) const; - TokenizeResult tokenize(const Jupiter::Readable_String &separator) const; - TokenizeResult tokenize(const T *separator, size_t separator_size) const; + Jupiter::Readable_String::template TokenizeResult tokenize(const T &separator) const; + Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &separator) const; + Jupiter::Readable_String::template TokenizeResult tokenize(const T *separator, size_t separator_size) const; /** * @brief Tokenizes a string, based on an input token separator @@ -200,9 +200,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); /** * @brief Copies the data from the input string to the CString. @@ -424,9 +424,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - TokenizeResult tokenize(const T &separator); - TokenizeResult tokenize(const Jupiter::Readable_String &separator); - TokenizeResult tokenize(const T *separator, size_t separator_size); + Jupiter::Readable_String::template TokenizeResult tokenize(const T &separator); + Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &separator); + Jupiter::Readable_String::template TokenizeResult tokenize(const T *separator, size_t separator_size); /** * @brief Tokenizes a string, based on an input token separator @@ -435,9 +435,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); /** * @brief Sets the internal buffer to be at least large enough to old a specified number of elements. @@ -541,20 +541,20 @@ namespace Jupiter namespace literals { /** CString_Strict literals */ - inline Jupiter::CStringType operator""_jcst(const char *str, size_t len) { return Jupiter::CStringType(str, len); } - inline Jupiter::WCStringType operator""_jwcst(const wchar_t *str, size_t len) { return Jupiter::WCStringType(str, len); } + inline Jupiter::CStringType operator"" _jcst(const char *str, size_t len) { return Jupiter::CStringType(str, len); } + inline Jupiter::WCStringType operator"" _jwcst(const wchar_t *str, size_t len) { return Jupiter::WCStringType(str, len); } /** CString_Strict literals */ - inline Jupiter::CStringS operator""_jcss(const char *str, size_t len) { return Jupiter::CStringS(str, len); } - inline Jupiter::WCStringS operator""_jwcss(const wchar_t *str, size_t len) { return Jupiter::WCStringS(str, len); } + inline Jupiter::CStringS operator"" _jcss(const char *str, size_t len) { return Jupiter::CStringS(str, len); } + inline Jupiter::WCStringS operator"" _jwcss(const wchar_t *str, size_t len) { return Jupiter::WCStringS(str, len); } /** CString_Loose literals */ - inline Jupiter::CStringL operator""_jcsl(const char *str, size_t len) { return Jupiter::CStringL(str, len); } - inline Jupiter::WCStringL operator""_jwcsl(const wchar_t *str, size_t len) { return Jupiter::WCStringL(str, len); } + inline Jupiter::CStringL operator"" _jcsl(const char *str, size_t len) { return Jupiter::CStringL(str, len); } + inline Jupiter::WCStringL operator"" _jwcsl(const wchar_t *str, size_t len) { return Jupiter::WCStringL(str, len); } /** CString literals */ - inline Jupiter::CStringS operator""_jcs(const char *str, size_t len) { return Jupiter::CString(str, len); } - inline Jupiter::WCStringS operator""_jwcs(const wchar_t *str, size_t len) { return Jupiter::WCString(str, len); } + inline Jupiter::CStringS operator"" _jcs(const char *str, size_t len) { return Jupiter::CString(str, len); } + inline Jupiter::WCStringS operator"" _jwcs(const wchar_t *str, size_t len) { return Jupiter::WCString(str, len); } } } diff --git a/Jupiter/CString_Imp.h b/Jupiter/CString_Imp.h index 255e15c..fde7b5e 100644 --- a/Jupiter/CString_Imp.h +++ b/Jupiter/CString_Imp.h @@ -373,34 +373,34 @@ template Jupiter::CString_Type Jupiter::CString_Type::gotoWord // tokenize -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Type::tokenize(const T &separator) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Type::tokenize(const T &separator) const { return Jupiter::CString_Type::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &separator) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &separator) const { return Jupiter::CString_Type::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Type::tokenize(const T *separator, size_t separator_size) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Type::tokenize(const T *separator, size_t separator_size) const { return Jupiter::CString_Type::tokenize(*this, separator, separator_size); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &in, const T &token) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &in, const T &token) { - return Jupiter::Readable_String::tokenize(in, token); + return typename Jupiter::template Readable_String::template tokenize(in, token); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) { - return Jupiter::Readable_String::tokenize(in, separator); + return typename Jupiter::template Readable_String::template tokenize(in, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Type::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) { - return Jupiter::Readable_String::tokenize(in, separator, separator_size); + return typename Jupiter::template Readable_String::template tokenize(in, separator, separator_size); } // set @@ -539,7 +539,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_impl(head); head += sizeof(size_t); - Jupiter::CString_Type r = Jupiter::CString_Type(reinterpret_cast(head), size_); + Jupiter::CString_Type r = Jupiter::CString_Type(reinterpret_cast(head), size_); head += size_; return r; } @@ -800,34 +800,34 @@ template Jupiter::CString_Loose Jupiter::CString_Loose::gotoWo // tokenize -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Loose::tokenize(const T &token) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Loose::tokenize(const T &token) { return Jupiter::CString_Loose::tokenize(*this, token); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &separator) { return Jupiter::CString_Loose::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Loose::tokenize(const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Loose::tokenize(const T *separator, size_t separator_size) { return Jupiter::CString_Loose::tokenize(*this, separator, separator_size); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &in, const T &token) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &in, const T &token) { - return Jupiter::Readable_String::tokenize(in, token); + return typename Jupiter::template Readable_String::template tokenize(in, token); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) { - return Jupiter::Readable_String::tokenize(in, separator); + return typename Jupiter::template Readable_String::template tokenize(in, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::CString_Loose::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) { - return Jupiter::Readable_String::tokenize(in, separator, separator_size); + return typename Jupiter::template Readable_String::template tokenize(in, separator, separator_size); } // Operators @@ -894,7 +894,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_impl(head); head += sizeof(size_t); - Jupiter::CString_Loose r = Jupiter::CString_Loose(reinterpret_cast(head), size_); + Jupiter::CString_Loose r = Jupiter::CString_Loose(reinterpret_cast(head), size_); head += size_; return r; } diff --git a/Jupiter/Functions.h b/Jupiter/Functions.h index 499121b..8edfc56 100644 --- a/Jupiter/Functions.h +++ b/Jupiter/Functions.h @@ -30,6 +30,7 @@ #if defined __cplusplus #include +#include namespace Jupiter { @@ -89,6 +90,7 @@ extern "C" #else // __cplusplus #include #include +#include #endif // __cplusplus /** diff --git a/Jupiter/Readable_String.h b/Jupiter/Readable_String.h index f890602..34d49cb 100644 --- a/Jupiter/Readable_String.h +++ b/Jupiter/Readable_String.h @@ -389,9 +389,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - template class R> static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); - template class R> static TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); - template class R> static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); + template class R> static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); + template class R> static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); + template class R> static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); /** Access operator */ inline const T &operator[](size_t index) const { return this->get(index); }; diff --git a/Jupiter/Readable_String_Imp.h b/Jupiter/Readable_String_Imp.h index 35ffb7f..601f44f 100644 --- a/Jupiter/Readable_String_Imp.h +++ b/Jupiter/Readable_String_Imp.h @@ -1394,7 +1394,7 @@ template template class R> inline typename Jupite // tokenize -template template class R> typename Jupiter::Readable_String::TokenizeResult Jupiter::Readable_String::tokenize(const Jupiter::Readable_String &in, const T &token) +template template class R> typename Jupiter::Readable_String::template TokenizeResult Jupiter::Readable_String::tokenize(const Jupiter::Readable_String &in, const T &token) { // special case: no input if (in.isEmpty()) @@ -1443,12 +1443,12 @@ template template class R> typename Jupiter::Read return TokenizeResult(tokens, length); } -template template class R> typename Jupiter::Readable_String::TokenizeResult Jupiter::Readable_String::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) +template template class R> typename Jupiter::Readable_String::template TokenizeResult Jupiter::Readable_String::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) { return Jupiter::Readable_String::tokenize(in, separator.ptr(), separator.size()); } -template template class R> typename Jupiter::Readable_String::TokenizeResult Jupiter::Readable_String::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) +template template class R> typename Jupiter::Readable_String::template TokenizeResult Jupiter::Readable_String::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) { // special case: separator is a single element if (separator_size == 1) diff --git a/Jupiter/Reference_String.h b/Jupiter/Reference_String.h index 749a87e..1a499d3 100644 --- a/Jupiter/Reference_String.h +++ b/Jupiter/Reference_String.h @@ -240,9 +240,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - TokenizeResult tokenize(const T &separator) const; - TokenizeResult tokenize(const Jupiter::Readable_String &separator) const; - TokenizeResult tokenize(const T *separator, size_t separator_size) const; + Jupiter::Readable_String::template TokenizeResult tokenize(const T &separator) const; + Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &separator) const; + Jupiter::Readable_String::template TokenizeResult tokenize(const T *separator, size_t separator_size) const; /** * @brief Tokenizes a string, based on an input token separator @@ -251,9 +251,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); + static Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); /** Mutative operators */ inline Readable_String &operator-=(size_t right) { this->truncate(right); return *this; }; @@ -319,13 +319,13 @@ namespace Jupiter namespace literals { /** Reference_String literals */ - inline Jupiter::ReferenceString operator""_jrs(const char *str, size_t len) { return Jupiter::ReferenceString(str, len); } - inline Jupiter::ReferenceWString operator""_jrws(const wchar_t *str, size_t len) { return Jupiter::ReferenceWString(str, len); } + inline Jupiter::ReferenceString operator"" _jrs(const char *str, size_t len) { return Jupiter::ReferenceString(str, len); } + inline Jupiter::ReferenceWString operator"" _jrws(const wchar_t *str, size_t len) { return Jupiter::ReferenceWString(str, len); } } } /** DEPRECATED */ -#define STRING_LITERAL_AS_REFERENCE(str) Jupiter::literals::operator""_jrs(str, sizeof(str) - 1) +#define STRING_LITERAL_AS_REFERENCE(str) Jupiter::literals::operator"" _jrs(str, sizeof(str) - 1) #define STRING_LITERAL_AS_NAMED_REFERENCE(name, str) Jupiter::ReferenceString name = STRING_LITERAL_AS_REFERENCE(str) #include "Reference_String_Imp.h" diff --git a/Jupiter/Reference_String_Imp.h b/Jupiter/Reference_String_Imp.h index 98a8ab8..acf910e 100644 --- a/Jupiter/Reference_String_Imp.h +++ b/Jupiter/Reference_String_Imp.h @@ -239,34 +239,34 @@ template const Jupiter::Reference_String Jupiter::Reference_Strin // tokenize -template typename Jupiter::Readable_String::TokenizeResult Jupiter::Reference_String::tokenize(const T &separator) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::Reference_String::tokenize(const T &separator) const { return Jupiter::Reference_String::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &separator) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &separator) const { return Jupiter::Reference_String::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::Reference_String::tokenize(const T *separator, size_t separator_size) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::Reference_String::tokenize(const T *separator, size_t separator_size) const { return Jupiter::Reference_String::tokenize(*this, separator, separator_size); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &in, const T &token) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &in, const T &token) { - return Jupiter::Readable_String::tokenize(in, token); + return typename Jupiter::template Readable_String::template tokenize(in, token); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) { - return Jupiter::Readable_String::tokenize(in, separator); + return typename Jupiter::template Readable_String::template tokenize(in, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::Reference_String::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) { - return Jupiter::Readable_String::tokenize(in, separator, separator_size); + return typename Jupiter::template Readable_String::template tokenize(in, separator, separator_size); } // Jupiter::DataBuffer specialization diff --git a/Jupiter/String.h b/Jupiter/String.h index a3442f2..36ed693 100644 --- a/Jupiter/String.h +++ b/Jupiter/String.h @@ -81,7 +81,7 @@ namespace Jupiter * @param pos Position in the string to start copying from. * @return String containing a partial copy of the original string. */ - String_Strict substring(size_t pos) const; + typename Jupiter::template String_Strict substring(size_t pos) const; /** * @brief Creates a partial copy of the string. @@ -90,7 +90,7 @@ namespace Jupiter * @param length Number of characters to copy. * @return String containing a partial copy of the original string. */ - String_Strict substring(size_t pos, size_t length) const; + typename Jupiter::template String_Strict substring(size_t pos, size_t length) const; /** * @brief Creates a partial copy of the string. @@ -99,8 +99,8 @@ namespace Jupiter * @param pos Position in the string to start copying from. * @return String containing a partial copy of the original string. */ - static String_Strict substring(const Jupiter::Readable_String &in, size_t pos); - static String_Strict substring(const T *in, size_t pos); + static typename Jupiter::template String_Strict substring(const Jupiter::Readable_String &in, size_t pos); + static typename Jupiter::template String_Strict substring(const T *in, size_t pos); /** * @brief Creates a partial copy of the string. @@ -110,8 +110,8 @@ namespace Jupiter * @param length Number of characters to copy. * @return String containing a partial copy of the original string. */ - static String_Strict substring(const Jupiter::Readable_String &in, size_t pos, size_t length); - static String_Strict substring(const T *in, size_t pos, size_t length); + static typename Jupiter::template String_Strict substring(const Jupiter::Readable_String &in, size_t pos, size_t length); + static typename Jupiter::template String_Strict substring(const T *in, size_t pos, size_t length); /** * @brief Creates a partial copy of the string, based on a set of tokens. @@ -209,9 +209,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - TokenizeResult tokenize(const T &separator) const; - TokenizeResult tokenize(const Jupiter::Readable_String &separator) const; - TokenizeResult tokenize(const T *separator, size_t separator_size) const; + typename Jupiter::Readable_String::template TokenizeResult tokenize(const T &separator) const; + typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &separator) const; + typename Jupiter::Readable_String::template TokenizeResult tokenize(const T *separator, size_t separator_size) const; /** * @brief Tokenizes a string, based on an input token separator @@ -220,9 +220,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); + static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); + static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); + static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); /** Default Constructor */ String_Strict(); @@ -339,7 +339,7 @@ namespace Jupiter * @param pos Position in the string to start copying from. * @return String containing a partial copy of the original string. */ - String_Loose substring(size_t pos) const; + typename Jupiter::template String_Loose substring(size_t pos) const; /** * @brief Creates a partial copy of the string. @@ -348,7 +348,7 @@ namespace Jupiter * @param length Number of characters to copy. * @return String containing a partial copy of the original string. */ - String_Loose substring(size_t pos, size_t length) const; + typename Jupiter::template String_Loose substring(size_t pos, size_t length) const; /** * @brief Creates a partial copy of the string. @@ -357,8 +357,8 @@ namespace Jupiter * @param pos Position in the string to start copying from. * @return String containing a partial copy of the original string. */ - static String_Loose substring(const Jupiter::Readable_String &in, size_t pos); - static String_Loose substring(const T *in, size_t pos); + static typename Jupiter::template String_Loose substring(const Jupiter::Readable_String &in, size_t pos); + static typename Jupiter::template String_Loose substring(const T *in, size_t pos); /** * @brief Creates a partial copy of the string. @@ -368,8 +368,8 @@ namespace Jupiter * @param length Number of characters to copy. * @return String containing a partial copy of the original string. */ - static String_Loose substring(const Jupiter::Readable_String &in, size_t pos, size_t length); - static String_Loose substring(const T *in, size_t pos, size_t length); + static typename Jupiter::template String_Loose substring(const Jupiter::Readable_String &in, size_t pos, size_t length); + static typename Jupiter::template String_Loose substring(const T *in, size_t pos, size_t length); /** * @brief Creates a partial copy of the string, based on a set of tokens. @@ -409,8 +409,8 @@ namespace Jupiter * @param token Token to scan for. * @return String containing a partial copy of the original string. */ - String_Loose getToken(size_t pos, const T &token); - String_Loose getToken(size_t pos, const Jupiter::Readable_String &token); + String_Loose getToken(size_t pos, const T &token) const; + String_Loose getToken(size_t pos, const Jupiter::Readable_String &token) const; /** * @brief Creates a partial copy of an input string, based on a token. @@ -449,8 +449,8 @@ namespace Jupiter * @param token Token to scan for. * @return String containing a partial copy of the original string. */ - String_Loose gotoToken(size_t pos, const T &token); - String_Loose gotoToken(size_t pos, const Jupiter::Readable_String &token); + String_Loose gotoToken(size_t pos, const T &token) const; + String_Loose gotoToken(size_t pos, const Jupiter::Readable_String &token) const; /** * @brief Creates a partial copy of the string, based on a token. @@ -469,9 +469,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - TokenizeResult tokenize(const T &separator); - TokenizeResult tokenize(const Jupiter::Readable_String &separator); - TokenizeResult tokenize(const T *separator, size_t separator_size); + typename Jupiter::Readable_String::template TokenizeResult tokenize(const T &separator); + typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &separator); + typename Jupiter::Readable_String::template TokenizeResult tokenize(const T *separator, size_t separator_size); /** * @brief Tokenizes a string, based on an input token separator @@ -480,9 +480,9 @@ namespace Jupiter * @param separator Separator to split tokens by * @return TokenizeResult containing the results of the tokenization process. */ - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); - static TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); + static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T &separator); + static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator); + static typename Jupiter::Readable_String::template TokenizeResult tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size); /** * @brief Sets the internal buffer to be at least large enough to old a specified number of elements. diff --git a/Jupiter/String_Imp.h b/Jupiter/String_Imp.h index f644984..495df7d 100644 --- a/Jupiter/String_Imp.h +++ b/Jupiter/String_Imp.h @@ -253,34 +253,34 @@ template Jupiter::String_Strict Jupiter::String_Strict::Format return r; } -template Jupiter::String_Strict Jupiter::String_Strict::substring(size_t pos) const +template typename Jupiter::String_Strict Jupiter::String_Strict::substring(size_t pos) const { return Jupiter::String_Strict::substring(*this, pos); } -template Jupiter::String_Strict Jupiter::String_Strict::substring(size_t pos, size_t len) const +template typename Jupiter::String_Strict Jupiter::String_Strict::substring(size_t pos, size_t len) const { return Jupiter::String_Strict::substring(*this, pos, len); } -template Jupiter::String_Strict Jupiter::String_Strict::substring(const Jupiter::Readable_String &in, size_t pos) +template typename Jupiter::String_Strict Jupiter::String_Strict::substring(const Jupiter::Readable_String &in, size_t pos) { - return Jupiter::String_Type::substring(in, pos); + return Jupiter::String_Type::template substring(in, pos); } -template Jupiter::String_Strict Jupiter::String_Strict::substring(const T *in, size_t pos) +template typename Jupiter::String_Strict Jupiter::String_Strict::substring(const T *in, size_t pos) { - return Jupiter::String_Type::substring(in, pos); + return Jupiter::String_Type::template substring(in, pos); } -template Jupiter::String_Strict Jupiter::String_Strict::substring(const Jupiter::Readable_String &in, size_t pos, size_t len) +template typename Jupiter::String_Strict Jupiter::String_Strict::substring(const Jupiter::Readable_String &in, size_t pos, size_t len) { - return Jupiter::String_Type::substring(in, pos, len); + return Jupiter::String_Type::template substring(in, pos, len); } -template Jupiter::String_Strict Jupiter::String_Strict::substring(const T *in, size_t pos, size_t len) +template typename Jupiter::String_Strict Jupiter::String_Strict::substring(const T *in, size_t pos, size_t len) { - return Jupiter::String_Type::substring(in, pos, len); + return Jupiter::String_Type::template substring(in, pos, len); } template Jupiter::String_Strict Jupiter::String_Strict::getWord(size_t pos, const T *whitespace) const @@ -290,12 +290,12 @@ template Jupiter::String_Strict Jupiter::String_Strict::getWor template Jupiter::String_Strict Jupiter::String_Strict::getWord(const Jupiter::Readable_String &in, size_t pos, const T *whitespace) { - return Jupiter::Readable_String::getWord(in, pos, whitespace); + return Jupiter::Readable_String::template getWord(in, pos, whitespace); } template Jupiter::String_Strict Jupiter::String_Strict::getWord(const T *in, size_t pos, const T *whitespace) { - return Jupiter::Readable_String::getWord(in, pos, whitespace); + return Jupiter::Readable_String::template getWord(in, pos, whitespace); } template Jupiter::String_Strict Jupiter::String_Strict::getToken(size_t pos, const T &token) const @@ -310,12 +310,12 @@ template Jupiter::String_Strict Jupiter::String_Strict::getTok template Jupiter::String_Strict Jupiter::String_Strict::getToken(const Jupiter::Readable_String &in, size_t pos, const T &token) { - return Jupiter::Readable_String::getToken(in, pos, token); + return Jupiter::Readable_String::template getToken(in, pos, token); } template Jupiter::String_Strict Jupiter::String_Strict::getToken(const Jupiter::Readable_String &in, size_t pos, const Jupiter::Readable_String &token) { - return Jupiter::Readable_String::getToken(in, pos, token); + return Jupiter::Readable_String::template getToken(in, pos, token); } template Jupiter::String_Strict Jupiter::String_Strict::gotoWord(size_t pos, const T *whitespace) const @@ -325,7 +325,7 @@ template Jupiter::String_Strict Jupiter::String_Strict::gotoWo template Jupiter::String_Strict Jupiter::String_Strict::gotoWord(const Jupiter::Readable_String &in, size_t pos, const T *whitespace) { - return Jupiter::Readable_String::gotoWord(in, pos, whitespace); + return Jupiter::Readable_String::template gotoWord(in, pos, whitespace); } template Jupiter::String_Strict Jupiter::String_Strict::gotoToken(size_t pos, const T &token) const @@ -340,44 +340,44 @@ template Jupiter::String_Strict Jupiter::String_Strict::gotoTo template Jupiter::String_Strict Jupiter::String_Strict::gotoToken(const Jupiter::Readable_String &in, size_t pos, const T &token) { - return Jupiter::Readable_String::gotoToken(in, pos, token); + return Jupiter::Readable_String::template gotoToken(in, pos, token); } template Jupiter::String_Strict Jupiter::String_Strict::gotoToken(const Jupiter::Readable_String &in, size_t pos, const Jupiter::Readable_String &token) { - return Jupiter::Readable_String::gotoToken(in, pos, token); + return Jupiter::Readable_String::template gotoToken(in, pos, token); } // tokenize -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Strict::tokenize(const T &separator) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Strict::tokenize(const T &separator) const { return Jupiter::String_Strict::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &separator) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &separator) const { return Jupiter::String_Strict::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Strict::tokenize(const T *separator, size_t separator_size) const +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Strict::tokenize(const T *separator, size_t separator_size) const { return Jupiter::String_Strict::tokenize(*this, separator, separator_size); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &in, const T &token) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &in, const T &token) { - return Jupiter::Readable_String::tokenize(in, token); + return Jupiter::Readable_String::template tokenize(in, token); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) { - return Jupiter::Readable_String::tokenize(in, separator); + return Jupiter::Readable_String::template tokenize(in, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Strict::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) { - return Jupiter::Readable_String::tokenize(in, separator, separator_size); + return Jupiter::Readable_String::template tokenize(in, separator, separator_size); } // Operators @@ -690,34 +690,34 @@ template Jupiter::String_Loose Jupiter::String_Loose::Format(c return r; } -template Jupiter::String_Loose Jupiter::String_Loose::substring(size_t pos) const +template typename Jupiter::template String_Loose Jupiter::String_Loose::substring(size_t pos) const { return Jupiter::String_Loose::substring(*this, pos); } -template Jupiter::String_Loose Jupiter::String_Loose::substring(size_t pos, size_t length) const +template typename Jupiter::template String_Loose Jupiter::String_Loose::substring(size_t pos, size_t length) const { return Jupiter::String_Loose::substring(*this, pos, length); } -template Jupiter::String_Loose Jupiter::String_Loose::substring(const Jupiter::Readable_String &in, size_t pos) +template typename Jupiter::template String_Loose Jupiter::String_Loose::substring(const Jupiter::Readable_String &in, size_t pos) { - return Jupiter::String_Type::substring(in, pos); + return Jupiter::String_Type::template substring(in, pos); } -template Jupiter::String_Loose Jupiter::String_Loose::substring(const T *in, size_t pos) +template typename Jupiter::template String_Loose Jupiter::String_Loose::substring(const T *in, size_t pos) { - return Jupiter::String_Type::substring(in, pos); + return Jupiter::String_Type::template substring(in, pos); } -template Jupiter::String_Loose Jupiter::String_Loose::substring(const Jupiter::Readable_String &in, size_t pos, size_t len) +template typename Jupiter::template String_Loose Jupiter::String_Loose::substring(const Jupiter::Readable_String &in, size_t pos, size_t len) { - return Jupiter::String_Type::substring(in, pos, len); + return Jupiter::String_Type::template substring(in, pos, len); } -template Jupiter::String_Loose Jupiter::String_Loose::substring(const T *in, size_t pos, size_t len) +template typename Jupiter::template String_Loose Jupiter::String_Loose::substring(const T *in, size_t pos, size_t len) { - return Jupiter::String_Type::substring(in, pos, len); + return Jupiter::String_Type::template substring(in, pos, len); } template Jupiter::String_Loose Jupiter::String_Loose::getWord(size_t pos, const T *whitespace) const @@ -727,32 +727,32 @@ template Jupiter::String_Loose Jupiter::String_Loose::getWord( template Jupiter::String_Loose Jupiter::String_Loose::getWord(const Jupiter::Readable_String &in, size_t pos, const T *whitespace) { - return Jupiter::Readable_String::getWord(in, pos, whitespace); + return Jupiter::Readable_String::template getWord(in, pos, whitespace); } template Jupiter::String_Loose Jupiter::String_Loose::getWord(const T *in, size_t pos, const T *whitespace) { - return Jupiter::Readable_String::getWord(in, pos, whitespace); + return Jupiter::Readable_String::template getWord(in, pos, whitespace); } -template Jupiter::String_Loose Jupiter::String_Loose::getToken(size_t pos, const T &token) +template Jupiter::String_Loose Jupiter::String_Loose::getToken(size_t pos, const T &token) const { return Jupiter::String_Loose::getToken(*this, pos, token); } -template Jupiter::String_Loose Jupiter::String_Loose::getToken(size_t pos, const Jupiter::Readable_String &token) +template Jupiter::String_Loose Jupiter::String_Loose::getToken(size_t pos, const Jupiter::Readable_String &token) const { return Jupiter::String_Loose::getToken(*this, pos, token); } template Jupiter::String_Loose Jupiter::String_Loose::getToken(const Jupiter::Readable_String &in, size_t pos, const T &token) { - return Jupiter::Readable_String::getToken(in, pos, token); + return Jupiter::Readable_String::template getToken(in, pos, token); } template Jupiter::String_Loose Jupiter::String_Loose::getToken(const Jupiter::Readable_String &in, size_t pos, const Jupiter::Readable_String &token) { - return Jupiter::Readable_String::getToken(in, pos, token); + return Jupiter::Readable_String::template getToken(in, pos, token); } template Jupiter::String_Loose Jupiter::String_Loose::gotoWord(size_t pos, const T *whitespace) const @@ -762,27 +762,27 @@ template Jupiter::String_Loose Jupiter::String_Loose::gotoWord template Jupiter::String_Loose Jupiter::String_Loose::gotoWord(const Jupiter::Readable_String &in, size_t pos, const T *whitespace) { - return Jupiter::Readable_String::gotoWord(in, pos, whitespace); + return Jupiter::Readable_String::template gotoWord(in, pos, whitespace); } -template Jupiter::String_Loose Jupiter::String_Loose::gotoToken(size_t pos, const T &token) +template Jupiter::String_Loose Jupiter::String_Loose::gotoToken(size_t pos, const T &token) const { return Jupiter::String_Loose::gotoToken(*this, pos, token); } -template Jupiter::String_Loose Jupiter::String_Loose::gotoToken(size_t pos, const Jupiter::Readable_String &token) +template Jupiter::String_Loose Jupiter::String_Loose::gotoToken(size_t pos, const Jupiter::Readable_String &token) const { return Jupiter::String_Loose::gotoToken(*this, pos, token); } template Jupiter::String_Loose Jupiter::String_Loose::gotoToken(const Jupiter::Readable_String &in, size_t pos, const T &token) { - return Jupiter::Readable_String::gotoToken(in, pos, token); + return Jupiter::Readable_String::template gotoToken(in, pos, token); } template Jupiter::String_Loose Jupiter::String_Loose::gotoToken(const Jupiter::Readable_String &in, size_t pos, const Jupiter::Readable_String &token) { - return Jupiter::Readable_String::gotoToken(in, pos, token); + return Jupiter::Readable_String::template gotoToken(in, pos, token); } // Operators @@ -814,34 +814,34 @@ template inline Jupiter::String_Loose Jupiter::String_Loose::o // tokenize -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Loose::tokenize(const T &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Loose::tokenize(const T &separator) { return Jupiter::String_Loose::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &separator) { return Jupiter::String_Loose::tokenize(*this, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Loose::tokenize(const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Loose::tokenize(const T *separator, size_t separator_size) { return Jupiter::String_Loose::tokenize(*this, separator, separator_size); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &in, const T &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &in, const T &separator) { - return Jupiter::Readable_String::tokenize(in, separator); + return Jupiter::Readable_String::template tokenize(in, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &in, const Jupiter::Readable_String &separator) { - return Jupiter::Readable_String::tokenize(in, separator); + return Jupiter::Readable_String::template tokenize(in, separator); } -template typename Jupiter::Readable_String::TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) +template typename Jupiter::Readable_String::template TokenizeResult Jupiter::String_Loose::tokenize(const Jupiter::Readable_String &in, const T *separator, size_t separator_size) { - return Jupiter::Readable_String::tokenize(in, separator, separator_size); + return Jupiter::Readable_String::template tokenize(in, separator, separator_size); } #if !defined JUPITER_STRING_STRICT_OPERATOR_PLUS @@ -883,7 +883,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_impl(head); head += sizeof(size_t); - Jupiter::String_Loose r = Jupiter::String_Loose(reinterpret_cast(head), size_); + Jupiter::String_Loose r = Jupiter::String_Loose(reinterpret_cast(head), size_); head += size_; return r; } diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index cd8fef0eeb942a12a6708642f46df62d888621eb..2aab294e79a9ff9d8337436cfebb02fce7cac91a 100644 GIT binary patch delta 22556 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

LnUVizZC>TWPue`MAVjERX;+sBIl(PfC5 z;788?^{aG(kep3;Zh|zSrjMD|3S6v@{nrY8@Yg{TLw$Wseg#Gy!^BS#usZvTCkc|w zBM$kABq?SZ&to=Q5Jne zzMufO9J*}^1O<#hVi&XKH!8BwZl+!>u)Y5cM=Wq`H7XQzXbF=Xu`st#=8vFPoi3Ct z1i$9p5bEnL`E}zo*Dw3rX!nxJ6aKRLM&U2Kq0uz|hN;tB9`BeYvK4PQe94BCo7@e9 zZnAsm#5rNCyGanIc;Th!oBd0SaQ@AgMR@Y^yC&S?-^B>GUb58aR+stsTkTYxdEWKV zt(Qf3>XN05=`O-C)BU>|%yO4DPnSx^e{EZThJ7VDM(hl`o6ZK?qkM+22kDRzo|+*M fQq2h(W!y|Z8_eOBOO_a6>@0zhZU4wDJO2LwAr!CC