Merge pull request #482 from philippwiesemann/fix-typos-po-de
[geany-mirror.git] / tagmanager / ctags / vstring.h
blob23ff123be986a1e1b443b4cf496cfe5b5a9341fd
1 /*
2 * Copyright (c) 1998-2002, Darren Hiebert
4 * This source code is released for free distribution under the terms of the
5 * GNU General Public License.
7 * Provides the external interface for resizeable strings.
8 */
9 #ifndef _VSTRING_H
10 #define _VSTRING_H
13 * INCLUDE FILES
15 #include "general.h" /* must always come first */
17 #if defined(HAVE_STDLIB_H)
18 # include <stdlib.h> /* to define size_t */
19 #endif
22 * MACROS
24 #ifndef DEBUG
25 # define VSTRING_PUTC_MACRO 1
26 #endif
27 #ifdef VSTRING_PUTC_MACRO
28 #define vStringPut(s,c) \
29 (void)(((s)->length + 1 == (s)->size ? vStringAutoResize (s) : 0), \
30 ((s)->buffer [(s)->length] = (c)), \
31 ((c) == '\0' ? 0 : ((s)->buffer [++(s)->length] = '\0')))
32 #endif
34 #define vStringValue(vs) ((vs)->buffer)
35 #define vStringItem(vs,i) ((vs)->buffer[i])
36 #define vStringLast(vs) ((vs)->buffer[(vs)->length - 1])
37 #define vStringLength(vs) ((vs)->length)
38 #define vStringSize(vs) ((vs)->size)
39 #define vStringCat(vs,s) vStringCatS((vs), vStringValue((s)))
40 #define vStringNCat(vs,s,l) vStringNCatS((vs), vStringValue((s)), (l))
41 #define vStringCopy(vs,s) vStringCopyS((vs), vStringValue((s)))
42 #define vStringNCopy(vs,s,l) vStringNCopyS((vs), vStringValue((s)), (l))
43 #define vStringChar(vs,i) ((vs)->buffer[i])
44 #define vStringTerminate(vs) vStringPut(vs, '\0')
45 #define vStringLower(vs) toLowerString((vs)->buffer)
46 #define vStringUpper(vs) toUpperString((vs)->buffer)
49 * DATA DECLARATIONS
52 typedef struct sVString {
53 size_t length; /* size of buffer used */
54 size_t size; /* allocated size of buffer */
55 char * buffer; /* location of buffer */
56 } vString;
59 * FUNCTION PROTOTYPES
61 extern boolean vStringAutoResize (vString *const string);
62 extern void vStringClear (vString *const string);
63 extern vString *vStringNew (void);
64 extern void vStringDelete (vString *const string);
65 #ifndef VSTRING_PUTC_MACRO
66 extern void vStringPut (vString *const string, const int c);
67 #endif
68 extern void vStringStripNewline (vString *const string);
69 extern void vStringStripLeading (vString *const string);
70 extern void vStringChop (vString *const string);
71 extern void vStringStripTrailing (vString *const string);
72 extern void vStringCatS (vString *const string, const char *const s);
73 extern void vStringNCatS (vString *const string, const char *const s, const size_t length);
74 extern vString *vStringNewCopy (const vString *const string);
75 extern vString *vStringNewInit (const char *const s);
76 extern void vStringCopyS (vString *const string, const char *const s);
77 extern void vStringNCopyS (vString *const string, const char *const s, const size_t length);
78 extern void vStringCopyToLower (vString *const dest, const vString *const src);
79 extern void vStringSetLength (vString *const string);
81 #endif /* _VSTRING_H */
83 /* vi:set tabstop=4 shiftwidth=4: */