| 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 |