/* GWEN Copyright (c) 2010 Facepunch Studios See license in Gwen.h */ #pragma once #ifndef GWEN_UTILITY_H #define GWEN_UTILITY_H #include #include #include "Gwen/Structures.h" namespace Gwen { namespace Utility { template const T& Max( const T& x, const T& y ) { if ( y < x ) return x; return y; } template const T& Min( const T& x, const T& y ) { if ( y > x ) return x; return y; } #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4996 ) #endif inline String UnicodeToString( const UnicodeString& strIn ) { if ( !strIn.length() ) return ""; String temp(strIn.length(), (char)0); std::use_facet< std::ctype >(std::locale()). \ narrow(&strIn[0], &strIn[0]+strIn.length(), ' ', &temp[0]); return temp; } inline UnicodeString StringToUnicode( const String& strIn ) { if ( !strIn.length() ) return L""; UnicodeString temp(strIn.length(), (wchar_t)0); std::use_facet< std::ctype >(std::locale()). \ widen(&strIn[0], &strIn[0]+strIn.length(), &temp[0]); return temp; } #ifdef _MSC_VER #pragma warning( pop ) #endif template String ToString( const T& object ) { std::ostringstream os; os << object; return os.str(); } inline Gwen::Rect ClampRectToRect( Gwen::Rect inside, Gwen::Rect outside, bool clampSize = false ) { if ( inside.x < outside.x ) inside.x = outside.x; if ( inside.y < outside.y ) inside.y = outside.y; if ( inside.x + inside.w > outside.x + outside.w ) { if ( clampSize ) inside.w = outside.w; else inside.x = outside.x + outside.w - inside.w; } if ( inside.y + inside.h > outside.y + outside.h ) { if ( clampSize ) inside.h = outside.h; else inside.y = outside.w + outside.h - inside.h; } return inside; } GWEN_EXPORT UnicodeString Format( const wchar_t* fmt, ... ); namespace Strings { typedef std::vector List; typedef std::vector UnicodeList; GWEN_EXPORT void Split( const Gwen::String& str, const Gwen::String& seperator, Strings::List& outbits, bool bLeaveSeperators = false ); GWEN_EXPORT void Split( const Gwen::UnicodeString& str, const Gwen::UnicodeString& seperator, Strings::UnicodeList& outbits, bool bLeaveSeperators = false ); template T TrimLeft( const T& str, const T& strChars ) { T outstr = str; outstr.erase( 0, outstr.find_first_not_of( strChars ) ); return outstr; } namespace To { GWEN_EXPORT bool Bool( const Gwen::String& str ); GWEN_EXPORT int Int( const Gwen::String& str ); GWEN_EXPORT float Float( const Gwen::String& str ); GWEN_EXPORT bool Floats( const Gwen::String& str, float* f, size_t iCount ); } } } } #endif