2 /* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
3 Written by James Clark (jjc@jclark.com)
5 This file is part of groff.
7 groff is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 groff is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License along
18 with groff; see the file COPYING. If not, write to the Free Software
19 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 // Ensure that the first declaration of functions that are later
26 // declared as inline declares them as inline.
30 inline string
operator+(const string
&, const string
&);
31 inline string
operator+(const string
&, const char *);
32 inline string
operator+(const char *, const string
&);
33 inline string
operator+(const string
&, char);
34 inline string
operator+(char, const string
&);
35 inline int operator==(const string
&, const string
&);
36 inline int operator!=(const string
&, const string
&);
41 string(const string
&);
43 string(const char *, int);
48 string
&operator=(const string
&);
49 string
&operator=(const char *);
50 string
&operator=(char);
52 string
&operator+=(const string
&);
53 string
&operator+=(const char *);
54 string
&operator+=(char);
55 void append(const char *, int);
59 int operator*() const;
61 string
substring(int i
, int n
) const;
63 char &operator[](int);
64 char operator[](int) const;
66 void set_length(int i
);
67 const char *contents() const;
68 int search(char) const;
69 char *extract() const;
74 friend string
operator+(const string
&, const string
&);
75 friend string
operator+(const string
&, const char *);
76 friend string
operator+(const char *, const string
&);
77 friend string
operator+(const string
&, char);
78 friend string
operator+(char, const string
&);
80 friend int operator==(const string
&, const string
&);
81 friend int operator!=(const string
&, const string
&);
82 friend int operator<=(const string
&, const string
&);
83 friend int operator<(const string
&, const string
&);
84 friend int operator>=(const string
&, const string
&);
85 friend int operator>(const string
&, const string
&);
92 string(const char *, int, const char *, int); // for use by operator+
97 inline char &string::operator[](int i
)
99 assert(i
>= 0 && i
< len
);
103 inline char string::operator[](int i
) const
105 assert(i
>= 0 && i
< len
);
109 inline int string::length() const
114 inline int string::empty() const
119 inline int string::operator*() const
124 inline const char *string::contents() const
129 inline string
operator+(const string
&s1
, const string
&s2
)
131 return string(s1
.ptr
, s1
.len
, s2
.ptr
, s2
.len
);
134 inline string
operator+(const string
&s1
, const char *s2
)
140 return string(s1
.ptr
, s1
.len
, s2
, strlen(s2
));
142 return s2
== 0 ? s1
: string(s1
.ptr
, s1
.len
, s2
, strlen(s2
));
146 inline string
operator+(const char *s1
, const string
&s2
)
152 return string(s1
, strlen(s1
), s2
.ptr
, s2
.len
);
154 return s1
== 0 ? s2
: string(s1
, strlen(s1
), s2
.ptr
, s2
.len
);
158 inline string
operator+(const string
&s
, char c
)
160 return string(s
.ptr
, s
.len
, &c
, 1);
163 inline string
operator+(char c
, const string
&s
)
165 return string(&c
, 1, s
.ptr
, s
.len
);
168 inline int operator==(const string
&s1
, const string
&s2
)
170 return (s1
.len
== s2
.len
171 && (s1
.len
== 0 || memcmp(s1
.ptr
, s2
.ptr
, s1
.len
) == 0));
174 inline int operator!=(const string
&s1
, const string
&s2
)
176 return (s1
.len
!= s2
.len
177 || (s1
.len
!= 0 && memcmp(s1
.ptr
, s2
.ptr
, s1
.len
) != 0));
180 inline string
string::substring(int i
, int n
) const
182 assert(i
>= 0 && i
+ n
<= len
);
183 return string(ptr
+ i
, n
);
186 inline string
&string::operator+=(char c
)
194 void put_string(const string
&, FILE *);
196 string
as_string(int);