snappy-sinksource.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // Copyright 2011 Google Inc. All Rights Reserved.
  2. //
  3. // Redistribution and use in source and binary forms, with or without
  4. // modification, are permitted provided that the following conditions are
  5. // met:
  6. //
  7. // * Redistributions of source code must retain the above copyright
  8. // notice, this list of conditions and the following disclaimer.
  9. // * Redistributions in binary form must reproduce the above
  10. // copyright notice, this list of conditions and the following disclaimer
  11. // in the documentation and/or other materials provided with the
  12. // distribution.
  13. // * Neither the name of Google Inc. nor the names of its
  14. // contributors may be used to endorse or promote products derived from
  15. // this software without specific prior written permission.
  16. //
  17. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  18. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  19. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  20. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  21. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  22. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  23. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  24. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  25. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  26. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  27. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28. #include <stddef.h>
  29. #include <cstring>
  30. #include "snappy-sinksource.h"
  31. namespace snappy {
  32. Source::~Source() = default;
  33. Sink::~Sink() = default;
  34. char* Sink::GetAppendBuffer(size_t length, char* scratch) {
  35. // TODO: Switch to [[maybe_unused]] when we can assume C++17.
  36. (void)length;
  37. return scratch;
  38. }
  39. char* Sink::GetAppendBufferVariable(
  40. size_t min_size, size_t desired_size_hint, char* scratch,
  41. size_t scratch_size, size_t* allocated_size) {
  42. // TODO: Switch to [[maybe_unused]] when we can assume C++17.
  43. (void)min_size;
  44. (void)desired_size_hint;
  45. *allocated_size = scratch_size;
  46. return scratch;
  47. }
  48. void Sink::AppendAndTakeOwnership(
  49. char* bytes, size_t n,
  50. void (*deleter)(void*, const char*, size_t),
  51. void *deleter_arg) {
  52. Append(bytes, n);
  53. (*deleter)(deleter_arg, bytes, n);
  54. }
  55. ByteArraySource::~ByteArraySource() = default;
  56. size_t ByteArraySource::Available() const { return left_; }
  57. const char* ByteArraySource::Peek(size_t* len) {
  58. *len = left_;
  59. return ptr_;
  60. }
  61. void ByteArraySource::Skip(size_t n) {
  62. left_ -= n;
  63. ptr_ += n;
  64. }
  65. UncheckedByteArraySink::~UncheckedByteArraySink() { }
  66. void UncheckedByteArraySink::Append(const char* data, size_t n) {
  67. // Do no copying if the caller filled in the result of GetAppendBuffer()
  68. if (data != dest_) {
  69. std::memcpy(dest_, data, n);
  70. }
  71. dest_ += n;
  72. }
  73. char* UncheckedByteArraySink::GetAppendBuffer(size_t len, char* scratch) {
  74. // TODO: Switch to [[maybe_unused]] when we can assume C++17.
  75. (void)len;
  76. (void)scratch;
  77. return dest_;
  78. }
  79. void UncheckedByteArraySink::AppendAndTakeOwnership(
  80. char* bytes, size_t n,
  81. void (*deleter)(void*, const char*, size_t),
  82. void *deleter_arg) {
  83. if (bytes != dest_) {
  84. std::memcpy(dest_, bytes, n);
  85. (*deleter)(deleter_arg, bytes, n);
  86. }
  87. dest_ += n;
  88. }
  89. char* UncheckedByteArraySink::GetAppendBufferVariable(
  90. size_t min_size, size_t desired_size_hint, char* scratch,
  91. size_t scratch_size, size_t* allocated_size) {
  92. // TODO: Switch to [[maybe_unused]] when we can assume C++17.
  93. (void)min_size;
  94. (void)scratch;
  95. (void)scratch_size;
  96. *allocated_size = desired_size_hint;
  97. return dest_;
  98. }
  99. } // namespace snappy