IO.pbi (IO - Interface) V # 0.3 (+ CHM Help File)
Verfasst: 01.04.2013 00:07
Servus.
IO.pbi bietet ein abstraktes Interface für verschiedene IO - Schnittstellen (am häufigsten: File). Dabei gibts es einige Methoden die jede Implementierung enthalten muss und optionale Methoden.
Bereits implementiert sind:
Write() und Read() sollten klar sein, IsAvailable() gibt an ob und wie viele Daten (ab der aktuellen Position) an der IO - Schnittstelle verfügbar sind und Close() schließt die Schnittstelle/gibt das IO - Objekt frei.
Dann gibt es noch optionale Schnittstellen die (aufgrund Beschaffenheit der konkreten IO - Schnittstelle) nicht immer implementiert sein müssen:
GetLenght() gibt die gesamte Länge der Daten der IO Schnittstelle an (Größe einer Datei, Größe eines Memory - Speichers), Get/SetPosition() ändert die Position des Daten-Zeigers innerhalb der IO - Schnittstelle (FileSeek). ExportToIO() exportiert den gesamten Inhalt der IO Schnittstelle an eine andere IO - Schnittstelle, ImportFromIO() importiert von einer IO Schnittstelle.
Damit man festellen kann welche optionalen Methoden ein Objekt unterstützt gibt es noch Verwaltungsfunktionen. Diese sind global, müssen nicht selbst implementiert werden:
IOName$() gibt den Namen der Schnittstelle zurück ("FILE","MEMORY",...), IOOptionalFunctions() die optionalen Funktionen (kann mit dem & - Operator geprüft werden, etwa IO\IOOptionalFunctions() & #IO_GetPosition).
ein kleines Verwendungsbeispiel:
Würde den gesamten Inhalt der Datei in den Memory - IO laden. Danach kann man mit SetPosition/Read/Write genau so arbeiten als wäre man wirklich in der Datei, nur spart man sich die permanenten HDD/SSD - Zugriffe. Natürlich funktioniert das ganze auch umgekehrt, man erzeugt zuerst nur ein Memory - Element, schreibt alle Daten die man benötig hinein und Exportiert das ganze danach einfach in ein File - Element.
Das ganze wird natürlich erst wirklich praktisch sobald die Network und SerialPort - Implementationen dabei sind. Dann kan man z.B. bei einem Network - Event z.b. einfach *Connection\ExportToIO(*Memory) ausführen und das Memory - Objekt so behandeln als hätte man nicht gerade Daten übers Netzwerk empfangen sondern aus einer Datei gelesen.
Die geplante Syncronizer - IO - Schnittstelle wird eine virtuelle IO - Schnittstelle bei der man ein Main - IO - Object definieren kann und beliebig viele Sub - Object. Schreib - Operationen werden auf allen IOs durchgeführt, Lese - Operationen nur am Main - Object. Dadurch kann man z.b. ein Network - IO Object als Main definieren und ein oder mehrer File - Objects als SUB und erhält eine automatische Protokollierung.
IO.pbi:
Download
CHM - Hilfe:
Download
IO.pbi bietet ein abstraktes Interface für verschiedene IO - Schnittstellen (am häufigsten: File). Dabei gibts es einige Methoden die jede Implementierung enthalten muss und optionale Methoden.
Bereits implementiert sind:
- File
- Memory
- Network
- SerialPort
- Gadget
- Process
- Console
- Syncronizer
Code: Alles auswählen
IO\Write(*Mem, MemSize)
IO\Read(*Mem, MemSize)
IO\IsAvailable()
IO\Close()
Dann gibt es noch optionale Schnittstellen die (aufgrund Beschaffenheit der konkreten IO - Schnittstelle) nicht immer implementiert sein müssen:
Code: Alles auswählen
IO\GetLenght()
IO\GetPosition()
IO\SetPosition(Position.i)
IO\ImportFromIO(*IO.IO)
IO\ExportToIO(*IO.IO)
Damit man festellen kann welche optionalen Methoden ein Objekt unterstützt gibt es noch Verwaltungsfunktionen. Diese sind global, müssen nicht selbst implementiert werden:
Code: Alles auswählen
IO\IOName$()
IO\IOOptionalFunctions()
ein kleines Verwendungsbeispiel:
Code: Alles auswählen
IncludeFile "IO.pbi"
Define *File.IO, *Memory.IO
*File = IO_File("C:\myFile.data", #PB_File_Read)
*Memory = IO_Memory()
*Memory\ImportFromIO(*File)
*File\Close()
Das ganze wird natürlich erst wirklich praktisch sobald die Network und SerialPort - Implementationen dabei sind. Dann kan man z.B. bei einem Network - Event z.b. einfach *Connection\ExportToIO(*Memory) ausführen und das Memory - Objekt so behandeln als hätte man nicht gerade Daten übers Netzwerk empfangen sondern aus einer Datei gelesen.
Die geplante Syncronizer - IO - Schnittstelle wird eine virtuelle IO - Schnittstelle bei der man ein Main - IO - Object definieren kann und beliebig viele Sub - Object. Schreib - Operationen werden auf allen IOs durchgeführt, Lese - Operationen nur am Main - Object. Dadurch kann man z.b. ein Network - IO Object als Main definieren und ein oder mehrer File - Objects als SUB und erhält eine automatische Protokollierung.
IO.pbi:
Download
CHM - Hilfe:
Download