/* dstring and dsarray * data structures and functions * related to creating and manipulating * secure, fast, and easy cstrings and dynamic strings * and arrays of dynamic strings * * Copyright: 2004 by Michael Siley * */ #include #include #include #include #include #ifndef DSTRING_LIB #define DSTRING_LIB #define INIT_STR_SIZE 100 #define ARRAY_RESIZE_FACTOR 1.3 #define STR_RESIZE_FACTOR 1.3 #define TRUE 1 #define FALSE 0 typedef struct dstring_t { char *string; long int length; long int max_size; unsigned int is_buffer; } dstring; typedef struct dsarray_t { dstring **dstrings; long int length; long int max_size; } dsarray; dsarray *dsa_init(unsigned int size); void dsa_free(dsarray *dsa); void dsa_append(dsarray *dsa, dstring *ds); void dsa_cat(dsarray *dsa1, dsarray *dsa2); dstring *ds_buffer_init(unsigned int size); dstring *ds_init(char *s); void ds_compact(dstring *ds); void ds_clear(dstring *ds); dstring *ds_copy(dstring *ds); void ds_free(dstring *ds); void ds_append(dstring *ds, char *s); void ds_append_char(dstring *ds, char c); dstring *cs_substr(char *s, int start, int len); dstring *ds_substr(dstring *ds, int start, int len); void cs_lower(char *s); void cs_upper(char *s); void ds_lower(dstring *ds); void ds_upper(dstring *ds); void cs_reverse(char *s); void ds_reverse(dstring *ds); int cs_rstrip(char *s); int cs_lstrip(char *s); int cs_strip(char *s); void ds_rstrip(dstring *ds); void ds_lstrip(dstring *ds); void ds_strip(dstring *ds); int cs_index(char *s, char *sub); int ds_index(dstring *ds, char *sub); dsarray *ds_split(dstring *ds, char *delim); dstring *ds_join(dsarray *dsa, char *delim); void ds_replace(dstring *ds, char *oldds, char *newds); #endif