50TCHAR StringClass::m_NullChar = 0;
51TCHAR * StringClass::m_EmptyString = &m_NullChar;
57char StringClass::m_TempStrings[(StringClass::MAX_TEMP_STRING*2)*StringClass::MAX_TEMP_BYTES];
59unsigned StringClass::ReservedMask=0;
67StringClass::Get_String (
int length,
bool is_temp)
71 if (!is_temp && length == 0) {
72 m_Buffer = m_EmptyString;
81 if (is_temp && length <= MAX_TEMP_LEN && ReservedMask!=ALL_TEMP_STRINGS_USED_MASK) {
97 for (
int index = 0; index < MAX_TEMP_STRING; index ++, mask<<=1) {
98 unsigned mask=1<<index;
99 if (!(ReservedMask&mask)) {
105 unsigned temp_string=
reinterpret_cast<unsigned>(m_TempStrings);
106 temp_string+=MAX_TEMP_BYTES*MAX_TEMP_STRING;
107 temp_string&=~(MAX_TEMP_BYTES*MAX_TEMP_STRING-1);
108 temp_string+=index*MAX_TEMP_BYTES;
109 temp_string+=
sizeof(_HEADER);
110 string=
reinterpret_cast<char*
>(temp_string);
112 Set_Buffer_And_Allocated_Length (
string, MAX_TEMP_LEN);
118 if (
string ==
NULL) {
124 Set_Buffer_And_Allocated_Length (Allocate_Buffer (length), length);
138StringClass::Resize (
int new_len)
142 int allocated_len = Get_Allocated_Length ();
143 if (new_len > allocated_len) {
149 TCHAR *new_buffer = Allocate_Buffer (new_len);
150 _tcscpy (new_buffer, m_Buffer);
155 Set_Buffer_And_Allocated_Length (new_buffer, new_len);
168StringClass::Uninitialised_Grow (
int new_len)
172 int allocated_len = Get_Allocated_Length ();
173 if (new_len > allocated_len) {
178 TCHAR *new_buffer = Allocate_Buffer (new_len);
179 Set_Buffer_And_Allocated_Length (new_buffer, new_len);
196StringClass::Free_String (
void)
198 if (m_Buffer != m_EmptyString) {
200 unsigned buffer_base=
reinterpret_cast<unsigned>(m_Buffer-
sizeof (StringClass::_HEADER));
201 unsigned temp_base=
reinterpret_cast<unsigned>(m_TempStrings+MAX_TEMP_BYTES*MAX_TEMP_STRING);
203 if ((buffer_base>>11)==(temp_base>>11)) {
212 unsigned index=(buffer_base/MAX_TEMP_BYTES)&(MAX_TEMP_STRING-1);
213 unsigned mask=1<<index;
221 char *
buffer = ((
char *)m_Buffer) -
sizeof (StringClass::_HEADER);
228 m_Buffer = m_EmptyString;
246 TCHAR temp_buffer[512] = { 0 };
253 retval = _vsnwprintf (temp_buffer, 512, format, arg_list);
255 retval = _vsnprintf (temp_buffer, 512, format, arg_list);
261 (*this) = temp_buffer;
276 va_start (arg_list, format);
281 TCHAR temp_buffer[512] = { 0 };
288 retval = _vsnwprintf (temp_buffer, 512, format, arg_list);
290 retval = _vsnprintf (temp_buffer, 512, format, arg_list);
296 (*this) = temp_buffer;
321 if (source !=
NULL) {
326 length = WideCharToMultiByte (CP_ACP, 0 , source, -1,
NULL, 0,
NULL, &unmapped);
333 Store_Length (length - 1);
int _cdecl Format(const TCHAR *format,...)
int _cdecl Format_Args(const TCHAR *format, const va_list &arg_list)
TCHAR * Get_Buffer(int new_length)
void Release_Resources(void)
bool Copy_Wide(const WCHAR *source)
#define WWMEMLOG(category)