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, offset) > 0;
27 }
28 bool WriteBlock(pdfium::span<const uint8_t> buffer) override {
29 if (m_pFile->SetPosition(GetSize()) == static_cast<FX_FILESIZE>(-1)) {
30 return false;
31 }
32 return !!m_pFile->Write(buffer);
33 }
34 bool Flush() override { return m_pFile->Flush(); }
35
36 private:
37 explicit CFX_CRTFileStream(std::unique_ptr<FileAccessIface> pFA)
38 : m_pFile(std::move(pFA)) {}
39 ~CFX_CRTFileStream() override = default;
40
41 std::unique_ptr<FileAccessIface> m_pFile;
42};
43
44} // namespace
45
47 return WriteBlock(str.unsigned_span());
48}
49
50bool IFX_WriteStream::WriteByte(uint8_t byte) {
51 return WriteBlock(pdfium::byte_span_from_ref(byte));
52}
53
54bool IFX_WriteStream::WriteDWord(uint32_t i) {
55 char buf[20] = {};
56 FXSYS_itoa(i, buf, 10);
57 auto buf_span = pdfium::as_byte_span(buf);
58 return WriteBlock(buf_span.first(strlen(buf)));
59}
60
62 char buf[20] = {};
63 FXSYS_i64toa(size, buf, 10);
64 return WriteBlock(pdfium::as_writable_byte_span(buf).first(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
77 return false;
78}
79
static RetainPtr< IFX_SeekableReadStream > CreateFromFilename(const char *filename)
Definition fx_stream.cpp:68
virtual FX_FILESIZE GetPosition()
Definition fx_stream.cpp:80
virtual bool IsEOF()
Definition fx_stream.cpp:76
bool WriteFilesize(FX_FILESIZE size)
Definition fx_stream.cpp:61
bool WriteByte(uint8_t byte)
Definition fx_stream.cpp:50
bool WriteString(ByteStringView str)
Definition fx_stream.cpp:46
bool WriteDWord(uint32_t i)
Definition fx_stream.cpp:54
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:222
fxcrt::ByteStringView ByteStringView