| 1 | /* | 
|---|
| 2 | * Copyright 2013 Google Inc. | 
|---|
| 3 | * | 
|---|
| 4 | * Use of this source code is governed by a BSD-style license that can be | 
|---|
| 5 | * found in the LICENSE file. | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef SkFrontBufferedStream_DEFINED | 
|---|
| 9 | #define SkFrontBufferedStream_DEFINED | 
|---|
| 10 |  | 
|---|
| 11 | #include "include/core/SkStream.h" | 
|---|
| 12 |  | 
|---|
| 13 | /** | 
|---|
| 14 | *  Specialized stream that buffers the first X bytes of a stream, | 
|---|
| 15 | *  where X is passed in by the user. Note that unlike some buffered | 
|---|
| 16 | *  stream APIs, once more bytes than can fit in the buffer are read, | 
|---|
| 17 | *  no more buffering is done. This stream is designed for a use case | 
|---|
| 18 | *  where the caller knows that rewind will only be called from within | 
|---|
| 19 | *  X bytes (inclusive), and the wrapped stream is not necessarily | 
|---|
| 20 | *  able to rewind at all. | 
|---|
| 21 | */ | 
|---|
| 22 | class SK_API SkFrontBufferedStream { | 
|---|
| 23 | public: | 
|---|
| 24 | /** | 
|---|
| 25 | *  Creates a new stream that wraps and buffers an SkStream. | 
|---|
| 26 | *  @param stream SkStream to buffer. If stream is NULL, NULL is | 
|---|
| 27 | *      returned. When this call succeeds (i.e. returns non NULL), | 
|---|
| 28 | *      SkFrontBufferedStream is expected to be the only owner of | 
|---|
| 29 | *      stream, so it should no be longer used directly. | 
|---|
| 30 | *      SkFrontBufferedStream will delete stream upon deletion. | 
|---|
| 31 | *  @param minBufferSize Minimum size of buffer required. | 
|---|
| 32 | *  @return An SkStream that can buffer at least minBufferSize, or | 
|---|
| 33 | *      NULL on failure. The caller is required to delete when finished with | 
|---|
| 34 | *      this object. | 
|---|
| 35 | */ | 
|---|
| 36 | static std::unique_ptr<SkStreamRewindable> Make(std::unique_ptr<SkStream> stream, | 
|---|
| 37 | size_t minBufferSize); | 
|---|
| 38 | }; | 
|---|
| 39 | #endif  // SkFrontBufferedStream_DEFINED | 
|---|
| 40 |  | 
|---|