37#pragma warning(disable : 4514)
48int WideStringClass::m_UsedTempStringCount = 0;
52WCHAR WideStringClass::m_NullChar = 0;
53WCHAR * WideStringClass::m_EmptyString = &m_NullChar;
58char WideStringClass::m_TempString1[WideStringClass::MAX_TEMP_BYTES];
59char WideStringClass::m_TempString2[WideStringClass::MAX_TEMP_BYTES];
60char WideStringClass::m_TempString3[WideStringClass::MAX_TEMP_BYTES];
61char WideStringClass::m_TempString4[WideStringClass::MAX_TEMP_BYTES];
63WCHAR * WideStringClass::m_FreeTempPtr[MAX_TEMP_STRING] = {
64 reinterpret_cast<WCHAR *
> (m_TempString1 +
sizeof (WideStringClass::_HEADER)),
65 reinterpret_cast<WCHAR *
> (m_TempString2 +
sizeof (WideStringClass::_HEADER)),
66 reinterpret_cast<WCHAR *
> (m_TempString3 +
sizeof (WideStringClass::_HEADER)),
67 reinterpret_cast<WCHAR *
> (m_TempString4 +
sizeof (WideStringClass::_HEADER))
70WCHAR * WideStringClass::m_ResTempPtr[MAX_TEMP_STRING] = {
84WideStringClass::Get_String (
int length,
bool is_temp)
86 if (!is_temp && length <= 1) {
87 m_Buffer = m_EmptyString;
95 if (is_temp && length < MAX_TEMP_LEN && m_UsedTempStringCount < MAX_TEMP_STRING) {
106 for (
int index = 0; index < MAX_TEMP_STRING; index ++) {
107 if (m_FreeTempPtr[index] !=
NULL) {
112 string = m_FreeTempPtr[index];
113 m_ResTempPtr[index] = m_FreeTempPtr[index];
114 m_FreeTempPtr[index] =
NULL;
115 Set_Buffer_And_Allocated_Length (
string, MAX_TEMP_LEN);
120 m_UsedTempStringCount ++;
126 if (
string ==
NULL) {
127 Set_Buffer_And_Allocated_Length (Allocate_Buffer (length), length);
141WideStringClass::Resize (
int new_len)
143 int allocated_len = Get_Allocated_Length ();
144 if (new_len > allocated_len) {
150 WCHAR *new_buffer = Allocate_Buffer (new_len);
151 wcscpy (new_buffer, m_Buffer);
156 Set_Buffer_And_Allocated_Length (new_buffer, new_len);
169WideStringClass::Uninitialised_Grow (
int new_len)
171 int allocated_len = Get_Allocated_Length ();
172 if (new_len > allocated_len) {
177 WCHAR *new_buffer = Allocate_Buffer (new_len);
178 Set_Buffer_And_Allocated_Length (new_buffer, new_len);
195WideStringClass::Free_String (
void)
197 if (m_Buffer != m_EmptyString) {
203 for (
int index = 0; index < MAX_TEMP_STRING; index ++) {
204 if (m_Buffer == m_ResTempPtr[index]) {
215 m_FreeTempPtr[index] = m_Buffer;
216 m_ResTempPtr[index] = 0;
217 m_UsedTempStringCount --;
226 if (found ==
false) {
227 char *
buffer = ((
char *)m_Buffer) -
sizeof (WideStringClass::_HEADER);
234 m_Buffer = m_EmptyString;
249 if (format ==
NULL) {
256 WCHAR temp_buffer[512] = { 0 };
261 int retval = _vsnwprintf (temp_buffer, 512, format, arg_list);
266 (*this) = temp_buffer;
280 if (format ==
NULL) {
285 va_start (arg_list, format);
290 WCHAR temp_buffer[512] = { 0 };
295 int retval = _vsnwprintf (temp_buffer, 512, format, arg_list);
300 (*this) = temp_buffer;
327 length = MultiByteToWideChar (CP_ACP, 0, text, -1,
NULL, 0);
330 Uninitialised_Grow (length);
331 Store_Length (length - 1);
334 MultiByteToWideChar (CP_ACP, 0, text, -1, m_Buffer, length);
351 for (
int index = 0; m_Buffer[index] != 0; index++) {
352 unsigned short value = m_Buffer[index];
int _cdecl Format(const WCHAR *format,...)
int _cdecl Format_Args(const WCHAR *format, const va_list &arg_list)
bool Convert_From(const char *text)
static void Release_Resources(void)