mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-07 19:36:21 +00:00
GUI: U32: Improve U32String::format
- Keep adding chars and strings to output instead of deleting and inserting at specific pos - Use const_iterators for input
This commit is contained in:
parent
c142360bf4
commit
a9a816e7fe
@ -528,20 +528,19 @@ void U32String::trim() {
|
||||
}
|
||||
|
||||
U32String U32String::format(U32String fmt, ...) {
|
||||
U32String output = fmt;
|
||||
U32String output;
|
||||
int len;
|
||||
|
||||
va_list va;
|
||||
va_start(va, fmt);
|
||||
len = U32String::vformat(output, output.begin(), va);
|
||||
len = U32String::vformat(fmt.begin(), fmt.end(), output, va);
|
||||
va_end(va);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
int U32String::vformat(U32String &output, U32String::iterator fmt, va_list args) {
|
||||
int U32String::vformat(U32String::const_iterator fmt, const U32String::const_iterator inputItrEnd, U32String &output, va_list args) {
|
||||
int int_temp;
|
||||
char char_temp;
|
||||
char *string_temp;
|
||||
|
||||
char ch;
|
||||
@ -551,7 +550,7 @@ int U32String::vformat(U32String &output, U32String::iterator fmt, va_list args)
|
||||
|
||||
char buffer[512];
|
||||
|
||||
while (fmt != output.end() && pos < (int)output.size()) {
|
||||
while (fmt != inputItrEnd) {
|
||||
ch = *fmt++;
|
||||
if (ch == '%') {
|
||||
switch (ch = *fmt++) {
|
||||
@ -560,11 +559,7 @@ int U32String::vformat(U32String &output, U32String::iterator fmt, va_list args)
|
||||
len = strlen(string_temp);
|
||||
length += len;
|
||||
|
||||
output.deleteChar(pos); // remove %
|
||||
output.deleteChar(pos); // remove s
|
||||
output.insertString(string_temp, pos);
|
||||
|
||||
fmt += len - 2;
|
||||
pos += len - 1;
|
||||
break;
|
||||
case 'd':
|
||||
@ -573,16 +568,15 @@ int U32String::vformat(U32String &output, U32String::iterator fmt, va_list args)
|
||||
len = strlen(buffer);
|
||||
length += len;
|
||||
|
||||
output.deleteChar(pos); // remove %
|
||||
output.deleteChar(pos); // remove d
|
||||
output.insertString(buffer, pos);
|
||||
|
||||
fmt += len - 2;
|
||||
pos += len - 1;
|
||||
break;
|
||||
default:
|
||||
warning("Unexpected formatting type for U32String::Format.");
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
output += *(fmt - 1);
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ public:
|
||||
* Print formatted data into a U32String object. It takes in the
|
||||
* output by reference and works with iterators.
|
||||
*/
|
||||
static int vformat(U32String &output, U32String::iterator fmt, va_list args);
|
||||
static int vformat(U32String::const_iterator fmt, const U32String::const_iterator inputItrEnd, U32String &output, va_list args);
|
||||
|
||||
/**
|
||||
* Helper function for vformat, convert an int to string
|
||||
|
Loading…
x
Reference in New Issue
Block a user