Browse Source

Fixed numerous minor errors discovered while attempting to compile on linux (support not yet restored).

release/0.19
JustinAJ 9 years ago
parent
commit
2f2b11a19f
  1. 2
      Jupiter/Base64.h
  2. 40
      Jupiter/CString.h
  3. 40
      Jupiter/CString_Imp.h
  4. 2
      Jupiter/Functions.h
  5. 6
      Jupiter/Readable_String.h
  6. 6
      Jupiter/Readable_String_Imp.h
  7. 18
      Jupiter/Reference_String.h
  8. 18
      Jupiter/Reference_String_Imp.h
  9. 56
      Jupiter/String.h
  10. 114
      Jupiter/String_Imp.h
  11. BIN
      Release/Jupiter.lib

2
Jupiter/Base64.h

@ -28,6 +28,7 @@
#if defined __cplusplus #if defined __cplusplus
#include <cstdint> #include <cstdint>
#include <cstddef>
namespace Jupiter namespace Jupiter
{ {
@ -110,6 +111,7 @@ extern "C"
#else #else
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stddef.h>
#endif // __cplusplus #endif // __cplusplus
/** /**

40
Jupiter/CString.h

@ -189,9 +189,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
TokenizeResult<Jupiter::CString_Type> tokenize(const T &separator) const; Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> tokenize(const T &separator) const;
TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &separator) const; Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &separator) const;
TokenizeResult<Jupiter::CString_Type> tokenize(const T *separator, size_t separator_size) const; Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> tokenize(const T *separator, size_t separator_size) const;
/** /**
* @brief Tokenizes a string, based on an input token separator * @brief Tokenizes a string, based on an input token separator
@ -200,9 +200,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
static TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &in, const T &separator); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &in, const T &separator);
static TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator);
static TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size);
/** /**
* @brief Copies the data from the input string to the CString. * @brief Copies the data from the input string to the CString.
@ -424,9 +424,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
TokenizeResult<Jupiter::CString_Loose> tokenize(const T &separator); Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> tokenize(const T &separator);
TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &separator); Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &separator);
TokenizeResult<Jupiter::CString_Loose> tokenize(const T *separator, size_t separator_size); Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> tokenize(const T *separator, size_t separator_size);
/** /**
* @brief Tokenizes a string, based on an input token separator * @brief Tokenizes a string, based on an input token separator
@ -435,9 +435,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
static TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &in, const T &separator); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &in, const T &separator);
static TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator);
static TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> tokenize(const Jupiter::Readable_String<T> &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. * @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 namespace literals
{ {
/** CString_Strict literals */ /** CString_Strict literals */
inline Jupiter::CStringType operator""_jcst(const char *str, size_t len) { return Jupiter::CStringType(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); } inline Jupiter::WCStringType operator"" _jwcst(const wchar_t *str, size_t len) { return Jupiter::WCStringType(str, len); }
/** CString_Strict literals */ /** CString_Strict literals */
inline Jupiter::CStringS operator""_jcss(const char *str, size_t len) { return Jupiter::CStringS(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); } inline Jupiter::WCStringS operator"" _jwcss(const wchar_t *str, size_t len) { return Jupiter::WCStringS(str, len); }
/** CString_Loose literals */ /** CString_Loose literals */
inline Jupiter::CStringL operator""_jcsl(const char *str, size_t len) { return Jupiter::CStringL(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); } inline Jupiter::WCStringL operator"" _jwcsl(const wchar_t *str, size_t len) { return Jupiter::WCStringL(str, len); }
/** CString literals */ /** CString literals */
inline Jupiter::CStringS operator""_jcs(const char *str, size_t len) { return Jupiter::CString(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); } inline Jupiter::WCStringS operator"" _jwcs(const wchar_t *str, size_t len) { return Jupiter::WCString(str, len); }
} }
} }

40
Jupiter/CString_Imp.h

@ -373,34 +373,34 @@ template<typename T> Jupiter::CString_Type<T> Jupiter::CString_Type<T>::gotoWord
// tokenize // tokenize
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const T &separator) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const T &separator) const
{ {
return Jupiter::CString_Type<T>::tokenize(*this, separator); return Jupiter::CString_Type<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &separator) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &separator) const
{ {
return Jupiter::CString_Type<T>::tokenize(*this, separator); return Jupiter::CString_Type<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const T *separator, size_t separator_size) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const T *separator, size_t separator_size) const
{ {
return Jupiter::CString_Type<T>::tokenize(*this, separator, separator_size); return Jupiter::CString_Type<T>::tokenize(*this, separator, separator_size);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::CString_Type>(in, token); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template CString_Type>(in, token);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::CString_Type>(in, separator); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template CString_Type>(in, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Type> Jupiter::CString_Type<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::CString_Type>(in, separator, separator_size); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template CString_Type>(in, separator, separator_size);
} }
// set // set
@ -539,7 +539,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_impl<Jupiter::CStri
{ {
size_t size_ = *reinterpret_cast<size_t *>(head); size_t size_ = *reinterpret_cast<size_t *>(head);
head += sizeof(size_t); head += sizeof(size_t);
Jupiter::CString_Type<Y> r = Jupiter::CString_Type<Y>(reinterpret_cast<T *>(head), size_); Jupiter::CString_Type<Y> r = Jupiter::CString_Type<Y>(reinterpret_cast<Y *>(head), size_);
head += size_; head += size_;
return r; return r;
} }
@ -800,34 +800,34 @@ template<typename T> Jupiter::CString_Loose<T> Jupiter::CString_Loose<T>::gotoWo
// tokenize // tokenize
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const T &token) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const T &token)
{ {
return Jupiter::CString_Loose<T>::tokenize(*this, token); return Jupiter::CString_Loose<T>::tokenize(*this, token);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::CString_Loose<T>::tokenize(*this, separator); return Jupiter::CString_Loose<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const T *separator, size_t separator_size)
{ {
return Jupiter::CString_Loose<T>::tokenize(*this, separator, separator_size); return Jupiter::CString_Loose<T>::tokenize(*this, separator, separator_size);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::CString_Loose>(in, token); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template CString_Loose>(in, token);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::CString_Loose>(in, separator); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template CString_Loose>(in, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::CString_Loose> Jupiter::CString_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::CString_Loose>(in, separator, separator_size); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template CString_Loose>(in, separator, separator_size);
} }
// Operators // Operators
@ -894,7 +894,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_impl<Jupiter::CStri
{ {
size_t size_ = *reinterpret_cast<size_t *>(head); size_t size_ = *reinterpret_cast<size_t *>(head);
head += sizeof(size_t); head += sizeof(size_t);
Jupiter::CString_Loose<Y> r = Jupiter::CString_Loose<Y>(reinterpret_cast<T *>(head), size_); Jupiter::CString_Loose<Y> r = Jupiter::CString_Loose<Y>(reinterpret_cast<Y *>(head), size_);
head += size_; head += size_;
return r; return r;
} }

2
Jupiter/Functions.h

@ -30,6 +30,7 @@
#if defined __cplusplus #if defined __cplusplus
#include <cstdint> #include <cstdint>
#include <cstddef>
namespace Jupiter namespace Jupiter
{ {
@ -89,6 +90,7 @@ extern "C"
#else // __cplusplus #else // __cplusplus
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stddef.h>
#endif // __cplusplus #endif // __cplusplus
/** /**

6
Jupiter/Readable_String.h

@ -389,9 +389,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
template<template<typename> class R> static TokenizeResult<R> tokenize(const Jupiter::Readable_String<T> &in, const T &separator); template<template<typename> class R> static typename Jupiter::Readable_String<T>::template TokenizeResult<R> tokenize(const Jupiter::Readable_String<T> &in, const T &separator);
template<template<typename> class R> static TokenizeResult<R> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator); template<template<typename> class R> static typename Jupiter::Readable_String<T>::template TokenizeResult<R> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator);
template<template<typename> class R> static TokenizeResult<R> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size); template<template<typename> class R> static typename Jupiter::Readable_String<T>::template TokenizeResult<R> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size);
/** Access operator */ /** Access operator */
inline const T &operator[](size_t index) const { return this->get(index); }; inline const T &operator[](size_t index) const { return this->get(index); };

6
Jupiter/Readable_String_Imp.h

@ -1394,7 +1394,7 @@ template<typename T> template<template<typename> class R> inline typename Jupite
// tokenize // tokenize
template<typename T> template<template<typename> class R> typename Jupiter::Readable_String<T>::TokenizeResult<R> Jupiter::Readable_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token) template<typename T> template<template<typename> class R> typename Jupiter::Readable_String<T>::template TokenizeResult<R> Jupiter::Readable_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token)
{ {
// special case: no input // special case: no input
if (in.isEmpty()) if (in.isEmpty())
@ -1443,12 +1443,12 @@ template<typename T> template<template<typename> class R> typename Jupiter::Read
return TokenizeResult<R>(tokens, length); return TokenizeResult<R>(tokens, length);
} }
template<typename T> template<template<typename> class R> typename Jupiter::Readable_String<T>::TokenizeResult<R> Jupiter::Readable_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator) template<typename T> template<template<typename> class R> typename Jupiter::Readable_String<T>::template TokenizeResult<R> Jupiter::Readable_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<R>(in, separator.ptr(), separator.size()); return Jupiter::Readable_String<T>::tokenize<R>(in, separator.ptr(), separator.size());
} }
template<typename T> template<template<typename> class R> typename Jupiter::Readable_String<T>::TokenizeResult<R> Jupiter::Readable_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size) template<typename T> template<template<typename> class R> typename Jupiter::Readable_String<T>::template TokenizeResult<R> Jupiter::Readable_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size)
{ {
// special case: separator is a single element // special case: separator is a single element
if (separator_size == 1) if (separator_size == 1)

18
Jupiter/Reference_String.h

@ -240,9 +240,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
TokenizeResult<Jupiter::Reference_String> tokenize(const T &separator) const; Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> tokenize(const T &separator) const;
TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &separator) const; Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &separator) const;
TokenizeResult<Jupiter::Reference_String> tokenize(const T *separator, size_t separator_size) const; Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> tokenize(const T *separator, size_t separator_size) const;
/** /**
* @brief Tokenizes a string, based on an input token separator * @brief Tokenizes a string, based on an input token separator
@ -251,9 +251,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
static TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &in, const T &separator); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &in, const T &separator);
static TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator);
static TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size); static Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size);
/** Mutative operators */ /** Mutative operators */
inline Readable_String<T> &operator-=(size_t right) { this->truncate(right); return *this; }; inline Readable_String<T> &operator-=(size_t right) { this->truncate(right); return *this; };
@ -319,13 +319,13 @@ namespace Jupiter
namespace literals namespace literals
{ {
/** Reference_String literals */ /** Reference_String literals */
inline Jupiter::ReferenceString operator""_jrs(const char *str, size_t len) { return Jupiter::ReferenceString(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); } inline Jupiter::ReferenceWString operator"" _jrws(const wchar_t *str, size_t len) { return Jupiter::ReferenceWString(str, len); }
} }
} }
/** DEPRECATED */ /** 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) #define STRING_LITERAL_AS_NAMED_REFERENCE(name, str) Jupiter::ReferenceString name = STRING_LITERAL_AS_REFERENCE(str)
#include "Reference_String_Imp.h" #include "Reference_String_Imp.h"

18
Jupiter/Reference_String_Imp.h

@ -239,34 +239,34 @@ template<typename T> const Jupiter::Reference_String<T> Jupiter::Reference_Strin
// tokenize // tokenize
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const T &separator) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const T &separator) const
{ {
return Jupiter::Reference_String<T>::tokenize(*this, separator); return Jupiter::Reference_String<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &separator) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &separator) const
{ {
return Jupiter::Reference_String<T>::tokenize(*this, separator); return Jupiter::Reference_String<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const T *separator, size_t separator_size) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const T *separator, size_t separator_size) const
{ {
return Jupiter::Reference_String<T>::tokenize(*this, separator, separator_size); return Jupiter::Reference_String<T>::tokenize(*this, separator, separator_size);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::Reference_String>(in, token); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template Reference_String>(in, token);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::Reference_String>(in, separator); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template Reference_String>(in, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::Reference_String> Jupiter::Reference_String<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::Reference_String>(in, separator, separator_size); return typename Jupiter::template Readable_String<T>::template tokenize<typename Jupiter::template Reference_String>(in, separator, separator_size);
} }
// Jupiter::DataBuffer specialization // Jupiter::DataBuffer specialization

56
Jupiter/String.h

@ -81,7 +81,7 @@ namespace Jupiter
* @param pos Position in the string to start copying from. * @param pos Position in the string to start copying from.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
String_Strict<T> substring(size_t pos) const; typename Jupiter::template String_Strict<T> substring(size_t pos) const;
/** /**
* @brief Creates a partial copy of the string. * @brief Creates a partial copy of the string.
@ -90,7 +90,7 @@ namespace Jupiter
* @param length Number of characters to copy. * @param length Number of characters to copy.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
String_Strict<T> substring(size_t pos, size_t length) const; typename Jupiter::template String_Strict<T> substring(size_t pos, size_t length) const;
/** /**
* @brief Creates a partial copy of the string. * @brief Creates a partial copy of the string.
@ -99,8 +99,8 @@ namespace Jupiter
* @param pos Position in the string to start copying from. * @param pos Position in the string to start copying from.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
static String_Strict<T> substring(const Jupiter::Readable_String<T> &in, size_t pos); static typename Jupiter::template String_Strict<T> substring(const Jupiter::Readable_String<T> &in, size_t pos);
static String_Strict<T> substring(const T *in, size_t pos); static typename Jupiter::template String_Strict<T> substring(const T *in, size_t pos);
/** /**
* @brief Creates a partial copy of the string. * @brief Creates a partial copy of the string.
@ -110,8 +110,8 @@ namespace Jupiter
* @param length Number of characters to copy. * @param length Number of characters to copy.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
static String_Strict<T> substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t length); static typename Jupiter::template String_Strict<T> substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t length);
static String_Strict<T> substring(const T *in, size_t pos, size_t length); static typename Jupiter::template String_Strict<T> substring(const T *in, size_t pos, size_t length);
/** /**
* @brief Creates a partial copy of the string, based on a set of tokens. * @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 * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
TokenizeResult<Jupiter::String_Strict> tokenize(const T &separator) const; typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> tokenize(const T &separator) const;
TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &separator) const; typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &separator) const;
TokenizeResult<Jupiter::String_Strict> tokenize(const T *separator, size_t separator_size) const; typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> tokenize(const T *separator, size_t separator_size) const;
/** /**
* @brief Tokenizes a string, based on an input token separator * @brief Tokenizes a string, based on an input token separator
@ -220,9 +220,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
static TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &in, const T &separator); static typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &in, const T &separator);
static TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator); static typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator);
static TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size); static typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size);
/** Default Constructor */ /** Default Constructor */
String_Strict(); String_Strict();
@ -339,7 +339,7 @@ namespace Jupiter
* @param pos Position in the string to start copying from. * @param pos Position in the string to start copying from.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
String_Loose<T> substring(size_t pos) const; typename Jupiter::template String_Loose<T> substring(size_t pos) const;
/** /**
* @brief Creates a partial copy of the string. * @brief Creates a partial copy of the string.
@ -348,7 +348,7 @@ namespace Jupiter
* @param length Number of characters to copy. * @param length Number of characters to copy.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
String_Loose<T> substring(size_t pos, size_t length) const; typename Jupiter::template String_Loose<T> substring(size_t pos, size_t length) const;
/** /**
* @brief Creates a partial copy of the string. * @brief Creates a partial copy of the string.
@ -357,8 +357,8 @@ namespace Jupiter
* @param pos Position in the string to start copying from. * @param pos Position in the string to start copying from.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
static String_Loose<T> substring(const Jupiter::Readable_String<T> &in, size_t pos); static typename Jupiter::template String_Loose<T> substring(const Jupiter::Readable_String<T> &in, size_t pos);
static String_Loose<T> substring(const T *in, size_t pos); static typename Jupiter::template String_Loose<T> substring(const T *in, size_t pos);
/** /**
* @brief Creates a partial copy of the string. * @brief Creates a partial copy of the string.
@ -368,8 +368,8 @@ namespace Jupiter
* @param length Number of characters to copy. * @param length Number of characters to copy.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
static String_Loose<T> substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t length); static typename Jupiter::template String_Loose<T> substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t length);
static String_Loose<T> substring(const T *in, size_t pos, size_t length); static typename Jupiter::template String_Loose<T> substring(const T *in, size_t pos, size_t length);
/** /**
* @brief Creates a partial copy of the string, based on a set of tokens. * @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. * @param token Token to scan for.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
String_Loose<T> getToken(size_t pos, const T &token); String_Loose<T> getToken(size_t pos, const T &token) const;
String_Loose<T> getToken(size_t pos, const Jupiter::Readable_String<T> &token); String_Loose<T> getToken(size_t pos, const Jupiter::Readable_String<T> &token) const;
/** /**
* @brief Creates a partial copy of an input string, based on a token. * @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. * @param token Token to scan for.
* @return String containing a partial copy of the original string. * @return String containing a partial copy of the original string.
*/ */
String_Loose<T> gotoToken(size_t pos, const T &token); String_Loose<T> gotoToken(size_t pos, const T &token) const;
String_Loose<T> gotoToken(size_t pos, const Jupiter::Readable_String<T> &token); String_Loose<T> gotoToken(size_t pos, const Jupiter::Readable_String<T> &token) const;
/** /**
* @brief Creates a partial copy of the string, based on a token. * @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 * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
TokenizeResult<Jupiter::String_Loose> tokenize(const T &separator); typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> tokenize(const T &separator);
TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &separator); typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &separator);
TokenizeResult<Jupiter::String_Loose> tokenize(const T *separator, size_t separator_size); typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> tokenize(const T *separator, size_t separator_size);
/** /**
* @brief Tokenizes a string, based on an input token separator * @brief Tokenizes a string, based on an input token separator
@ -480,9 +480,9 @@ namespace Jupiter
* @param separator Separator to split tokens by * @param separator Separator to split tokens by
* @return TokenizeResult containing the results of the tokenization process. * @return TokenizeResult containing the results of the tokenization process.
*/ */
static TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &in, const T &separator); static typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &in, const T &separator);
static TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator); static typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator);
static TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size); static typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> tokenize(const Jupiter::Readable_String<T> &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. * @brief Sets the internal buffer to be at least large enough to old a specified number of elements.

114
Jupiter/String_Imp.h

@ -253,34 +253,34 @@ template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::Format
return r; return r;
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(size_t pos) const template<typename T> typename Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(size_t pos) const
{ {
return Jupiter::String_Strict<T>::substring(*this, pos); return Jupiter::String_Strict<T>::substring(*this, pos);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(size_t pos, size_t len) const template<typename T> typename Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(size_t pos, size_t len) const
{ {
return Jupiter::String_Strict<T>::substring(*this, pos, len); return Jupiter::String_Strict<T>::substring(*this, pos, len);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos) template<typename T> typename Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Strict>(in, pos); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Strict>(in, pos);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const T *in, size_t pos) template<typename T> typename Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const T *in, size_t pos)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Strict>(in, pos); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Strict>(in, pos);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t len) template<typename T> typename Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t len)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Strict>(in, pos, len); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Strict>(in, pos, len);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const T *in, size_t pos, size_t len) template<typename T> typename Jupiter::String_Strict<T> Jupiter::String_Strict<T>::substring(const T *in, size_t pos, size_t len)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Strict>(in, pos, len); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Strict>(in, pos, len);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWord(size_t pos, const T *whitespace) const template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWord(size_t pos, const T *whitespace) const
@ -290,12 +290,12 @@ template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWor
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace)
{ {
return Jupiter::Readable_String<T>::getWord<Jupiter::String_Strict>(in, pos, whitespace); return Jupiter::Readable_String<T>::template getWord<Jupiter::template String_Strict>(in, pos, whitespace);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWord(const T *in, size_t pos, const T *whitespace) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getWord(const T *in, size_t pos, const T *whitespace)
{ {
return Jupiter::Readable_String<T>::getWord<Jupiter::String_Strict>(in, pos, whitespace); return Jupiter::Readable_String<T>::template getWord<Jupiter::template String_Strict>(in, pos, whitespace);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getToken(size_t pos, const T &token) const template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getToken(size_t pos, const T &token) const
@ -310,12 +310,12 @@ template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getTok
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token)
{ {
return Jupiter::Readable_String<T>::getToken<Jupiter::String_Strict>(in, pos, token); return Jupiter::Readable_String<T>::template getToken<Jupiter::template String_Strict>(in, pos, token);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token)
{ {
return Jupiter::Readable_String<T>::getToken<Jupiter::String_Strict>(in, pos, token); return Jupiter::Readable_String<T>::template getToken<Jupiter::template String_Strict>(in, pos, token);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoWord(size_t pos, const T *whitespace) const template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoWord(size_t pos, const T *whitespace) const
@ -325,7 +325,7 @@ template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoWo
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace)
{ {
return Jupiter::Readable_String<T>::gotoWord<Jupiter::String_Strict>(in, pos, whitespace); return Jupiter::Readable_String<T>::template gotoWord<Jupiter::template String_Strict>(in, pos, whitespace);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoToken(size_t pos, const T &token) const template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoToken(size_t pos, const T &token) const
@ -340,44 +340,44 @@ template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoTo
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token)
{ {
return Jupiter::Readable_String<T>::gotoToken<Jupiter::String_Strict>(in, pos, token); return Jupiter::Readable_String<T>::template gotoToken<Jupiter::template String_Strict>(in, pos, token);
} }
template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token) template<typename T> Jupiter::String_Strict<T> Jupiter::String_Strict<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token)
{ {
return Jupiter::Readable_String<T>::gotoToken<Jupiter::String_Strict>(in, pos, token); return Jupiter::Readable_String<T>::template gotoToken<Jupiter::template String_Strict>(in, pos, token);
} }
// tokenize // tokenize
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const T &separator) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const T &separator) const
{ {
return Jupiter::String_Strict<T>::tokenize(*this, separator); return Jupiter::String_Strict<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &separator) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &separator) const
{ {
return Jupiter::String_Strict<T>::tokenize(*this, separator); return Jupiter::String_Strict<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const T *separator, size_t separator_size) const template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const T *separator, size_t separator_size) const
{ {
return Jupiter::String_Strict<T>::tokenize(*this, separator, separator_size); return Jupiter::String_Strict<T>::tokenize(*this, separator, separator_size);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &token)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::String_Strict>(in, token); return Jupiter::Readable_String<T>::template tokenize<Jupiter::template String_Strict>(in, token);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::String_Strict>(in, separator); return Jupiter::Readable_String<T>::template tokenize<Jupiter::template String_Strict>(in, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Strict> Jupiter::String_Strict<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::String_Strict>(in, separator, separator_size); return Jupiter::Readable_String<T>::template tokenize<Jupiter::template String_Strict>(in, separator, separator_size);
} }
// Operators // Operators
@ -690,34 +690,34 @@ template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::Format(c
return r; return r;
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::substring(size_t pos) const template<typename T> typename Jupiter::template String_Loose<T> Jupiter::String_Loose<T>::substring(size_t pos) const
{ {
return Jupiter::String_Loose<T>::substring(*this, pos); return Jupiter::String_Loose<T>::substring(*this, pos);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::substring(size_t pos, size_t length) const template<typename T> typename Jupiter::template String_Loose<T> Jupiter::String_Loose<T>::substring(size_t pos, size_t length) const
{ {
return Jupiter::String_Loose<T>::substring(*this, pos, length); return Jupiter::String_Loose<T>::substring(*this, pos, length);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos) template<typename T> typename Jupiter::template String_Loose<T> Jupiter::String_Loose<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Loose>(in, pos); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Loose>(in, pos);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::substring(const T *in, size_t pos) template<typename T> typename Jupiter::template String_Loose<T> Jupiter::String_Loose<T>::substring(const T *in, size_t pos)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Loose>(in, pos); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Loose>(in, pos);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t len) template<typename T> typename Jupiter::template String_Loose<T> Jupiter::String_Loose<T>::substring(const Jupiter::Readable_String<T> &in, size_t pos, size_t len)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Loose>(in, pos, len); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Loose>(in, pos, len);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::substring(const T *in, size_t pos, size_t len) template<typename T> typename Jupiter::template String_Loose<T> Jupiter::String_Loose<T>::substring(const T *in, size_t pos, size_t len)
{ {
return Jupiter::String_Type<T>::substring<Jupiter::String_Loose>(in, pos, len); return Jupiter::String_Type<T>::template substring<Jupiter::template String_Loose>(in, pos, len);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(size_t pos, const T *whitespace) const template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(size_t pos, const T *whitespace) const
@ -727,32 +727,32 @@ template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace)
{ {
return Jupiter::Readable_String<T>::getWord<Jupiter::String_Loose>(in, pos, whitespace); return Jupiter::Readable_String<T>::template getWord<Jupiter::template String_Loose>(in, pos, whitespace);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(const T *in, size_t pos, const T *whitespace) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getWord(const T *in, size_t pos, const T *whitespace)
{ {
return Jupiter::Readable_String<T>::getWord<Jupiter::String_Loose>(in, pos, whitespace); return Jupiter::Readable_String<T>::template getWord<Jupiter::template String_Loose>(in, pos, whitespace);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(size_t pos, const T &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(size_t pos, const T &token) const
{ {
return Jupiter::String_Loose<T>::getToken(*this, pos, token); return Jupiter::String_Loose<T>::getToken(*this, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(size_t pos, const Jupiter::Readable_String<T> &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(size_t pos, const Jupiter::Readable_String<T> &token) const
{ {
return Jupiter::String_Loose<T>::getToken(*this, pos, token); return Jupiter::String_Loose<T>::getToken(*this, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token)
{ {
return Jupiter::Readable_String<T>::getToken<Jupiter::String_Loose>(in, pos, token); return Jupiter::Readable_String<T>::template getToken<Jupiter::template String_Loose>(in, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::getToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token)
{ {
return Jupiter::Readable_String<T>::getToken<Jupiter::String_Loose>(in, pos, token); return Jupiter::Readable_String<T>::template getToken<Jupiter::template String_Loose>(in, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoWord(size_t pos, const T *whitespace) const template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoWord(size_t pos, const T *whitespace) const
@ -762,27 +762,27 @@ template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoWord
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoWord(const Jupiter::Readable_String<T> &in, size_t pos, const T *whitespace)
{ {
return Jupiter::Readable_String<T>::gotoWord<Jupiter::String_Loose>(in, pos, whitespace); return Jupiter::Readable_String<T>::template gotoWord<Jupiter::template String_Loose>(in, pos, whitespace);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(size_t pos, const T &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(size_t pos, const T &token) const
{ {
return Jupiter::String_Loose<T>::gotoToken(*this, pos, token); return Jupiter::String_Loose<T>::gotoToken(*this, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(size_t pos, const Jupiter::Readable_String<T> &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(size_t pos, const Jupiter::Readable_String<T> &token) const
{ {
return Jupiter::String_Loose<T>::gotoToken(*this, pos, token); return Jupiter::String_Loose<T>::gotoToken(*this, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const T &token)
{ {
return Jupiter::Readable_String<T>::gotoToken<Jupiter::String_Loose>(in, pos, token); return Jupiter::Readable_String<T>::template gotoToken<Jupiter::template String_Loose>(in, pos, token);
} }
template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token) template<typename T> Jupiter::String_Loose<T> Jupiter::String_Loose<T>::gotoToken(const Jupiter::Readable_String<T> &in, size_t pos, const Jupiter::Readable_String<T> &token)
{ {
return Jupiter::Readable_String<T>::gotoToken<Jupiter::String_Loose>(in, pos, token); return Jupiter::Readable_String<T>::template gotoToken<Jupiter::template String_Loose>(in, pos, token);
} }
// Operators // Operators
@ -814,34 +814,34 @@ template<typename T> inline Jupiter::String_Loose<T> Jupiter::String_Loose<T>::o
// tokenize // tokenize
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const T &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const T &separator)
{ {
return Jupiter::String_Loose<T>::tokenize(*this, separator); return Jupiter::String_Loose<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::String_Loose<T>::tokenize(*this, separator); return Jupiter::String_Loose<T>::tokenize(*this, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const T *separator, size_t separator_size)
{ {
return Jupiter::String_Loose<T>::tokenize(*this, separator, separator_size); return Jupiter::String_Loose<T>::tokenize(*this, separator, separator_size);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::String_Loose>(in, separator); return Jupiter::Readable_String<T>::template tokenize<Jupiter::template String_Loose>(in, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const Jupiter::Readable_String<T> &separator)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::String_Loose>(in, separator); return Jupiter::Readable_String<T>::template tokenize<Jupiter::template String_Loose>(in, separator);
} }
template<typename T> typename Jupiter::Readable_String<T>::TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size) template<typename T> typename Jupiter::Readable_String<T>::template TokenizeResult<Jupiter::String_Loose> Jupiter::String_Loose<T>::tokenize(const Jupiter::Readable_String<T> &in, const T *separator, size_t separator_size)
{ {
return Jupiter::Readable_String<T>::tokenize<Jupiter::String_Loose>(in, separator, separator_size); return Jupiter::Readable_String<T>::template tokenize<Jupiter::template String_Loose>(in, separator, separator_size);
} }
#if !defined JUPITER_STRING_STRICT_OPERATOR_PLUS #if !defined JUPITER_STRING_STRICT_OPERATOR_PLUS
@ -883,7 +883,7 @@ template<> struct _Jupiter_DataBuffer_partial_specialization_impl<Jupiter::Strin
{ {
size_t size_ = *reinterpret_cast<size_t *>(head); size_t size_ = *reinterpret_cast<size_t *>(head);
head += sizeof(size_t); head += sizeof(size_t);
Jupiter::String_Loose<Y> r = Jupiter::String_Loose<Y>(reinterpret_cast<T *>(head), size_); Jupiter::String_Loose<Y> r = Jupiter::String_Loose<Y>(reinterpret_cast<Y *>(head), size_);
head += size_; head += size_;
return r; return r;
} }

BIN
Release/Jupiter.lib

Binary file not shown.
Loading…
Cancel
Save