STREAMLib, muistipalajotain

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

STREAMLib, muistipalajotain

Post by esa94 »

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!

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
Post Reply