/* / \ / \ |\ / \ / \ chiral software | \ / \ \ \ |\ /| /| \| \ / |/ | |\ | /| / | \|/ |/ \ | / \|/ */ #include #include "extbuf.h" ExtBuf * extbufCreate(long defsize) { ExtBuf *eb; if(defsize < 1) defsize = 1; eb = (ExtBuf *)malloc(sizeof(ExtBuf)); eb->size = 0; eb->totalSize = defsize; eb->extSize = defsize; eb->data = (char *)malloc(defsize); eb->data[eb->size] = 0; return eb; } void extbufFree(ExtBuf *eb) { free(eb->data); free(eb); } void extbufAppend(ExtBuf *eb, char *b, long rqs) { long left = eb->totalSize - eb->size; if(left < rqs+1) { long newsize = eb->size + (rqs-left) + eb->extSize + 1; char *newdata =(char *)malloc(newsize); eb->totalSize = newsize; memcpy(newdata,eb->data,eb->size); free(eb->data); eb->data = newdata; } memcpy(eb->data+eb->size,b,rqs); eb->size += rqs; eb->data[eb->size] = 0; } void extbufAppendChar(ExtBuf *eb, char c) { extbufAppend(eb,&c,1); } void extbufAppendStr(ExtBuf *eb, char *b) { extbufAppend(eb,b,strlen(b)); } void extbufAppendDecimal(ExtBuf *eb, int n) { int digits[64]; // should be big enough to hold 128 bit ints int i = 0; if(n < 0) { extbufAppendChar(eb,'-'); n *= -1; } while(n > 10) { digits[i++] = n % 10; n /= 10; } digits[i] = n; while(i >= 0) { char c = ((char)digits[i])+'0'; extbufAppendChar(eb,((char)digits[i])+'0'); i--; } } static int intLogTen(int n) { int i=0; while(n < 10) { i++; n /= 10; } return i; } static int intExpTen(int n) { int i=1; while(n > 0) { i *= 10; n--; } return i; }