2 * Copyright 2015 Xamarin Inc.
3 * Copyright 2017 Microsoft Corporation. All rights reserved.
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
9 #ifndef SkManagedStream_h
10 #define SkManagedStream_h
16 class SkManagedWStream;
17 class SkManagedStream;
19 // delegate declarations
20 typedef size_t (*read_delegate) (SkManagedStream* managedStream, void* buffer, size_t size);
21 typedef size_t (*peek_delegate) (SkManagedStream* managedStream, void* buffer, size_t size);
22 typedef bool (*isAtEnd_delegate) (const SkManagedStream* managedStream);
23 typedef bool (*hasPosition_delegate) (const SkManagedStream* managedStream);
24 typedef bool (*hasLength_delegate) (const SkManagedStream* managedStream);
25 typedef bool (*rewind_delegate) (SkManagedStream* managedStream);
26 typedef size_t (*getPosition_delegate) (const SkManagedStream* managedStream);
27 typedef bool (*seek_delegate) (SkManagedStream* managedStream, size_t position);
28 typedef bool (*move_delegate) (SkManagedStream* managedStream, long offset);
29 typedef size_t (*getLength_delegate) (const SkManagedStream* managedStream);
30 typedef SkManagedStream* (*createNew_delegate) (const SkManagedStream* managedStream);
31 typedef void (*destroy_delegate) (size_t managedStream);
33 // delegate declarations
34 typedef bool (*write_delegate) (SkManagedWStream* managedStream, const void* buffer, size_t size);
35 typedef void (*flush_delegate) (SkManagedWStream* managedStream);
36 typedef size_t (*bytesWritten_delegate) (const SkManagedWStream* managedStream);
37 typedef void (*wdestroy_delegate) (size_t managedStream);
40 // managed stream wrapper
41 class SkManagedStream : public SkStreamAsset {
45 virtual ~SkManagedStream();
47 static void setDelegates(const read_delegate pRead,
48 const peek_delegate pPeek,
49 const isAtEnd_delegate pIsAtEnd,
50 const hasPosition_delegate pHasPosition,
51 const hasLength_delegate pHasLength,
52 const rewind_delegate pRewind,
53 const getPosition_delegate pGetPosition,
54 const seek_delegate pSeek,
55 const move_delegate pMove,
56 const getLength_delegate pGetLength,
57 const createNew_delegate pCreateNew,
58 const destroy_delegate pDestroy);
60 size_t read(void* buffer, size_t size) override;
61 bool isAtEnd() const override;
62 bool hasPosition() const override;
63 bool hasLength() const override;
65 size_t peek(void* buffer, size_t size) const override;
67 bool rewind() override;
68 SkManagedStream* duplicate() const override;
70 size_t getPosition() const override;
71 bool seek(size_t position) override;
72 bool move(long offset) override;
73 SkManagedStream* fork() const override;
75 size_t getLength() const override;
80 typedef SkStreamAsset INHERITED;
84 // managed wstream wrapper
85 class SkManagedWStream : public SkWStream {
89 virtual ~SkManagedWStream();
91 static void setDelegates(const write_delegate pWrite,
92 const flush_delegate pFlush,
93 const bytesWritten_delegate pBytesWritten,
94 const wdestroy_delegate pDestroy);
96 bool write(const void* buffer, size_t size) override;
97 void flush() override;
98 size_t bytesWritten() const override;
103 typedef SkWStream INHERITED;