~ubuntu-branches/ubuntu/feisty/renameutils/feisty

« back to all changes in this revision

Viewing changes to src/common/strbuf.h

  • Committer: Bazaar Package Importer
  • Author(s): Francois Marier
  • Date: 2006-07-21 16:39:15 UTC
  • mfrom: (1.1.4 edgy)
  • Revision ID: james.westby@ubuntu.com-20060721163915-k3kqs080hol8uw1n
Tags: 0.8.1-4
* Enable large file support on 32-bit platforms (closes: #377845)
* Bump Standards-Version up to 3.7.2 (no changes)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* strbuf.h - The string buffer data-structure.
2
2
 *
3
 
 * Copyright (C) 2001  Oskar Liljeblad
4
 
 *
5
 
 * This file is part of the file renaming utilities (renameutils)
6
 
 * and regex-markup.
7
 
 *
8
 
 * This software is copyrighted work licensed under the terms of the
9
 
 * GNU General Public License. Please consult the file `COPYING' for
10
 
 * details.
11
 
 */
12
 
 
13
 
#ifndef __STRBUF_H__
14
 
#define __STRBUF_H__
15
 
 
16
 
/* POSIX */
17
 
#include <sys/types.h>
18
 
#if HAVE_STDINT_H
19
 
#include <stdint.h>
20
 
#endif
21
 
/* C89 */
22
 
#include <stdarg.h>
23
 
 
24
 
/**
25
 
 * A buffer holding any characters of any length, even null-bytes.
26
 
 * The buffer is however always null-terminated.
27
 
 *
28
 
 * A user may modify any characters in the buffer.
29
 
 */
30
 
 
31
 
void strbuf_append_char(char **buf, char ch);
32
 
void strbuf_append(char **buf, const char *string);
33
 
int strbuf_appendf(char **buf, const char *format, ...);
34
 
 
35
 
void strbuf_insert_char(char **buf, uint32_t offset, char ch);
36
 
void strbuf_insert(char **buf, uint32_t offset, const char *string);
37
 
int strbuf_insertf(char **buf, uint32_t offset, const char *format, ...);
38
 
 
39
 
#define strbuf_prepend_char(buf,ch) strbuf_insert_char(buf,0,ch)
40
 
#define strbuf_prepend(buf,string) strbuf_append(buf,string)
41
 
#define strbuf_appendf(buf,format,...) strbuf_appendf(buf,format,__VA_ARGS__)
42
 
 
43
 
void strbuf_delete(char **buf, uint32_t start, uint32_t end);
44
 
void strbuf_delete_char(char **buf, uint32_t index);
45
 
void strbuf_replace(char **buf, uint32_t start, uint32_t end, const char *string);
46
 
 
47
 
uint32_t strbuf_length(char **buf);     /* strlen won't check beyond nullbytes */
48
 
void strbuf_set_length(char **buf, uint32_t new_length);
49
 
void strbuf_update_length(char **buf);
50
 
uint32_t strbuf_capacity(char **buf);
51
 
void strbuf_ensure_capacity(char **buf, uint32_t minimum_capacity);
52
 
 
53
 
char *strbuf_new(void);
54
 
char *strbuf_new_with_capacity(uint32_t capacity);
55
 
char *strbuf_new_from_string(const char *str);
56
 
 
57
 
void strbuf_free(char **buf);
58
 
char *strbuf_free_to_string(char **buf);
59
 
 
60
 
char *strbuf_substring_to_end(char **buf, uint32_t beginIndex);
61
 
char *strbuf_substring(char **buf, uint32_t beginIndex, uint32_t endIndex);
62
 
void strbuf_get_chars(char **buf, uint32_t src_offset, uint32_t src_end, char *dst, uint32_t dst_offset);
63
 
char *strbuf_to_string(char **buf);
64
 
 
65
 
void strbuf_set(char **buf, const char *string);
66
 
int strbuf_setf(char **buf, const char *format, ...);
67
 
 
68
 
void strbuf_replace_substring(char **buf, uint32_t start, uint32_t end,
69
 
                const char *string, uint32_t substart, uint32_t subend);
70
 
char *strbuf_new_from_substring(const char *string, uint32_t substart,
71
 
                uint32_t subend);
72
 
void strbuf_insert_substring(char **buf, uint32_t offset, const char *string,
73
 
                uint32_t substart, uint32_t subend);
74
 
void strbuf_append_substring(char **buf, const char *string,
75
 
                uint32_t substart, uint32_t subend);
76
 
#define strbuf_prepend_substring(buf,string,substart,subend) \
77
 
                strbuf_insert_substring(buf,0,string,substart,subend)
78
 
 
79
 
char *strbuf_new_from_substring_to_end(const char *string, uint32_t substart);
80
 
void strbuf_insert_substring_to_end(char **buf, uint32_t offset,
81
 
                const char *string,     uint32_t substart);
82
 
void strbuf_append_substring_to_end(char **buf, const char *string,
83
 
                uint32_t substart);
84
 
#define strbuf_prepend_substring_to_end(buf,string,substart) \
85
 
                strbuf_insert_substring_to_end(buf,0,string,substart)
86
 
 
87
 
extern inline char
88
 
strbuf_char_at(char **buf, uint32_t index)
89
 
{
90
 
        return (*buf)[index];
91
 
}
92
 
 
93
 
extern inline void
94
 
strbuf_set_char_at(char **buf, uint32_t index, char ch)
95
 
{
96
 
        (*buf)[index] = ch;
97
 
}
98
 
 
99
 
extern inline void
100
 
strbuf_clear(char **buf)
101
 
{
102
 
        strbuf_set_length(buf, 0);
103
 
}
 
3
 * Copyright (C) 2004, 2005 Oskar Liljeblad
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; either version 2 of the License, or
 
8
 * (at your option) any later version.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU Library General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License along
 
16
 * with this program; if not, write to the Free Software Foundation,
 
17
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
18
 */
 
19
 
 
20
/* TODO: add datatype (many functions): strbuf_substring / substrbuf */
 
21
 
 
22
#ifndef STRBUF_H
 
23
#define STRBUF_H
 
24
 
 
25
#include <stdint.h>     /* Gnulib/C99 */
 
26
#include <stdarg.h>     /* C89 */
 
27
 
 
28
typedef struct _StrBuf StrBuf;
 
29
 
 
30
struct _StrBuf {
 
31
    char *buf;
 
32
    uint32_t len;
 
33
    uint32_t capacity;
 
34
};
 
35
 
 
36
void strbuf_free(StrBuf *sb);
 
37
#define strbuf_free_to_string(sb)                       strbuf_free_to_substring(sb,0,-1)
 
38
char *strbuf_free_to_substring(StrBuf *sb, int32_t sp, int32_t ep);
 
39
 
 
40
StrBuf *strbuf_new(void);
 
41
StrBuf *strbuf_new_with_capacity(uint32_t capacity);
 
42
 
 
43
#define strbuf_new_from_char(chr)                       strbuf_new_from_char_n(1,chr)
 
44
#define strbuf_new_from_string(str)                     strbuf_new_from_substring(str,0,-1)
 
45
#define strbuf_new_from_data(mem,len)                   strbuf_new_from_data_n(str,1,mem,len)
 
46
#define strbuf_new_from_strbuf(strbuf)                  strbuf_new_from_strbuf_n(1,strbuf)
 
47
#define strbuf_new_from_substring(str,ssp,sep)          strbuf_new_from_substring_n(1,str,ssp,sep)
 
48
#define strbuf_newf(fmt...)                             strbuf_newf_n(1,fmt)
 
49
#define strbuf_vnewf(fmt,ap)                            strbuf_vnewf_n(1,fmt,ap)
 
50
StrBuf *strbuf_new_from_char_n(uint32_t times, char ch);
 
51
#define strbuf_new_from_string_n(n,str)                 strbuf_new_from_substring_n(n,str,0,-1)
 
52
StrBuf *strbuf_new_from_substring_n(uint32_t times, const char *str, int32_t sp, int32_t ep);
 
53
StrBuf *strbuf_new_from_data_n(uint32_t times, const void *mem, uint32_t len);
 
54
StrBuf *strbuf_newf_n(uint32_t times, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
 
55
StrBuf *strbuf_vnewf_n(uint32_t times, const char *fmt, va_list ap) __attribute__ ((format (printf, 2, 0)));
 
56
 
 
57
#define strbuf_append_char(sb,chr)                      strbuf_append_char_n(sb,1,chr)
 
58
#define strbuf_append(sb,str)                           strbuf_append_n(sb,1,str)
 
59
#define strbuf_append_data(sb,mem,len)                  strbuf_append_data_n(sb,1,mem,len)
 
60
#define strbuf_append_strbuf(sb,strbuf)                 strbuf_append_strbuf_n(sb,1,strbuf)
 
61
#define strbuf_append_substring(sb,str,ssp,sep)         strbuf_append_substring_n(sb,1,str,ssp,sep)
 
62
#define strbuf_appendf(sb,fmt...)                       strbuf_appendf_n(sb,1,fmt)
 
63
#define strbuf_vappendf(sb,fmt,ap)                      strbuf_vappendf_n(sb,1,fmt,ap)
 
64
#define strbuf_append_char_n(sb,n,chr)                  strbuf_replace_char_n(sb,-1,-1,n,chr)
 
65
#define strbuf_append_n(sb,n,str)                       strbuf_replace_n(sb,-1,-1,n,str)
 
66
#define strbuf_append_data_n(sb,n,mem,len)              strbuf_replace_data_n(sb,-1,-1,n,mem,len)
 
67
#define strbuf_append_strbuf_n(sb,n,strbuf)             strbuf_replace_strbuf_n(sb,-1,-1,n,strbuf)
 
68
#define strbuf_append_substring_n(sb,n,str,ssp,sep)     strbuf_replace_substring_n(sb,-1,-1,n,str,ssp,sep)
 
69
#define strbuf_appendf_n(sb,n,fmt...)                   strbuf_replacef_n(sb,-1,-1,n,fmt)
 
70
#define strbuf_vappendf_n(sb,n,fmt,ap)                  strbuf_vreplacef_n(sb,-1,-1,n,fmt,ap)
 
71
 
 
72
#define strbuf_prepend_char(sb,chr)                     strbuf_prepend_char_n(sb,1,chr)
 
73
#define strbuf_prepend(sb,str)                          strbuf_prepend_n(sb,1,str)
 
74
#define strbuf_prepend_data(sb,mem,len)                 strbuf_prepend_data_n(sb,1,mem,len)
 
75
#define strbuf_prepend_strbuf(sb,strbuf)                strbuf_prepend_strbuf_n(sb,1,strbuf)
 
76
#define strbuf_prepend_substring(sb,str,ssp,sep)        strbuf_prepend_substring_n(sb,1,str,ssp,sep)
 
77
#define strbuf_prependf(sb,fmt...)                      strbuf_prependf_n(sb,1,fmt)
 
78
#define strbuf_vprependf(sb,fmt,ap)                     strbuf_vprependf_n(sb,1,fmt,ap)
 
79
#define strbuf_prepend_char_n(sb,n,chr)                 strbuf_replace_char_n(sb,0,0,n,chr)
 
80
#define strbuf_prepend_n(sb,n,str)                      strbuf_replace_n(sb,0,0,n,str)
 
81
#define strbuf_prepend_data_n(sb,n,mem,len)             strbuf_replace_data_n(sb,0,0,n,mem,len)
 
82
#define strbuf_prepend_strbuf_n(sb,n,strbuf)            strbuf_replace_strbuf_n(sb,0,0,n,strbuf)
 
83
#define strbuf_prepend_substring_n(sb,n,str,ssp,sep)    strbuf_replace_substring_n(sb,0,0,n,str,ssp,sep)
 
84
#define strbuf_prependf_n(sb,n,fmt...)                  strbuf_replacef_n(sb,0,0,n,fmt)
 
85
#define strbuf_vprependf_n(sb,n,fmt,ap)                 strbuf_vreplacef_n(sb,0,0,n,fmt,ap)
 
86
 
 
87
#define strbuf_insert_char(sb,sp,chr)                   strbuf_insert_char_n(sb,sp,1,chr)
 
88
#define strbuf_insert(sb,sp,str)                        strbuf_insert_n(sb,sp,1,str)
 
89
#define strbuf_insert_data(sb,sp,mem,len)               strbuf_insert_data_n(sb,sp,1,mem,len)
 
90
#define strbuf_insert_strbuf(sb,sp,strbuf)              strbuf_insert_strbuf_n(sb,sp,1,strbuf)
 
91
#define strbuf_insert_substring(sb,sp,str,ssp,sep)      strbuf_insert_substring_n(sb,sp,1,str,ssp,sep)
 
92
#define strbuf_insertf(sb,sp,fmt...)                    strbuf_insertf_n(sb,sp,1,fmt)
 
93
#define strbuf_vinsertf(sb,sp,fmt,ap)                   strbuf_vinsertf_n(sb,sp,1,fmt,ap)
 
94
#define strbuf_insert_char_n(sb,sp,n,chr)               strbuf_replace_char_n(sb,sp,sp,n,chr)
 
95
#define strbuf_insert_n(sb,sp,n,str)                    strbuf_replace_n(sb,sp,sp,n,str)
 
96
#define strbuf_insert_data_n(sb,sp,n,mem,len)           strbuf_replace_data_n(sb,sp,sp,n,mem,len)
 
97
#define strbuf_insert_strbuf_n(sb,sp,n,strbuf)          strbuf_replace_strbuf_n(sb,sp,sp,n,strbuf)
 
98
#define strbuf_insert_substring_n(sb,sp,n,str,ssp,sep)  strbuf_replace_substring_n(sb,sp,sp,n,str,ssp,sep)
 
99
#define strbuf_insertf_n(sb,sp,n,fmt...)                strbuf_replacef_n(sb,sp,sp,n,fmt)
 
100
#define strbuf_vinsertf_n(sb,sp,n,fmt,ap)               strbuf_vreplacef_n(sb,sp,sp,n,fmt,ap)
 
101
 
 
102
#define strbuf_set_char(sb,chr)                         strbuf_set_char_n(sb,1,chr)
 
103
#define strbuf_set(sb,str)                              strbuf_set_n(sb,1,str)
 
104
#define strbuf_set_data(sb,mem,len)                     strbuf_set_data_n(sb,1,mem,len)
 
105
#define strbuf_set_strbuf(sb,strbuf)                    strbuf_set_strbuf(sb,1,strbuf)
 
106
#define strbuf_set_substring(sb,str,ssp,sep)            strbuf_set_substring_n(sb,1,str,ssp,sep)
 
107
#define strbuf_setf(sb,fmt...)                          strbuf_setf_n(sb,1,fmt)
 
108
#define strbuf_vsetf(sb,fmt,ap)                         strbuf_vsetf_n(sb,1,fmt,ap)
 
109
#define strbuf_set_char_n(sb,n,chr)                     strbuf_replace_char_n(sb,0,-1,n,chr)
 
110
#define strbuf_set_n(sb,n,str)                          strbuf_replace_n(sb,0,-1,n,str)
 
111
#define strbuf_set_data_n(sb,n,mem,len)                 strbuf_replace_data_n(sb,0,-1,n,mem,len)
 
112
#define strbuf_set_strbuf_n(sb,n,strbuf)                strbuf_replace_strbuf_n(sb,0,-1,n,strbuf)
 
113
#define strbuf_set_substring_n(sb,n,str,ssp,sep)        strbuf_replace_substring_n(sb,0,-1,n,str,ssp,sep)
 
114
#define strbuf_setf_n(sb,n,fmt...)                      strbuf_replacef_n(sb,0,-1,n,fmt)
 
115
#define strbuf_vsetf_n(sb,n,fmt,ap)                     strbuf_vreplacef_n(sb,0,-1,n,fmt,ap)
 
116
 
 
117
#define strbuf_replace_char(sb,sp,ep,ch)                strbuf_replace_char_n(sb,sp,ep,1,ch)
 
118
#define strbuf_replace(sb,sp,ep,str)                    strbuf_replace_n(sb,sp,ep,1,str)
 
119
#define strbuf_replace_data(sb,sp,ep,mem,len)           strbuf_replace_data_n(sb,sp,ep,1,mem,len)
 
120
#define strbuf_replace_strbuf(sb,sp,ep,strbuf)          strbuf_replace_data_n(sb,sp,ep,1,strbuf_buffer(strbuf),strbuf_length(strbuf))
 
121
#define strbuf_replace_substring(sb,sp,ep,str,ssp,sep)  strbuf_replace_substring_n(sb,sp,ep,1,str,ssp,sep)
 
122
#define strbuf_replacef(sb,sp,ep,fmt...)                strbuf_replacef_n(sb,sp,ep,1,fmt)
 
123
#define strbuf_vreplacef(sb,sp,ep,fmt,ap)               strbuf_vreplacef_n(sb,sp,ep,1,fmt,ap)
 
124
void strbuf_replace_char_n(StrBuf *sb, int32_t sp, int32_t ep, uint32_t times, char ch);
 
125
#define strbuf_replace_n(sb,sp,ep,n,str)                strbuf_replace_substring_n(sb,sp,ep,n,str,0,-1)
 
126
void strbuf_replace_substring_n(StrBuf *sb, int32_t sp, int32_t ep, uint32_t times, const char *str, int32_t ssp, int32_t sep);
 
127
void strbuf_replace_data_n(StrBuf *sb, int32_t sp, int32_t ep, uint32_t times, const void *mem, uint32_t len);
 
128
int strbuf_replacef_n(StrBuf *sb, int32_t sp, int32_t ep, uint32_t times, const char *fmt, ...) __attribute__ ((format (printf, 5, 6)));
 
129
int strbuf_vreplacef_n(StrBuf *sb, int32_t sp, int32_t ep, uint32_t times, const char *fmt, va_list ap) __attribute__ ((format (printf, 5, 0)));
 
130
 
 
131
char strbuf_set_char_at(StrBuf *sb, int32_t sp, char chr);      /* or strbuf_replace_char(sb,sp,strbuf_next_pos(sb,sp),chr) */
 
132
char strbuf_delete_char(StrBuf *sb, int32_t sp);                /* or strbuf_replace(sb,sp,strbuf_next_pos(sb,sp),NULL) */
 
133
#define strbuf_delete(sb,sp,ep)                         strbuf_replace(sb,sp,ep,NULL)
 
134
#define strbuf_clear(sb)                                strbuf_replace(sb,0,-1,NULL)
 
135
 
 
136
void strbuf_reverse_substring(StrBuf *sb, int32_t sp, int32_t ep);
 
137
#define strbuf_reverse(sb)                              strbuf_reverse_substring(sb,0,-1)
 
138
 
 
139
void strbuf_repeat_substring(StrBuf *sb, int32_t sp, int32_t ep, uint32_t times);
 
140
#define strbuf_repeat(sb,n)                             strbuf_repeat_substring(sb,0,-1,n)
 
141
 
 
142
uint32_t strbuf_length(StrBuf *sb);
 
143
uint32_t strbuf_capacity(StrBuf *sb);
 
144
char *strbuf_buffer(StrBuf *sb);
 
145
#define strbuf_is_empty(sb)                             (strbuf_length(sb) == 0)
 
146
 
 
147
void strbuf_set_length(StrBuf *sb, uint32_t new_length);
 
148
void strbuf_ensure_capacity(StrBuf *sb, uint32_t minimum_capacity);
 
149
 
 
150
char *strbuf_substring(StrBuf *sb, int32_t sp, int32_t ep);
 
151
#define strbuf_to_string(sb)                            strbuf_substring(sb,0,-1)
 
152
char strbuf_char_at(StrBuf *sb, int32_t index);
104
153
 
105
154
#endif