]>
cygwin.com Git - cygwin-apps/setup.git/blob - String++.h
2 * Copyright (c) 2002, Robert Collins.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by Robert Collins.
16 // A String class to replace all the char * manipulation.
18 #ifndef CINSTALL_STRING_H
19 #define CINSTALL_STRING_H
22 #include <sys/types.h>
30 // Static members first
32 inline String (String
const &);
33 // We're notperformance bottlenecked.
34 String (const char *);
36 String (std::string
const &);
37 inline String
& operator = (String
const &);
39 // Up to the user to delete[] these.
41 char * cstr() const; // may be less optimal
42 char const * cstr_oneuse() const; // only valid until the next mutator call
43 // pretends to be const !!
44 inline size_t size() const; // number of characters (!= storage size).
45 size_t find (char) const;
46 String
substr (size_t start
= 0, int len
= -1) const;
47 // operator == and != can be done if/when we have a 'casesensitive' flag to
49 // - means this sorts to the left of the parameter
50 int compare (String
const &, size_t const = 0) const;
51 static int compare (String
const &, String
const &, size_t const = 0);
52 int casecompare (String
const &, size_t const = 0) const;
53 static int casecompare (String
const &, String
const &, size_t const = 0);
54 static int casecompare (String
const, String
const);
55 String
&append (String
const &);
56 String
&operator += (String
const &);
57 String
operator + (String
const &) const;
58 String
operator + (char const *) const;
59 bool operator == (String
const &) const;
60 bool operator == (char const *) const;
61 struct caseless
{ bool operator () (String
const &s1
, String
const &s2
) const
63 return s1
.casecompare (s2
) < 0;
71 _data (_data
const &);
73 unsigned count
; //Invariant: all constructors set to 1;
74 // For now, char *, but can be TCHAR, or even UNICODE
76 unsigned char *theString
;
77 char *cstr
; // cached/oneuse Cstr encoded version
79 } *theData
; // Invariant, there is always an
80 static String
absorb (unsigned char *, size_t);
84 operator << (std::ostream
&os
, String
const &theString
);
86 String::String() : theData (new _data
) {}
87 String::String(String
const &aString
) : theData (aString
.theData
)
93 String::operator= (String
const &aString
)
95 // Don't touch the order
96 ++aString
.theData
->count
;
97 if (--theData
->count
== 0)
99 theData
= aString
.theData
;
106 return theData
->length
;
109 #endif // CINSTALL_STRING_H
This page took 0.039746 seconds and 5 git commands to generate.