Files
mir_server/sdk/utils/util_func_extend.h

221 lines
5.1 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
//--------------------------------------------------------------------
// 文件名: util_func_extend.h
// 内 容: 工具函数
// 说 明:
// 创建日期: 2017年07月24日
// 创建人: chenwl
// 版权所有: XX公司
//--------------------------------------------------------------------
#ifndef __GAME_UTIL_FUNC_EXTEND_H__
#define __GAME_UTIL_FUNC_EXTEND_H__
#include <sstream>
#include <string>
namespace utility
{
template<typename T>
inline std::string toString (T p)
{
std::ostringstream stream;
stream << p;
return stream.str();
}
template<typename T1, typename T2>
inline std::string toString (T1 p1, T2 p2)
{
std::ostringstream stream;
stream << p1 << p2;
return stream.str();
}
template<typename T1, typename T2, typename T3>
inline std::string toString (T1 p1, T2 p2, T3 p3)
{
std::ostringstream stream;
stream << p1 << p2 << p3;
return stream.str();
}
template<typename T1, typename T2, typename T3, typename T4>
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4)
{
std::ostringstream stream;
stream << p1 << p2 << p3 << p4;
return stream.str();
}
template<typename T1, typename T2, typename T3, typename T4, typename T5>
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5)
{
std::ostringstream stream;
stream << p1 << p2 << p3 << p4 << p5;
return stream.str();
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6)
{
std::ostringstream stream;
stream << p1 << p2 << p3 << p4 << p5 << p6;
return stream.str();
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7)
{
std::ostringstream stream;
stream << p1 << p2 << p3 << p4 << p5 << p6 << p7;
return stream.str();
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8)
{
std::ostringstream stream;
stream << p1 << p2 << p3 << p4 << p5 << p6 << p7 << p8;
return stream.str();
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
inline std::string toString (T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8, T9 p9)
{
std::ostringstream stream;
stream << p1 << p2 << p3 << p4 << p5 << p6 << p7 << p8 << p9;
return stream.str();
}
namespace templates
{
template<typename T>
inline void split(std::vector<std::string>& _ret, const std::string& _source, const std::string& _delims)
{
if (_source == "")
{
return;
}
size_t start = 0;
size_t end = _source.find(_delims);
while (start != _source.npos)
{
if (end != _source.npos)
_ret.push_back(_source.substr(start, end - start));
else
{
_ret.push_back(_source.substr(start));
break;
}
start = end;
if (start != _source.npos)
{
start+=_delims.size();
}
end = _source.find(_delims, start);
}
}
} // namespace templates
inline std::vector<std::string> split(const std::string& _source, const std::string& _delims = "\t\n ")
{
std::vector<std::string> result;
templates::split<void>(result, _source, _delims);
return result;
}
template<typename T>
inline T parseValue( const std::string& _value )
{
std::istringstream stream(_value);
T result;
stream >> result;
if (stream.fail())
return T();
else
{
int item = stream.get();
while (item != -1)
{
if (item != ' ' && item != '\t')
return T();
item = stream.get();
}
}
return result;
}
// отдельная имплементация под bool
template<>
inline bool parseValue(const std::string& _value)
{
if (_value == "True" || _value == "true" || _value == "1")
return true;
return false;
}
// отдельная имплементация под char
template<>
inline char parseValue(const std::string& _value)
{
return (char)parseValue<short>(_value);
}
// отдельная имплементация под unsigned char
template<>
inline unsigned char parseValue(const std::string& _value)
{
return (unsigned char)parseValue<unsigned short>(_value);
}
inline short parseShort(const std::string& _value)
{
return parseValue<short>(_value);
}
inline unsigned short parseUShort(const std::string& _value)
{
return parseValue<unsigned short>(_value);
}
inline int parseInt(const std::string& _value)
{
return parseValue<int>(_value);
}
inline unsigned int parseUInt(const std::string& _value)
{
return parseValue<unsigned int>(_value);
}
inline size_t parseSizeT(const std::string& _value)
{
return parseValue<size_t>(_value);
}
inline float parseFloat(const std::string& _value)
{
return parseValue<float>(_value);
}
inline double parseDouble(const std::string& _value)
{
return parseValue<double>(_value);
}
inline bool parseBool(const std::string& _value)
{
return parseValue<bool>(_value);
}
inline char parseChar(const std::string& _value)
{
return parseValue<char>(_value);
}
inline unsigned char parseUChar(const std::string& _value)
{
return parseValue<unsigned char>(_value);
}
}
#endif