|
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 #include "SkTypes.h" |
|
9 |
|
10 class SkStream; |
|
11 class SkStreamRewindable; |
|
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 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 be unreffed and no longer used directly. |
|
30 * @param minBufferSize Minimum size of buffer required. |
|
31 * @return An SkStream that can buffer at least minBufferSize, or |
|
32 * NULL on failure. |
|
33 */ |
|
34 static SkStreamRewindable* Create(SkStream* stream, size_t minBufferSize); |
|
35 }; |