add read/write SkData methods
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 2 Jul 2012 19:35:13 +0000 (19:35 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 2 Jul 2012 19:35:13 +0000 (19:35 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@4427 2bbb7eff-a529-9590-31e7-b0007b416f81

include/core/SkStream.h
src/core/SkStream.cpp

index 5a7dd96..d42bd56 100644 (file)
@@ -65,6 +65,12 @@ public:
     SkScalar readScalar();
     size_t   readPackedUInt();
 
+    /**
+     *  Create a new SkData from the stream contents. This balances the call
+     *  SkWStream::writeData().
+     */
+    SkData* readData();
+
 private:
     typedef SkRefCnt INHERITED;
 };
index c137167..f0e52c7 100644 (file)
@@ -93,6 +93,17 @@ size_t SkStream::readPackedUInt() {
     }
 }
 
+SkData* SkStream::readStream() {
+    size_t size = this->readU32();
+    if (0 == size) {
+        return SkData::NewEmpty();
+    } else {
+        void* buffer = sk_malloc_throw(size);
+        stream->read(buffer, size);
+        return SkData::NewFromMalloc(buffer, size);
+    }
+}
+
 //////////////////////////////////////////////////////////////////////////////////////
 
 SkWStream::~SkWStream()
@@ -200,7 +211,10 @@ bool SkWStream::writeStream(SkStream* stream, size_t length) {
 
 bool SkWStream::writeData(const SkData* data) {
     if (data) {
+        this->write32(data->size());
         this->write(data->data(), data->size());
+    } else {
+        this->write32(0);
     }
     return true;
 }