05-15-2003, 05:42 PM
SA_Alloc
SA_Realloc
SA_Free
SA_Len
_____________________
StringToArray
;/
function# numelem
;Creates dynamic str array
;EXAMPLE: see function StringToArray
ret calloc(numelem sizeof(str))
SA_Realloc
;/
function# str*a numelem
;Resizes dynamic str array
dll msvcrt memset !*dest c count
if(!a) ret calloc(numelem sizeof(str))
int i lena(SA_Len(a)) diff(numelem-lena)
if(diff>0) ;;grow
,a=realloc(a numelem*sizeof(str))
,memset(a+(lena*sizeof(str)) 0 diff*sizeof(str))
else if(diff<0) ;;shrink
,for(i numelem lena) a[i].all
,a=realloc(a numelem*sizeof(str))
ret a
SA_Free
;/
function# str*a
;Frees dynamic str array
if(!a) ret
int i
for(i 0 SA_Len(a)) a[i].all
free a
SA_Len
;/
function# str*a
;Returns number of elements in dynamic str array
dll# msvcrt _msize !*v
if(a) ret _msize(a)/sizeof(str)
_____________________
StringToArray
;/
function# $s [$delim] [flags]
;Parses string s and returns str array.
;Arguments same as for str.gett()
;EXAMPLE
;str s = "one two three four five six seven eight nine ten eleven twelve"
;
;str* a=StringToArray(s)
;
;int i
;for(i 0 SA_Len(a)) out a[i]
;
;a=SA_Free(a)
int i na=10
str* a=SA_Alloc(na)
for i 0 1000000000
,if(i=na) na+na; a=SA_Realloc(a na)
,if(a[i].gett(s -i delim flags)<0) break
ret SA_Realloc(a i)