tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

BufferStream.cpp (1804B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "BufferStream.h"
      6 
      7 #include <algorithm>
      8 
      9 #include "MediaData.h"
     10 #include "MediaResource.h"
     11 
     12 namespace mozilla {
     13 
     14 BufferStream::BufferStream()
     15    : mStartOffset(0), mData(new mozilla::MediaByteBuffer) {}
     16 
     17 BufferStream::BufferStream(mozilla::MediaByteBuffer* aBuffer)
     18    : mStartOffset(0), mData(aBuffer) {}
     19 
     20 BufferStream::~BufferStream() = default;
     21 
     22 /*virtual*/
     23 nsresult BufferStream::ReadAt(int64_t aOffset, void* aData, size_t aLength,
     24                              size_t* aBytesRead) {
     25  if (aOffset < mStartOffset || aOffset > mStartOffset + mData->Length()) {
     26    return NS_ERROR_DOM_MEDIA_RANGE_ERR;
     27  }
     28  *aBytesRead =
     29      std::min(aLength, size_t(mStartOffset + mData->Length() - aOffset));
     30  memcpy(aData, mData->Elements() + aOffset - mStartOffset, *aBytesRead);
     31  return NS_OK;
     32 }
     33 
     34 /*virtual*/
     35 nsresult BufferStream::CachedReadAt(int64_t aOffset, void* aData,
     36                                    size_t aLength, size_t* aBytesRead) {
     37  return ReadAt(aOffset, aData, aLength, aBytesRead);
     38 }
     39 
     40 /*virtual*/
     41 bool BufferStream::Length(int64_t* aLength) {
     42  *aLength = mStartOffset + mData->Length();
     43  return true;
     44 }
     45 
     46 /* virtual */
     47 void BufferStream::DiscardBefore(int64_t aOffset) {
     48  if (aOffset > mStartOffset) {
     49    mData->RemoveElementsAt(0, aOffset - mStartOffset);
     50    mStartOffset = aOffset;
     51  }
     52 }
     53 
     54 bool BufferStream::AppendBytes(const uint8_t* aData, size_t aLength) {
     55  return mData->AppendElements(aData, aLength, fallible);
     56 }
     57 
     58 MediaByteRange BufferStream::GetByteRange() {
     59  return MediaByteRange(mStartOffset, mStartOffset + mData->Length());
     60 }
     61 }  // namespace mozilla