OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkBuffer_DEFINED | 10 #ifndef SkBuffer_DEFINED |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 size_t size() const { return fStop - fData; } | 49 size_t size() const { return fStop - fData; } |
50 /** Return true if the buffer has read to the end of the data pointer. | 50 /** Return true if the buffer has read to the end of the data pointer. |
51 Only defined if the length was specified in the constructor or in a call | 51 Only defined if the length was specified in the constructor or in a call |
52 to reset(). Always returns true if the length was not specified. | 52 to reset(). Always returns true if the length was not specified. |
53 */ | 53 */ |
54 bool eof() const { return fPos >= fStop; } | 54 bool eof() const { return fPos >= fStop; } |
55 | 55 |
56 /** Read the specified number of bytes from the data pointer. If buffer is n
ot | 56 /** Read the specified number of bytes from the data pointer. If buffer is n
ot |
57 null, copy those bytes into buffer. | 57 null, copy those bytes into buffer. |
58 */ | 58 */ |
59 void read(void* buffer, size_t size) { | 59 virtual void read(void* buffer, size_t size) { |
60 if (size) { | 60 if (size) { |
61 this->readNoSizeCheck(buffer, size); | 61 this->readNoSizeCheck(buffer, size); |
62 } | 62 } |
63 } | 63 } |
64 | 64 |
65 const void* skip(size_t size); // return start of skipped data | 65 const void* skip(size_t size); // return start of skipped data |
66 size_t skipToAlign4(); | 66 size_t skipToAlign4(); |
67 | 67 |
68 void* readPtr() { void* ptr; read(&ptr, sizeof(ptr)); return ptr; } | 68 void* readPtr() { void* ptr; read(&ptr, sizeof(ptr)); return ptr; } |
69 SkScalar readScalar() { SkScalar x; read(&x, 4); return x; } | 69 SkScalar readScalar() { SkScalar x; read(&x, 4); return x; } |
70 uint32_t readU32() { uint32_t x; read(&x, 4); return x; } | 70 uint32_t readU32() { uint32_t x; read(&x, 4); return x; } |
71 int32_t readS32() { int32_t x; read(&x, 4); return x; } | 71 int32_t readS32() { int32_t x; read(&x, 4); return x; } |
72 uint16_t readU16() { uint16_t x; read(&x, 2); return x; } | 72 uint16_t readU16() { uint16_t x; read(&x, 2); return x; } |
73 int16_t readS16() { int16_t x; read(&x, 2); return x; } | 73 int16_t readS16() { int16_t x; read(&x, 2); return x; } |
74 uint8_t readU8() { uint8_t x; read(&x, 1); return x; } | 74 uint8_t readU8() { uint8_t x; read(&x, 1); return x; } |
75 bool readBool() { return this->readU8() != 0; } | 75 bool readBool() { return this->readU8() != 0; } |
76 | 76 |
77 private: | 77 protected: |
78 void readNoSizeCheck(void* buffer, size_t size); | 78 void readNoSizeCheck(void* buffer, size_t size); |
79 | 79 |
80 const char* fData; | 80 const char* fData; |
81 const char* fPos; | 81 const char* fPos; |
82 const char* fStop; | 82 const char* fStop; |
83 }; | 83 }; |
84 | 84 |
| 85 /** \class SkRBufferWithSizeCheck |
| 86 |
| 87 Same as SkRBuffer, except that a size check is performed before the read ope
ration and an |
| 88 error is set if the read operation is attempting to read past the end of the
data. |
| 89 */ |
| 90 class SkRBufferWithSizeCheck : public SkRBuffer { |
| 91 public: |
| 92 SkRBufferWithSizeCheck(const void* data, size_t size) : SkRBuffer(data, size
), fError(false) {} |
| 93 |
| 94 /** Read the specified number of bytes from the data pointer. If buffer is n
ot |
| 95 null and the number of bytes to read does not overflow this object's dat
a, |
| 96 copy those bytes into buffer. |
| 97 */ |
| 98 virtual void read(void* buffer, size_t size) SK_OVERRIDE; |
| 99 |
| 100 /** Returns whether or not a read operation attempted to read past the end o
f the data. |
| 101 */ |
| 102 bool isValid() const { return !fError; } |
| 103 private: |
| 104 bool fError; |
| 105 }; |
| 106 |
85 /** \class SkWBuffer | 107 /** \class SkWBuffer |
86 | 108 |
87 Light weight class for writing data to a memory block. | 109 Light weight class for writing data to a memory block. |
88 The WBuffer is given the buffer to write into, with either a specified size | 110 The WBuffer is given the buffer to write into, with either a specified size |
89 or no size, in which case no range checking is performed. An empty WBuffer | 111 or no size, in which case no range checking is performed. An empty WBuffer |
90 is legal, in which case no data is ever written, but the relative pos() | 112 is legal, in which case no data is ever written, but the relative pos() |
91 is updated. | 113 is updated. |
92 */ | 114 */ |
93 class SkWBuffer : SkNoncopyable { | 115 class SkWBuffer : SkNoncopyable { |
94 public: | 116 public: |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 | 151 |
130 private: | 152 private: |
131 void writeNoSizeCheck(const void* buffer, size_t size); | 153 void writeNoSizeCheck(const void* buffer, size_t size); |
132 | 154 |
133 char* fData; | 155 char* fData; |
134 char* fPos; | 156 char* fPos; |
135 char* fStop; | 157 char* fStop; |
136 }; | 158 }; |
137 | 159 |
138 #endif | 160 #endif |
OLD | NEW |