gfx/skia/trunk/src/core/SkBuffer.cpp

changeset 0
6474c204b198
     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

mercurial