/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkStreamPriv_DEFINED #define SkStreamPriv_DEFINED #include "include/core/SkRefCnt.h" #include "include/core/SkStream.h" #include "src/base/SkEndian.h" #include <cstdint> class SkData; /** * Copy the provided stream to an SkData variable. * * Note: Assumes the stream is at the beginning. If it has a length, * but is not at the beginning, this call will fail (return NULL). * * @param stream SkStream to be copied into data. * @return The resulting SkData after the copy, nullptr on failure. */ sk_sp<SkData> SkCopyStreamToData(SkStream* stream); /** * Copies the input stream from the current position to the end. * Does not rewind the input stream. */ bool SkStreamCopy(SkWStream* out, SkStream* input); /** A SkWStream that writes all output to SkDebugf, for debugging purposes. */ class SkDebugfStream final : public SkWStream { … }; /** * Helper functions to write big-endian values to a stream. */ inline bool SkWStreamWriteU16BE(SkWStream* s, uint16_t value) { … } inline bool SkWStreamWriteU32BE(SkWStream* s, uint32_t value) { … } inline bool SkWStreamWriteS32BE(SkWStream* s, int32_t value) { … } // If the stream supports identifying the current position and total length, this returns // true if there are not enough bytes in the stream to fulfill a read of the given length. // Otherwise, it returns false. // False does *not* mean a read will succeed of the given length, but true means we are // certain it will fail. bool StreamRemainingLengthIsBelow(SkStream* stream, size_t len); #endif // SkStreamPriv_DEFINED