diff options
Diffstat (limited to '')
-rw-r--r-- | gfx/skia/skia/src/base/SkBuffer.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/base/SkBuffer.cpp b/gfx/skia/skia/src/base/SkBuffer.cpp new file mode 100644 index 0000000000..bb39782215 --- /dev/null +++ b/gfx/skia/skia/src/base/SkBuffer.cpp @@ -0,0 +1,90 @@ +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/base/SkBuffer.h" + +#include "include/private/base/SkAlign.h" +#include "include/private/base/SkMalloc.h" + +#include <cstdint> + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +const void* SkRBuffer::skip(size_t size) { + if (fValid && size <= this->available()) { + const void* pos = fPos; + fPos += size; + return pos; + } + fValid = false; + return nullptr; +} + +bool SkRBuffer::read(void* buffer, size_t size) { + if (const void* src = this->skip(size)) { + sk_careful_memcpy(buffer, src, size); + return true; + } + return false; +} + +bool SkRBuffer::skipToAlign4() { + intptr_t pos = reinterpret_cast<intptr_t>(fPos); + size_t n = SkAlign4(pos) - pos; + if (fValid && n <= this->available()) { + fPos += n; + return true; + } else { + fValid = false; + return false; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +void* SkWBuffer::skip(size_t size) { + void* result = fPos; + writeNoSizeCheck(nullptr, size); + return fData == nullptr ? nullptr : result; +} + +void SkWBuffer::writeNoSizeCheck(const void* buffer, size_t size) { + SkASSERT(fData == nullptr || fStop == nullptr || fPos + size <= fStop); + if (fData && buffer) { + sk_careful_memcpy(fPos, buffer, size); + } + fPos += size; +} + +size_t SkWBuffer::padToAlign4() { + size_t pos = this->pos(); + size_t n = SkAlign4(pos) - pos; + + if (n && fData) + { + char* p = fPos; + char* stop = p + n; + do { + *p++ = 0; + } while (p < stop); + } + fPos += n; + return n; +} + +#if 0 +#ifdef SK_DEBUG + static void AssertBuffer32(const void* buffer) + { + SkASSERT(buffer); + SkASSERT(((size_t)buffer & 3) == 0); + } +#else + #define AssertBuffer32(buffer) +#endif + +#endif |