Seite 1 von 1

DELETE

Verfasst: 07.12.2014 18:14
von CodeCommander
~ DELETE ~

Re: Serializable?

Verfasst: 07.12.2014 19:58
von Kiffi
CodeCommander hat geschrieben:In PB möglich?
Ja

Verfasst: 07.12.2014 20:08
von CodeCommander
~ DELETE ~

Re: Serializable?

Verfasst: 07.12.2014 20:52
von _sivizius
Ohai,
Für jede Struktur eine Funktion StreamTheStructure() schreiben, welche die Größe der Daten errechnet, ein Buffer mit dieser Größe erstellt, die Daten aus der Struktur dort rein schreibt, inklusive verlinkte Daten (Strings, Buffer, ...), dieser wieder Relativ innerhalb des Buffers verlinkt und dann die Adresse des Buffers zurück gibt:

Code: Alles auswählen

Structure didum
  einLong.l
  einString$
  *einPointer
  *lenPointer
EndStructure
Structure StreamDidum
  einLong.l
  einString.l
  einPointer.l
  lenPointer.l
EndStructure
Procedure StreamTheStructure(*self.didum)
  lenString = StringByteLength(*self\einString$) + 2
  size = SizeOf(StreamDidum) + lenString + *self\lenPointer
  *output.StreamDidum = AllocateMemory(size)
  *output\einLong = *self\einLong
  *output\einString = SizeOf(StreamDidum)
  *output\einPointer = SizeOf(StreamDidum) + lenString
  *output\lenPointer = *self\lenPointer
  PokeS(*output + SizeOf(StreamDidum), *self\einString$)
  If *self\lenPointer
    CopyMemory(*self\einPointer, *output + SizeOf(StreamDidum) + lenString, *self\lenPointer)
  EndIf
  ProcedureReturn *output
EndProcedure
*self.didum = AllocateMemory(SizeOf(didum))
*self\einLong = 2342
*self\einString$ = "Hallo Welt!"
*self\einPointer = AllocateMemory(8)
RandomData(*self\einPointer, 8)
Debug RSet(Hex(PeekQ(*self\einPointer)), 16, "0")
*self\lenPointer = 8
Debug "== Stream =="
*this.StreamDidum = StreamTheStructure(*self.didum)
Debug *this\einLong
Debug PeekS(*this + *this\einString)
Debug RSet(Hex(PeekQ(*this + *this\einPointer)), 16, "0")
Debug *this\lenPointer
Debug MemorySize(*this)
mfg
_sivizius

Re: Serializable?

Verfasst: 07.12.2014 21:29
von edel
Mit JSON.