geany  1.38
About: Geany is a text editor (using GTK2) with basic features of an integrated development environment (syntax highlighting, code folding, symbol name auto-completion, ...). F: office T: editor programming GTK+ IDE
  Fossies Dox: geany-1.38.tar.bz2  ("unofficial" and yet experimental doxygen-generated source code documentation)  

vstring.h
Go to the documentation of this file.
1/*
2* Copyright (c) 1998-2002, Darren Hiebert
3*
4* This source code is released for free distribution under the terms of the
5* GNU General Public License version 2 or (at your option) any later version.
6*
7* Provides the external interface for resizeable strings.
8*/
9#ifndef CTAGS_MAIN_VSTRING_H
10#define CTAGS_MAIN_VSTRING_H
11
12/*
13* INCLUDE FILES
14*/
15#include "general.h" /* must always come first */
16
17#include <stdlib.h> /* to define size_t */
18
19#include <stdio.h>
20
21#include "inline.h"
22#include "mio.h"
23
24/*
25* MACROS
26*/
27
28#define vStringValue(vs) ((vs)->buffer)
29#define vStringChar(vs,i) ((vs)->buffer[i])
30#define vStringLast(vs) ((vs)->buffer[(vs)->length - 1])
31#define vStringLength(vs) ((vs)->length)
32#define vStringIsEmpty(vs) ((vs)->length == 0)
33#define vStringSize(vs) ((vs)->size)
34#define vStringLower(vs) toLowerString((vs)->buffer)
35#define vStringUpper(vs) toUpperString((vs)->buffer)
36#define vStringClear(string) \
37 do { \
38 vString *vStringClear_s = (string); \
39 vStringClear_s->length = 0; \
40 vStringClear_s->buffer[0] = '\0'; \
41 } while (false)
42
43/*
44* DATA DECLARATIONS
45*/
46
47typedef struct sVString {
48 size_t length; /* size of buffer used */
49 size_t size; /* allocated size of buffer */
50 char *buffer; /* location of buffer */
52
53/*
54* FUNCTION PROTOTYPES
55*/
56extern void vStringResize (vString *const string, const size_t newSize);
57extern vString *vStringNew (void);
58extern void vStringDelete (vString *const string);
59extern void vStringStripNewline (vString *const string);
60extern void vStringStripLeading (vString *const string);
61extern void vStringChop (vString *const string);
62extern void vStringStripTrailing (vString *const string);
63extern void vStringCat (vString *const string, const vString *const s);
64extern void vStringCatS (vString *const string, const char *const s);
65extern void vStringNCat (vString *const string, const vString *const s, const size_t length);
66
67/* vStringNCatS calls strlen(S) thought it takes LENGTH because
68 * the handle the case that strlen(S) is smaller than LENGTH.
69 *
70 * In the case a caller knows strlen(S) equals to or is greater than LENGTH,
71 * calling strlen is just overhead. vStringNCatSUnsafe doesn't call strlen. */
72extern void vStringNCatS (vString *const string, const char *const s, const size_t length);
73extern void vStringNCatSUnsafe (vString *const string, const char *const s, const size_t length);
74
75extern vString *vStringNewCopy (const vString *const string);
76extern vString *vStringNewInit (const char *const s);
77extern vString *vStringNewNInit (const char *const s, const size_t length);
78extern void vStringCopy (vString *const string, const vString *const s);
79extern void vStringCopyS (vString *const string, const char *const s);
80extern void vStringNCopy (vString *const string, const vString *const s, const size_t length);
81extern void vStringNCopyS (vString *const string, const char *const s, const size_t length);
82extern void vStringCopyToLower (vString *const dest, const vString *const src);
83extern void vStringSetLength (vString *const string);
84extern void vStringTruncate (vString *const string, const size_t length);
85extern void vStringTranslate(vString *const string, char fromC, char toC);
86
87extern vString *vStringNewOrClear (vString *const string);
89
90extern vString *vStringNewOwn (char *s);
91extern char *vStringDeleteUnwrap (vString *const string);
92extern char *vStringStrdup (const vString *const string);
93
94extern void vStringCatSWithEscaping (vString* b, const char *s);
95extern void vStringCatSWithEscapingAsPattern (vString *output, const char* input);
96
97/*
98* INLINE FUNCTIONS
99*/
100
101CTAGS_INLINE void vStringPut (vString *const string, const int c)
102{
103 if (string->length + 1 == string->size) /* check for buffer overflow */
104 vStringResize (string, string->size * 2);
105
106 string->buffer [string->length] = c;
107 if (c != '\0')
108 string->buffer [++string->length] = '\0';
109}
110
111CTAGS_INLINE void vStringPutWithLimit (vString *const string, const int c,
112 unsigned int maxlen)
113{
114 if (vStringLength (string) < maxlen || maxlen == 0)
115 vStringPut (string, c);
116}
117
118#endif /* CTAGS_MAIN_VSTRING_H */
#define CTAGS_INLINE
Definition: inline.h:23
size_t length
Definition: vstring.h:48
size_t size
Definition: vstring.h:49
char * buffer
Definition: vstring.h:50
void vStringNCatS(vString *const string, const char *const s, const size_t length)
Definition: vstring.c:124
void vStringNCopy(vString *const string, const vString *const s, const size_t length)
Definition: vstring.c:219
void vStringStripTrailing(vString *const string)
Definition: vstring.c:186
void vStringTranslate(vString *const string, char fromC, char toC)
Definition: vstring.c:394
void vStringCopyS(vString *const string, const char *const s)
Definition: vstring.c:213
char * vStringStrdup(const vString *const string)
Definition: vstring.c:286
#define vStringLength(vs)
Definition: vstring.h:31
static void vStringPutWithLimit(vString *const string, const int c, unsigned int maxlen)
Definition: vstring.h:111
struct sVString vString
vString * vStringNewOrClear(vString *const string)
Definition: vstring.c:368
void vStringNCatSUnsafe(vString *const string, const char *const s, const size_t length)
Definition: vstring.c:133
vString * vStringNew(void)
Definition: vstring.c:70
void vStringStripNewline(vString *const string)
Definition: vstring.c:155
vString * vStringNewCopy(const vString *const string)
Definition: vstring.c:83
void vStringDelete(vString *const string)
Definition: vstring.c:60
void vStringStripLeading(vString *const string)
Definition: vstring.c:171
vString * vStringNewOrClearWithAutoRelease(vString *const string)
Definition: vstring.c:379
vString * vStringNewOwn(char *s)
Definition: vstring.c:257
void vStringCatSWithEscaping(vString *b, const char *s)
Definition: vstring.c:304
void vStringNCopyS(vString *const string, const char *const s, const size_t length)
Definition: vstring.c:226
void vStringSetLength(vString *const string)
Definition: vstring.c:252
void vStringNCat(vString *const string, const vString *const s, const size_t length)
Definition: vstring.c:115
void vStringCatS(vString *const string, const char *const s)
Definition: vstring.c:146
void vStringChop(vString *const string)
Definition: vstring.c:198
static void vStringPut(vString *const string, const int c)
Definition: vstring.h:101
vString * vStringNewInit(const char *const s)
Definition: vstring.c:90
void vStringResize(vString *const string, const size_t newSize)
Definition: vstring.c:37
char * vStringDeleteUnwrap(vString *const string)
Definition: vstring.c:267
void vStringCopyToLower(vString *const dest, const vString *const src)
Definition: vstring.c:233
void vStringTruncate(vString *const string, const size_t length)
Definition: vstring.c:51
void vStringCat(vString *const string, const vString *const s)
Definition: vstring.c:139
vString * vStringNewNInit(const char *const s, const size_t length)
Definition: vstring.c:97
void vStringCatSWithEscapingAsPattern(vString *output, const char *input)
Definition: vstring.c:345
void vStringCopy(vString *const string, const vString *const s)
Definition: vstring.c:207