extras:types:DynamicString; fixed String conversion property. removed *16 for MAX_F_S...
[sdk] / extras / types / DynamicString.ec
1 #include <stdarg.h>
2
3 class DynamicString : Array<char>
4 {
5    minAllocSize = 1024;
6
7    DynamicString()
8    {
9       Add('\0');
10    }
11
12    property String
13    {
14       set
15       {
16          DynamicString s { };
17          if(value)
18          {
19             int len = strlen(value) + 1;
20             s.size = len;
21             memcpy(s.array, value, len);
22          }
23          return s;
24       }
25       get { return array; }
26    }
27
28    void concat(String s)
29    {
30       int len = strlen(s);
31       if(len)
32       {
33          int pos = size-1;
34          if(pos == -1) { Add('\0'); pos = 0; }
35          size += len;
36          memcpy(&(this[pos]), s, len+1);
37       }
38    }
39
40    void concatf(char * format, ...)
41    {
42       // TODO: improve this to vsprinf directly in the Array<char> instead of calling concat
43       char string[MAX_F_STRING];
44       va_list args;
45       va_start(args, format);
46       vsprintf(string, format, args);
47       va_end(args);
48       concat(string);
49    }
50
51    void concatx(typed_object object, ...)
52    {
53       // TODO: improve this to work directly on the Array<char> instead of calling PrintStdArgsToBuffer
54       char string[MAX_F_STRING];
55       va_list args;
56       int len;
57       va_start(args, object);
58       len = PrintStdArgsToBuffer(string, sizeof(string), object, args);
59       concat(string);
60       va_end(args);
61    }
62
63 }