Line data Source code
1 : /*
2 : * Copyright 2006 The Android Open Source Project
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 "SkBuffer.h"
9 :
10 : #include <string.h>
11 :
12 : ///////////////////////////////////////////////////////////////////////////////////////////////////
13 :
14 0 : bool SkRBuffer::read(void* buffer, size_t size) {
15 0 : if (fValid && size <= this->available()) {
16 0 : if (buffer) {
17 0 : memcpy(buffer, fPos, size);
18 : }
19 0 : fPos += size;
20 0 : return true;
21 : } else {
22 0 : fValid = false;
23 0 : return false;
24 : }
25 : }
26 :
27 0 : bool SkRBuffer::skipToAlign4() {
28 0 : intptr_t pos = reinterpret_cast<intptr_t>(fPos);
29 0 : size_t n = SkAlign4(pos) - pos;
30 0 : if (fValid && n <= this->available()) {
31 0 : fPos += n;
32 0 : return true;
33 : } else {
34 0 : fValid = false;
35 0 : return false;
36 : }
37 : }
38 :
39 : ///////////////////////////////////////////////////////////////////////////////////////////////////
40 :
41 0 : void* SkWBuffer::skip(size_t size) {
42 0 : void* result = fPos;
43 0 : writeNoSizeCheck(nullptr, size);
44 0 : return fData == nullptr ? nullptr : result;
45 : }
46 :
47 0 : void SkWBuffer::writeNoSizeCheck(const void* buffer, size_t size) {
48 0 : SkASSERT(fData == 0 || fStop == 0 || fPos + size <= fStop);
49 0 : if (fData && buffer)
50 0 : memcpy(fPos, buffer, size);
51 0 : fPos += size;
52 0 : }
53 :
54 0 : size_t SkWBuffer::padToAlign4() {
55 0 : size_t pos = this->pos();
56 0 : size_t n = SkAlign4(pos) - pos;
57 :
58 0 : if (n && fData)
59 : {
60 0 : char* p = fPos;
61 0 : char* stop = p + n;
62 0 : do {
63 0 : *p++ = 0;
64 0 : } while (p < stop);
65 : }
66 0 : fPos += n;
67 0 : return n;
68 : }
69 :
70 : #if 0
71 : #ifdef SK_DEBUG
72 : static void AssertBuffer32(const void* buffer)
73 : {
74 : SkASSERT(buffer);
75 : SkASSERT(((size_t)buffer & 3) == 0);
76 : }
77 : #else
78 : #define AssertBuffer32(buffer)
79 : #endif
80 :
81 : #endif
|