michael@0: /* michael@0: * Copyright 2013 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #include "SkTypes.h" michael@0: michael@0: class SkStream; michael@0: class SkStreamRewindable; michael@0: michael@0: /** michael@0: * Specialized stream that buffers the first X bytes of a stream, michael@0: * where X is passed in by the user. Note that unlike some buffered michael@0: * stream APIs, once more bytes than can fit in the buffer are read, michael@0: * no more buffering is done. This stream is designed for a use case michael@0: * where the caller knows that rewind will only be called from within michael@0: * X bytes (inclusive), and the wrapped stream is not necessarily michael@0: * able to rewind at all. michael@0: */ michael@0: class SkFrontBufferedStream { michael@0: public: michael@0: /** michael@0: * Creates a new stream that wraps and buffers an SkStream. michael@0: * @param stream SkStream to buffer. If stream is NULL, NULL is michael@0: * returned. When this call succeeds (i.e. returns non NULL), michael@0: * SkFrontBufferedStream is expected to be the only owner of michael@0: * stream, so it should be unreffed and no longer used directly. michael@0: * @param minBufferSize Minimum size of buffer required. michael@0: * @return An SkStream that can buffer at least minBufferSize, or michael@0: * NULL on failure. michael@0: */ michael@0: static SkStreamRewindable* Create(SkStream* stream, size_t minBufferSize); michael@0: };