Skia
2DGraphicsLibrary
 All Classes Namespaces 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  Iter(const sk_sp<SkROBuffer>&);
34 
35  void reset(const SkROBuffer*);
36 
40  const void* data() const;
41 
46  size_t size() const;
47 
52  bool next();
53 
54  private:
55  const SkBufferBlock* fBlock;
56  size_t fRemaining;
57  const SkROBuffer* fBuffer;
58  };
59 
60 private:
61  SkROBuffer(const SkBufferHead* head, size_t available, const SkBufferBlock* fTail);
62  virtual ~SkROBuffer();
63 
64  const SkBufferHead* fHead;
65  const size_t fAvailable;
66  const SkBufferBlock* fTail;
67 
68  friend class SkRWBuffer;
69 };
70 
77 class SK_API SkRWBuffer {
78 public:
79  SkRWBuffer(size_t initialCapacity = 0);
80  ~SkRWBuffer();
81 
82  size_t size() const { return fTotalUsed; }
83 
91  void append(const void* buffer, size_t length, size_t reserve = 0);
92 
93  sk_sp<SkROBuffer> makeROBufferSnapshot() const {
94  return sk_sp<SkROBuffer>(new SkROBuffer(fHead, fTotalUsed, fTail));
95  }
96 
97  std::unique_ptr<SkStreamAsset> makeStreamSnapshot() const;
98 
99 #ifdef SK_DEBUG
100  void validate() const;
101 #else
102  void validate() const {}
103 #endif
104 
105 private:
106  SkBufferHead* fHead;
107  SkBufferBlock* fTail;
108  size_t fTotalUsed;
109 };
110 
111 #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:125
Shared pointer class to wrap classes that support a ref()/unref() interface.
Definition: SkRefCnt.h:246
Accumulates bytes of memory that are "appended" to it, growing internal storage as needed...
Definition: SkRWBuffer.h:77
Contains a read-only, thread-sharable block of memory.
Definition: SkRWBuffer.h:22