Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#ifndef __SEXYAPPFRAMEWORK_COMMON_H__
#define __SEXYAPPFRAMEWORK_COMMON_H__

#pragma warning(disable:4786)
#pragma warning(disable:4503)

#undef _WIN32_WINNT
#undef WIN32_LEAN_AND_MEAN

#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0500
#undef _UNICODE
#undef UNICODE

#include <string>
#include <vector>
#include <set>
#include <map>
#include <list>
#include <algorithm>
#include <cstdlib>

#include <windows.h>
#include <shellapi.h>
#include <mmsystem.h>
#include "ModVal.h"

#ifdef _USE_WIDE_STRING

typedef std::wstring            SexyString;
#define _S(x)                           L ##x


#define sexystrncmp                     wcsncmp
#define sexystrcmp                      wcscmp
#define sexystricmp                     wcsicmp
#define sexysscanf                      swscanf
#define sexyatoi                        _wtoi
#define sexystrcpy                      wcscpy

#define SexyStringToStringFast(x)       WStringToString(x)
#define SexyStringToWStringFast(x)      (x)
#define StringToSexyStringFast(x)       StringToWString(x)
#define WStringToSexyStringFast(x)      (x)

#ifndef SEXYFRAMEWORK_NO_REDEFINE_WIN_API
// Redefine the functions and structs we need to be wide-string
#undef CreateWindowEx
#undef RegisterClass
#undef MessageBox
#undef ShellExecute
#undef GetTextExtentPoint32
#undef RegisterWindowMessage
#undef CreateMutex
#undef DrawTextEx
#undef TextOut

#define CreateWindowEx                          CreateWindowExW
#define RegisterClass                           RegisterClassW
#define WNDCLASS                                        WNDCLASSW
#define MessageBox                                      MessageBoxW
#define ShellExecute                            ShellExecuteW
#define GetTextExtentPoint32            GetTextExtentPoint32W
#define RegisterWindowMessage           RegisterWindowMessageW
#define CreateMutex                                     CreateMutexW
#define DrawTextEx                                      DrawTextExW
#define TextOut                                         TextOutW
#endif

#else

typedef std::string                     SexyString;
#define _S(x)                           x


#define sexystrncmp                     strncmp
#define sexystrcmp                      strcmp
#define sexystricmp                     stricmp
#define sexysscanf                      sscanf
#define sexyatoi                        atoi
#define sexystrcpy                      strcpy

#define SexyStringToStringFast(x)       (x)
#define SexyStringToWStringFast(x)      StringToWString(x)
#define StringToSexyStringFast(x)       (x)
#define WStringToSexyStringFast(x)      WStringToString(x)

#endif

#define LONG_BIGE_TO_NATIVE(l) (((l >> 24) & 0xFF) | ((l >> 8) & 0xFF00) | ((l << 8) & 0xFF0000) | ((l << 24) & 0xFF000000))
#define WORD_BIGE_TO_NATIVE(w) (((w >> 8) & 0xFF) | ((w << 8) & 0xFF00))
#define LONG_LITTLEE_TO_NATIVE(l) (l)
#define WORD_LITTLEE_TO_NATIVE(w) (w)

#define LENGTH(anyarray) (sizeof(anyarray) / sizeof(anyarray[0]))

typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef __int64 int64;

typedef std::map<std::string, std::string>              DefinesMap;
typedef std::map<std::wstring, std::wstring>    WStringWStringMap;
typedef SexyString::value_type                                  SexyChar;
#define HAS_SEXYCHAR

namespace Sexy
{

const ulong SEXY_RAND_MAX = 0x7FFFFFFF;

extern bool                     gDebug;
extern HINSTANCE        gHInstance;

int                                     Rand();
int                                     Rand(int range);
float                           Rand(float range);
void                            SRand(ulong theSeed);
extern std::string      vformat(const char* fmt, va_list argPtr);
extern std::wstring     vformat(const wchar_t* fmt, va_list argPtr);
extern std::string      StrFormat(const char* fmt ...);
extern std::wstring     StrFormat(const wchar_t* fmt ...);
bool                            CheckFor98Mill();
bool                            CheckForVista();
std::string                     GetAppDataFolder();
void                            SetAppDataFolder(const std::string& thePath);
std::string                     URLEncode(const std::string& theString);
std::string                     StringToUpper(const std::string& theString);
std::wstring            StringToUpper(const std::wstring& theString);
std::string                     StringToLower(const std::string& theString);
std::wstring            StringToLower(const std::wstring& theString);
std::wstring            StringToWString(const std::string &theString);
std::string                     WStringToString(const std::wstring &theString);
SexyString                      StringToSexyString(const std::string& theString);
SexyString                      WStringToSexyString(const std::wstring& theString);
std::string                     SexyStringToString(const SexyString& theString);
std::wstring            SexyStringToWString(const SexyString& theString);
std::string                     Upper(const std::string& theData);
std::wstring            Upper(const std::wstring& theData);
std::string                     Lower(const std::string& theData);
std::wstring            Lower(const std::wstring& theData);
std::string                     Trim(const std::string& theString);
std::wstring            Trim(const std::wstring& theString);
bool                            StringToInt(const std::string theString, int* theIntVal);
bool                            StringToDouble(const std::string theString, double* theDoubleVal);
bool                            StringToInt(const std::wstring theString, int* theIntVal);
bool                            StringToDouble(const std::wstring theString, double* theDoubleVal);
int                                     StrFindNoCase(const char *theStr, const char *theFind);
bool                            StrPrefixNoCase(const char *theStr, const char *thePrefix, int maxLength = 10000000);
SexyString                      CommaSeperate(int theValue);
std::string                     Evaluate(const std::string& theString, const DefinesMap& theDefinesMap);
std::string                     XMLDecodeString(const std::string& theString);
std::string                     XMLEncodeString(const std::string& theString);
std::wstring            XMLDecodeString(const std::wstring& theString);
std::wstring            XMLEncodeString(const std::wstring& theString);

bool                            Deltree(const std::string& thePath);
bool                            FileExists(const std::string& theFileName);
void                            MkDir(const std::string& theDir);
std::string                     GetFileName(const std::string& thePath, bool noExtension = false);
std::string                     GetFileDir(const std::string& thePath, bool withSlash = false);
std::string                     RemoveTrailingSlash(const std::string& theDirectory);
std::string                     AddTrailingSlash(const std::string& theDirectory, bool backSlash = false);
time_t                          GetFileDate(const std::string& theFileName);
std::string                     GetCurDir();
std::string                     GetFullPath(const std::string& theRelPath);
std::string                     GetPathFrom(const std::string& theRelPath, const std::string& theDir);
bool                            AllowAllAccess(const std::string& theFileName);


inline void                     inlineUpper(std::string &theData)
{
    //std::transform(theData.begin(), theData.end(), theData.begin(), toupper);

        int aStrLen = (int) theData.length();
        for (int i = 0; i < aStrLen; i++)
        {
                theData[i] = toupper(theData[i]);
        }
}

inline void                     inlineUpper(std::wstring &theData)
{
    //std::transform(theData.begin(), theData.end(), theData.begin(), toupper);

        int aStrLen = (int) theData.length();
        for (int i = 0; i < aStrLen; i++)
        {
                theData[i] = towupper(theData[i]);
        }
}

inline void                     inlineLower(std::string &theData)
{
    std::transform(theData.begin(), theData.end(), theData.begin(), tolower);
}

inline void                     inlineLower(std::wstring &theData)
{
    std::transform(theData.begin(), theData.end(), theData.begin(), tolower);
}

inline void                     inlineLTrim(std::string &theData, const std::string& theChars = " \t\r\n")
{
    theData.erase(0, theData.find_first_not_of(theChars));
}

inline void                     inlineLTrim(std::wstring &theData, const std::wstring& theChars = L" \t\r\n")
{
    theData.erase(0, theData.find_first_not_of(theChars));
}


inline void                     inlineRTrim(std::string &theData, const std::string& theChars = " \t\r\n")
{
    theData.resize(theData.find_last_not_of(theChars) + 1);
}

inline void                     inlineTrim(std::string &theData, const std::string& theChars = " \t\r\n")
{
        inlineRTrim(theData, theChars);
        inlineLTrim(theData, theChars);
}

struct StringLessNoCase { bool operator()(const std::string &s1, const std::string &s2) const { return _stricmp(s1.c_str(),s2.c_str())<0; } };

}

#endif //__SEXYAPPFRAMEWORK_COMMON_H__