Updating Xamarin/Microsoft file headers
[platform/upstream/libSkiaSharp.git] / include / xamarin / SkManagedStream.h
1 /*
2  * Copyright 2015 Xamarin Inc.
3  * Copyright 2017 Microsoft Corporation. All rights reserved.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8
9 #ifndef SkManagedStream_h
10 #define SkManagedStream_h
11
12 #include "SkTypes.h"
13 #include "SkStream.h"
14
15
16 class SkManagedWStream;
17 class SkManagedStream;
18
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);
32
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);
38
39
40 // managed stream wrapper
41 class SkManagedStream : public SkStreamAsset {
42 public:
43     SkManagedStream();
44     
45     virtual ~SkManagedStream();
46
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);
59     
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;
64     
65     size_t peek(void* buffer, size_t size) const override;
66     
67     bool rewind() override;
68     SkManagedStream* duplicate() const override;
69     
70     size_t getPosition() const override;
71     bool seek(size_t position) override;
72     bool move(long offset) override;
73     SkManagedStream* fork() const override;
74     
75     size_t getLength() const override;
76     
77 private:
78     size_t address;
79
80     typedef SkStreamAsset INHERITED;
81 };
82
83
84 // managed wstream wrapper
85 class SkManagedWStream : public SkWStream {
86 public:
87     SkManagedWStream();
88
89     virtual ~SkManagedWStream();
90
91     static void setDelegates(const write_delegate pWrite,
92                              const flush_delegate pFlush,
93                              const bytesWritten_delegate pBytesWritten,
94                              const wdestroy_delegate pDestroy);
95     
96     bool write(const void* buffer, size_t size) override;
97     void flush() override;
98     size_t bytesWritten() const override;
99     
100 private:
101     size_t address;
102     
103     typedef SkWStream INHERITED;
104 };
105
106
107 #endif