Replace GrStringBuilder with SkString. First step in cleaning up the shader generator. Slight performance hit when creating a new shader (<10% of total shader gen time on my Windows box is spent in building our string before handing it to GL). Much of this can be recovered by better usage pattern of SkString in coming revisions.
Review URL: http://codereview.appspot.com/4465053/
git-svn-id: http://skia.googlecode.com/svn/trunk@1266 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/include/GrStringBuilder.h b/gpu/include/GrStringBuilder.h
index bcf124f..73b3796 100644
--- a/gpu/include/GrStringBuilder.h
+++ b/gpu/include/GrStringBuilder.h
@@ -18,165 +18,9 @@
#ifndef GrStringBuilder_DEFINED
#define GrStringBuilder_DEFINED
-#include <GrTArray.h>
-#include <stdio.h>
+#include "SkString.h"
-// Class used to concat strings together into a single string
-// See below for GrSStringBuilder subclass that has a pool of
-// stack storage (to avoid malloc).
-class GrStringBuilder {
-public:
- GrStringBuilder() :
- fChars() {
- fChars.push_back() = '\0';
- }
-
- GrStringBuilder(const GrStringBuilder& s) :
- fChars(s.fChars) {
- GrAssert('\0' == s.fChars.back());
- }
-
- GrStringBuilder(const char* s) :
- fChars(s, strlen(s)+1) {
- }
-
- GrStringBuilder(const GrStringBuilder& a, const GrStringBuilder& b) {
- GrAssert('\0' == a.fChars.back());
- GrAssert('\0' == b.fChars.back());
-
- fChars.push_back_n(a.fChars.count() + b.fChars.count() - 1);
- char* s = &fChars.front();
- memcpy(s, &a.fChars.front(), a.fChars.count() - 1);
- s += a.fChars.count() - 1;
- memcpy(s, &b.fChars.front(), b.fChars.count());
- }
-
- GrStringBuilder& operator =(const GrStringBuilder& s) {
- fChars = s.fChars;
- return *this;
- }
-
- GrStringBuilder& operator =(const char* s) {
- GrAssert('\0' == fChars.back());
-
- int l = strlen(s);
- fChars.resize_back(l + 1);
- memcpy(&fChars.front(), s, l + 1);
- return *this;
- }
-
- GrStringBuilder& operator +=(const GrStringBuilder& s) {
- GrAssert('\0' == fChars.back());
- GrAssert('\0' == s.fChars.back());
- fChars.push_back_n(s.length());
- memcpy(&fChars.fromBack(s.length()), &s.fChars.front(), s.fChars.count());
- return *this;
- }
-
- GrStringBuilder& operator +=(const char* s) {
- GrAssert('\0' == fChars.back());
- int l = strlen(s);
- fChars.push_back_n(l);
- memcpy(&fChars.fromBack(l), s, l + 1);
- return *this;
- }
-
- GrStringBuilder& operator +=(char c) {
- GrAssert('\0' == fChars.back());
- fChars.back() = c;
- fChars.push_back() = '\0';
- return *this;
- }
-
- void appendInt(int x) {
- GR_STATIC_ASSERT(4 == sizeof(int));
- // -, 10 digits, null char
- char temp[12];
- sprintf(temp, "%d", x);
- *this += temp;
- }
-
- char& operator [](int i) {
- GrAssert(i < length());
- return fChars[i];
- }
-
- char operator [](int i) const {
- GrAssert(i < length());
- return fChars[i];
- }
-
- const char* cstr() const { return &fChars.front(); }
-
- int length() const { return fChars.count() - 1; }
-
-protected:
- // helpers for GrSStringBuilder (with storage on the stack)
-
- GrStringBuilder(void* stackChars, int stackCount) :
- fChars(stackCount ? stackChars : NULL,
- stackCount) {
- fChars.push_back() = '\0';
- }
-
- GrStringBuilder(void* stackChars,
- int stackCount,
- const GrStringBuilder& s) :
- fChars(s.fChars,
- (stackCount ? stackChars : NULL),
- stackCount) {
- }
-
- GrStringBuilder(void* stackChars,
- int stackCount,
- const char* s) :
- fChars(s,
- strlen(s)+1,
- stackCount ? stackChars : NULL,
- stackCount) {
- }
-
- GrStringBuilder(void* stackChars,
- int stackCount,
- const GrStringBuilder& a,
- const GrStringBuilder& b) :
- fChars(stackCount ? stackChars : NULL,
- stackCount) {
- GrAssert('\0' == a.fChars.back());
- GrAssert('\0' == b.fChars.back());
-
- fChars.push_back_n(a.fChars.count() + b.fChars.count() - 1);
- char* s = &fChars.front();
- memcpy(s, &a.fChars.front(), a.fChars.count() - 1);
- s += a.fChars.count() - 1;
- memcpy(s, &b.fChars.front(), b.fChars.count());
- }
-
-private:
- GrTArray<char, true> fChars;
-};
-
-template <int STACK_COUNT = 128>
-class GrSStringBuilder : public GrStringBuilder {
-public:
- GrSStringBuilder() : GrStringBuilder(fStackChars, STACK_COUNT) {}
-
- GrSStringBuilder(const GrStringBuilder& s) : GrStringBuilder(fStackChars,
- STACK_COUNT,
- s) {
- }
-
- GrSStringBuilder(const char* s) : GrStringBuilder(fStackChars,
- STACK_COUNT,
- s) {
- }
-
- GrSStringBuilder(const GrStringBuilder& a, const GrStringBuilder& b) :
- GrStringBuilder(fStackChars, STACK_COUNT, a, b) {
- }
-private:
- char fStackChars[STACK_COUNT];
-};
+typedef SkString GrStringBuilder;
#endif