Promotic

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:
AutoOffsetWewnę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:
SetBit()Zapis jednego bitu
GetBit()Odczyt wartości jednego bitu
SetInt8()Zapis 1-bajtowej wartości całkowitej
GetInt8()Odczyt 1-bajtowej wartości całkowitej
SetInt16()Zapis 2-bajtowej wartości całkowitej
GetInt16()Odczyt 2-bajtowej wartości całkowitej
SetInt32()Zapis 4-bajtowej wartości całkowitej
GetInt32()Odczyt 4-bajtowej wartości całkowitej
SetUint8()Zapis 1-bajtowej wartości całkowitej bez znaku
GetUint8()Odczyt 1-bajtowej wartości bez znaku
SetUint16()Zapis 2-bajtowej wartości całkowitej bez znaku
GetUint16()Odczyt 2-bajtowej wartości całkowitej bez znaku
SetUint32()Zapis 4-bajtowej wartości całkowitej bez znaku
GetUint32()Odczyt 4-bajtowej wartości całkowitej bez znaku
SetFloat32()Zapis 4-bajtowej wartości rzeczywistej
GetFloat32()Odczyt 4-bajtowej wartości rzeczywistej
SetFloat64()Zapis 8-bajtowej wartości rzeczywistej
GetFloat64()Odczyt 8-bajtowej wartości rzeczywistej
Metody do zapisu oraz odczytu wartości typu String:
SetStringFix()Zapis łańcucha tekstowego o stałej długości
GetStringFix()Odczyt łańcucha tekstowego o stałej długości
SetStringVar()Zapis łańcucha tekstowego o zmiennej długości (zakończony znakiem NULL)
GetStringVar()Odczyt łańcucha tekstowego o zmiennej długości (zakończony znakiem NULL)
SetHexaString()Zapis bloku danych w formie HexaString
GetHexaString()Odczyt bloku danych w formie HexaString
SetBase64String()Zapis bloku danych w formie łańcucha tekstowego w kodowaniu Base64
GetBase64String()Odczyt bloku danych w formie łańcucha tekstowego w kodowaniu Base64
Notatka:
- Obiekt można wytworzyć przy pomocy metody Pm.CreatePmBuffer.
- Obiekt ten działa również w Web panelach.

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);

Historia:
Pm9.00.05:
- LoadFromFile oraz SaveToFile nowe metody: Metody umożliwiają odczyt lub zapis do pliku binarnego. Metody te zastępują metody Pm.FileBinaryRead oraz Pm.FileBinaryWrite, które nie działają w języku JavaScript i dlatego są już przestarzałe.
- GetBit oraz SetBit nowe metody: Metody umożliwiają bitowy dostęp do bloku danych.
Pm9.00.04: Wytworzono
© MICROSYS, spol. s r.o.