1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #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;
- }
|