| Index: src/codec/SkStreamBuffer.h
|
| diff --git a/src/codec/SkStreamBuffer.h b/src/codec/SkStreamBuffer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f04ddcbfd8805ad9039d47c8b286cd7c608c074e
|
| --- /dev/null
|
| +++ b/src/codec/SkStreamBuffer.h
|
| @@ -0,0 +1,68 @@
|
| +/*
|
| + * Copyright 2016 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkStreamBuffer_DEFINED
|
| +#define SkStreamBuffer_DEFINED
|
| +
|
| +#include "SkStream.h"
|
| +#include "SkTypes.h"
|
| +
|
| +/**
|
| + * Helper class for reading from a stream that may not have all its data
|
| + * available yet.
|
| + *
|
| + * Used by GIFImageReader, and currently set up for that use case.
|
| + *
|
| + * Buffers up to 256 * 3 bytes (256 colors, with 3 bytes each) to support GIF.
|
| + * FIXME (scroggo): Make this more general purpose?
|
| + */
|
| +class SkStreamBuffer : SkNoncopyable {
|
| +public:
|
| + // Takes ownership of the SkStream.
|
| + SkStreamBuffer(SkStream*);
|
| +
|
| + /**
|
| + * Return a pointer the buffered data.
|
| + *
|
| + * The number of bytes buffered is the sum of values returned by calls to
|
| + * buffer() since the last call to flush().
|
| + */
|
| + const char* get() const { SkASSERT(fBytesBuffered >= 1); return fBuffer; }
|
| +
|
| + /**
|
| + * Bytes in the buffer.
|
| + *
|
| + * Sum of the values returned by calls to buffer() since the last call to
|
| + * flush().
|
| + */
|
| + size_t bytesBuffered() const { return fBytesBuffered; }
|
| +
|
| + /**
|
| + * Buffer from the stream into our buffer.
|
| + *
|
| + * Returns the number of bytes successfully buffered.
|
| + */
|
| + size_t buffer(size_t bytes);
|
| +
|
| + /**
|
| + * Flush the buffer.
|
| + *
|
| + * After this call, no bytes are buffered.
|
| + */
|
| + void flush() {
|
| + fBytesBuffered = 0;
|
| + }
|
| +
|
| +private:
|
| + static constexpr size_t kMaxSize = 256 * 3;
|
| +
|
| + std::unique_ptr<SkStream> fStream;
|
| + char fBuffer[kMaxSize];
|
| + size_t fBytesBuffered;
|
| +};
|
| +#endif // SkStreamBuffer_DEFINED
|
| +
|
|
|