dstr 1156 src/gauche.h SCM_EXTERN void Scm_DStringInit(ScmDString *dstr); dstr 1157 src/gauche.h SCM_EXTERN int Scm_DStringSize(ScmDString *dstr); dstr 1158 src/gauche.h SCM_EXTERN ScmObj Scm_DStringGet(ScmDString *dstr, int flags); dstr 1159 src/gauche.h SCM_EXTERN const char *Scm_DStringGetz(ScmDString *dstr); dstr 1160 src/gauche.h SCM_EXTERN void Scm_DStringPutz(ScmDString *dstr, const char *str, dstr 1162 src/gauche.h SCM_EXTERN void Scm_DStringAdd(ScmDString *dstr, ScmString *str); dstr 1163 src/gauche.h SCM_EXTERN void Scm_DStringPutb(ScmDString *dstr, char byte); dstr 1164 src/gauche.h SCM_EXTERN void Scm_DStringPutc(ScmDString *dstr, ScmChar ch); dstr 1166 src/gauche.h #define SCM_DSTRING_SIZE(dstr) Scm_DStringSize(dstr); dstr 1168 src/gauche.h #define SCM_DSTRING_PUTB(dstr, byte) \ dstr 1170 src/gauche.h if ((dstr)->current >= (dstr)->end) Scm__DStringRealloc(dstr, 1);\ dstr 1171 src/gauche.h *(dstr)->current++ = (char)(byte); \ dstr 1172 src/gauche.h (dstr)->length = -1; /* may be incomplete */ \ dstr 1175 src/gauche.h #define SCM_DSTRING_PUTC(dstr, ch) \ dstr 1178 src/gauche.h ScmDString *d_DSTR = (dstr); \ dstr 1187 src/gauche.h SCM_EXTERN void Scm__DStringRealloc(ScmDString *dstr, int min_incr); dstr 43 src/string.c void Scm_DStringDump(FILE *out, ScmDString *dstr); dstr 1401 src/string.c void Scm_DStringInit(ScmDString *dstr) dstr 1403 src/string.c dstr->init.bytes = 0; dstr 1404 src/string.c dstr->anchor = dstr->tail = NULL; dstr 1405 src/string.c dstr->current = dstr->init.data; dstr 1406 src/string.c dstr->end = dstr->current + SCM_DSTRING_INIT_CHUNK_SIZE; dstr 1407 src/string.c dstr->lastChunkSize = SCM_DSTRING_INIT_CHUNK_SIZE; dstr 1408 src/string.c dstr->length = 0; dstr 1411 src/string.c inline int Scm_DStringSize(ScmDString *dstr) dstr 1415 src/string.c if (dstr->tail) { dstr 1416 src/string.c size = dstr->init.bytes; dstr 1417 src/string.c dstr->tail->chunk->bytes = (int)(dstr->current - dstr->tail->chunk->data); dstr 1418 src/string.c for (chain = dstr->anchor; chain; chain = chain->next) { dstr 1422 src/string.c size = (int)(dstr->current - dstr->init.data); dstr 1427 src/string.c void Scm__DStringRealloc(ScmDString *dstr, int minincr) dstr 1434 src/string.c if (dstr->tail) { dstr 1435 src/string.c dstr->tail->chunk->bytes = (int)(dstr->current - dstr->tail->chunk->data); dstr 1437 src/string.c dstr->init.bytes = (int)(dstr->current - dstr->init.data); dstr 1442 src/string.c newsize = dstr->lastChunkSize * 3; dstr 1458 src/string.c if (dstr->tail) { dstr 1459 src/string.c dstr->tail->next = newchain; dstr 1460 src/string.c dstr->tail = newchain; dstr 1462 src/string.c dstr->anchor = dstr->tail = newchain; dstr 1464 src/string.c dstr->current = newchunk->data; dstr 1465 src/string.c dstr->end = newchunk->data + newsize; dstr 1466 src/string.c dstr->lastChunkSize = newsize; dstr 1470 src/string.c static const char *dstring_getz(ScmDString *dstr, int *plen, int *psiz) dstr 1474 src/string.c if (dstr->anchor == NULL) { dstr 1476 src/string.c size = (int)(dstr->current - dstr->init.data); dstr 1477 src/string.c len = dstr->length; dstr 1479 src/string.c memcpy(buf, dstr->init.data, size); dstr 1482 src/string.c ScmDStringChain *chain = dstr->anchor; dstr 1485 src/string.c size = Scm_DStringSize(dstr); dstr 1486 src/string.c len = dstr->length; dstr 1489 src/string.c memcpy(bptr, dstr->init.data, dstr->init.bytes); dstr 1490 src/string.c bptr += dstr->init.bytes; dstr 1503 src/string.c ScmObj Scm_DStringGet(ScmDString *dstr, int flags) dstr 1506 src/string.c const char *str = dstring_getz(dstr, &len, &size); dstr 1512 src/string.c const char *Scm_DStringGetz(ScmDString *dstr) dstr 1515 src/string.c return dstring_getz(dstr, &len, &size); dstr 1518 src/string.c void Scm_DStringPutz(ScmDString *dstr, const char *str, int size) dstr 1521 src/string.c if (dstr->current + size > dstr->end) { dstr 1522 src/string.c Scm__DStringRealloc(dstr, size); dstr 1524 src/string.c memcpy(dstr->current, str, size); dstr 1525 src/string.c dstr->current += size; dstr 1526 src/string.c if (dstr->length >= 0) { dstr 1528 src/string.c if (len >= 0) dstr->length += len; dstr 1529 src/string.c else dstr->length = -1; dstr 1533 src/string.c void Scm_DStringAdd(ScmDString *dstr, ScmString *str) dstr 1538 src/string.c if (dstr->current + size > dstr->end) { dstr 1539 src/string.c Scm__DStringRealloc(dstr, size); dstr 1541 src/string.c memcpy(dstr->current, SCM_STRING_BODY_START(b), size); dstr 1542 src/string.c dstr->current += size; dstr 1543 src/string.c if (dstr->length >= 0 && !SCM_STRING_BODY_INCOMPLETE_P(b)) { dstr 1544 src/string.c dstr->length += SCM_STRING_BODY_LENGTH(b); dstr 1546 src/string.c dstr->length = -1; dstr 1563 src/string.c void Scm_DStringDump(FILE *out, ScmDString *dstr) dstr 1565 src/string.c fprintf(out, "DString %p\n", dstr); dstr 1566 src/string.c if (dstr->anchor) { dstr 1568 src/string.c fprintf(out, " chunk0[%3d] = \"", dstr->init.bytes); dstr 1569 src/string.c fwrite(dstr->init.data, 1, dstr->init.bytes, out); dstr 1571 src/string.c for (i=1, chain = dstr->anchor; chain; chain = chain->next, i++) { dstr 1572 src/string.c int size = (chain->next? chain->chunk->bytes : (int)(dstr->current - dstr->tail->chunk->data)); dstr 1578 src/string.c int size = (int)(dstr->current - dstr->init.data); dstr 1580 src/string.c fwrite(dstr->init.data, 1, size, out);