Skia
2DGraphicsLibrary
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkRWBuffer.h
1 /*
2  * Copyright 2015 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 SkRWBuffer_DEFINED
9 #define SkRWBuffer_DEFINED
10 
11 #include "SkRefCnt.h"
12 
13 struct SkBufferBlock;
14 struct SkBufferHead;
15 class SkRWBuffer;
16 class SkStreamAsset;
17 
22 class SK_API SkROBuffer : public SkRefCnt {
23 public:
28  size_t size() const { return fAvailable; }
29 
30  class SK_API Iter {
31  public:
32  Iter(const SkROBuffer*);
33 
34  void reset(const SkROBuffer*);
35 
39  const void* data() const;
40 
45  size_t size() const;
46 
51  bool next();
52 
53  private:
54  const SkBufferBlock* fBlock;
55  size_t fRemaining;
56  const SkROBuffer* fBuffer;
57  };
58 
59 private:
60  SkROBuffer(const SkBufferHead* head, size_t available, const SkBufferBlock* fTail);
61  virtual ~SkROBuffer();
62 
63  const SkBufferHead* fHead;
64  const size_t fAvailable;
65  const SkBufferBlock* fTail;
66 
67  friend class SkRWBuffer;
68 };
69 
76 class SK_API SkRWBuffer {
77 public:
78  SkRWBuffer(size_t initialCapacity = 0);
79  ~SkRWBuffer();
80 
81  size_t size() const { return fTotalUsed; }
82  void append(const void* buffer, size_t length);
83 
84  SkROBuffer* newRBufferSnapshot() const;
85  SkStreamAsset* newStreamSnapshot() const;
86 
87 #ifdef SK_DEBUG
88  void validate() const;
89 #else
90  void validate() const {}
91 #endif
92 
93 private:
94  SkBufferHead* fHead;
95  SkBufferBlock* fTail;
96  size_t fTotalUsed;
97 };
98 
99 #endif
size_t size() const
Return the logical length of the data owned/shared by this buffer.
Definition: SkRWBuffer.h:28
Definition: SkRWBuffer.h:30
SkStreamAsset is a SkStreamSeekable for which getLength is required.
Definition: SkStream.h:164
Definition: SkRefCnt.h:135
Accumulates bytes of memory that are "appended" to it, growing internal storage as needed...
Definition: SkRWBuffer.h:76
Contains a read-only, thread-sharable block of memory.
Definition: SkRWBuffer.h:22