git repos / blockattack-game

blame: source/code/Libs/physfs.cpp

normal view · raw

3647d72c sago007 2016-02-12 22:24 1
#include <streambuf>
3647d72c sago007 2016-02-12 22:24 2
#include <string>
3647d72c sago007 2016-02-12 22:24 3
#include <string.h>
3647d72c sago007 2016-02-12 22:24 4
#include <stdexcept>
3647d72c sago007 2016-02-12 22:24 5
#include "physfs.hpp"
3647d72c sago007 2016-02-12 22:24 6
3647d72c sago007 2016-02-12 22:24 7
using std::streambuf;
3647d72c sago007 2016-02-12 22:24 8
using std::ios_base;
3647d72c sago007 2016-02-12 22:24 9
3647d72c sago007 2016-02-12 22:24 10
namespace PhysFS {
3647d72c sago007 2016-02-12 22:24 11
3647d72c sago007 2016-02-12 22:24 12
class fbuf : public streambuf {
3647d72c sago007 2016-02-12 22:24 13
private:
3647d72c sago007 2016-02-12 22:24 14
	fbuf(const fbuf & other);
3647d72c sago007 2016-02-12 22:24 15
	fbuf& operator=(const fbuf& other);
3647d72c sago007 2016-02-12 22:24 16
3647d72c sago007 2016-02-12 22:24 17
	int_type underflow() {
3647d72c sago007 2016-02-12 22:24 18
		if (PHYSFS_eof(file)) {
3647d72c sago007 2016-02-12 22:24 19
			return traits_type::eof();
3647d72c sago007 2016-02-12 22:24 20
		}
3647d72c sago007 2016-02-12 22:24 21
		size_t bytesRead = PHYSFS_read(file, buffer, 1, bufferSize);
3647d72c sago007 2016-02-12 22:24 22
		if (bytesRead < 1) {
3647d72c sago007 2016-02-12 22:24 23
			return traits_type::eof();
3647d72c sago007 2016-02-12 22:24 24
		}
3647d72c sago007 2016-02-12 22:24 25
		setg(buffer, buffer, buffer + bytesRead);
3647d72c sago007 2016-02-12 22:24 26
		return (unsigned char) *gptr();
3647d72c sago007 2016-02-12 22:24 27
	}
3647d72c sago007 2016-02-12 22:24 28
3647d72c sago007 2016-02-12 22:24 29
	pos_type seekoff(off_type pos, ios_base::seekdir dir, ios_base::openmode mode) {
3647d72c sago007 2016-02-12 22:24 30
		switch (dir) {
3647d72c sago007 2016-02-12 22:24 31
		case std::ios_base::beg:
3647d72c sago007 2016-02-12 22:24 32
			PHYSFS_seek(file, pos);
3647d72c sago007 2016-02-12 22:24 33
			break;
3647d72c sago007 2016-02-12 22:24 34
		case std::ios_base::cur:
3647d72c sago007 2016-02-12 22:24 35
			// subtract characters currently in buffer from seek position
3647d72c sago007 2016-02-12 22:24 36
			PHYSFS_seek(file, (PHYSFS_tell(file) + pos) - (egptr() - gptr()));
3647d72c sago007 2016-02-12 22:24 37
			break;
3647d72c sago007 2016-02-12 22:24 38
		case std::ios_base::end:
3647d72c sago007 2016-02-12 22:24 39
			PHYSFS_seek(file, PHYSFS_fileLength(file) + pos);
3647d72c sago007 2016-02-12 22:24 40
			break;
3647d72c sago007 2016-02-12 22:24 41
		}
3647d72c sago007 2016-02-12 22:24 42
		if (mode & std::ios_base::in) {
3647d72c sago007 2016-02-12 22:24 43
			setg(egptr(), egptr(), egptr());
3647d72c sago007 2016-02-12 22:24 44
		}
3647d72c sago007 2016-02-12 22:24 45
		if (mode & std::ios_base::out) {
3647d72c sago007 2016-02-12 22:24 46
			setp(buffer, buffer);
3647d72c sago007 2016-02-12 22:24 47
		}
3647d72c sago007 2016-02-12 22:24 48
		return PHYSFS_tell(file);
3647d72c sago007 2016-02-12 22:24 49
	}
3647d72c sago007 2016-02-12 22:24 50
3647d72c sago007 2016-02-12 22:24 51
	pos_type seekpos(pos_type pos, std::ios_base::openmode mode) {
3647d72c sago007 2016-02-12 22:24 52
		PHYSFS_seek(file, pos);
3647d72c sago007 2016-02-12 22:24 53
		if (mode & std::ios_base::in) {
3647d72c sago007 2016-02-12 22:24 54
			setg(egptr(), egptr(), egptr());
3647d72c sago007 2016-02-12 22:24 55
		}
3647d72c sago007 2016-02-12 22:24 56
		if (mode & std::ios_base::out) {
3647d72c sago007 2016-02-12 22:24 57
			setp(buffer, buffer);
3647d72c sago007 2016-02-12 22:24 58
		}
3647d72c sago007 2016-02-12 22:24 59
		return PHYSFS_tell(file);
3647d72c sago007 2016-02-12 22:24 60
	}
3647d72c sago007 2016-02-12 22:24 61
3647d72c sago007 2016-02-12 22:24 62
	int_type overflow( int_type c = traits_type::eof() ) {
3647d72c sago007 2016-02-12 22:24 63
		if (pptr() == pbase() && c == traits_type::eof()) {
3647d72c sago007 2016-02-12 22:24 64
			return 0; // no-op
3647d72c sago007 2016-02-12 22:24 65
		}
3647d72c sago007 2016-02-12 22:24 66
		if (PHYSFS_write(file, pbase(), pptr() - pbase(), 1) < 1) {
3647d72c sago007 2016-02-12 22:24 67
			return traits_type::eof();
3647d72c sago007 2016-02-12 22:24 68
		}
3647d72c sago007 2016-02-12 22:24 69
		if (c != traits_type::eof()) {
3647d72c sago007 2016-02-12 22:24 70
			if (PHYSFS_write(file, &c, 1, 1) < 1) {
3647d72c sago007 2016-02-12 22:24 71
				return traits_type::eof();
3647d72c sago007 2016-02-12 22:24 72
			}
3647d72c sago007 2016-02-12 22:24 73
		}
3647d72c sago007 2016-02-12 22:24 74
3647d72c sago007 2016-02-12 22:24 75
		return 0;
3647d72c sago007 2016-02-12 22:24 76
	}
3647d72c sago007 2016-02-12 22:24 77
3647d72c sago007 2016-02-12 22:24 78
	int sync() {
3647d72c sago007 2016-02-12 22:24 79
		return overflow();
3647d72c sago007 2016-02-12 22:24 80
	}
3647d72c sago007 2016-02-12 22:24 81
3647d72c sago007 2016-02-12 22:24 82
	char * buffer;
3647d72c sago007 2016-02-12 22:24 83
	size_t const bufferSize;
3647d72c sago007 2016-02-12 22:24 84
protected:
3647d72c sago007 2016-02-12 22:24 85
	PHYSFS_File * const file;
3647d72c sago007 2016-02-12 22:24 86
public:
3647d72c sago007 2016-02-12 22:24 87
	fbuf(PHYSFS_File * file, std::size_t bufferSize = 2048) : file(file), bufferSize(bufferSize) {
3647d72c sago007 2016-02-12 22:24 88
		buffer = new char[bufferSize];
3647d72c sago007 2016-02-12 22:24 89
		char * end = buffer + bufferSize;
3647d72c sago007 2016-02-12 22:24 90
		setg(end, end, end);
3647d72c sago007 2016-02-12 22:24 91
		setp(buffer, end);
3647d72c sago007 2016-02-12 22:24 92
	}
3647d72c sago007 2016-02-12 22:24 93
3647d72c sago007 2016-02-12 22:24 94
	~fbuf() {
3647d72c sago007 2016-02-12 22:24 95
		sync();
3647d72c sago007 2016-02-12 22:24 96
		delete [] buffer;
3647d72c sago007 2016-02-12 22:24 97
	}
3647d72c sago007 2016-02-12 22:24 98
};
3647d72c sago007 2016-02-12 22:24 99
3647d72c sago007 2016-02-12 22:24 100
base_fstream::base_fstream(PHYSFS_File* file) : file(file) {
3647d72c sago007 2016-02-12 22:24 101
    if (file == NULL) {
3647d72c sago007 2016-02-12 22:24 102
        throw std::invalid_argument("attempted to construct fstream with NULL ptr");
3647d72c sago007 2016-02-12 22:24 103
    }
3647d72c sago007 2016-02-12 22:24 104
}
3647d72c sago007 2016-02-12 22:24 105
3647d72c sago007 2016-02-12 22:24 106
base_fstream::~base_fstream() {
3647d72c sago007 2016-02-12 22:24 107
	PHYSFS_close(file);
3647d72c sago007 2016-02-12 22:24 108
}
3647d72c sago007 2016-02-12 22:24 109
3647d72c sago007 2016-02-12 22:24 110
PhysFS::size_t base_fstream::length() {
3647d72c sago007 2016-02-12 22:24 111
	return PHYSFS_fileLength(file);
3647d72c sago007 2016-02-12 22:24 112
}
3647d72c sago007 2016-02-12 22:24 113
3647d72c sago007 2016-02-12 22:24 114
PHYSFS_File* openWithMode(char const * filename, mode openMode) {
3647d72c sago007 2016-02-12 22:24 115
    PHYSFS_File* file = NULL;
3647d72c sago007 2016-02-12 22:24 116
	switch (openMode) {
3647d72c sago007 2016-02-12 22:24 117
	case WRITE:
3647d72c sago007 2016-02-12 22:24 118
		file = PHYSFS_openWrite(filename);
3647d72c sago007 2016-02-12 22:24 119
        break;
3647d72c sago007 2016-02-12 22:24 120
	case APPEND:
3647d72c sago007 2016-02-12 22:24 121
		file = PHYSFS_openAppend(filename);
3647d72c sago007 2016-02-12 22:24 122
        break;
3647d72c sago007 2016-02-12 22:24 123
	case READ:
3647d72c sago007 2016-02-12 22:24 124
		file = PHYSFS_openRead(filename);
3647d72c sago007 2016-02-12 22:24 125
	}
3647d72c sago007 2016-02-12 22:24 126
    if (file == NULL) {
3647d72c sago007 2016-02-12 22:24 127
        throw std::invalid_argument("file not found: " + std::string(filename));
3647d72c sago007 2016-02-12 22:24 128
    }
3647d72c sago007 2016-02-12 22:24 129
    return file;
3647d72c sago007 2016-02-12 22:24 130
}
3647d72c sago007 2016-02-12 22:24 131
3647d72c sago007 2016-02-12 22:24 132
ifstream::ifstream(const string& filename)
3647d72c sago007 2016-02-12 22:24 133
	: base_fstream(openWithMode(filename.c_str(), READ)), std::istream(new fbuf(file)) {}
3647d72c sago007 2016-02-12 22:24 134
3647d72c sago007 2016-02-12 22:24 135
ifstream::~ifstream() {
3647d72c sago007 2016-02-12 22:24 136
	delete rdbuf();
3647d72c sago007 2016-02-12 22:24 137
}
3647d72c sago007 2016-02-12 22:24 138
3647d72c sago007 2016-02-12 22:24 139
ofstream::ofstream(const string& filename, mode writeMode)
3647d72c sago007 2016-02-12 22:24 140
	: base_fstream(openWithMode(filename.c_str(), writeMode)), std::ostream(new fbuf(file)) {}
3647d72c sago007 2016-02-12 22:24 141
3647d72c sago007 2016-02-12 22:24 142
ofstream::~ofstream() {
3647d72c sago007 2016-02-12 22:24 143
	delete rdbuf();
3647d72c sago007 2016-02-12 22:24 144
}
3647d72c sago007 2016-02-12 22:24 145
3647d72c sago007 2016-02-12 22:24 146
fstream::fstream(const string& filename, mode openMode)
3647d72c sago007 2016-02-12 22:24 147
	: base_fstream(openWithMode(filename.c_str(), openMode)), std::iostream(new fbuf(file)) {}
3647d72c sago007 2016-02-12 22:24 148
3647d72c sago007 2016-02-12 22:24 149
fstream::~fstream() {
3647d72c sago007 2016-02-12 22:24 150
	delete rdbuf();
3647d72c sago007 2016-02-12 22:24 151
}
3647d72c sago007 2016-02-12 22:24 152
3647d72c sago007 2016-02-12 22:24 153
Version getLinkedVersion() {
3647d72c sago007 2016-02-12 22:24 154
	Version version;
3647d72c sago007 2016-02-12 22:24 155
	PHYSFS_getLinkedVersion(&version);
3647d72c sago007 2016-02-12 22:24 156
	return version;
3647d72c sago007 2016-02-12 22:24 157
}
3647d72c sago007 2016-02-12 22:24 158
3647d72c sago007 2016-02-12 22:24 159
void init(const char* argv0) {
3647d72c sago007 2016-02-12 22:24 160
	PHYSFS_init(argv0);
3647d72c sago007 2016-02-12 22:24 161
}
3647d72c sago007 2016-02-12 22:24 162
3647d72c sago007 2016-02-12 22:24 163
void deinit() {
3647d72c sago007 2016-02-12 22:24 164
	PHYSFS_deinit();
3647d72c sago007 2016-02-12 22:24 165
}
3647d72c sago007 2016-02-12 22:24 166
3647d72c sago007 2016-02-12 22:24 167
ArchiveInfoList supportedArchiveTypes() {
3647d72c sago007 2016-02-12 22:24 168
	ArchiveInfoList list;
3647d72c sago007 2016-02-12 22:24 169
	for (const ArchiveInfo** archiveType = PHYSFS_supportedArchiveTypes(); *archiveType != NULL; archiveType++) {
3647d72c sago007 2016-02-12 22:24 170
		list.push_back(**archiveType);
3647d72c sago007 2016-02-12 22:24 171
	}
3647d72c sago007 2016-02-12 22:24 172
	return list;
3647d72c sago007 2016-02-12 22:24 173
}
3647d72c sago007 2016-02-12 22:24 174
3647d72c sago007 2016-02-12 22:24 175
string getDirSeparator() {
3647d72c sago007 2016-02-12 22:24 176
	return PHYSFS_getDirSeparator();
3647d72c sago007 2016-02-12 22:24 177
}
3647d72c sago007 2016-02-12 22:24 178
3647d72c sago007 2016-02-12 22:24 179
void permitSymbolicLinks(bool allow) {
3647d72c sago007 2016-02-12 22:24 180
	PHYSFS_permitSymbolicLinks(allow);
3647d72c sago007 2016-02-12 22:24 181
}
3647d72c sago007 2016-02-12 22:24 182
3647d72c sago007 2016-02-12 22:24 183
StringList getCdRomDirs() {
3647d72c sago007 2016-02-12 22:24 184
	StringList dirs;
3647d72c sago007 2016-02-12 22:24 185
	char ** dirBegin = PHYSFS_getCdRomDirs();
3647d72c sago007 2016-02-12 22:24 186
	for (char ** dir = dirBegin; *dir != NULL; dir++) {
3647d72c sago007 2016-02-12 22:24 187
		dirs.push_back(*dir);
3647d72c sago007 2016-02-12 22:24 188
	}
3647d72c sago007 2016-02-12 22:24 189
	PHYSFS_freeList(dirBegin);
3647d72c sago007 2016-02-12 22:24 190
	return dirs;
3647d72c sago007 2016-02-12 22:24 191
}
3647d72c sago007 2016-02-12 22:24 192
3647d72c sago007 2016-02-12 22:24 193
void getCdRomDirs(StringCallback callback, void * extra) {
3647d72c sago007 2016-02-12 22:24 194
	PHYSFS_getCdRomDirsCallback(callback, extra);
3647d72c sago007 2016-02-12 22:24 195
}
3647d72c sago007 2016-02-12 22:24 196
3647d72c sago007 2016-02-12 22:24 197
string getBaseDir() {
3647d72c sago007 2016-02-12 22:24 198
	return PHYSFS_getBaseDir();
3647d72c sago007 2016-02-12 22:24 199
}
3647d72c sago007 2016-02-12 22:24 200
3647d72c sago007 2016-02-12 22:24 201
string getUserDir() {
3647d72c sago007 2016-02-12 22:24 202
	return PHYSFS_getUserDir();
3647d72c sago007 2016-02-12 22:24 203
}
3647d72c sago007 2016-02-12 22:24 204
3647d72c sago007 2016-02-12 22:24 205
string getWriteDir() {
3647d72c sago007 2016-02-12 22:24 206
	return PHYSFS_getWriteDir();
3647d72c sago007 2016-02-12 22:24 207
}
3647d72c sago007 2016-02-12 22:24 208
3647d72c sago007 2016-02-12 22:24 209
void setWriteDir(const string& newDir) {
3647d72c sago007 2016-02-12 22:24 210
	PHYSFS_setWriteDir(newDir.c_str());
3647d72c sago007 2016-02-12 22:24 211
}
3647d72c sago007 2016-02-12 22:24 212
3647d72c sago007 2016-02-12 22:24 213
void removeFromSearchPath(const string& oldDir) {
3647d72c sago007 2016-02-12 22:24 214
	PHYSFS_removeFromSearchPath(oldDir.c_str());
3647d72c sago007 2016-02-12 22:24 215
}
3647d72c sago007 2016-02-12 22:24 216
3647d72c sago007 2016-02-12 22:24 217
StringList getSearchPath() {
3647d72c sago007 2016-02-12 22:24 218
	StringList pathList;
3647d72c sago007 2016-02-12 22:24 219
	char ** pathBegin = PHYSFS_getSearchPath();
3647d72c sago007 2016-02-12 22:24 220
	for (char ** path = pathBegin; *path != NULL; path++) {
3647d72c sago007 2016-02-12 22:24 221
		pathList.push_back(*path);
3647d72c sago007 2016-02-12 22:24 222
	}
3647d72c sago007 2016-02-12 22:24 223
	PHYSFS_freeList(pathBegin);
3647d72c sago007 2016-02-12 22:24 224
	return pathList;
3647d72c sago007 2016-02-12 22:24 225
}
3647d72c sago007 2016-02-12 22:24 226
3647d72c sago007 2016-02-12 22:24 227
void getSearchPath(StringCallback callback, void * extra) {
3647d72c sago007 2016-02-12 22:24 228
	PHYSFS_getSearchPathCallback(callback, extra);
3647d72c sago007 2016-02-12 22:24 229
}
3647d72c sago007 2016-02-12 22:24 230
3647d72c sago007 2016-02-12 22:24 231
void setSaneConfig(const string& orgName, const string& appName,
3647d72c sago007 2016-02-12 22:24 232
		const string& archiveExt, bool includeCdRoms, bool archivesFirst) {
3647d72c sago007 2016-02-12 22:24 233
	PHYSFS_setSaneConfig(orgName.c_str(), appName.c_str(), archiveExt.c_str(), includeCdRoms, archivesFirst);
3647d72c sago007 2016-02-12 22:24 234
}
3647d72c sago007 2016-02-12 22:24 235
3647d72c sago007 2016-02-12 22:24 236
void mkdir(const string& dirName) {
3647d72c sago007 2016-02-12 22:24 237
	PHYSFS_mkdir(dirName.c_str());
3647d72c sago007 2016-02-12 22:24 238
}
3647d72c sago007 2016-02-12 22:24 239
3647d72c sago007 2016-02-12 22:24 240
void deleteFile(const string& filename) {
3647d72c sago007 2016-02-12 22:24 241
	PHYSFS_delete(filename.c_str());
3647d72c sago007 2016-02-12 22:24 242
}
3647d72c sago007 2016-02-12 22:24 243
3647d72c sago007 2016-02-12 22:24 244
string getRealDir(const string& filename) {
3647d72c sago007 2016-02-12 22:24 245
	return PHYSFS_getRealDir(filename.c_str());
3647d72c sago007 2016-02-12 22:24 246
}
3647d72c sago007 2016-02-12 22:24 247
3647d72c sago007 2016-02-12 22:24 248
StringList enumerateFiles(const string& directory) {
3647d72c sago007 2016-02-12 22:24 249
	StringList files;
3647d72c sago007 2016-02-12 22:24 250
	char ** listBegin = PHYSFS_enumerateFiles(directory.c_str());
3647d72c sago007 2016-02-12 22:24 251
	for (char ** file = listBegin; *file != NULL; file++) {
3647d72c sago007 2016-02-12 22:24 252
		files.push_back(*file);
3647d72c sago007 2016-02-12 22:24 253
	}
3647d72c sago007 2016-02-12 22:24 254
	PHYSFS_freeList(listBegin);
3647d72c sago007 2016-02-12 22:24 255
	return files;
3647d72c sago007 2016-02-12 22:24 256
}
3647d72c sago007 2016-02-12 22:24 257
3647d72c sago007 2016-02-12 22:24 258
void enumerateFiles(const string& directory, EnumFilesCallback callback, void * extra) {
3647d72c sago007 2016-02-12 22:24 259
	PHYSFS_enumerateFilesCallback(directory.c_str(), callback, extra);
3647d72c sago007 2016-02-12 22:24 260
}
3647d72c sago007 2016-02-12 22:24 261
3647d72c sago007 2016-02-12 22:24 262
bool exists(const string& filename) {
3647d72c sago007 2016-02-12 22:24 263
	return PHYSFS_exists(filename.c_str());
3647d72c sago007 2016-02-12 22:24 264
}
3647d72c sago007 2016-02-12 22:24 265
3647d72c sago007 2016-02-12 22:24 266
bool isDirectory(const string& filename) {
3647d72c sago007 2016-02-12 22:24 267
	return PHYSFS_isDirectory(filename.c_str());
3647d72c sago007 2016-02-12 22:24 268
}
3647d72c sago007 2016-02-12 22:24 269
3647d72c sago007 2016-02-12 22:24 270
bool isSymbolicLink(const string& filename) {
3647d72c sago007 2016-02-12 22:24 271
	return PHYSFS_isSymbolicLink(filename.c_str());
3647d72c sago007 2016-02-12 22:24 272
}
3647d72c sago007 2016-02-12 22:24 273
3647d72c sago007 2016-02-12 22:24 274
sint64 getLastModTime(const string& filename) {
3647d72c sago007 2016-02-12 22:24 275
	return PHYSFS_getLastModTime(filename.c_str());
3647d72c sago007 2016-02-12 22:24 276
}
3647d72c sago007 2016-02-12 22:24 277
3647d72c sago007 2016-02-12 22:24 278
bool isInit() {
3647d72c sago007 2016-02-12 22:24 279
	return PHYSFS_isInit();
3647d72c sago007 2016-02-12 22:24 280
}
3647d72c sago007 2016-02-12 22:24 281
3647d72c sago007 2016-02-12 22:24 282
bool symbolicLinksPermitted() {
3647d72c sago007 2016-02-12 22:24 283
	return PHYSFS_symbolicLinksPermitted();
3647d72c sago007 2016-02-12 22:24 284
}
3647d72c sago007 2016-02-12 22:24 285
3647d72c sago007 2016-02-12 22:24 286
void setAllocator(const Allocator* allocator) {
3647d72c sago007 2016-02-12 22:24 287
	PHYSFS_setAllocator(allocator);
3647d72c sago007 2016-02-12 22:24 288
}
3647d72c sago007 2016-02-12 22:24 289
3647d72c sago007 2016-02-12 22:24 290
void mount(const string& newDir, const string& mountPoint, bool appendToPath) {
3647d72c sago007 2016-02-12 22:24 291
	PHYSFS_mount(newDir.c_str(), mountPoint.c_str(), appendToPath);
3647d72c sago007 2016-02-12 22:24 292
}
3647d72c sago007 2016-02-12 22:24 293
3647d72c sago007 2016-02-12 22:24 294
string getMountPoint(const string& dir) {
3647d72c sago007 2016-02-12 22:24 295
	return PHYSFS_getMountPoint(dir.c_str());
3647d72c sago007 2016-02-12 22:24 296
}
3647d72c sago007 2016-02-12 22:24 297
3647d72c sago007 2016-02-12 22:24 298
sint16 Util::swapSLE16(sint16 value) {
3647d72c sago007 2016-02-12 22:24 299
	return PHYSFS_swapSLE16(value);
3647d72c sago007 2016-02-12 22:24 300
}
3647d72c sago007 2016-02-12 22:24 301
3647d72c sago007 2016-02-12 22:24 302
uint16 Util::swapULE16(uint16 value) {
3647d72c sago007 2016-02-12 22:24 303
	return PHYSFS_swapULE16(value);
3647d72c sago007 2016-02-12 22:24 304
}
3647d72c sago007 2016-02-12 22:24 305
3647d72c sago007 2016-02-12 22:24 306
sint32 Util::swapSLE32(sint32 value) {
3647d72c sago007 2016-02-12 22:24 307
	return PHYSFS_swapSLE32(value);
3647d72c sago007 2016-02-12 22:24 308
}
3647d72c sago007 2016-02-12 22:24 309
3647d72c sago007 2016-02-12 22:24 310
uint32 Util::swapULE32(uint32 value) {
3647d72c sago007 2016-02-12 22:24 311
	return PHYSFS_swapULE32(value);
3647d72c sago007 2016-02-12 22:24 312
}
3647d72c sago007 2016-02-12 22:24 313
3647d72c sago007 2016-02-12 22:24 314
sint64 Util::swapSLE64(sint64 value) {
3647d72c sago007 2016-02-12 22:24 315
	return PHYSFS_swapSLE64(value);
3647d72c sago007 2016-02-12 22:24 316
}
3647d72c sago007 2016-02-12 22:24 317
3647d72c sago007 2016-02-12 22:24 318
uint64 Util::swapULE64(uint64 value) {
3647d72c sago007 2016-02-12 22:24 319
	return PHYSFS_swapULE64(value);
3647d72c sago007 2016-02-12 22:24 320
}
3647d72c sago007 2016-02-12 22:24 321
3647d72c sago007 2016-02-12 22:24 322
sint16 Util::swapSBE16(sint16 value) {
3647d72c sago007 2016-02-12 22:24 323
	return PHYSFS_swapSBE16(value);
3647d72c sago007 2016-02-12 22:24 324
}
3647d72c sago007 2016-02-12 22:24 325
3647d72c sago007 2016-02-12 22:24 326
uint16 Util::swapUBE16(uint16 value) {
3647d72c sago007 2016-02-12 22:24 327
	return PHYSFS_swapUBE16(value);
3647d72c sago007 2016-02-12 22:24 328
}
3647d72c sago007 2016-02-12 22:24 329
3647d72c sago007 2016-02-12 22:24 330
sint32 Util::swapSBE32(sint32 value) {
3647d72c sago007 2016-02-12 22:24 331
	return PHYSFS_swapSBE32(value);
3647d72c sago007 2016-02-12 22:24 332
}
3647d72c sago007 2016-02-12 22:24 333
3647d72c sago007 2016-02-12 22:24 334
uint32 Util::swapUBE32(uint32 value) {
3647d72c sago007 2016-02-12 22:24 335
	return PHYSFS_swapUBE32(value);
3647d72c sago007 2016-02-12 22:24 336
}
3647d72c sago007 2016-02-12 22:24 337
3647d72c sago007 2016-02-12 22:24 338
sint64 Util::swapSBE64(sint64 value) {
3647d72c sago007 2016-02-12 22:24 339
	return PHYSFS_swapSBE64(value);
3647d72c sago007 2016-02-12 22:24 340
}
3647d72c sago007 2016-02-12 22:24 341
3647d72c sago007 2016-02-12 22:24 342
uint64 Util::swapUBE64(uint64 value) {
3647d72c sago007 2016-02-12 22:24 343
	return PHYSFS_swapUBE64(value);
3647d72c sago007 2016-02-12 22:24 344
}
3647d72c sago007 2016-02-12 22:24 345
3647d72c sago007 2016-02-12 22:24 346
string Util::utf8FromUcs4(const uint32* src) {
3647d72c sago007 2016-02-12 22:24 347
	string value;
3647d72c sago007 2016-02-12 22:24 348
	std::size_t length = strlen((char*) src);
3647d72c sago007 2016-02-12 22:24 349
	char * buffer = new char[length]; // will be smaller than len
3647d72c sago007 2016-02-12 22:24 350
	PHYSFS_utf8FromUcs4(src, buffer, length);
3647d72c sago007 2016-02-12 22:24 351
	value.append(buffer);
3647d72c sago007 2016-02-12 22:24 352
	return value;
3647d72c sago007 2016-02-12 22:24 353
}
3647d72c sago007 2016-02-12 22:24 354
3647d72c sago007 2016-02-12 22:24 355
string Util::utf8ToUcs4(const char* src) {
3647d72c sago007 2016-02-12 22:24 356
	string value;
3647d72c sago007 2016-02-12 22:24 357
	std::size_t length = strlen(src) * 4;
3647d72c sago007 2016-02-12 22:24 358
	char * buffer = new char[length]; // will be smaller than len
3647d72c sago007 2016-02-12 22:24 359
	PHYSFS_utf8ToUcs4(src, (uint32*) buffer, length);
3647d72c sago007 2016-02-12 22:24 360
	value.append(buffer);
3647d72c sago007 2016-02-12 22:24 361
	return value;
3647d72c sago007 2016-02-12 22:24 362
}
3647d72c sago007 2016-02-12 22:24 363
3647d72c sago007 2016-02-12 22:24 364
string Util::utf8FromUcs2(const uint16* src) {
3647d72c sago007 2016-02-12 22:24 365
	string value;
3647d72c sago007 2016-02-12 22:24 366
	std::size_t length = strlen((char*) src);
3647d72c sago007 2016-02-12 22:24 367
	char * buffer = new char[length]; // will be smaller than len
3647d72c sago007 2016-02-12 22:24 368
	PHYSFS_utf8FromUcs2(src, buffer, length);
3647d72c sago007 2016-02-12 22:24 369
	value.append(buffer);
3647d72c sago007 2016-02-12 22:24 370
	return value;
3647d72c sago007 2016-02-12 22:24 371
}
3647d72c sago007 2016-02-12 22:24 372
3647d72c sago007 2016-02-12 22:24 373
string Util::utf8ToUcs2(const char* src) {
3647d72c sago007 2016-02-12 22:24 374
	string value;
3647d72c sago007 2016-02-12 22:24 375
	std::size_t length = strlen(src) * 2;
3647d72c sago007 2016-02-12 22:24 376
	char * buffer = new char[length]; // will be smaller than len
3647d72c sago007 2016-02-12 22:24 377
	PHYSFS_utf8ToUcs2(src, (uint16*) buffer, length);
3647d72c sago007 2016-02-12 22:24 378
	value.append(buffer);
3647d72c sago007 2016-02-12 22:24 379
	return value;
3647d72c sago007 2016-02-12 22:24 380
}
3647d72c sago007 2016-02-12 22:24 381
3647d72c sago007 2016-02-12 22:24 382
string Util::utf8FromLatin1(const char* src) {
3647d72c sago007 2016-02-12 22:24 383
	string value;
3647d72c sago007 2016-02-12 22:24 384
	std::size_t length = strlen((char*) src) * 2;
3647d72c sago007 2016-02-12 22:24 385
	char * buffer = new char[length]; // will be smaller than len
3647d72c sago007 2016-02-12 22:24 386
	PHYSFS_utf8FromLatin1(src, buffer, length);
3647d72c sago007 2016-02-12 22:24 387
	value.append(buffer);
3647d72c sago007 2016-02-12 22:24 388
	return value;
3647d72c sago007 2016-02-12 22:24 389
}
3647d72c sago007 2016-02-12 22:24 390
3647d72c sago007 2016-02-12 22:24 391
}
1970-01-01 00:00 392