1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/core/SkBuffer.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,137 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2006 The Android Open Source Project 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 +#include "SkBuffer.h" 1.14 + 1.15 +//////////////////////////////////////////////////////////////////////////////////////// 1.16 + 1.17 +void SkRBuffer::readNoSizeCheck(void* buffer, size_t size) 1.18 +{ 1.19 + SkASSERT((fData != 0 && fStop == 0) || fPos + size <= fStop); 1.20 + if (buffer) 1.21 + memcpy(buffer, fPos, size); 1.22 + fPos += size; 1.23 +} 1.24 + 1.25 +const void* SkRBuffer::skip(size_t size) 1.26 +{ 1.27 + const void* result = fPos; 1.28 + readNoSizeCheck(NULL, size); 1.29 + return result; 1.30 +} 1.31 + 1.32 +size_t SkRBuffer::skipToAlign4() 1.33 +{ 1.34 + size_t pos = this->pos(); 1.35 + size_t n = SkAlign4(pos) - pos; 1.36 + fPos += n; 1.37 + return n; 1.38 +} 1.39 + 1.40 +bool SkRBufferWithSizeCheck::read(void* buffer, size_t size) { 1.41 + fError = fError || (fPos + size > fStop); 1.42 + if (!fError && (size > 0)) { 1.43 + readNoSizeCheck(buffer, size); 1.44 + } 1.45 + return !fError; 1.46 +} 1.47 + 1.48 +void* SkWBuffer::skip(size_t size) 1.49 +{ 1.50 + void* result = fPos; 1.51 + writeNoSizeCheck(NULL, size); 1.52 + return fData == NULL ? NULL : result; 1.53 +} 1.54 + 1.55 +void SkWBuffer::writeNoSizeCheck(const void* buffer, size_t size) 1.56 +{ 1.57 + SkASSERT(fData == 0 || fStop == 0 || fPos + size <= fStop); 1.58 + if (fData && buffer) 1.59 + memcpy(fPos, buffer, size); 1.60 + fPos += size; 1.61 +} 1.62 + 1.63 +size_t SkWBuffer::padToAlign4() 1.64 +{ 1.65 + size_t pos = this->pos(); 1.66 + size_t n = SkAlign4(pos) - pos; 1.67 + 1.68 + if (n && fData) 1.69 + { 1.70 + char* p = fPos; 1.71 + char* stop = p + n; 1.72 + do { 1.73 + *p++ = 0; 1.74 + } while (p < stop); 1.75 + } 1.76 + fPos += n; 1.77 + return n; 1.78 +} 1.79 + 1.80 +#if 0 1.81 +#ifdef SK_DEBUG 1.82 + static void AssertBuffer32(const void* buffer) 1.83 + { 1.84 + SkASSERT(buffer); 1.85 + SkASSERT(((size_t)buffer & 3) == 0); 1.86 + } 1.87 +#else 1.88 + #define AssertBuffer32(buffer) 1.89 +#endif 1.90 + 1.91 +void* sk_buffer_write_int32(void* buffer, int32_t value) 1.92 +{ 1.93 + AssertBuffer32(buffer); 1.94 + *(int32_t*)buffer = value; 1.95 + return (char*)buffer + sizeof(int32_t); 1.96 +} 1.97 + 1.98 +void* sk_buffer_write_int32(void* buffer, const int32_t values[], int count) 1.99 +{ 1.100 + AssertBuffer32(buffer); 1.101 + SkASSERT(count >= 0); 1.102 + 1.103 + memcpy((int32_t*)buffer, values, count * sizeof(int32_t)); 1.104 + return (char*)buffer + count * sizeof(int32_t); 1.105 +} 1.106 + 1.107 +const void* sk_buffer_read_int32(const void* buffer, int32_t* value) 1.108 +{ 1.109 + AssertBuffer32(buffer); 1.110 + if (value) 1.111 + *value = *(const int32_t*)buffer; 1.112 + return (const char*)buffer + sizeof(int32_t); 1.113 +} 1.114 + 1.115 +const void* sk_buffer_read_int32(const void* buffer, int32_t values[], int count) 1.116 +{ 1.117 + AssertBuffer32(buffer); 1.118 + SkASSERT(count >= 0); 1.119 + 1.120 + if (values) 1.121 + memcpy(values, (const int32_t*)buffer, count * sizeof(int32_t)); 1.122 + return (const char*)buffer + count * sizeof(int32_t); 1.123 +} 1.124 + 1.125 +void* sk_buffer_write_ptr(void* buffer, void* ptr) 1.126 +{ 1.127 + AssertBuffer32(buffer); 1.128 + *(void**)buffer = ptr; 1.129 + return (char*)buffer + sizeof(void*); 1.130 +} 1.131 + 1.132 +const void* sk_buffer_read_ptr(const void* buffer, void** ptr) 1.133 +{ 1.134 + AssertBuffer32(buffer); 1.135 + if (ptr) 1.136 + *ptr = *(void**)buffer; 1.137 + return (const char*)buffer + sizeof(void*); 1.138 +} 1.139 + 1.140 +#endif