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 #include "SkManagedStream.h"
11 #include "sk_managedstream.h"
12 #include "sk_types_priv.h"
15 static sk_managedwstream_write_delegate gWrite;
16 static sk_managedwstream_flush_delegate gFlush;
17 static sk_managedwstream_bytesWritten_delegate gBytesWritten;
18 static sk_managedwstream_destroy_delegate gWDestroy;
20 static inline SkManagedWStream* AsManagedWStream(sk_wstream_managedstream_t* cstream) {
21 return reinterpret_cast<SkManagedWStream*>(cstream);
23 static inline sk_wstream_managedstream_t* ToManagedWStream(SkManagedWStream* stream) {
24 return reinterpret_cast<sk_wstream_managedstream_t*>(stream);
26 static inline const sk_wstream_managedstream_t* ToManagedWStream(const SkManagedWStream* stream) {
27 return reinterpret_cast<const sk_wstream_managedstream_t*>(stream);
30 bool dWrite(SkManagedWStream* managedStream, const void* buffer, size_t size)
32 return gWrite(ToManagedWStream(managedStream), buffer, size);
34 void dFlush(SkManagedWStream* managedStream)
36 gFlush(ToManagedWStream(managedStream));
38 size_t dBytesWritten(const SkManagedWStream* managedStream)
40 return gBytesWritten(ToManagedWStream(managedStream));
42 void dWDestroy(size_t managedStream)
44 gWDestroy(managedStream);
47 sk_wstream_managedstream_t* sk_managedwstream_new()
49 return ToManagedWStream(new SkManagedWStream());
52 void sk_managedwstream_destroy(sk_wstream_managedstream_t* stream)
54 delete AsManagedWStream(stream);
57 void sk_managedwstream_set_delegates(const sk_managedwstream_write_delegate pWrite,
58 const sk_managedwstream_flush_delegate pFlush,
59 const sk_managedwstream_bytesWritten_delegate pBytesWritten,
60 const sk_managedwstream_destroy_delegate pDestroy)
64 gBytesWritten = pBytesWritten;
67 SkManagedWStream::setDelegates(dWrite, dFlush, dBytesWritten, dWDestroy);
71 static sk_managedstream_read_delegate gRead;
72 static sk_managedstream_peek_delegate gPeek;
73 static sk_managedstream_isAtEnd_delegate gIsAtEnd;
74 static sk_managedstream_hasPosition_delegate gHasPosition;
75 static sk_managedstream_hasLength_delegate gHasLength;
76 static sk_managedstream_rewind_delegate gRewind;
77 static sk_managedstream_getPosition_delegate gGetPosition;
78 static sk_managedstream_seek_delegate gSeek;
79 static sk_managedstream_move_delegate gMove;
80 static sk_managedstream_getLength_delegate gGetLength;
81 static sk_managedstream_createNew_delegate gCreateNew;
82 static sk_managedstream_destroy_delegate gDestroy;
85 static inline SkManagedStream* AsManagedStream(sk_stream_managedstream_t* cstream) {
86 return reinterpret_cast<SkManagedStream*>(cstream);
88 static inline sk_stream_managedstream_t* ToManagedStream(SkManagedStream* stream) {
89 return reinterpret_cast<sk_stream_managedstream_t*>(stream);
91 static inline const sk_stream_managedstream_t* ToManagedStream(const SkManagedStream* stream) {
92 return reinterpret_cast<const sk_stream_managedstream_t*>(stream);
96 size_t dRead(SkManagedStream* managedStream, void* buffer, size_t size)
98 return gRead(ToManagedStream(managedStream), buffer, size);
100 size_t dPeek(SkManagedStream* managedStream, void* buffer, size_t size)
102 return gPeek(ToManagedStream(managedStream), buffer, size);
104 bool dIsAtEnd(const SkManagedStream* managedStream)
106 return gIsAtEnd(ToManagedStream(managedStream));
108 bool dHasPosition(const SkManagedStream* managedStream)
110 return gHasPosition(ToManagedStream(managedStream));
112 bool dHasLength(const SkManagedStream* managedStream)
114 return gHasLength(ToManagedStream(managedStream));
116 bool dRewind(SkManagedStream* managedStream)
118 return gRewind(ToManagedStream(managedStream));
120 size_t dGetPosition(const SkManagedStream* managedStream)
122 return gGetPosition(ToManagedStream(managedStream));
124 bool dSeek(SkManagedStream* managedStream, size_t position)
126 return gSeek(ToManagedStream(managedStream), position);
128 bool dMove(SkManagedStream* managedStream, long offset)
130 return gMove(ToManagedStream(managedStream), offset);
132 size_t dGetLength(const SkManagedStream* managedStream)
134 return gGetLength(ToManagedStream(managedStream));
136 SkManagedStream* dCreateNew(const SkManagedStream* managedStream)
138 return AsManagedStream(gCreateNew(ToManagedStream(managedStream)));
140 void dDestroy(size_t managedStream)
142 gDestroy(managedStream);
146 sk_stream_managedstream_t* sk_managedstream_new ()
148 return ToManagedStream (new SkManagedStream ());
151 void sk_managedstream_destroy (sk_stream_managedstream_t* stream)
153 delete AsManagedStream (stream);
156 void sk_managedstream_set_delegates (const sk_managedstream_read_delegate pRead,
157 const sk_managedstream_peek_delegate pPeek,
158 const sk_managedstream_isAtEnd_delegate pIsAtEnd,
159 const sk_managedstream_hasPosition_delegate pHasPosition,
160 const sk_managedstream_hasLength_delegate pHasLength,
161 const sk_managedstream_rewind_delegate pRewind,
162 const sk_managedstream_getPosition_delegate pGetPosition,
163 const sk_managedstream_seek_delegate pSeek,
164 const sk_managedstream_move_delegate pMove,
165 const sk_managedstream_getLength_delegate pGetLength,
166 const sk_managedstream_createNew_delegate pCreateNew,
167 const sk_managedstream_destroy_delegate pDestroy)
172 gHasPosition = pHasPosition;
173 gHasLength = pHasLength;
175 gGetPosition = pGetPosition;
178 gGetLength = pGetLength;
179 gCreateNew = pCreateNew;
182 SkManagedStream::setDelegates(dRead, dPeek, dIsAtEnd, dHasPosition, dHasLength, dRewind, dGetPosition, dSeek, dMove, dGetLength, dCreateNew, dDestroy);