STREAMLib, muistipalajotain
Posted: Thu Jan 22, 2009 3:15 pm
Elikkäs-pelikkäs päätin tänään viimeistellä tällaisen pienen koodinpätkän, jolla on helppo(ko) käsitellä muistipaloja. Itse asiassa niihin ei tarvitse itse edes koskea, vaan voi suoraan käyttää kahda wrapperifunkkaria. Huonona puolena taas on se, että ne vaativat sisääntulokseen ConvertToIntegerillä muunnetun typen.
Ketut tästä hyötyä on mutta väliäkös sillä. Koodissa ei ole esimerkkiä, pähkäilkää itse jotain.
Ai niin jumankauta, lukekaa se koodi läpi ja muistakaa käyttää InitStream( _streamType )-funktiota. Muuten ei edes toimi!
Ketut tästä hyötyä on mutta väliäkös sillä. Koodissa ei ole esimerkkiä, pähkäilkää itse jotain.
Ai niin jumankauta, lukekaa se koodi läpi ja muistakaa käyttää InitStream( _streamType )-funktiota. Muuten ei edes toimi!
Code: Select all
//LibSTREAM by Esa94
//(c) Esa Lakaniemi 2008 ->
//Mainitsethan minut jos käytät :P
REMSTART
--HUOMIOHUOMIOHUOMIOHUOMIOHUOMIOHUOMIO--
--HUOMIOHUOMIOHUOMIOHUOMIOHUOMIOHUOMIO--
REMEND
Const TESTING = 1 //MUUTA TÄMÄ ENSIN!
REMSTART
--HUOMIOHUOMIOHUOMIOHUOMIOHUOMIOHUOMIO--
--HUOMIOHUOMIOHUOMIOHUOMIOHUOMIOHUOMIO--
REMEND
//Kommentti kertoo lukualueen, jonka voi tallentaa
//kyseisen kokoiseen palaan!!
Const IntSize = 4 //-2147483647 - 2147483647
Const ShortSize = 2 //0 - 65536
Const CharSize = 1 //0-255
Type STREAM
Field name As String
Field id As Byte //Byte, emme tarvitse yli 255 ID:tä :D
Field buffer As Integer //Pakko olla integer, muuten ei mahdu
Field bufsize As Byte //Et varmaankaan varaa yli 255 tavua muistia...
End Type
basic.STREAM = New( STREAM )
basic\name = "Basic stream"
basic\id = 0 //0 riittää, id muutetaan InitStream-funktiolla
basic\bufsize = IntSize //Tähän bufferin koko!
//Bufferin koolla tullaan pian alustamaan streamin muisti!
InitStream( ConvertToInteger( basic ) ) //Noin :D
If TESTING Then
AddText basic\name
AddText Str( basic\id )
AddText Str( PeekInt( basic\buffer, 0) )
AddText Str( basic\bufsize )
PokeInt basic\buffer, 0, 352353
AddText basic\name
AddText Str( basic\id )
AddText Str( PeekInt( basic\buffer, 0) )
AddText Str( basic\bufsize )
DrawScreen
WaitKey
End
EndIf
Function InitStream( _streamType ) //Alusta aina streami!
rtn.STREAM = ConvertToType( _streamType )
rtn\buffer = MakeMEMBlock( rtn\bufsize )
If ( First( STREAM ) = NULL ) Then Return 0
If ( Before( rtn ) = NULL ) Then Return 0
tmp.STREAM = Before( rtn )
rtn\id = tmp\id + 1
EndFunction
Function StreamOut( _streamType, _debug = 0 )
rtn.STREAM = ConvertToType( _streamType )
If _debug = 1 Then Print( rtn\name )
Select rtn\bufsize
Case 1
Return PeekByte( rtn\buffer, 0 )
Case 2
Return PeekShort( rtn\buffer, 0 )
Case 4
Return PeekInt( rtn\buffer, 0 )
Default
MakeError( "INVALID BUFFER SIZE OR STREAM NOT INITIALIZED!" )
EndSelect
EndFunction
Function StreamIn( _streamType, _value, _debug = 0 )
rtn.STREAM = ConvertToType( _streamType )
If _debug = 1 Then Print( rtn\name )
Select rtn\bufsize
Case 1
PokeByte rtn\buffer, 0, _value
Case 2
PokeShort rtn\buffer, 0, _value
Case 4
PokeInt rtn\buffer, 0, _value
Default
MakeError( "INVALID BUFFER SIZE OR STREAM NOT INITIALIZED!" )
EndSelect
EndFunction