
#include-once
#include <Array.au3>
#include 'objSortedList.au3'



;== Sortierte Liste erstellen
$oSL = _ObjSortedList_Create()


;== Schlüssel-Wertpaare hinzufügen
_ObjSortedList_AddPair($oSL, 'Tomate', 5)
_ObjSortedList_AddPair($oSL, 'Birne', 2)
_ObjSortedList_AddPair($oSL, 'Apfel', 3)
_ObjSortedList_AddPair($oSL, 'Zwetschke', 20)
_ObjSortedList_AddPair($oSL, 'Erdbeere', 10)


;== Anzahl Schlüssel-Wertpaare ausgeben
ConsoleWrite('Anzahl Paare: ' & _ObjSortedList_Count($oSL) & @CRLF & @CRLF)


;== alle Schlüssel-Wertpaare als Array(2D) ausgeben
$aList = _ObjSortedList_AsArray($oSL)
_ArrayDisplay($aList, 'Schlüssel-Wert Paare')


;== alle Schlüssel als Array(1D) ausgeben
$aList = _ObjSortedList_AsArray($oSL, 1)
_ArrayDisplay($aList, 'Schlüssel')


;== alle Werte als Array(1D) ausgeben
$aList = _ObjSortedList_AsArray($oSL, 2)
_ArrayDisplay($aList, 'Werte')


;== Wert für SchlüsselName ausgeben
ConsoleWrite('_GetValByKey(Apfel): ' & _ObjSortedList_GetValByKey($oSL, 'Apfel') & @CRLF & @CRLF)


;== Wert für Index ausgeben
ConsoleWrite('_GetValByIndex(4): ' & _ObjSortedList_GetValByIndex($oSL, 4) & @CRLF & @CRLF)


;== SchlüsselName für Index ausgeben
ConsoleWrite('Schlüsselname an Index(3): ' & _ObjSortedList_GetKeyByIndex($oSL, 3) & @CRLF & @CRLF)


;== Liste auf Schlüssel prüfen
ConsoleWrite('Schlüssel "Birne" enthalten? ' & _ObjSortedList_ContainsKey($oSL, 'Birne') & @CRLF)
ConsoleWrite('Schlüssel "Kohlrabi" enthalten? ' & _ObjSortedList_ContainsKey($oSL, 'Kohlrabi') & @CRLF & @CRLF)


;== Liste auf Werte prüfen
ConsoleWrite('Wert "10" enthalten? ' & _ObjSortedList_ContainsVal($oSL, 10) & @CRLF)
ConsoleWrite('Wert "17" enthalten? ' & _ObjSortedList_ContainsVal($oSL, 17) & @CRLF & @CRLF)


;== Wert über SchlüsselNamen ändern
_ObjSortedList_SetValByKey($oSL, 'Apfel', 6)
ConsoleWrite('neuer Wert "Apfel": ' & _ObjSortedList_GetValByKey($oSL, 'Apfel') & @CRLF & @CRLF)


;==Wert über Index ändern
_ObjSortedList_SetValByIndex($oSL, 1, 18)
ConsoleWrite('neuer Wert (1): ' & _ObjSortedList_GetValByIndex($oSL, 1) & @CRLF & @CRLF)


;== SchlüsselIndex abfragen
ConsoleWrite('Index(Erdbeere): ' & _ObjSortedList_GetIndexOfKey($oSL, 'Erdbeere') & @CRLF & @CRLF)


;== SchlüsselName ändern über Name
ConsoleWrite('vor Änderung(by Name): existiert "Erdbeere"? ' & _ObjSortedList_ContainsKey($oSL, 'Erdbeere') & @CRLF)
_ObjSortedList_RenameKeyByName($oSL, 'Erdbeere', 'Himbeere')
ConsoleWrite('nach Änderung: existiert "Erdbeere"? ' & _ObjSortedList_ContainsKey($oSL, 'Erdbeere') & @CRLF)
ConsoleWrite('nach Änderung: existiert "Himbeere"? ' & _ObjSortedList_ContainsKey($oSL, 'Himbeere') & @CRLF & @CRLF)


;== SchlüsselName ändern über Index
$oldKey = _ObjSortedList_GetKeyByIndex($oSL, 3)
ConsoleWrite('vor Änderung(by Index): Schlüssel an Index(3)? ' & $oldKey & @CRLF)
_ObjSortedList_RenameKeyByIndex($oSL, 3, 'Banane')
ConsoleWrite('nach Änderung: existiert "' & $oldKey & '"? ' & _ObjSortedList_ContainsKey($oSL, $oldKey) & @CRLF)
ConsoleWrite('nach Änderung: existiert "Banane"? ' & _ObjSortedList_ContainsKey($oSL, 'Banane') & @CRLF & @CRLF)


;== Eintrag nach Schlüsselnamen löschen und Speicher freigeben
ConsoleWrite('vor Löschen(by Name): existiert "Apfel"? ' & _ObjSortedList_ContainsKey($oSL, 'Apfel') & @CRLF)
_ObjSortedList_RemoveByKey($oSL, 'Apfel', True)
ConsoleWrite('nach Löschen: existiert "Apfel"? ' & _ObjSortedList_ContainsKey($oSL, 'Apfel') & @CRLF & @CRLF)


;== Eintrag nach Index löschen und Speicher nicht freigeben
$oldKey = _ObjSortedList_GetKeyByIndex($oSL, 0)
ConsoleWrite('vor Löschen(by Index): Schlüssel an Index(0)? ' & $oldKey & @CRLF)
_ObjSortedList_RemoveByIndex($oSL, 0)
ConsoleWrite('nach Löschen: existiert "' & $oldKey & '"? ' & _ObjSortedList_ContainsKey($oSL, $oldKey) & @CRLF & @CRLF)


;== Klon der Liste erstellen und als Array ausgeben
$oClone = _ObjSortedList_Clone($oSL)
$aList = _ObjSortedList_AsArray($oClone)
_ArrayDisplay($aList, 'Schlüssel-Wert Paare')


;== Inhalt Ursprungsliste leeren (Liste bleibt als Objekt erhalten)
_ObjSortedList_Clear($oSL)
ConsoleWrite('Anzahl nach Löschen Liste: ' & _ObjSortedList_Count($oSL) & @CRLF & @CRLF)


;== Array mit Schlüssel-Wertpaaren erstellen
;== Schlüssel müssen EINMALIG sein, doppelte(mehrfache) Schlüssel werden ignoriert
;== Indexwerte mehrfacher Schlüssel werden zurückgegeben
Local $a[7][2] = [['Tomate',5],['Birne',2],['Tomate',5],['Apfel',3],['Zwetschke',20],['Erdbeere',20],['Apfel',5]]
Local $ret = _ObjSortedList_AddArray($oSL, $a)
If @error = 3 Then ConsoleWrite('Mehrfach-Schlüssel im Quell-Array an Index: ' & $ret & @CRLF)
$aList = _ObjSortedList_AsArray($oSL)
_ArrayDisplay($aList, 'gefüllt aus Array')


;== Ausgabe Index ($a[n][0]), Schlüsselname ($a[n][1]) eines bestimmten Wertes
;== Anzahl gleicher Werte in ($a[0][0]), Wert in ($a[0][1])
$aSameVal = _ObjSortedList_GetKeyByVal($oSL, 20)
_ArrayDisplay($aSameVal, 'gleiche Werte')


If MsgBox(262180,"Test INI","Das Bsp.-Skript erzeugt jetzt die Datei:" & @CRLF & _
	@ScriptDir & '\Test.ini' & @CRLF & "Soll die Datei erstellt werden?") = 6 Then

	;== SortedList in INI speichern
	_ObjSortedList_WriteToIni($oSL, @ScriptDir & '\Test.ini', 'SortedList')
	If @error Then
		ConsoleWrite('Schreiben in INI fehlgeschlagen.' & @CRLF)
	Else
		ConsoleWrite('Schreiben in INI erfolgreich.' & @CRLF)

	;== SortedList aus INI erstellen
		$oFromINI = _ObjSortedList_ReadFromIni(@ScriptDir & '\Test.ini', 'SortedList')
		$aList = _ObjSortedList_AsArray($oFromINI)
		_ArrayDisplay($aList, 'erstellt aus INI')
	EndIf

EndIf


If MsgBox(262180,"Test FILE","Das Bsp.-Skript erzeugt jetzt die Datei:" & @CRLF & _
	@ScriptDir & '\TestSort.lst' & @CRLF & "Soll die Datei erstellt werden?") = 6 Then

	;== SortedList in Textdatei speichern (je Zeile: SCHLÜSSEL DELIMITER WERT @CRLF)
	_ObjSortedList_WriteToFile($oSL, @ScriptDir & '\TestSort.lst')
	If @error Then
		ConsoleWrite('Schreiben in FILE fehlgeschlagen.' & @CRLF)
	Else
		ConsoleWrite('Schreiben in FILE erfolgreich.' & @CRLF)

	;== SortedList aus FILE erstellen
		$oFromFile = _ObjSortedList_ReadFromFile(@ScriptDir & '\TestSort.lst')
		$aList = _ObjSortedList_AsArray($oFromFile)
		_ArrayDisplay($aList, 'erstellt aus FILE')
	EndIf

EndIf


