2
* $Id: vstring.h,v 1.7 2006/05/30 04:37:13 darren Exp $
4
* Copyright (c) 1998-2002, Darren Hiebert
6
* This source code is released for free distribution under the terms of the
7
* GNU General Public License.
9
* Provides the external interface for resizeable strings.
17
#include "general.h" /* must always come first */
19
#if defined(HAVE_STDLIB_H)
20
# include <stdlib.h> /* to define size_t */
26
#define vStringValue(vs) ((vs)->buffer)
27
#define vStringItem(vs,i) ((vs)->buffer[i])
28
#define vStringLength(vs) ((vs)->length)
29
#define vStringSize(vs) ((vs)->size)
30
#define vStringCat(vs,s) vStringCatS((vs), vStringValue((s)))
31
#define vStringNCat(vs,s,l) vStringNCatS((vs), vStringValue((s)), (l))
32
#define vStringCopy(vs,s) vStringCopyS((vs), vStringValue((s)))
33
#define vStringNCopy(vs,s,l) vStringNCopyS((vs), vStringValue((s)), (l))
34
#define vStringChar(vs,i) ((vs)->buffer[i])
35
#define vStringTerminate(vs) vStringPut(vs, '\0')
36
#define vStringLower(vs) toLowerString((vs)->buffer)
37
#define vStringUpper(vs) toUpperString((vs)->buffer)
40
# define VSTRING_PUTC_MACRO 1
42
#ifdef VSTRING_PUTC_MACRO
43
#define vStringPut(s,c) \
44
(void)(((s)->length == (s)->size ? vStringAutoResize (s) : 0), \
45
((s)->buffer [(s)->length++] = (c)), \
46
((c) == '\0' ? (s)->length-- : 0))
53
typedef struct sVString {
54
size_t length; /* size of buffer used */
55
size_t size; /* allocated size of buffer */
56
char *buffer; /* location of buffer */
62
extern boolean vStringAutoResize (vString *const string);
63
extern void vStringClear (vString *const string);
64
extern vString *vStringNew (void);
65
extern void vStringDelete (vString *const string);
66
#ifndef VSTRING_PUTC_MACRO
67
extern void vStringPut (vString *const string, const int c);
69
extern void vStringStripNewline (vString *const string);
70
extern void vStringStripLeading (vString *const string);
71
extern void vStringChop (vString *const string);
72
extern void vStringStripTrailing (vString *const string);
73
extern void vStringCatS (vString *const string, const char *const s);
74
extern void vStringNCatS (vString *const string, const char *const s, const size_t length);
75
extern vString *vStringNewCopy (vString *const string);
76
extern vString *vStringNewInit (const char *const s);
77
extern void vStringCopyS (vString *const string, const char *const s);
78
extern void vStringNCopyS (vString *const string, const char *const s, const size_t length);
79
extern void vStringCopyToLower (vString *const dest, const vString *const src);
80
extern void vStringSetLength (vString *const string);
82
#endif /* _VSTRING_H */
84
/* vi:set tabstop=4 shiftwidth=4: */