| // Copyright 2026 The PDFium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "core/fxcodec/codec_memory_sk_stream.h" | |
| #include <stddef.h> | |
| #include <stdint.h> | |
| #include <utility> | |
| #include "core/fxcodec/cfx_codec_memory.h" | |
| #include "core/fxcrt/compiler_specific.h" | |
| #include "core/fxcrt/retain_ptr.h" | |
| #include "core/fxcrt/span.h" | |
| CodecMemorySkStream::CodecMemorySkStream( | |
| RetainPtr<CFX_CodecMemory> codec_memory) | |
| : codec_memory_(std::move(codec_memory)) {} | |
| CodecMemorySkStream::~CodecMemorySkStream() = default; | |
| size_t CodecMemorySkStream::read(void* buffer, size_t size) { | |
| // SAFETY: Relying on the caller to pass correct `buffer` and `size`. | |
| uint8_t* bytes = static_cast<uint8_t*>(buffer); | |
| auto byte_span = UNSAFE_BUFFERS(pdfium::span(bytes, size)); | |
| return codec_memory_->ReadBlock(byte_span); | |
| } | |
| bool CodecMemorySkStream::isAtEnd() const { | |
| return codec_memory_->IsEOF(); | |
| } | |
| bool CodecMemorySkStream::rewind() { | |
| return codec_memory_->Seek(0); | |
| } | |
| bool CodecMemorySkStream::seek(size_t position) { | |
| return codec_memory_->Seek(position); | |
| } | |
| size_t CodecMemorySkStream::getPosition() const { | |
| return codec_memory_->GetPosition(); | |
| } | |
| size_t CodecMemorySkStream::getLength() const { | |
| return codec_memory_->GetSize(); | |
| } | |
| bool CodecMemorySkStream::hasPosition() const { | |
| return true; | |
| } | |
| bool CodecMemorySkStream::hasLength() const { | |
| return true; | |
| } |