8 #ifndef SkStream_DEFINED
9 #define SkStream_DEFINED
47 static std::unique_ptr<SkStreamAsset> MakeFromFile(
const char path[]);
56 virtual size_t read(
void* buffer,
size_t size) = 0;
62 return this->read(NULL, size);
78 virtual size_t peek(
void* ,
size_t )
const {
return 0; }
84 virtual bool isAtEnd()
const = 0;
90 uint8_t readU8() {
return (uint8_t)this->readS8(); }
91 uint16_t readU16() {
return (uint16_t)this->readS16(); }
92 uint32_t readU32() {
return (uint32_t)this->readS32(); }
94 bool readBool() {
return this->readU8() != 0; }
95 SkScalar readScalar();
96 size_t readPackedUInt();
119 virtual bool seek(
size_t ) {
return false; }
125 virtual bool move(
long ) {
return false; }
147 bool rewind()
override = 0;
158 bool seek(
size_t position)
override = 0;
159 bool move(
long offset)
override = 0;
191 virtual bool write(
const void* buffer,
size_t size) = 0;
192 virtual void flush();
194 virtual size_t bytesWritten()
const = 0;
198 bool write8(
U8CPU value) {
199 uint8_t v = SkToU8(value);
200 return this->write(&v, 1);
202 bool write16(
U16CPU value) {
203 uint16_t v = SkToU16(value);
204 return this->write(&v, 2);
206 bool write32(uint32_t v) {
207 return this->write(&v, 4);
210 bool writeText(
const char text[]) {
212 return this->write(text, strlen(text));
215 bool newline() {
return this->write(
"\n", strlen(
"\n")); }
217 bool writeDecAsText(int32_t);
218 bool writeBigDecAsText(int64_t,
int minDigits = 0);
219 bool writeHexAsText(uint32_t,
int minDigits = 0);
220 bool writeScalarAsText(SkScalar);
222 bool writeBool(
bool v) {
return this->write8(v); }
223 bool writeScalar(SkScalar);
224 bool writePackedUInt(
size_t);
226 bool writeStream(
SkStream* input,
size_t length);
232 static int SizeOfPackedUInt(
size_t value);
239 bool write(
const void*,
size_t n)
override { fBytesWritten += n;
return true; }
240 void flush()
override {}
241 size_t bytesWritten()
const override {
return fBytesWritten; }
244 size_t fBytesWritten;
267 bool isValid()
const {
return fFILE !=
nullptr; }
272 size_t read(
void* buffer,
size_t size)
override;
279 bool seek(
size_t position)
override;
280 bool move(
long offset)
override;
286 explicit SkFILEStream(std::shared_ptr<FILE>,
size_t size,
size_t offset);
287 explicit SkFILEStream(std::shared_ptr<FILE>,
size_t size,
size_t offset,
size_t originalOffset);
289 std::shared_ptr<FILE> fFILE;
293 size_t fOriginalOffset;
306 SkMemoryStream(
const void* data,
size_t length,
bool copyData =
false);
315 virtual void setMemory(
const void* data,
size_t length,
316 bool copyData =
false);
321 void setMemoryOwned(
const void* data,
size_t length);
327 const void* getAtPos();
329 size_t read(
void* buffer,
size_t size)
override;
332 size_t peek(
void* buffer,
size_t size)
const override;
338 bool seek(
size_t position)
override;
339 bool move(
long offset)
override;
362 bool isValid()
const {
return fFILE != NULL; }
364 bool write(
const void* buffer,
size_t size)
override;
365 void flush()
override;
367 size_t bytesWritten()
const override;
380 bool write(
const void* buffer,
size_t size)
override;
381 size_t bytesWritten()
const override;
383 bool read(
void* buffer,
size_t offset,
size_t size);
386 void copyTo(
void* dst)
const;
387 bool writeToStream(
SkWStream* dst)
const;
390 void copyToAndReset(
void* dst);
399 std::unique_ptr<SkStreamAsset> detachAsStream();
408 size_t fBytesWrittenBeforeTail;
411 void validate()
const;
413 void validate()
const {}
417 friend class SkBlockMemoryStream;
418 friend class SkBlockMemoryRefCnt;
SkStreamMemory * duplicate() const override=0
Duplicates this stream.
bool hasLength() const override
Returns true if this stream can report it's total length.
Definition: SkStream.h:169
Definition: SkStream.h:235
A stream that wraps a C FILE* file stream.
Definition: SkStream.h:252
virtual bool rewind()
Rewinds to the beginning of the stream.
Definition: SkStream.h:102
virtual SkStreamRewindable * duplicate() const
Duplicates this stream.
Definition: SkStream.h:107
SkStreamAsset is a SkStreamSeekable for which getLength is required.
Definition: SkStream.h:164
bool write(const void *, size_t n) override
Called to write bytes to a SkWStream.
Definition: SkStream.h:239
Definition: SkStream.h:375
SkStreamMemory is a SkStreamAsset for which getMemoryBase is required.
Definition: SkStream.h:174
SkStreamSeekable is a SkStreamRewindable for which position, seek, move, and fork are required...
Definition: SkStream.h:152
bool seek(size_t position) override=0
Seeks to an absolute position in the stream.
SkStreamSeekable * fork() const override=0
Duplicates this stream.
virtual SkStreamSeekable * fork() const
Duplicates this stream.
Definition: SkStream.h:130
virtual bool isAtEnd() const =0
Returns true when all the bytes in the stream have been read.
virtual bool seek(size_t)
Seeks to an absolute position in the stream.
Definition: SkStream.h:119
Definition: SkStream.h:355
unsigned U16CPU
Fast type for unsigned 16 bits.
Definition: SkTypes.h:203
bool isValid() const
Returns true if the current path could be opened.
Definition: SkStream.h:362
SkStreamSeekable * duplicate() const override=0
Duplicates this stream.
virtual bool move(long)
Seeks to an relative offset in the stream.
Definition: SkStream.h:125
bool rewind() override=0
Rewinds to the beginning of the stream.
SkStreamAsset * duplicate() const override=0
Duplicates this stream.
size_t getPosition() const override=0
Returns the current position in the stream.
const void * getMemoryBase() override=0
Returns the starting address for the data.
bool isValid() const
Returns true if the current path could be opened.
Definition: SkStream.h:267
Definition: SkStream.h:298
bool hasPosition() const override
Returns true if this stream can report it's current position.
Definition: SkStream.h:156
SkStreamMemory * fork() const override=0
Duplicates this stream.
SkStreamRewindable is a SkStream for which rewind and duplicate are required.
Definition: SkStream.h:145
size_t skip(size_t size)
Skip size number of bytes.
Definition: SkStream.h:61
SkStreamAsset * fork() const override=0
Duplicates this stream.
SkStream – abstraction for a source of bytes.
Definition: SkStream.h:40
virtual size_t peek(void *, size_t) const
Attempt to peek at size bytes.
Definition: SkStream.h:78
virtual const void * getMemoryBase()
Returns the starting address for the data.
Definition: SkStream.h:141
Definition: SkStream.h:182
virtual size_t getLength() const
Returns the total length of the stream.
Definition: SkStream.h:136
bool move(long offset) override=0
Seeks to an relative offset in the stream.
virtual size_t read(void *buffer, size_t size)=0
Reads or skips size number of bytes.
SkStreamRewindable * duplicate() const override=0
Duplicates this stream.
virtual bool hasLength() const
Returns true if this stream can report it's total length.
Definition: SkStream.h:134
virtual bool write(const void *buffer, size_t size)=0
Called to write bytes to a SkWStream.
virtual bool hasPosition() const
Returns true if this stream can report it's current position.
Definition: SkStream.h:111
size_t getLength() const override=0
Returns the total length of the stream.
unsigned U8CPU
Fast type for unsigned 8 bits.
Definition: SkTypes.h:191
virtual size_t getPosition() const
Returns the current position in the stream.
Definition: SkStream.h:113