15 #ifndef ARSENALGEAR_UTILS_HPP
16 #define ARSENALGEAR_UTILS_HPP
24 #include <type_traits>
31 #include <string_view>
44 extern std::string
multi(
const std::string& element,
unsigned int n_times );
45 extern std::vector <std::string>
split_string(
const std::string& input,
const std::string& regex );
60 template <
typename T_err = std::runtime_error>
61 inline T_err
except_error_func(
const std::string& beg =
"", std::string var =
nullptr,
const std::string& end =
"" )
63 using namespace std::literals::string_literals;
65 static std::ostringstream oss;
68 oss <<
"\033[31m" << beg <<
" \""s <<
"\033[1m" << var <<
"\033[22m" <<
"\" "s << end <<
"\033[39m";
70 return T_err( oss.str() );
82 return std::is_floating_point <T>::value;
93 inline T
one(
const T& iterating_var )
95 std::vector<T> counter_;
99 if( counter_.size() < 2 ) counter_.push_back( iterating_var );
100 if( counter_.size() == 2 )
return abs( abs( counter_.front() ) - abs( counter_.back() ) );
101 return static_cast <T
> ( 0 );
116 template <
class CharT>
117 std::conditional_t<std::is_same_v<CharT, char>,
const std::basic_string<CharT>&, std::basic_string<CharT>>
120 if constexpr( std::is_same_v <CharT, char> )
124 else if constexpr( std::is_same_v <CharT, wchar_t> )
126 static std::wstring_convert <std::codecvt_utf8_utf16 <wchar_t>> converter_wchar_t;
127 return converter_wchar_t.from_bytes( input_str );
130 #if ( __cplusplus >= 202002L )
131 else if constexpr( std::is_same_v <CharT, char8_t> )
133 return reinterpret_cast <const char8_t*
>( input_str.c_str() );
136 else if constexpr( std::is_same_v <CharT, char16_t> )
138 static std::wstring_convert <std::codecvt_utf8_utf16 <char16_t>, char16_t> converter_16_t;
139 return converter_16_t.from_bytes( input_str );
141 else if constexpr( std::is_same_v <CharT, char32_t> )
143 static std::wstring_convert <std::codecvt_utf8_utf16 <char32_t>, char32_t> converter_32_t;
144 return converter_32_t.from_bytes( input_str );
149 return StringConverter<CharT>(
"" );
163 template <
typename T>
166 if constexpr( std::is_convertible_v <T, std::string_view> && ! std::is_same_v<T, std::nullptr_t> )
172 return ( std::string_view( str ).length() < 7 ) && ( str[0] ==
'\033' );
176 return ( std::string_view( str ).find(
'\033' ) != std::string_view::npos );
Definition: stream.cpp:22
std::conditional_t< std::is_same_v< CharT, char >, const std::basic_string< CharT > &, std::basic_string< CharT > > StringConverter(const std::string &input_str)
Function used to convert an std::string into other string types (std::wstring etc....
Definition: utils.hpp:118
std::string multi(const std::string &element, unsigned int n_times)
Function used to multiply a string for n times.
Definition: utils.cpp:36
bool isFloatingPoint(const T &)
Function to check if an expression (not a type) is a floating point or not. I know this function is a...
Definition: utils.hpp:80
T_err except_error_func(const std::string &beg="", std::string var=nullptr, const std::string &end="")
Function used to throw customized stdexception error. This function is extremely specific to my purpo...
Definition: utils.hpp:61
T one(const T &iterating_var)
Function to find the incremented unit of a loop. Not easy to understand its purpose without context,...
Definition: utils.hpp:93
bool is_escape(const T &str, const ANSI &flag)
This method is used to check if an input variable is an ANSI escape sequency or not.
Definition: utils.hpp:164
ANSI
Definition: utils.hpp:39
std::vector< std::string > split_string(const std::string &input, const std::string ®ex)
Function used to split a string based on a certain reges.
Definition: utils.cpp:53