Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
fx_stream.cpp
Go to the documentation of this file.
1// Copyright 2017 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "core/fxcrt/fx_stream.h"
8
9#include <memory>
10#include <utility>
11
12#include "core/fxcrt/fileaccess_iface.h"
13
14namespace {
15
16class CFX_CRTFileStream final : public IFX_SeekableStream {
17 public:
19
20 // IFX_SeekableStream:
21 FX_FILESIZE GetSize() override { return m_pFile->GetSize(); }
22 bool IsEOF() override { return GetPosition() >= GetSize(); }
23 FX_FILESIZE GetPosition() override { return m_pFile->GetPosition(); }
24 bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer,
25 FX_FILESIZE offset) override {
26 return m_pFile->ReadPos(buffer.data(), buffer.size(), offset) > 0;
27 }
28 size_t ReadBlock(pdfium::span<uint8_t> buffer) override {
29 return m_pFile->Read(buffer.data(), buffer.size());
30 }
31 bool WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
32 FX_FILESIZE offset) override {
33 return !!m_pFile->WritePos(buffer.data(), buffer.size(), offset);
34 }
35 bool Flush() override { return m_pFile->Flush(); }
36
37 private:
38 explicit CFX_CRTFileStream(std::unique_ptr<FileAccessIface> pFA)
39 : m_pFile(std::move(pFA)) {}
40 ~CFX_CRTFileStream() override = default;
41
42 std::unique_ptr<FileAccessIface> m_pFile;
43};
44
45} // namespace
46
47bool IFX_WriteStream::WriteString(ByteStringView str) {
48 return WriteBlock(str.raw_span());
49}
50
51bool IFX_WriteStream::WriteByte(uint8_t byte) {
52 return WriteBlock({&byte, 1u});
53}
54
55bool IFX_WriteStream::WriteDWord(uint32_t i) {
56 char buf[20] = {};
57 FXSYS_itoa(i, buf, 10);
58 return WriteBlock({reinterpret_cast<uint8_t*>(buf), strlen(buf)});
59}
60
62 char buf[20] = {};
63 FXSYS_i64toa(size, buf, 10);
64 return WriteBlock({reinterpret_cast<uint8_t*>(buf), strlen(buf)});
65}
66
67// static
69 const char* filename) {
70 std::unique_ptr<FileAccessIface> pFA = FileAccessIface::Create();
71 if (!pFA->Open(filename))
72 return nullptr;
73 return pdfium::MakeRetain<CFX_CRTFileStream>(std::move(pFA));
74}
75
76bool IFX_SeekableWriteStream::WriteBlock(pdfium::span<const uint8_t> buffer) {
78}
79
81 return false;
82}
83
87
88size_t IFX_SeekableReadStream::ReadBlock(pdfium::span<uint8_t> buffer) {
89 return 0;
90}
91
92bool IFX_SeekableStream::WriteBlock(pdfium::span<const uint8_t> buffer) {
94}
static RetainPtr< IFX_SeekableReadStream > CreateFromFilename(const char *filename)
Definition fx_stream.cpp:68
virtual size_t ReadBlock(pdfium::span< uint8_t > buffer)
Definition fx_stream.cpp:88
virtual FX_FILESIZE GetPosition()
Definition fx_stream.cpp:84
virtual bool IsEOF()
Definition fx_stream.cpp:80
bool WriteBlock(pdfium::span< const uint8_t > buffer) override
Definition fx_stream.cpp:92
virtual bool WriteBlockAtOffset(pdfium::span< const uint8_t > data, FX_FILESIZE offset)=0
bool WriteBlock(pdfium::span< const uint8_t > buffer) override
Definition fx_stream.cpp:76
virtual FX_FILESIZE GetSize()=0
bool WriteFilesize(FX_FILESIZE size)
Definition fx_stream.cpp:61
bool WriteByte(uint8_t byte)
Definition fx_stream.cpp:51
bool WriteString(ByteStringView str)
Definition fx_stream.cpp:47
bool WriteDWord(uint32_t i)
Definition fx_stream.cpp:55
virtual bool WriteBlock(pdfium::span< const uint8_t > data)=0
const char * FXSYS_i64toa(int64_t value, char *str, int radix)
char * FXSYS_itoa(int value, char *str, int radix)
#define FX_FILESIZE
Definition fx_types.h:19
#define CONSTRUCT_VIA_MAKE_RETAIN
Definition retain_ptr.h:224