96 lines
1.7 KiB
C++
96 lines
1.7 KiB
C++
#include "precomp_wasabi_bfc.h"
|
|
#include "bigstring.h"
|
|
|
|
BigString::BigString() {
|
|
mem = NULL;
|
|
m_linecount = 0;
|
|
}
|
|
|
|
BigString::~BigString() {
|
|
if (mem != NULL) {
|
|
FREE(mem);
|
|
}
|
|
strings.deleteAll();
|
|
}
|
|
|
|
const char *BigString::getValue() /*const*/ {
|
|
if (mem != NULL) return mem;
|
|
size_t l = 0;
|
|
foreach(strings)
|
|
l += strings.getfor()->len();
|
|
endfor;
|
|
mem = (char *)MALLOC(l+1);
|
|
char *p = mem;
|
|
String *s = NULL;
|
|
size_t sl = 0;
|
|
foreach(strings)
|
|
s = strings.getfor();
|
|
sl = s->len();
|
|
if (sl > 0) MEMCPY((void *)p, (void *)s->getValue(), sl);
|
|
p += sl;
|
|
endfor;
|
|
*p = 0;
|
|
return mem;
|
|
}
|
|
|
|
void BigString::setValue(const char *val) {
|
|
if (mem != NULL) {
|
|
FREE(mem);
|
|
mem = NULL;
|
|
}
|
|
strings.deleteAll();
|
|
cat(val);
|
|
}
|
|
|
|
int BigString::isempty() {
|
|
if (strings.getNumItems() == 0) return 1;
|
|
foreach(strings)
|
|
if (!strings.getfor()->isempty()) return 0;
|
|
endfor;
|
|
return 1;
|
|
}
|
|
|
|
void BigString::reset() {
|
|
if (mem != NULL) {
|
|
FREE(mem);
|
|
mem = NULL;
|
|
}
|
|
strings.deleteAll();
|
|
m_linecount = 0;
|
|
}
|
|
|
|
void BigString::catn(const char *s, int n) {
|
|
String *str = new String();
|
|
str->catn(s, n);
|
|
cat(str->getValue());
|
|
}
|
|
|
|
void BigString::cat(const char *s) {
|
|
if (mem != NULL) {
|
|
FREE(mem);
|
|
mem = NULL;
|
|
}
|
|
char *p = (char *)s;
|
|
while (p && *p) {
|
|
if (*p == '\r' || *p == '\n') {
|
|
if (*(p+1) == '\n' && *p == '\r') p++;
|
|
m_linecount++;
|
|
}
|
|
p++;
|
|
}
|
|
strings.addItem(new String(s));
|
|
}
|
|
|
|
char BigString::lastChar() {
|
|
return strings.getLast()->lastChar();
|
|
}
|
|
|
|
char BigString::firstChar() {
|
|
const char *s = strings.getFirst()->getValue();
|
|
return s ? *s : 0;
|
|
}
|
|
|
|
int BigString::getLineCount() {
|
|
return m_linecount;
|
|
}
|