]>
git.saurik.com Git - apple/javascriptcore.git/blob - wtf/text/StringBuilder.h
2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef StringBuilder_h
27 #define StringBuilder_h
29 #include <wtf/Vector.h>
30 #include <wtf/text/WTFString.h>
41 void append(const UChar
*, unsigned);
42 void append(const char*, unsigned);
44 void append(const String
& string
)
46 // If we're appending to an empty string, and there is not buffer
47 // (in case reserveCapacity has been called) then just retain the
49 if (!m_length
&& !m_buffer
) {
51 m_length
= string
.length();
54 append(string
.characters(), string
.length());
57 void append(const char* characters
)
60 append(characters
, strlen(characters
));
65 if (m_buffer
&& m_length
< m_buffer
->length() && m_string
.isNull())
66 m_bufferCharacters
[m_length
++] = c
;
73 if (m_buffer
&& m_length
< m_buffer
->length() && m_string
.isNull())
74 m_bufferCharacters
[m_length
++] = (unsigned char)c
;
81 if (m_string
.isNull()) {
88 String
toStringPreserveCapacity()
90 if (m_string
.isNull())
95 unsigned length() const
100 bool isEmpty() const { return !length(); }
102 void reserveCapacity(unsigned newCapacity
);
104 void resize(unsigned newSize
);
108 UChar
operator[](unsigned i
) const
110 ASSERT(i
< m_length
);
111 if (!m_string
.isNull())
114 return m_buffer
->characters()[i
];
125 void allocateBuffer(const UChar
* currentCharacters
, unsigned requiredLength
);
126 UChar
* appendUninitialized(unsigned length
);
131 RefPtr
<StringImpl
> m_buffer
;
132 UChar
* m_bufferCharacters
;
137 using WTF::StringBuilder
;
139 #endif // StringBuilder_h