| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | #include "string.h"#include <windows.h>#include <strsafe.h>using namespace tagz_;string::string(){	data = 0;	size = 0;	used = 0;}void string::AddDBChar(LPTSTR c){	LPTSTR end = CharNext(c);	while (c != end)		AddChar(*c++);}void string::AddChar(TCHAR c){	if (!data)	{		size = 512;		data = (LPTSTR)calloc(size, sizeof(TCHAR));		if (!data) size = 0;		used = 0;	}	else if (size == used)	{		size <<= 1;		LPTSTR newData = (LPTSTR)realloc((LPTSTR)data, size * sizeof(TCHAR));		if (!newData)		{			free(data);			data = (LPTSTR)calloc(size, sizeof(TCHAR));			if (!data) size = 0;			used = 0;		}		else		{			data = newData;			memset(data+used, 0, (size - used) * sizeof(TCHAR));		}	}	if (data) 		data[used++] = c;}void string::AddInt(int i){	TCHAR simpleInt[16] = {0};	StringCchPrintf(simpleInt, 16, TEXT("%i"), i);	AddString(simpleInt);}void string::AddString(LPCTSTR z){	while (z && *z)	{		AddChar(*z);		z++;	}}void string::AddString(string & s){	AddString(s.Peek());}string::~string(){	if (data) free(data);}LPTSTR string::GetBuf(){	if (!data)		return NULL;	LPTSTR r = (LPTSTR)realloc(data, (used + 1) * sizeof(TCHAR));	if (!r)	{		free(data);		data = 0;		size = used + 1;		r = (LPTSTR)calloc((used + 1), sizeof(TCHAR));		if (!r) size = 0;	}	if (r) r[used] = 0;	data = 0;	return r;}TCHAR string::operator[](size_t i){	if (!data || i >= used) 		return 0;	else 		return data[i];}size_t string::Len(){	return data ? used : 0;}void string::Reset(){	if (data)	{		free(data);		data = 0;	}	size = 0;	used = 0;}LPCTSTR string::Peek(){	AddChar(0);	used--;	return data;}
 |