Index: src/core/SkWriter32.cpp |
diff --git a/src/core/SkWriter32.cpp b/src/core/SkWriter32.cpp |
index 5e89ed655b70e5d83da4df2588704689898b52e6..7285459c3d1e5767fff762d0bb38a4a6f848a2a0 100644 |
--- a/src/core/SkWriter32.cpp |
+++ b/src/core/SkWriter32.cpp |
@@ -66,3 +66,21 @@ size_t SkWriter32::WriteStringSize(const char* str, size_t len) { |
// add 1 since we also write a terminating 0 |
return SkAlign4(lenBytes + len + 1); |
} |
+ |
+void SkWriter32::growToAtLeast(size_t size) { |
+ bool wasExternal = (fExternal != NULL) && (fData == fExternal); |
+ // cause the buffer to grow |
+ fInternal.setCount(size); |
+ fData = fInternal.begin(); |
+ if (wasExternal) { |
+ // we were external, so copy in the data |
+ memcpy(fData, fExternal, fUsed); |
+ } |
+ // Find out the size the buffer grew to, it may be more than we asked for. |
+ fCapacity = fInternal.reserved(); |
+ // Expand the array so all reserved space is "used", we maintain the |
+ // amount we have written manually outside the array |
+ fInternal.setCount(fCapacity); |
+ SkASSERT(fInternal.count() == fCapacity); |
+ SkASSERT(fInternal.reserved() == fCapacity); |
+} |