/* Copyright (c) 1993 Stephen F. White */

#ifndef _STRING_H_
#define _STRING_H_

typedef struct  String {
    int		 len;		/* length of string */
    int		 mem;		/* memory allocated */
    int		 ref;		/* reference count */
    char	*str;		/* string itself */
} String;

#ifdef INLINE
#define string_free(S) if (!--S->ref) { FREE(S); }
#define string_dup(S) (S->ref++, S)
#else /* !INLINE */
void	 string_free(String *s);
String	*string_dup(String *s);
#endif /* !INLINE */

extern String	*string_new(int len);
extern String	*string_cpy(const char *s);
extern String	*string_ncpy(const char *s, int len);
extern String	*string_cat(String *str, const char *s);
extern String	*string_catc(String *str, char c);
extern String	*string_catnum(String *str, int n);
extern String	*string_indent_cat(String *str, int indent, const char *s);
extern String	*string_backslash(String *str, const char *s);
extern String	*string_pad(String *str, int padlen, char tok);
extern String	*string_prepad(String *str, int padlen, char tok);
extern String	*string_strip_cr(String *str);

#endif _STRING_H_