|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
|
|
#include "types.h" |
|
|
|
|
|
#include <vector> |
|
|
#include <string> |
|
|
|
|
|
|
|
|
double GetSeconds(); |
|
|
void Sleep(double seconds); |
|
|
|
|
|
|
|
|
std::string GetExePath(); |
|
|
std::string GetWorkingDirectory(); |
|
|
|
|
|
#ifdef ANDROID |
|
|
|
|
|
#include <android/log.h> |
|
|
|
|
|
#ifndef LOGE |
|
|
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "Flex", __VA_ARGS__) |
|
|
#endif |
|
|
|
|
|
inline std::string GetFilePathByPlatform(const char* path) |
|
|
{ |
|
|
std::string newPath(path); |
|
|
|
|
|
if(newPath.find("/mnt/sdcard/flex/data/") != std::string::npos) |
|
|
{ |
|
|
LOGE("file have exit %s",path); |
|
|
} |
|
|
else |
|
|
{ |
|
|
std::string rootPath = "/mnt/sdcard/flex/"; |
|
|
size_t startPos = newPath.find("data/"); |
|
|
if(startPos != std::string::npos) |
|
|
{ |
|
|
newPath = rootPath + newPath.substr(startPos); |
|
|
} |
|
|
} |
|
|
|
|
|
return newPath; |
|
|
} |
|
|
#else |
|
|
|
|
|
inline std::string GetFilePathByPlatform(const char* path) |
|
|
{ |
|
|
std::string newPath(path); |
|
|
return newPath; |
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
bool GetCmdLineArg(const char* arg, T& out, int argc, char* argv[]) |
|
|
{ |
|
|
|
|
|
for (int i=0; i < argc; ++i) |
|
|
{ |
|
|
const char* s1 = arg; |
|
|
const char* s2 = argv[i]; |
|
|
|
|
|
while (*s1 && *s2 && *s1 == *s2) |
|
|
{ |
|
|
++s1; |
|
|
++s2; |
|
|
} |
|
|
|
|
|
|
|
|
if (*s1 == 0 && *s2 == '=') |
|
|
{ |
|
|
++s2; |
|
|
|
|
|
|
|
|
std::istringstream is(s2); |
|
|
if (is >> out) |
|
|
{ |
|
|
return true; |
|
|
} |
|
|
else |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
return false; |
|
|
} |
|
|
|
|
|
std::string ExpandPath(const char* path); |
|
|
|
|
|
std::string StripFilename(const char* path); |
|
|
|
|
|
std::string StripPath(const char* path); |
|
|
|
|
|
std::string StripExtension(const char* path); |
|
|
|
|
|
std::string GetExtension(const char* path); |
|
|
|
|
|
std::string NormalizePath(const char* path); |
|
|
|
|
|
|
|
|
std::string LoadFileToString(const char* filename); |
|
|
|
|
|
uint8_t* LoadFileToBuffer(const char* filename, uint32_t* sizeRead=NULL); |
|
|
|
|
|
bool SaveStringToFile(const char* filename, const char* s); |
|
|
|
|
|
bool FileMove(const char* src, const char* dest); |
|
|
bool FileScan(const char* pattern, std::vector<std::string>& files); |
|
|
|
|
|
|
|
|
const uint32_t kMaxPathLength = 2048; |
|
|
|
|
|
#ifdef WIN32 |
|
|
|
|
|
|
|
|
#define GET_WPARAM(wp, lp) (wp) |
|
|
#define GET_LPARAM(wp, lp) (lp) |
|
|
|
|
|
#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) |
|
|
#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) |
|
|
|
|
|
#define vsnprintf _vsnprintf |
|
|
#define snprintf _snprintf |
|
|
#define vsnwprintf _vsnwprintf |
|
|
|
|
|
#if _MSC_VER >= 1400 |
|
|
#define snwprintf _snwprintf_s |
|
|
#else |
|
|
#define snwprintf _snwprintf |
|
|
#endif |
|
|
|
|
|
#endif |
|
|
|
|
|
#if PLATFORM_IOS |
|
|
inline std::string ExpandPath(const char* p) |
|
|
{ |
|
|
NSString *imagePath = [NSString stringWithUTF8String:p]; |
|
|
NSString *fullPath = [[NSBundle mainBundle] pathForResource:[imagePath lastPathComponent] ofType:nil inDirectory:[imagePath stringByDeletingLastPathComponent]]; |
|
|
|
|
|
if (fullPath) |
|
|
{ |
|
|
std::string s = [fullPath cStringUsingEncoding:1]; |
|
|
return s; |
|
|
} |
|
|
else |
|
|
{ |
|
|
Log::Info << "Failed to map path for : " << p << std::endl; |
|
|
return std::string(""); |
|
|
} |
|
|
} |
|
|
inline std::string GetTempDirectory() |
|
|
{ |
|
|
NSString* tmp = NSTemporaryDirectory(); |
|
|
std::string s = [tmp cStringUsingEncoding:1]; |
|
|
|
|
|
return s; |
|
|
} |
|
|
|
|
|
inline std::string DataPath(const char* p) |
|
|
{ |
|
|
return ExpandPath((std::string("DataCooked/") + p).c_str()); |
|
|
} |
|
|
|
|
|
#else |
|
|
|
|
|
inline std::string ExpandPath(const char* p) |
|
|
{ |
|
|
return p; |
|
|
} |
|
|
|
|
|
inline std::string DataPath(const char* p) |
|
|
{ |
|
|
return ExpandPath((std::string("Data/") + p).c_str()); |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
#ifdef ANDROID |
|
|
|
|
|
#define __int64 int64_t |
|
|
|
|
|
#endif |
|
|
|