@@ -21,13 +21,23 @@ along with LiveCode. If not see <http://www.gnu.org/licenses/>. */
2121
2222// //////////////////////////////////////////////////////////////////////////////
2323
24- struct __MCStream
24+ struct __MCStreamImpl
2525{
2626 const MCStreamCallbacks *callbacks;
2727};
2828
2929MCTypeInfoRef kMCStreamTypeInfo ;
3030
31+ static inline __MCStreamImpl &__MCStreamGet (MCStreamRef p_stream)
32+ {
33+ return *(__MCStreamImpl*)MCValueGetExtraBytesPtr (p_stream);
34+ }
35+
36+ static inline const MCStreamCallbacks *__MCStreamCallbacks (MCStreamRef self)
37+ {
38+ return __MCStreamGet (self).callbacks ;
39+ }
40+
3141// //////////////////////////////////////////////////////////////////////////////
3242
3343struct __MCMemoryInputStream
@@ -254,9 +264,7 @@ bool MCMemoryOutputStreamFinish(MCStreamRef p_stream, void*& r_buffer, size_t& r
254264
255265static void __MCStreamDestroy (MCValueRef p_value)
256266{
257- __MCStream *self;
258- self = (__MCStream *)MCValueGetExtraBytesPtr (p_value);
259- self -> callbacks -> destroy (self);
267+ __MCStreamCallbacks ((MCStreamRef)p_value)->destroy ((MCStreamRef)p_value);
260268}
261269
262270static bool __MCStreamCopy (MCValueRef p_value, bool p_release, MCValueRef& r_value)
@@ -294,11 +302,11 @@ static MCValueCustomCallbacks kMCStreamCustomValueCallbacks =
294302
295303bool MCStreamCreate (const MCStreamCallbacks *p_callbacks, size_t p_extra_bytes, MCStreamRef& r_stream)
296304{
297- __MCStream * self;
298- if (!MCValueCreateCustom (kMCStreamTypeInfo , sizeof (__MCStream ) + p_extra_bytes, self))
305+ MCStreamRef self;
306+ if (!MCValueCreateCustom (kMCStreamTypeInfo , sizeof (__MCStreamImpl ) + p_extra_bytes, self))
299307 return false ;
300308
301- self -> callbacks = p_callbacks;
309+ __MCStreamGet ( self). callbacks = p_callbacks;
302310
303311 r_stream = self;
304312
@@ -307,71 +315,71 @@ bool MCStreamCreate(const MCStreamCallbacks *p_callbacks, size_t p_extra_bytes,
307315
308316const MCStreamCallbacks *MCStreamGetCallbacks (MCStreamRef self)
309317{
310- return self -> callbacks ;
318+ return __MCStreamCallbacks ( self) ;
311319}
312320
313321// //////////////////////////////////////////////////////////////////////////////
314322
315323bool MCStreamIsReadable (MCStreamRef self)
316324{
317- return self -> callbacks -> read != nil;
325+ return __MCStreamCallbacks ( self) -> read != nil;
318326}
319327
320328bool MCStreamIsWritable (MCStreamRef self)
321329{
322- return self -> callbacks -> write != nil;
330+ return __MCStreamCallbacks ( self) -> write != nil;
323331}
324332
325333bool MCStreamIsMarkable (MCStreamRef self)
326334{
327- return self -> callbacks -> mark != nil;
335+ return __MCStreamCallbacks ( self) -> mark != nil;
328336}
329337
330338bool MCStreamIsSeekable (MCStreamRef self)
331339{
332- return self -> callbacks -> seek != nil;
340+ return __MCStreamCallbacks ( self) -> seek != nil;
333341}
334342
335343// //////////////////////////////////////////////////////////////////////////////
336344
337345bool MCStreamGetAvailableForRead (MCStreamRef self, size_t & r_available)
338346{
339- if (self -> callbacks -> get_available_for_read == nil)
347+ if (__MCStreamCallbacks ( self) -> get_available_for_read == nil)
340348 return false ;
341- return self -> callbacks -> get_available_for_read (self, r_available);
349+ return __MCStreamCallbacks ( self) -> get_available_for_read (self, r_available);
342350}
343351
344352bool MCStreamRead (MCStreamRef self, void *p_buffer, size_t p_amount)
345353{
346- if (self -> callbacks -> read == nil)
354+ if (__MCStreamCallbacks ( self) -> read == nil)
347355 return false ;
348- return self -> callbacks -> read (self, p_buffer, p_amount);
356+ return __MCStreamCallbacks ( self) -> read (self, p_buffer, p_amount);
349357}
350358
351359bool MCStreamGetAvailableForWrite (MCStreamRef self, size_t & r_available)
352360{
353- if (self -> callbacks -> get_available_for_write == nil)
361+ if (__MCStreamCallbacks ( self) -> get_available_for_write == nil)
354362 return false ;
355- return self -> callbacks -> get_available_for_write (self, r_available);
363+ return __MCStreamCallbacks ( self) -> get_available_for_write (self, r_available);
356364}
357365
358366bool MCStreamWrite (MCStreamRef self, const void *p_buffer, size_t p_amount)
359367{
360- if (self -> callbacks -> write == nil)
368+ if (__MCStreamCallbacks ( self) -> write == nil)
361369 return false ;
362- return self -> callbacks -> write (self, p_buffer, p_amount);
370+ return __MCStreamCallbacks ( self) -> write (self, p_buffer, p_amount);
363371}
364372
365373bool MCStreamSkip (MCStreamRef self, size_t p_amount)
366374{
367- if (self -> callbacks -> skip != nil)
368- return self -> callbacks -> skip (self, p_amount);
369- if (self -> callbacks -> seek != nil)
375+ if (__MCStreamCallbacks ( self) -> skip != nil)
376+ return __MCStreamCallbacks ( self) -> skip (self, p_amount);
377+ if (__MCStreamCallbacks ( self) -> seek != nil)
370378 {
371379 filepos_t t_pos;
372- if (!self -> callbacks -> tell (self, t_pos))
380+ if (!__MCStreamCallbacks ( self) -> tell (self, t_pos))
373381 return false ;
374- return self -> callbacks -> seek (self, t_pos + p_amount);
382+ return __MCStreamCallbacks ( self) -> seek (self, t_pos + p_amount);
375383 }
376384 return false ;
377385}
@@ -380,32 +388,32 @@ bool MCStreamSkip(MCStreamRef self, size_t p_amount)
380388
381389bool MCStreamMark (MCStreamRef self, size_t p_read_limit)
382390{
383- if (self -> callbacks -> mark == nil)
391+ if (__MCStreamCallbacks ( self) -> mark == nil)
384392 return false ;
385- return self -> callbacks -> mark (self, p_read_limit);
393+ return __MCStreamCallbacks ( self) -> mark (self, p_read_limit);
386394}
387395
388396bool MCStreamReset (MCStreamRef self)
389397{
390- if (self -> callbacks -> reset == nil)
398+ if (__MCStreamCallbacks ( self) -> reset == nil)
391399 return false ;
392- return self -> callbacks -> reset (self);
400+ return __MCStreamCallbacks ( self) -> reset (self);
393401}
394402
395403// //////////////////////////////////////////////////////////////////////////////
396404
397405bool MCStreamTell (MCStreamRef self, filepos_t & r_position)
398406{
399- if (self -> callbacks -> tell == nil)
407+ if (__MCStreamCallbacks ( self) -> tell == nil)
400408 return false ;
401- return self -> callbacks -> tell (self, r_position);
409+ return __MCStreamCallbacks ( self) -> tell (self, r_position);
402410}
403411
404412bool MCStreamSeek (MCStreamRef self, filepos_t p_position)
405413{
406- if (self -> callbacks -> seek == nil)
414+ if (__MCStreamCallbacks ( self) -> seek == nil)
407415 return false ;
408- return self -> callbacks -> seek (self, p_position);
416+ return __MCStreamCallbacks ( self) -> seek (self, p_position);
409417}
410418
411419// //////////////////////////////////////////////////////////////////////////////
0 commit comments