| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- Strict
- Rem
- bbdoc: Streams/Ram streams
- End Rem
- Module BRL.RamStream
- ModuleInfo "Version: 1.01"
- ModuleInfo "Author: Mark Sibly"
- ModuleInfo "License: zlib/libpng"
- ModuleInfo "Copyright: Blitz Research Ltd"
- ModuleInfo "Modserver: BRL"
- Import BRL.Stream
- Type TRamStream Extends TStream
- Field _pos,_size,_buf:Byte Ptr,_read,_write
- Method Pos()
- Return _pos
- End Method
- Method Size()
- Return _size
- End Method
- Method Seek( pos )
- If pos<0 pos=0 Else If pos>_size pos=_size
- _pos=pos
- Return _pos
- End Method
- Method Read( buf:Byte Ptr,count )
- If count<=0 Or _read=False Return 0
- If _pos+count>_size count=_size-_pos
- MemCopy buf,_buf+_pos,count
- _pos:+count
- Return count
- End Method
- Method Write( buf:Byte Ptr,count )
- If count<=0 Or _write=False Return 0
- If _pos+count>_size count=_size-_pos
- MemCopy _buf+_pos,buf,count
- _pos:+count
- Return count
- End Method
- Function Create:TRamStream( buf:Byte Ptr,size,readable,writeable )
- Local stream:TRamStream=New TRamStream
- stream._pos=0
- stream._size=size
- stream._buf=buf
- stream._read=readable
- stream._write=writeable
- Return stream
- End Function
- End Type
- Rem
- bbdoc: Create a ram stream
- returns: A ram stream object
- about: A ram stream allows you to read and/or write data directly from/to memory.
- A ram stream extends a stream object so can be used anywhere a stream is expected.
- Be careful when working with ram streams, as any attempt to access memory
- which has not been allocated to your application can result in a runtime crash.
- End Rem
- Function CreateRamStream:TRamStream( ram:Byte Ptr,size,readable,writeable )
- Return TRamStream.Create( ram,size,readable,writeable )
- End Function
- Type TRamStreamFactory Extends TStreamFactory
- Method CreateStream:TRamStream( url:Object,proto$,path$,readable,writeable )
- If proto="incbin" And writeable=False
- Local buf:Byte Ptr=IncbinPtr( path )
- If Not buf Return
- Local size=IncbinLen( path )
- Return TRamStream.Create( buf,size,readable,writeable )
- EndIf
- End Method
- End Type
- New TRamStreamFactory
|