SkBuffer.cpp 2.0 KB

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