Refactor Bitmap Storage for SkPicture using SkPipe's design.

Refactor Picture and Pipe bitmap storage into common data structure

Update SkFlattenable buffers to be more modular.

This CL is an effort to stage the conversion to named
parameters for all SkFlattenable commands. This particular
stage only does the following two things...

1. Move flattenable buffers from SkFlattenable.h into
   their own header.
2. Update and Add new read write methods for better clarity
   and convenience.

BUG=

Review URL: https://codereview.appspot.com/6445079

git-svn-id: http://skia.googlecode.com/svn/trunk@4994 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkOrderedReadBuffer.cpp b/src/core/SkOrderedReadBuffer.cpp
index a502c5d..5835c34 100644
--- a/src/core/SkOrderedReadBuffer.cpp
+++ b/src/core/SkOrderedReadBuffer.cpp
@@ -10,14 +10,23 @@
 #include "SkStream.h"
 #include "SkTypeface.h"
 
+SkOrderedReadBuffer::SkOrderedReadBuffer() : INHERITED() {
+    fMemoryPtr = NULL;
 
-SkOrderedReadBuffer::SkOrderedReadBuffer(const void* data, size_t size) {
+    fBitmapStorage = NULL;
+    fTFArray = NULL;
+    fTFCount = 0;
+
+    fFactoryTDArray = NULL;
+    fFactoryArray = NULL;
+    fFactoryCount = 0;
+}
+
+SkOrderedReadBuffer::SkOrderedReadBuffer(const void* data, size_t size) : INHERITED()  {
     fReader.setMemory(data, size);
     fMemoryPtr = NULL;
 
-    fRCArray = NULL;
-    fRCCount = 0;
-
+    fBitmapStorage = NULL;
     fTFArray = NULL;
     fTFCount = 0;
 
@@ -31,10 +40,19 @@
     fMemoryPtr = sk_malloc_throw(length);
     stream->read(fMemoryPtr, length);
     fReader.setMemory(fMemoryPtr, length);
+
+    fBitmapStorage = NULL;
+    fTFArray = NULL;
+    fTFCount = 0;
+
+    fFactoryTDArray = NULL;
+    fFactoryArray = NULL;
+    fFactoryCount = 0;
 }
 
 SkOrderedReadBuffer::~SkOrderedReadBuffer() {
     sk_free(fMemoryPtr);
+    SkSafeUnref(fBitmapStorage);
 }
 
 bool SkOrderedReadBuffer::readBool() {
@@ -145,18 +163,14 @@
     return *(uint32_t*)fReader.peek();
 }
 
-SkRefCnt* SkOrderedReadBuffer::readRefCntPtr() {
-    if (fRCArray) {
-        const uint32_t index = fReader.readU32();
-        SkASSERT(index <= (unsigned)fRCCount);
-        return fRCArray[index - 1];
-    } else {
-        return INHERITED::readRefCntPtr();
-    }
-}
-
 void SkOrderedReadBuffer::readBitmap(SkBitmap* bitmap) {
-    bitmap->unflatten(*this);
+    if (fBitmapStorage) {
+        const uint32_t index = fReader.readU32();
+        *bitmap = *fBitmapStorage->getBitmap(index);
+        fBitmapStorage->releaseRef(index);
+    } else {
+        bitmap->unflatten(*this);
+    }
 }
 
 SkTypeface* SkOrderedReadBuffer::readTypeface() {