/** * @file NFStringGenericConversion.h * @brief ¹®ÀÚ¿­ ÄÁ¹öÆÃ Ŭ·¡½º * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once #include "NFTypes.h" namespace Nave { /** Conversions work like To("123"); To(L"123"); To(L"hello world"); To("hello world"); */ unsigned int Hash(const WCHAR* str); unsigned int Hash(const CHAR* str); typedef std::pair stringIteratorPair; typedef std::pair wstringIteratorPair; template T1 To(T2 value); //generic conversion functions from string to actual type, also supports single(ascii)-wide(unicode conversions) character, if conversion to //some type is not supported you will get a LINKING error template T To(const char* str); template inline T To(char* str) { return To((const char*)str); } template inline T To(const std::string& str) { return To(str.c_str()); } template T To(const stringIteratorPair& StrPair); template T To(const wchar_t* wstr); template inline T To(wchar_t* wstr) { return To((const wchar_t*)wstr); } template inline T To(const std::wstring& wstr) { return To(wstr.c_str()); } template T To(const wstringIteratorPair& StrPair); //methods for converting between upper and lower case, supports both single and wide byte conversions template inline void ToUpperCase(fc& s) { std::transform(s.begin(),s.end(),s.begin(),toupper); } template inline void ToLowerCase(fc& s) { std::transform(s.begin(),s.end(),s.begin(),tolower); } template inline float ToFloat(const T& p) { return To(p); } template inline float ToFloat(const T* p) { return To(p); } template inline double ToDouble(const T& p) { return To(p); } template inline double ToDouble(const T* p) { return To(p); } template inline int ToInt(const T& p) { return To(p); } template inline int ToInt(const T* p) { return To(p); } template inline float2 ToFloat2(const T& p) { return To(p); } template inline float2 ToFloat2(const T* p) { return To(p); } template inline float3 ToFloat3(const T& p) { return To(p); } template inline float3 ToFloat3(const T* p) { return To(p); } template inline float4 ToFloat4(const T& p) { return To(p); } template inline float4 ToFloat4(const T* p) { return To(p); } //@deprecated: convenience methods for single - wide byte conversions inline Nave::String ToString(const std::string p) { return To(p); } inline Nave::String ToString(const std::wstring p) { return p; } template inline Nave::String ToNumber(const T& p) { Nave::String pstr = To(p); return ToString(pstr); } template inline Nave::String ToNumber(const T* p) { Nave::String pstr = To(p); return ToString(pstr); } template inline std::string ToASCII(const T& p) { return To(p); } template inline std::string ToASCII(const T* p) { return To(p); } template inline std::wstring ToUnicode(const T& p) { return To(p); } template inline std::wstring ToUnicode(const T* p) { return To(p); } }