ramstream.bmx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. Strict
  2. Rem
  3. bbdoc: Streams/Ram streams
  4. End Rem
  5. Module BRL.RamStream
  6. ModuleInfo "Version: 1.01"
  7. ModuleInfo "Author: Mark Sibly"
  8. ModuleInfo "License: zlib/libpng"
  9. ModuleInfo "Copyright: Blitz Research Ltd"
  10. ModuleInfo "Modserver: BRL"
  11. Import BRL.Stream
  12. Type TRamStream Extends TStream
  13. Field _pos,_size,_buf:Byte Ptr,_read,_write
  14. Method Pos()
  15. Return _pos
  16. End Method
  17. Method Size()
  18. Return _size
  19. End Method
  20. Method Seek( pos )
  21. If pos<0 pos=0 Else If pos>_size pos=_size
  22. _pos=pos
  23. Return _pos
  24. End Method
  25. Method Read( buf:Byte Ptr,count )
  26. If count<=0 Or _read=False Return 0
  27. If _pos+count>_size count=_size-_pos
  28. MemCopy buf,_buf+_pos,count
  29. _pos:+count
  30. Return count
  31. End Method
  32. Method Write( buf:Byte Ptr,count )
  33. If count<=0 Or _write=False Return 0
  34. If _pos+count>_size count=_size-_pos
  35. MemCopy _buf+_pos,buf,count
  36. _pos:+count
  37. Return count
  38. End Method
  39. Function Create:TRamStream( buf:Byte Ptr,size,readable,writeable )
  40. Local stream:TRamStream=New TRamStream
  41. stream._pos=0
  42. stream._size=size
  43. stream._buf=buf
  44. stream._read=readable
  45. stream._write=writeable
  46. Return stream
  47. End Function
  48. End Type
  49. Rem
  50. bbdoc: Create a ram stream
  51. returns: A ram stream object
  52. about: A ram stream allows you to read and/or write data directly from/to memory.
  53. A ram stream extends a stream object so can be used anywhere a stream is expected.
  54. Be careful when working with ram streams, as any attempt to access memory
  55. which has not been allocated to your application can result in a runtime crash.
  56. End Rem
  57. Function CreateRamStream:TRamStream( ram:Byte Ptr,size,readable,writeable )
  58. Return TRamStream.Create( ram,size,readable,writeable )
  59. End Function
  60. Type TRamStreamFactory Extends TStreamFactory
  61. Method CreateStream:TRamStream( url:Object,proto$,path$,readable,writeable )
  62. If proto="incbin" And writeable=False
  63. Local buf:Byte Ptr=IncbinPtr( path )
  64. If Not buf Return
  65. Local size=IncbinLen( path )
  66. Return TRamStream.Create( buf,size,readable,writeable )
  67. EndIf
  68. End Method
  69. End Type
  70. New TRamStreamFactory