Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=yaxmenu.git;a=commitdiff;h=4245ece7d0c1741b1ca696d7a8484b8332f1e4df
commit 4245ece7d0c1741b1ca696d7a8484b8332f1e4df Author: James Buren <r...@frugalware.org> Date: Thu Dec 3 18:42:07 2009 -0600 autostring.h * delete autostring.c * rewrite with simple static inline diff --git a/src/autostring.c b/src/autostring.c deleted file mode 100644 index 23fa08a..0000000 --- a/src/autostring.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "utility.h" -#include "autostring.h" - -#define AUTOSTRING_INITIAL_LENGTH 64U - -struct _as { - char *str; - size_t cl; - size_t ml; -}; - -static inline void _as_putc(as_t *as,char ch) { - assert(as); - - if(as->cl == as->ml) - as->str = xrenew(as->str,char,as->ml *= 2); - - as->str[as->cl++] = ch; -} - -static inline void _as_puts(as_t *as,const char *str) { - assert(as && str); - - if(as->str[as->cl] == '\0') - --as->cl; - - while(*str) - _as_putc(as,*str++); - - _as_putc(as,'\0'); -} - -as_t *as_new(void) { - as_t *as; - - as = xnew(as_t,1); - - as->str = xnew(char,as->ml = AUTOSTRING_INITIAL_LENGTH); - - _as_putc(as,as->cl = 0); - - return as; -} - -void as_puts(as_t *as,size_t num,...) { - va_list args; - - assert(as && num); - - va_start(args,num); - - while(num-- > 0) { - const char *str = va_arg(args,const char *); - _as_puts(as,str); - } - - va_end(args); -} - -void as_reset(as_t *as) { - assert(as); - - as->cl = 0; -} - -void as_compact(as_t *as) { - assert(as); - - as->str = xrenew(as->str,char,as->ml = as->cl); -} - -char *as_gets(const as_t *as) { - assert(as); - - return as->str; -} - -void as_free(as_t *as,bool free_str) { - assert(as); - - if(free_str) - free(as->str); - - free(as); -} diff --git a/src/autostring.h b/src/autostring.h index 58827c1..8a8bfec 100644 --- a/src/autostring.h +++ b/src/autostring.h @@ -1,13 +1,60 @@ #ifndef _autostring_header_ #define _autostring_header_ -#include "includes.h" +#include "utility.h" -typedef struct _as as_t; +#define AUTOSTRING_INITIAL_LENGTH 64U -as_t *as_new(void); -void as_puts(as_t *,size_t,...); -void as_reset(as_t *); -void as_compact(as_t *); -char *as_gets(const as_t *); -void as_free(as_t *,bool); +typedef struct { + char *s; // String pointer array + size_t p; // Current position + size_t m; // Maximum position +} as_t; + +static inline void as_init(as_t *as) { + assert(as); + + as->s = xnew(char,as->m = AUTOSTRING_INITIAL_LENGTH); + + as->p = 0; +} + +static inline void as_putc(as_t *as,char c) { + assert(as); + + if(as->p == as->m) + as->s = xrenew(as->s,char,as->m *= 2); + + as->s[as->p++] = c; +} + +static inline void as_puts(as_t *as,const char *s) { + assert(as && s); + + while(*s) + as_putc(as,*s++); +} + +static inline void as_reset(as_t *as) { + assert(as); + + as->p = 0; +} + +static inline void as_compact(as_t *as) { + assert(as && as->p); + + as->s = xrenew(as->s,char,as->m = as->p); +} + +static inline char *as_gets(const as_t *as) { + assert(as); + + return as->s; +} + +static inline void as_free(const as_t *as) { + assert(as); + + free(as->s); +} #endif _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git