Initial incomplete code

This commit is contained in:
John Wellbelove 2020-07-11 20:19:02 +01:00
parent 32d9df61f8
commit 5399199290
6 changed files with 1168 additions and 2 deletions

View File

@ -0,0 +1,433 @@
///\file
/******************************************************************************
The MIT License(MIT)
Embedded Template Library.
https://github.com/ETLCPP/etl
https://www.etlcpp.com
Copyright(c) 2020 John Wellbelove, John Lagerquist
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
******************************************************************************/
#ifndef ETL_STRING_UTILITIES_HELPER_INCLUDED
#define ETL_STRING_UTILITIES_HELPER_INCLUDED
#include "../platform.h"
#include "../basic_string.h"
#include "../string_view.h"
#include "../algorithm.h"
#include <stdint.h>
namespace etl
{
namespace private_string_utilities
{
//***************************************************************************
/// trim_left
/// Trim left of whitespace
//***************************************************************************
template <typename TIString>
void trim_left_of(TIString& s, typename TIString::const_pointer trim_characters)
{
size_t position = s.find_first_not_of(trim_characters);
s.erase(0U, position);
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
template <typename TIString>
void trim_left_delimiters(TIString& s, typename TIString::const_pointer delimiters)
{
size_t p = s.find_first_of(delimiters);
if (p != TIString::npos)
{
s.erase(0, p);
}
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
template <typename TIString>
void trim_left_delimiters(TIString& s, typename TIString::const_pointer delimiters, size_t length)
{
size_t p = s.find_first_of(delimiters, 0, length);
if (p != TIString::npos)
{
s.erase(0, p);
}
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
template <typename TIString>
void trim_left_delimiters(TIString& s, const TIString& delimiters)
{
trim_left_delimiters(s, delimiters.c_str());
}
//***************************************************************************
/// trim_right
/// Trim right of whitespace
//***************************************************************************
template <typename TIString>
void trim_right_of(TIString& s, typename TIString::const_pointer trim_characters)
{
s.erase(s.find_last_not_of(trim_characters) + 1);
}
//***************************************************************************
/// trim_right
//***************************************************************************
template <typename TIString>
void trim_right_delimiters(TIString& s, typename TIString::const_pointer delimiters)
{
size_t p = s.find_last_of(delimiters);
if (p != TIString::npos)
{
++p;
if (p != s.size())
{
s.erase(p);
}
}
}
//***************************************************************************
/// trim_right
/// Trim right, up to, but not including, delimiters.
//***************************************************************************
template <typename TIString>
void trim_right_delimiters(TIString& s, typename TIString::const_pointer delimiters, size_t length)
{
size_t p = s.find_last_of(delimiters, TIString::npos, length);
if (p != TIString::npos)
{
++p;
if (p != s.size())
{
s.erase(p);
}
}
}
//***************************************************************************
/// trim_right
/// Trim right, up to, but not including, delimiters.
//***************************************************************************
template <typename TIString>
void trim_right_delimiters(TIString& s, const TIString& delimiters)
{
trim_right(s, delimiters.c_str());
}
//***************************************************************************
/// trim
/// Trim left and right of whitespace
//***************************************************************************
template <typename TIString>
void trim_of(TIString& s, typename TIString::const_pointer trim_characters)
{
trim_left_of(s, trim_characters);
trim_right_of(s, trim_characters);
}
////***************************************************************************
///// trim_view
///// return a string view trimmed left and right of whitespace
////***************************************************************************
//static TStringView trim_view(TIString& s)
//{
// size_t first = s.find_first_not_of(whitespace<value_type>());
// size_t last = s.find_last_not_of(whitespace<value_type>());
// typename TIString::const_pointer pbegin;
// typename TIString::const_pointer pend;
// if (first == TIString::npos)
// {
// pbegin = s.end();
// }
// else
// {
// pbegin = s.c_str() + first;
// }
// if (last == TIString::npos)
// {
// pend = s.end();
// }
// else
// {
// pend = s.c_str() + last + 1;
// }
// return TStringView(pbegin, pend);
//}
////***************************************************************************
///// reverse
///// Reverse a string
////***************************************************************************
//void reverse(TIString& s)
//{
// etl::reverse(s.begin(), s.end());
//}
////***************************************************************************
/////
////***************************************************************************
//template<size_t max_len>
//etl::string<max_len> left(etl::string<max_len> const& s, size_t n_chars)
//{
// return s.substr(0, n_chars);
//}
////***************************************************************************
/////
////***************************************************************************
//template<size_t max_len>
//etl::string<max_len> right(etl::string<max_len> const& s, size_t start)
//{
// return s.substr(start);
//}
//template<size_t max_len, size_t max_num_tokens>
//void tokenize(etl::string<max_len> const& s, etl::vector<etl::string<max_len>, max_num_tokens>& tokens, char const* delims, bool ignore_empty_strings)
//{
// size_t delim;
// size_t O = 0;
// tokens.clear();
// delim = s.find_first_of(delims, O);
// while (delim != etl::string<max_len>::npos)
// {
// etl::string<max_len> tok(s.substr(O, delim - O));
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
// O = delim + 1;
// delim = s.find_first_of(delims, O);
// }
// etl::string<max_len> tok(s.substr(O));
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
//}
//template<size_t max_len, size_t max_token_len, size_t max_num_tokens>
//void tokenize(etl::string<max_len> const& s, etl::vector<etl::string<max_token_len>, max_num_tokens>& tokens, char const* delims, bool ignore_empty_strings)
//{
// size_t delim;
// size_t O = 0;
// tokens.clear();
// delim = s.find_first_of(delims, O);
// while (delim != etl::string<max_len>::npos)
// {
// etl::string<max_token_len> tok(s.substr(O, delim - O).c_str());
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
// O = delim + 1;
// delim = s.find_first_of(delims, O);
// }
// etl::string<max_token_len> tok(s.substr(O).c_str());
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
//}
//template<size_t max_len>
//float to_float(etl::string<max_len> const& s)
//{
// return strtof(s.c_str(), 0);
//}
//template<size_t max_len>
//unsigned to_unsigned(etl::string<max_len> const& s, int radix)
//{
// return strtoul(s.c_str(), 0, radix);
//}
//template<size_t max_len>
//int to_int(etl::string<max_len> const& s, int radix)
//{
// return strtol(s.c_str(), 0, radix);
//}
//template<size_t max_len>
//bool to_bool(etl::string<max_len> const& s)
//{
// return s[0] == 't' || s[0] == 'T';
//}
//template<size_t max_len>
//etl::string<max_len> substr_between(etl::string<max_len> const& s, const etl::string<max_len> brackets)
//{
// size_t l = s.find_first_of(brackets[0]);
// size_t r = s.find_last_of(brackets[1]);
// if (l != etl::string<max_len>::npos && r != etl::string<max_len>::npos && r - l > 1)
// return s.substr(l + 1, r - l - 1);
// return etl::string<max_len>();
//}
//template<size_t max_len>
//int array_subscript(etl::string<max_len> const& s)
//{
// etl::string<max_len> n = substr_between(s);
// return n.empty() ? -1 : to_int(n);
//}
//template<size_t max_len>
//etl::string<max_len> from_float(float f, int digits)
//{
// char buf[32];
// char format[] = { '%','9','.',char('0' + char(digits)),'f',0 };
// sprintf(buf, format, f);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_float(float f, char const* format_string)
//{
// char buf[32];
// sprintf(buf, format_string, f);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_unsigned(unsigned u, bool hex = false)
//{
// char buf[16];
// char format[] = { '%',hex ? 'x' : 'u',0 };
// sprintf(buf, format, u);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_int(int i, bool hex = false)
//{
// char buf[16];
// char format[] = { '%',hex ? 'x' : 'i',0 };
// sprintf(buf, format, i);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_bool(bool b, bool verbose)
//{
// if (verbose)
// return b ? "true" : "false";
// else
// return b ? "t" : "f";
//}
//template<size_t max_len>
//void reverse(etl::string<max_len>& s)
//{
// std::reverse(s.begin(), s.end());
//}
//enum pad_dir_t
//{
// pad_dir__right,
// pad_dir__left
//};
//template<size_t max_len>
//void pad(etl::string<max_len>& s, size_t size, pad_dir_t dir, char pad_char)
//{
// if (size > s.size())
// {
// size -= s.size();
// if (dir == pad_dir__left)
// {
// reverse(s);
// s.reserve(s.size() + size);
// while (size--)
// s.push_back(pad_char);
// reverse(s);
// }
// else
// {
// s.reserve(s.size() + size);
// while (size--)
// s.push_back(pad_char);
// }
// }
//}
//template<size_t max_len>
//void to_uppercase(etl::string<max_len>& s)
//{
// for (typename etl::string<max_len>::iterator iter = s.begin(); iter != s.end(); ++iter)
// *iter = char(toupper(*iter));
//}
//template<size_t max_len>
//void to_lowercase(etl::string<max_len>& s)
//{
// for (typename etl::string<max_len>::iterator iter = s.begin(); iter != s.end(); ++iter)
// *iter = char(tolower(*iter));
//}
//template<size_t max_len>
//void namify(etl::string<max_len>& s)
//{
// replace(s.begin(), s.end(), ' ', '_');
// replace(s.begin(), s.end(), '/', '_');
// replace(s.begin(), s.end(), '-', '_');
// replace(s.begin(), s.end(), '.', '_');
// replace(s.begin(), s.end(), '(', '_');
// replace(s.begin(), s.end(), ')', '_');
// replace(s.begin(), s.end(), ',', '_');
// replace(s.begin(), s.end(), '[', '_');
// replace(s.begin(), s.end(), ']', '_');
// while (!s.empty() && s.back() == '_')
// s.pop_back();
//}
};
}
#endif

View File

@ -0,0 +1,401 @@
///\file
/******************************************************************************
The MIT License(MIT)
Embedded Template Library.
https://github.com/ETLCPP/etl
https://www.etlcpp.com
Copyright(c) 2020 John Wellbelove, John Lagerquist
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
******************************************************************************/
#ifndef ETL_STRING_UTILITIES_INCLUDED
#define ETL_STRING_UTILITIES_INCLUDED
#include "platform.h"
#include "cstring.h"
#include "string_view.h"
#include "private/string_utilities_helper.h"
namespace etl
{
//***************************************************************************
/// trim_left
/// Trim left of whitespace
//***************************************************************************
static void trim_left(etl::istring& s)
{
etl::private_string_utilities::trim_left_of<etl::istring>(s, " \t\n\r\f\v");
}
//***************************************************************************
/// trim_left_of
/// Trim left of specified characters
//***************************************************************************
static void trim_left_of(etl::istring& s, etl::istring::const_pointer trim_characters)
{
etl::private_string_utilities::trim_left_of<etl::istring>(s, trim_characters);
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
static void trim_left(etl::istring& s, etl::istring::const_pointer delimiters)
{
etl::private_string_utilities::trim_left_delimiters<etl::istring>(s, delimiters);
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
static void trim_left(etl::istring& s, etl::istring::const_pointer delimiters, size_t length)
{
etl::private_string_utilities::trim_left_delimiters<etl::istring>(s, delimiters, length);
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
static void trim_left(etl::istring& s, const etl::string_view& delimiters)
{
etl::private_string_utilities::trim_left_delimiters<etl::istring>(s, delimiters.begin(), delimiters.size());
}
//***************************************************************************
/// trim_left
/// Trim left, up to, but not including, delimiters.
//***************************************************************************
static void trim_left(etl::istring& s, const etl::istring& delimiters)
{
etl::private_string_utilities::trim_left_delimiters<etl::istring>(s, delimiters.c_str());
}
//***************************************************************************
/// trim_right
/// Trim right of whitespace
//***************************************************************************
static void trim_right(etl::istring& s)
{
etl::private_string_utilities::trim_right_of<etl::istring>(s, " \t\n\r\f\v");
}
//***************************************************************************
/// trim_right_of
/// Trim right of specified characters
//***************************************************************************
static void trim_right_of(etl::istring& s, etl::istring::const_pointer trim_characters)
{
etl::private_string_utilities::trim_right_of<etl::istring>(s, trim_characters);
}
//***************************************************************************
/// trim_right
//***************************************************************************
static void trim_right(etl::istring& s, etl::istring::const_pointer delimiters)
{
etl::private_string_utilities::trim_right_delimiters<etl::istring>(s, delimiters);
}
//***************************************************************************
/// trim_right
/// Trim right, up to, but not including, delimiters.
//***************************************************************************
static void trim_right(etl::istring& s, etl::istring::const_pointer delimiters, size_t length)
{
etl::private_string_utilities::trim_right_delimiters<etl::istring>(s, delimiters, length);
}
//***************************************************************************
/// trim_right
/// Trim right, up to, but not including, delimiters.
//***************************************************************************
static void trim_right(etl::istring& s, const etl::istring& delimiters)
{
etl::private_string_utilities::trim_right_delimiters<etl::istring>(s, delimiters.c_str());
}
//***************************************************************************
/// trim_right
/// Trim right, up to, but not including, delimiters.
//***************************************************************************
static void trim_right(etl::istring& s, const etl::string_view& delimiters)
{
etl::private_string_utilities::trim_right_delimiters<etl::istring>(s, delimiters.begin(), delimiters.size());
}
//***************************************************************************
/// trim
/// Trim left and right of whitespace
//***************************************************************************
void trim(etl::istring& s)
{
etl::private_string_utilities::trim_of<etl::istring>(s, " \t\n\r\f\v");
}
////***************************************************************************
///// trim_view
///// Trim left and right of whitespace
////***************************************************************************
//etl::string_view trim_view(etl::istring& s)
//{
// return etl::private_string_utilities::trim_view(s);
//}
////***************************************************************************
///// reverse
///// Reverse the string
////***************************************************************************
//void reverse(etl::istring& s)
//{
// etl::private_string_utilities::reverse(s);
//}
////***************************************************************************
/////
////***************************************************************************
//template<size_t max_len>
//etl::string<max_len> left(etl::string<max_len> const& s, size_t n_chars)
//{
// return s.substr(0, n_chars);
//}
////***************************************************************************
/////
////***************************************************************************
//template<size_t max_len>
//etl::string<max_len> right(etl::string<max_len> const& s, size_t start)
//{
// return s.substr(start);
//}
//template<size_t max_len, size_t max_num_tokens>
//void tokenize(etl::string<max_len> const& s, etl::vector<etl::string<max_len>, max_num_tokens>& tokens, char const* delims, bool ignore_empty_strings)
//{
// size_t delim;
// size_t O = 0;
// tokens.clear();
// delim = s.find_first_of(delims, O);
// while (delim != etl::string<max_len>::npos)
// {
// etl::string<max_len> tok(s.substr(O, delim - O));
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
// O = delim + 1;
// delim = s.find_first_of(delims, O);
// }
// etl::string<max_len> tok(s.substr(O));
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
//}
//template<size_t max_len, size_t max_token_len, size_t max_num_tokens>
//void tokenize(etl::string<max_len> const& s, etl::vector<etl::string<max_token_len>, max_num_tokens>& tokens, char const* delims, bool ignore_empty_strings)
//{
// size_t delim;
// size_t O = 0;
// tokens.clear();
// delim = s.find_first_of(delims, O);
// while (delim != etl::string<max_len>::npos)
// {
// etl::string<max_token_len> tok(s.substr(O, delim - O).c_str());
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
// O = delim + 1;
// delim = s.find_first_of(delims, O);
// }
// etl::string<max_token_len> tok(s.substr(O).c_str());
// trim(tok);
// if (!tok.empty() || !ignore_empty_strings)
// tokens.push_back(tok);
//}
//template<size_t max_len>
//float to_float(etl::string<max_len> const& s)
//{
// return strtof(s.c_str(), 0);
//}
//template<size_t max_len>
//unsigned to_unsigned(etl::string<max_len> const& s, int radix)
//{
// return strtoul(s.c_str(), 0, radix);
//}
//template<size_t max_len>
//int to_int(etl::string<max_len> const& s, int radix)
//{
// return strtol(s.c_str(), 0, radix);
//}
//template<size_t max_len>
//bool to_bool(etl::string<max_len> const& s)
//{
// return s[0] == 't' || s[0] == 'T';
//}
//template<size_t max_len>
//etl::string<max_len> substr_between(etl::string<max_len> const& s, const etl::string<max_len> brackets)
//{
// size_t l = s.find_first_of(brackets[0]);
// size_t r = s.find_last_of(brackets[1]);
// if (l != etl::string<max_len>::npos && r != etl::string<max_len>::npos && r - l > 1)
// return s.substr(l + 1, r - l - 1);
// return etl::string<max_len>();
//}
//template<size_t max_len>
//int array_subscript(etl::string<max_len> const& s)
//{
// etl::string<max_len> n = substr_between(s);
// return n.empty() ? -1 : to_int(n);
//}
//template<size_t max_len>
//etl::string<max_len> from_float(float f, int digits)
//{
// char buf[32];
// char format[] = { '%','9','.',char('0' + char(digits)),'f',0 };
// sprintf(buf, format, f);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_float(float f, char const* format_string)
//{
// char buf[32];
// sprintf(buf, format_string, f);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_unsigned(unsigned u, bool hex = false)
//{
// char buf[16];
// char format[] = { '%',hex ? 'x' : 'u',0 };
// sprintf(buf, format, u);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_int(int i, bool hex = false)
//{
// char buf[16];
// char format[] = { '%',hex ? 'x' : 'i',0 };
// sprintf(buf, format, i);
// return etl::string<max_len>(buf);
//}
//template<size_t max_len>
//etl::string<max_len> from_bool(bool b, bool verbose)
//{
// if (verbose)
// return b ? "true" : "false";
// else
// return b ? "t" : "f";
//}
//template<size_t max_len>
//void reverse(etl::string<max_len>& s)
//{
// std::reverse(s.begin(), s.end());
//}
//enum pad_dir_t
//{
// pad_dir__right,
// pad_dir__left
//};
//template<size_t max_len>
//void pad(etl::string<max_len>& s, size_t size, pad_dir_t dir, char pad_char)
//{
// if (size > s.size())
// {
// size -= s.size();
// if (dir == pad_dir__left)
// {
// reverse(s);
// s.reserve(s.size() + size);
// while (size--)
// s.push_back(pad_char);
// reverse(s);
// }
// else
// {
// s.reserve(s.size() + size);
// while (size--)
// s.push_back(pad_char);
// }
// }
//}
//template<size_t max_len>
//void to_uppercase(etl::string<max_len>& s)
//{
// for (typename etl::string<max_len>::iterator iter = s.begin(); iter != s.end(); ++iter)
// *iter = char(toupper(*iter));
//}
//template<size_t max_len>
//void to_lowercase(etl::string<max_len>& s)
//{
// for (typename etl::string<max_len>::iterator iter = s.begin(); iter != s.end(); ++iter)
// *iter = char(tolower(*iter));
//}
//template<size_t max_len>
//void namify(etl::string<max_len>& s)
//{
// replace(s.begin(), s.end(), ' ', '_');
// replace(s.begin(), s.end(), '/', '_');
// replace(s.begin(), s.end(), '-', '_');
// replace(s.begin(), s.end(), '.', '_');
// replace(s.begin(), s.end(), '(', '_');
// replace(s.begin(), s.end(), ')', '_');
// replace(s.begin(), s.end(), ',', '_');
// replace(s.begin(), s.end(), '[', '_');
// replace(s.begin(), s.end(), ']', '_');
// while (!s.empty() && s.back() == '_')
// s.pop_back();
//}
}
#undef ETL_ENABLE_IF_STRING
#endif

View File

@ -185,7 +185,7 @@ public:
{
}
TestDataM(TestDataM&& other)
TestDataM(TestDataM&& other) noexcept
: value(other.value)
, valid(true)
{
@ -197,7 +197,7 @@ public:
{
}
TestDataM& operator =(TestDataM&& other)
TestDataM& operator =(TestDataM&& other) noexcept
{
value = std::move(other.value);
valid = true;

View File

@ -0,0 +1,320 @@
/******************************************************************************
The MIT License(MIT)
Embedded Template Library.
https://github.com/ETLCPP/etl
https://www.etlcpp.com
Copyright(c) 2020 jwellbelove
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
******************************************************************************/
#include "UnitTest++/UnitTest++.h"
#include "etl/cstring.h"
#include "etl/string_view.h"
#include "etl/string_utilities.h"
#undef STR
#define STR(x) x
namespace
{
SUITE(test_string_utilities_char)
{
static const size_t SIZE = 50;
typedef etl::string<SIZE> String;
typedef etl::istring IString;
typedef etl::string_view StringView;
//*************************************************************************
TEST(test_trim_left_empty)
{
String text(STR(""));
String expected(STR(""));
etl::trim_left(text);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left)
{
String text(STR(" \t\n\r\f\vHello World \t\n\r\f\v "));
String expected(STR("Hello World \t\n\r\f\v "));
etl::trim_left(text);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_nothing_to_trim)
{
String text(STR("Hello World \t\n\r\f\v "));
String expected(STR("Hello World \t\n\r\f\v "));
etl::trim_left(text);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_pointer_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected(STR("Hello Worldqztfp"));
etl::trim_left(text, STR("Hel"));
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_pointer_delimiters_nothing_to_trim)
{
String text(STR("Hello Worldqztfp"));
String expected(STR("Hello Worldqztfp"));
etl::trim_left(text, STR("Hel"));
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_string_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected("Hello Worldqztfp");
etl::trim_left(text, String(STR("Hel")));
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_string_delimiters_nothing_to_trim)
{
String text(STR("Hello Worldqztfp"));
String expected("Hello Worldqztfp");
etl::trim_left(text, String(STR("Hel")));
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_string_view_pointer_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected("Hello Worldqztfp");
StringView view("Hel");
etl::trim_left(text, view.begin(), view.size());
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_string_view_pointer_delimiters_nothing_to_trim)
{
String text(STR("Hello Worldqztfp"));
String expected("Hello Worldqztfp");
StringView view("Hel");
etl::trim_left(text, view);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_string_view_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected("Hello Worldqztfp");
StringView view("Hel");
etl::trim_left(text, view);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_left_string_view_delimiters_nothing_to_trim)
{
String text(STR("Hello Worldqztfp"));
String expected("Hello Worldqztfp");
StringView view("Hel");
etl::trim_left(text, view.begin(), view.size());
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right)
{
String text(STR(" \t\n\r\f\vHello World \t\n\r\f\v "));
String expected(STR(" \t\n\r\f\vHello World"));
etl::trim_right(text);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_nothing_to_trim)
{
String text(STR(" \t\n\r\f\vHello World"));
String expected(STR(" \t\n\r\f\vHello World"));
etl::trim_right(text);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_pointer_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected(STR("qztfpHello World"));
etl::trim_right(text, "rld");
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_pointer_delimiters_nothing_to_trim)
{
String text(STR("qztfpHello World"));
String expected(STR("qztfpHello World"));
etl::trim_right(text, "rld");
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_string_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected("qztfpHello World");
etl::trim_right(text, String(STR("rld")));
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_string_delimiters_nothing_to_trim)
{
String text(STR("qztfpHello Worldq"));
String expected("qztfpHello World");
etl::trim_right(text, String(STR("rld")));
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_string_view_delimiters)
{
String text(STR("qztfpHello Worldqztfp"));
String expected("qztfpHello World");
StringView view("rld");
etl::trim_right(text, view.begin(), view.size());
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_right_string_view_delimiters_nothing_to_trim)
{
String text(STR("qztfpHello World"));
String expected("qztfpHello World");
StringView view("rld");
etl::trim_right(text, view.begin(), view.size());
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim)
{
String text(STR(" \t\n\r\f\vHello World \t\n\r\f\v "));
String expected(STR("Hello World"));
etl::trim(text);
CHECK(expected == text);
}
//*************************************************************************
TEST(test_trim_nothing_to_trim)
{
String text(STR("Hello World"));
String expected(STR("Hello World"));
etl::trim(text);
CHECK(expected == text);
}
////*************************************************************************
//TEST(test_trim_view)
//{
// String text(STR(" \t\n\r\f\vHello World \t\n\r\f\v "));
// String expected(STR("Hello World"));
// StringView view = etl::trim_view(text);
// String view_text(view.begin(), view.end());
// CHECK(expected == view_text);
//}
////*************************************************************************
//TEST(test_trim_view_nothing_to_trim)
//{
// String text(STR("Hello World"));
// String expected(STR("Hello World"));
// StringView view = etl::trim_view(text);
// String view_text(view.begin(), view.end());
// CHECK(expected == view_text);
//}
////*************************************************************************
//TEST(test_reverse)
//{
// String text(STR("Hello World"));
// String expected(STR("dlroW olleH"));
// etl::reverse(text);
// CHECK(expected == text);
//}
};
}

View File

@ -1063,6 +1063,7 @@
<ClInclude Include="..\..\include\etl\private\crc32_poly_0x1edc6f41.h" />
<ClInclude Include="..\..\include\etl\private\crc64_poly_0x42f0e1eba9ea3693.h" />
<ClInclude Include="..\..\include\etl\private\crc8_poly_0x07.h" />
<ClInclude Include="..\..\include\etl\private\string_utilities_helper.h" />
<ClInclude Include="..\..\include\etl\private\to_string_helper.h" />
<ClInclude Include="..\..\include\etl\profiles\armv7.h" />
<ClInclude Include="..\..\include\etl\profiles\armv7_no_stl.h" />
@ -1123,6 +1124,7 @@
<ClInclude Include="..\..\include\etl\queue_mpmc_mutex.h" />
<ClInclude Include="..\..\include\etl\sqrt.h" />
<ClInclude Include="..\..\include\etl\string_stream.h" />
<ClInclude Include="..\..\include\etl\string_utilities.h" />
<ClInclude Include="..\..\include\etl\string_view.h" />
<ClInclude Include="..\..\include\etl\task.h" />
<ClInclude Include="..\..\include\etl\timer.h" />
@ -1628,6 +1630,7 @@
<ClCompile Include="..\test_string_u16_external_buffer.cpp" />
<ClCompile Include="..\test_string_u32.cpp" />
<ClCompile Include="..\test_string_u32_external_buffer.cpp" />
<ClCompile Include="..\test_string_utilities_char.cpp" />
<ClCompile Include="..\test_string_view.cpp" />
<ClCompile Include="..\test_string_wchar_t.cpp" />
<ClCompile Include="..\test_string_wchar_t_external_buffer.cpp" />

View File

@ -870,6 +870,12 @@
<ClInclude Include="..\..\include\etl\basic_string_stream.h">
<Filter>ETL\Strings</Filter>
</ClInclude>
<ClInclude Include="..\..\include\etl\string_utilities.h">
<Filter>ETL\Strings</Filter>
</ClInclude>
<ClInclude Include="..\..\include\etl\private\string_utilities_helper.h">
<Filter>ETL\Private</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\main.cpp">
@ -1358,6 +1364,9 @@
<ClCompile Include="..\test_u32string_stream.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\test_string_utilities_char.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\library.properties">