blob: 915264d957f057840da9d831a05aa242e50132cc [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2006 The Android Open Source Project
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
reed@android.com8a1c16f2008-12-17 15:59:43 +00009
10#include "SkBuffer.h"
11
12////////////////////////////////////////////////////////////////////////////////////////
13
14void SkRBuffer::readNoSizeCheck(void* buffer, size_t size)
15{
16 SkASSERT((fData != 0 && fStop == 0) || fPos + size <= fStop);
17 if (buffer)
18 memcpy(buffer, fPos, size);
19 fPos += size;
20}
21
22const void* SkRBuffer::skip(size_t size)
23{
24 const void* result = fPos;
25 readNoSizeCheck(NULL, size);
26 return result;
27}
28
29size_t SkRBuffer::skipToAlign4()
30{
31 size_t pos = this->pos();
32 size_t n = SkAlign4(pos) - pos;
33 fPos += n;
34 return n;
35}
36
37void* SkWBuffer::skip(size_t size)
38{
39 void* result = fPos;
40 writeNoSizeCheck(NULL, size);
41 return fData == NULL ? NULL : result;
42}
43
44void SkWBuffer::writeNoSizeCheck(const void* buffer, size_t size)
45{
46 SkASSERT(fData == 0 || fStop == 0 || fPos + size <= fStop);
47 if (fData && buffer)
48 memcpy(fPos, buffer, size);
49 fPos += size;
50}
51
52size_t SkWBuffer::padToAlign4()
53{
54 size_t pos = this->pos();
55 size_t n = SkAlign4(pos) - pos;
56
57 if (n && fData)
58 {
59 char* p = fPos;
60 char* stop = p + n;
61 do {
62 *p++ = 0;
63 } while (p < stop);
64 }
65 fPos += n;
66 return n;
67}
68
69#if 0
70#ifdef SK_DEBUG
71 static void AssertBuffer32(const void* buffer)
72 {
73 SkASSERT(buffer);
74 SkASSERT(((size_t)buffer & 3) == 0);
75 }
76#else
77 #define AssertBuffer32(buffer)
78#endif
79
80void* sk_buffer_write_int32(void* buffer, int32_t value)
81{
82 AssertBuffer32(buffer);
83 *(int32_t*)buffer = value;
84 return (char*)buffer + sizeof(int32_t);
85}
86
87void* sk_buffer_write_int32(void* buffer, const int32_t values[], int count)
88{
89 AssertBuffer32(buffer);
90 SkASSERT(count >= 0);
91
92 memcpy((int32_t*)buffer, values, count * sizeof(int32_t));
93 return (char*)buffer + count * sizeof(int32_t);
94}
95
96const void* sk_buffer_read_int32(const void* buffer, int32_t* value)
97{
98 AssertBuffer32(buffer);
99 if (value)
100 *value = *(const int32_t*)buffer;
101 return (const char*)buffer + sizeof(int32_t);
102}
103
104const void* sk_buffer_read_int32(const void* buffer, int32_t values[], int count)
105{
106 AssertBuffer32(buffer);
107 SkASSERT(count >= 0);
108
109 if (values)
110 memcpy(values, (const int32_t*)buffer, count * sizeof(int32_t));
111 return (const char*)buffer + count * sizeof(int32_t);
112}
113
114void* sk_buffer_write_ptr(void* buffer, void* ptr)
115{
116 AssertBuffer32(buffer);
117 *(void**)buffer = ptr;
118 return (char*)buffer + sizeof(void*);
119}
120
121const void* sk_buffer_read_ptr(const void* buffer, void** ptr)
122{
123 AssertBuffer32(buffer);
124 if (ptr)
125 *ptr = *(void**)buffer;
126 return (const char*)buffer + sizeof(void*);
127}
128
129#endif