Obiekt PmBuffer (Pamięć danych binarnych)
Opis:
Obiekt przedstawia wartości binarne w bloku danych.
Blok danych (buffer) to ciągły obszar w pamięci.
Do odczytu/zapisu pojedyńczej wartości jest konieczne znać jej pozycję (offset) w bloku danych oraz jej typ danych (wielkość).
Ogólne właściwości i metody:
AutoOffset | Wewnętrzna automatyczna pozycja w bloku danych |
SetSize() | Ustawienie wielkości bloku danych |
GetSize() | Stwierdzi wielkośc bloku danych |
Insert() | Włoży nowe puste miejsce wewnątrz istniejącego bloku danych i powiększy blok danych. |
Remove() | Usunie istniejące miejsce wewnątrz istniejącego bloku danych i zmniejszy blok danych. |
GetLastError() | Zwraca znacznik ostatniego błędu |
FindBuffer() | Zwraca pozycję pierwszego bajtu wystąpienia szukanego bloku danych w bloku danych |
FindReplaceBuffer() | Zastępuje wystąpienia szukanego bloku danych w bloku danych innym blokiem danych |
SetBuffer() | Zapis bloku danych w formie obiektu PmBuffer |
GetBuffer() | Odczyt bloku danych w formie obiektu PmBuffer |
SetPtr() | Zapis markera (pointera, adresu) na inny blok danych w formie obiektu PmBuffer |
GetPtr() | Pozorny odczyt, (przeskoczenie) markera (pointer) na inny blok danych |
LoadFromFile() | Odczyt wartości z pliku binarnego do bloku danych |
SaveToFile() | Zapis wartości z bloku danych do pliku binarnego |
CalcCheckSum() | Zwraca sumy kontrolnej (hash) bloku danych |
Metody do zapisu oraz odczytu wartości liczbowej:
Metody do zapisu oraz odczytu wartości typu String:
Notatka:
Porównanie obiektów w celu trzymania wartości:
Następujące typy obiektów są przeznaczone do trzymania wartości (dowolnego typu danych). Każdy z tych obiektów ma swoje zalety oraz mankamenty a wybór jest zależny od wymaganego zastosowania.
PmArray: Obiekt ten zawiera wartości, które są dostępne indeksem do tablicy - czyli w dowolnej chwili można odczytać dowolną wartość w tym obiekcie. Odczyt oraz zapis wartości jest bardzo szybkie, dodanie wartości jest wszak wolne.
Obiekt ten działa tylko dla języka
JavaScript, dla języka
VBScript tablica jest w formie typu danych
Array.
PmMap: Obiekt ten zawiera wartości, które są dostępne przy pomocy swej nazwy (identyfikator tekstowy). Nazwy tych wartości przedstawiają właściwości obiektu. Zaletą jest, że dzięki nazwom kod w skrypcie jest bardziej "zrozumiały". Mankamentem jest brak możliwości przystępowania do wartości w cyklu, kiedy należy pozyskiwać wartości przy pomocy indeksu.
PmBuffer: Obiekt ten zawiera wartości binarne w bloku danych. Dla zapisu/odczytu pojedyńczej wartości jest konieczne znać jej pozycję (offset) w bloku danych oraz również jej typ danych (wielkość).
Przykład1:
JavaScriptWybierz oraz skopiuj do schowka
var oBuf = Pm.CreatePmBuffer();
// Ustawienie całej zawartości bloku danych jako HexaString oraz następnie kolejny odczyt jego zawartości do 3 zmiennych o różnych typach
var s1 = "40302010605070";
// HexaString zawiera 7 bajtów z wartościami 0x40,0x30,0x20,0x10,0x60,0x50,0x70
oBuf.SetHexaString(-2, s1);
// Wypełnienie bloku danych danymi z HexaString
oBuf.AutoOffset = 0;
// Ustawienie automatycznej pozycji z powrotem na początek
var i32 = oBuf.GetInt32(-4);
// Odczyt wartości do zmiennej: 0x10203040
var i16 = oBuf.GetInt16(-4);
// Odczyt wartości do zmiennej: 0x5060
var ui8 = oBuf.GetUint8(-4);
// Odczyt wartości do zmiennej: 0x70
// Kolejne wytwaranie bloku danych zapisem 3 zmiennych oraz następnie uzyskanie całej zawartości jako HexaString
oBuf.SetSize(0);
// Ustawienie nowego rozmiaru na 0 oraz usunięcie (reset) istniejącej zawartości bloku danych
oBuf.SetInt32(-2, i32);
// Doda wartości z zmiennej na koniec: 0x10203040
oBuf.SetInt16(-2, i16);
// Doda wartości z zmiennej na koniec: 0x5060
oBuf.SetUint8(-2, ui8);
// Doda wartości z zmiennej na koniec: 0x70
var s2 = oBuf.GetHexaString(0);
// Odczyt bloku danych jako HexaString. Odczytana wartość s2 jest zgodna z pierwotną wstępną wartością s1
Przykład2:
Odczyt 4 bajtowego bloku danych po bajtach jako
HexaString lub w układzie dziesiątkowym
JavaScriptWybierz oraz skopiuj do schowka
var oBuf = Pm.CreatePmBuffer();
oBuf.SetSize(4);
oBuf.SetInt32(0, 1020304050, 0);
Pm.Debug("HexaString = " + oBuf.GetHexaString());
oBuf.AutoOffset = 0;
var h0 = oBuf.GetHexaString(-4, 1);
var h1 = oBuf.GetHexaString(-4, 1);
var h2 = oBuf.GetHexaString(-4, 1);
var h3 = oBuf.GetHexaString(-4, 1);
Pm.Debug("HexaString = " + h0 + ", " + h1 + ", " + h2 + ", " + h3);
oBuf.AutoOffset = 0;
var v0 = oBuf.GetUint8(-4);
var v1 = oBuf.GetUint8(-4);
var v2 = oBuf.GetUint8(-4);
var v3 = oBuf.GetUint8(-4);
Pm.Debug("GetUint8=" + v0 + ", " + v1 + ", " + v2 + ", " + v3);