Extended Save/LoadState

Monkey Forums/Monkey Code/Extended Save/LoadState

Hezkore(Posted 2014) [#1]
I've made a simple module that I'd like to share with everyone.
It allows you to input a key and a value when saving and loading state, great for when you want to store lots of different information.
You can also remove an old key and its value.
Kinda works like TMap from BlitzMax!

This should work on all targets, but I've heard that some targets have a limitation on the state size.

extstate.monkey:
Strict
Import mojo.app

Global stateString:String
Global workString:String
Global startChar:String = "<"
Global endChar:String = ">"

Function SaveStateExt:Void(key:String, value:String)
	key = key.ToLower()
	stateString = LoadState()
	
	If stateString.Contains(key + startChar) Then
		workString = stateString.Split(key + startChar)[1]
		If workString.Contains(endChar) Then workString = workString.Split(endChar)[0] Else Return
		
		stateString = stateString.Replace(key + startChar + workString + endChar, key + startChar + value + endChar)
	Else
		stateString += key + startChar + value + endChar
	EndIf
	
	SaveState(stateString)
End

Function LoadStateExt:String(key:String)
	key = key.ToLower()
	stateString = LoadState()
	
	If stateString.Contains(key + startChar) Then
		workString = stateString.Split(key + startChar)[1]
		If workString.Contains(endChar) Then workString = workString.Split(endChar)[0] Else Return ""
		
		Return workString
	Else
		Return ""
	EndIf
End

Function RemoveStateExt:Bool(key:String)
	key = key.ToLower()
	stateString = LoadState()
	
	If stateString.Contains(key + startChar) Then
		workString = stateString.Split(key + startChar)[1]
		If workString.Contains(endChar) Then workString = workString.Split(endChar)[0] Else Return False
		
		stateString = stateString.Replace(key + startChar + workString + endChar, "")
		
		SaveState(stateString)
		Return True
	Else
		Return False
	EndIf
End


example.monkey:
Strict
Import mojo
Import extstate

Function Main:Int()
	New Game
	Return 0
End

Class Game Extends App
	Method OnCreate:Int()
		'Clear the state
		SaveState("")
		
		'Input some junk
		SaveStateExt("Test1", "This is test 1")
		SaveStateExt("Test2", "BLARG")
		SaveStateExt("Test3", "Test 3 here!")
		SaveStateExt("Test4", "Forth test")
		SaveStateExt("Test5", "And the final 5th test!! :D")
		
		'Replace test 2
		SaveStateExt("test2", "And this is test 2")
		
		'Remove test 5
		RemoveStateExt("test5")
		
		'Print our junk!
		Print LoadStateExt("tEsT2")
		Print LoadStateExt("tEsT5")
		
		Return 0
	End
End