aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee/include/string_tools.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/epee/include/string_tools.h')
-rw-r--r--contrib/epee/include/string_tools.h300
1 files changed, 40 insertions, 260 deletions
diff --git a/contrib/epee/include/string_tools.h b/contrib/epee/include/string_tools.h
index 2d9317d60..dbbe1906e 100644
--- a/contrib/epee/include/string_tools.h
+++ b/contrib/epee/include/string_tools.h
@@ -24,33 +24,16 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
-
-
#ifndef _STRING_TOOLS_H_
#define _STRING_TOOLS_H_
-// Previously pulled in by ASIO, further cleanup still required ...
-#ifdef _WIN32
-# include <winsock2.h>
-# include <windows.h>
-#endif
-
-#include <string.h>
-#include <locale>
-#include <cstdlib>
-#include <string>
-#include <type_traits>
-#include <boost/lexical_cast.hpp>
-#include <boost/algorithm/string/predicate.hpp>
-#include <boost/utility/string_ref.hpp>
-#include "misc_log_ex.h"
-#include "storages/parserse_base_utils.h"
#include "hex.h"
-#include "memwipe.h"
#include "mlocker.h"
-#include "span.h"
-#include "warnings.h"
+#include <boost/utility/string_ref.hpp>
+#include <sstream>
+#include <string>
+#include <cstdint>
#ifndef OUT
#define OUT
@@ -74,202 +57,38 @@ namespace string_tools
{
return from_hex::to_string(res, s);
}
- //----------------------------------------------------------------------------
-PUSH_WARNINGS
-DISABLE_GCC_WARNING(maybe-uninitialized)
- template<class XType>
- inline bool get_xtype_from_string(OUT XType& val, const std::string& str_id)
- {
- if (std::is_integral<XType>::value && !std::numeric_limits<XType>::is_signed && !std::is_same<XType, bool>::value)
- {
- for (char c : str_id)
- {
- if (!epee::misc_utils::parse::isdigit(c))
- return false;
- }
- }
-
- try
- {
- val = boost::lexical_cast<XType>(str_id);
- return true;
- }
- catch(const std::exception& /*e*/)
- {
- //const char* pmsg = e.what();
- return false;
- }
- catch(...)
- {
- return false;
- }
-
- return true;
- }
-POP_WARNINGS
- //----------------------------------------------------------------------------
- template<class XType>
- inline bool xtype_to_string(const XType& val, std::string& str)
- {
- try
- {
- str = boost::lexical_cast<std::string>(val);
- }
- catch(...)
- {
- return false;
- }
-
- return true;
- }
- //----------------------------------------------------------------------------
- std::string get_ip_string_from_int32(uint32_t ip);
- //----------------------------------------------------------------------------
- bool get_ip_int32_from_string(uint32_t& ip, const std::string& ip_str);
- //----------------------------------------------------------------------------
- inline bool parse_peer_from_string(uint32_t& ip, uint16_t& port, const std::string& addres)
- {
- //parse ip and address
- std::string::size_type p = addres.find(':');
- std::string ip_str, port_str;
- if(p == std::string::npos)
- {
- port = 0;
- ip_str = addres;
- }
- else
- {
- ip_str = addres.substr(0, p);
- port_str = addres.substr(p+1, addres.size());
- }
-
- if(!get_ip_int32_from_string(ip, ip_str))
- {
- return false;
- }
-
- if(p != std::string::npos && !get_xtype_from_string(port, port_str))
- {
- return false;
- }
- return true;
- }
-
- inline std::string num_to_string_fast(int64_t val)
- {
- /*
- char buff[30] = {0};
- i64toa_s(val, buff, sizeof(buff)-1, 10);
- return buff;*/
- return boost::lexical_cast<std::string>(val);
- }
- //----------------------------------------------------------------------------
- template<typename T>
- inline std::string to_string_hex(const T &val)
- {
- static_assert(std::is_arithmetic<T>::value, "only arithmetic types");
- std::stringstream ss;
- ss << std::hex << val;
- std::string s;
- ss >> s;
- return s;
- }
- //----------------------------------------------------------------------------
+
+ std::string get_ip_string_from_int32(uint32_t ip);
+ bool get_ip_int32_from_string(uint32_t& ip, const std::string& ip_str);
+ bool parse_peer_from_string(uint32_t& ip, uint16_t& port, const std::string& addres);
+ std::string num_to_string_fast(int64_t val);
- inline bool compare_no_case(const std::string& str1, const std::string& str2)
- {
-
- return !boost::iequals(str1, str2);
- }
- //----------------------------------------------------------------------------
- inline std::string& get_current_module_name()
- {
- static std::string module_name;
- return module_name;
- }
- //----------------------------------------------------------------------------
- inline std::string& get_current_module_folder()
- {
- static std::string module_folder;
- return module_folder;
- }
- //----------------------------------------------------------------------------
+ bool compare_no_case(const std::string& str1, const std::string& str2);
+ std::string& get_current_module_name();
+ std::string& get_current_module_folder();
#ifdef _WIN32
- inline std::string get_current_module_path()
- {
- char pname [5000] = {0};
- GetModuleFileNameA( NULL, pname, sizeof(pname));
- pname[sizeof(pname)-1] = 0; //be happy ;)
- return pname;
- }
+ std::string get_current_module_path();
#endif
- //----------------------------------------------------------------------------
- inline bool set_module_name_and_folder(const std::string& path_to_process_)
- {
- std::string path_to_process = path_to_process_;
-#ifdef _WIN32
- path_to_process = get_current_module_path();
-#endif
- std::string::size_type a = path_to_process.rfind( '\\' );
- if(a == std::string::npos )
- {
- a = path_to_process.rfind( '/' );
- }
- if ( a != std::string::npos )
- {
- get_current_module_name() = path_to_process.substr(a+1, path_to_process.size());
- get_current_module_folder() = path_to_process.substr(0, a);
- return true;
- }else
- return false;
-
- }
-
- //----------------------------------------------------------------------------
- inline bool trim_left(std::string& str)
- {
- for(std::string::iterator it = str.begin(); it!= str.end() && isspace(static_cast<unsigned char>(*it));)
- str.erase(str.begin());
-
- return true;
- }
- //----------------------------------------------------------------------------
- inline bool trim_right(std::string& str)
- {
-
- for(std::string::reverse_iterator it = str.rbegin(); it!= str.rend() && isspace(static_cast<unsigned char>(*it));)
- str.erase( --((it++).base()));
-
- return true;
- }
- //----------------------------------------------------------------------------
- inline std::string& trim(std::string& str)
- {
-
- trim_left(str);
- trim_right(str);
- return str;
- }
+ bool set_module_name_and_folder(const std::string& path_to_process_);
+ bool trim_left(std::string& str);
+ bool trim_right(std::string& str);
//----------------------------------------------------------------------------
- inline std::string trim(const std::string& str_)
+ inline std::string& trim(std::string& str)
{
- std::string str = str_;
trim_left(str);
trim_right(str);
return str;
}
//----------------------------------------------------------------------------
- inline std::string pad_string(std::string s, size_t n, char c = ' ', bool prepend = false)
+ inline std::string trim(const std::string& str_)
{
- if (s.size() < n)
- {
- if (prepend)
- s = std::string(n - s.size(), c) + s;
- else
- s.append(n - s.size(), c);
- }
- return s;
+ std::string str = str_;
+ trim_left(str);
+ trim_right(str);
+ return str;
}
+ std::string pad_string(std::string s, size_t n, char c = ' ', bool prepend = false);
+
//----------------------------------------------------------------------------
template<class t_pod_type>
std::string pod_to_hex(const t_pod_type& s)
@@ -296,64 +115,25 @@ POP_WARNINGS
{
return hex_to_pod(hex_str, unwrap(s));
}
- //----------------------------------------------------------------------------
- bool validate_hex(uint64_t length, const std::string& str);
- //----------------------------------------------------------------------------
- inline std::string get_extension(const std::string& str)
- {
- std::string res;
- std::string::size_type pos = str.rfind('.');
- if(std::string::npos == pos)
- return res;
-
- res = str.substr(pos+1, str.size()-pos);
- return res;
- }
- //----------------------------------------------------------------------------
- inline std::string cut_off_extension(const std::string& str)
+ //----------------------------------------------------------------------------
+ template<typename T>
+ inline std::string to_string_hex(const T &val)
{
- std::string res;
- std::string::size_type pos = str.rfind('.');
- if(std::string::npos == pos)
- return str;
-
- res = str.substr(0, pos);
- return res;
+ static_assert(std::is_arithmetic<T>::value, "only arithmetic types");
+ std::stringstream ss;
+ ss << std::hex << val;
+ std::string s;
+ ss >> s;
+ return s;
}
- //----------------------------------------------------------------------------
+
+ bool validate_hex(uint64_t length, const std::string& str);
+ std::string get_extension(const std::string& str);
+ std::string cut_off_extension(const std::string& str);
+
#ifdef _WIN32
- inline std::wstring utf8_to_utf16(const std::string& str)
- {
- if (str.empty())
- return {};
- int wstr_size = MultiByteToWideChar(CP_UTF8, 0, &str[0], str.size(), NULL, 0);
- if (wstr_size == 0)
- {
- throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
- }
- std::wstring wstr(wstr_size, wchar_t{});
- if (!MultiByteToWideChar(CP_UTF8, 0, &str[0], str.size(), &wstr[0], wstr_size))
- {
- throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
- }
- return wstr;
- }
- inline std::string utf16_to_utf8(const std::wstring& wstr)
- {
- if (wstr.empty())
- return {};
- int str_size = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], wstr.size(), NULL, 0, NULL, NULL);
- if (str_size == 0)
- {
- throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
- }
- std::string str(str_size, char{});
- if (!WideCharToMultiByte(CP_UTF8, 0, &wstr[0], wstr.size(), &str[0], str_size, NULL, NULL))
- {
- throw std::runtime_error(std::error_code(GetLastError(), std::system_category()).message());
- }
- return str;
- }
+ std::wstring utf8_to_utf16(const std::string& str);
+ std::string utf16_to_utf8(const std::wstring& wstr);
#endif
}
}