|
Pochodzi od: BFlattenable
Zadeklarowany w: be/app/PropertyInfo.h
Biblioteka: libbe.so
Podsumowanie: więcej...
BPropertyInfo jest prostą klasą która zarządza skryptami (scripting). Program zapisujący swój interfejs skryptowy do obiektu BPropertyInfo poprzez tablicę struktur property_info, z każdą pozycją opisującą kawałek zestawu skryptowego. Definicja struktury:
struct property_info {
char *name;
uint32 commands[10];
uint32 specifiers[10];
char *usage;
uint32 extra_data;
};
- name dostarcza nazwy opisującą właściwość tej struktury.
- commands jest tablicą poleceń zakończoną zerem ustaloną przez właściwość, tj. B_GET_PROPERTY. Jeśli pierwszy element jest 0, reprezentuje on znaki pasujące do wszystkich możliwych poleceń.
- specifiers jest tablicą specyfikatorów zakończoną zerem ustaloną przez właściwość, tj. B_DIRECT_SPECIFIER. Jeśli pierwszy element jest 0, reprezentuje on znaki pasujące do wszystkich możliwych specyfikatorów.
- usage podaje łańcuch możliwy do odczytania przez człowieka, opisujący właściwość i jego dopuszczalnepolecenia i specyfikatory.
- extra_data jest wolnym obszarem do ogólnego użytku, system operacyjny nie rusza jego zawartości.
Egzemplarz BPropertyInfo jest tworzony przez przekazanie tablicy property_info zakończonej zerem do jego konstruktora. Typowa inicjalizacja BPropertyInfo wyglada tak jak ta:
static property_info prop_list[] = {
{ "duck", {B_GET_PROPERTY, B_SET_PROPERTY, 0},
{B_DIRECT_SPECIFIER, B_INDEX_SPECIFIER, 0}, "get or set duck"},
{ "head", {B_GET_PROPERTY, 0}, {B_DIRECT_SPECIFIER, 0}, "get head"},
{ "head", {B_SET_PROPERTY, 0}, {B_DIRECT_SPECIFIER, 0}, "set head"},
{ "feet", {0}, {0}, "can do anything with his orange feet"},
0 // terminate list
};
BPropertyInfo prop_info(prop_list);Ponieważ BPropertyInfo przechowuje tylko wskaźnik do tablicy, to ważne jest, żeby okres istnienia tablicy był co najmniej tak długi jak obiektu BPropertyInfo.
Zauważ, że BPropertyInfo nie narzuca konkretnej struktury na tablicę, w szczegółności, nie wszystkie polecenia i specyfikatory dla danej właściwości potrzebują być umieszczonej w pojedynczej komórce tablicy. Masz pełną dowolność aby zorganizować swój zestw skryptowy w jakikolwiejk najdogodniejszy dla siebie sposób dla swojego konkretnego obiektu.
BPropertyInfo jest potomkiem BFlattenable i dlatego może być użyty do przechowywania opisu obiektu wspieranego zestawem skryptowym. Jest to szczególnie użyteczne gdy przedefiniowujesz GetSupportedSuites():
status_t MyHandler::GetSupportedSuites(BMessage *msg)
{
msg->AddString("suites", "suite/vnd.Me-my_handler");
BPropertyInfo prop_info(prop_list);
msg->AddFlat("messages", &prop_info);
return baseClass::GetSupportedSuites(msg);
}Naturalnie, BPropertyInfo jest równie użyteczny w interpretrowaniu wyników otrzymanych z zapytania o obiekt dla jego wspieranych zestawów.
BPropertyInfo definiuje metodę FindMatch() przeznaczoną do uproszczenia implementacji ResolveSpecifier(). Zwraca ona indeks właściwości informacyjnej, porównujący z nią dany opis lub -1 jeśli nie pasują one do siebie. Redukuje to ResolveSpecifier() w najprostszych przypadkach do:
BHandler *MyHandler::ResolveSpecifier(BMessage *msg, int32 index,
BMessage *spec, int32 form, const char *prop)
{
BPropertyInfo prop_info(prop_list);
if (prop_info.FindMatch(msg, index, spec, form, prop) >= 0)
return this;
return baseClass::ResolveSpecifier(msg, index, spec, form, prop);
}Oczywiście, dla bardziej skomplikowanych obiektów, ResolveSpecifier() może potrzebować ustawienia adresata handler do obiektu innego niż on sam, więc możeby być wymagane więcej instrukcji przetwarzania. W tych przypadkch, obiekt może użyć indeks zwrócony przez FindMatch() aby pomóc mu określić adresata komunikatu skryptowego.
![]() | BPropertyInfo() |
BPropertyInfo(property_info *p = NULL, bool free_on_delete = false) Inicjalizuje obiekt z określoną tablicą property_info p zakończoną zerem. Przekazuje true w free_on_delete instruując obiekt aby zwolnił pamięć przypisaną do property_info gdy obiekt jest niszczony. BPropertyInfo nie kopiuje tablicy, więc jest ważne aby tablica nie była usunięta albo zniszczona gdy BPropertyInfo jest w użyciu.
![]() | ~BPropertyInfo() |
~BPropertyInfo() Jeśli free_on_delete jest ustawiony na true w konstruktorze, destruktor zwalnia całą pamięć przypisaną do property_info. W przeciwnym wypadku nic nie robi.
![]() | AllowsTypeCode() |
Szczegół implementacji. Patrz do BFlattenable::AllowsTypeCode().
![]() | FindMatch() |
int32 FindMatch(BMessage *msg, int32 index, BMessage *spec, int32 form,
const char *prop, void *data = NULL) constPrzekazuje nazwę właściwości w parametrze prop, specyfikator w form a polecenie w msg->what, przeszukuje tablicę property_info array dla elementu wspierającego określone żądanie skryptowe. Jeśli indeks index jest niezerowy, wtedy FindMatch() szuka tylko tych struktur property_info z poleceniem globalnym (wildcard) (pierwszy element tablicy poleceń jest równy 0). W przeciwnym wypadku, przeszukjuje ona do dopasowania wszystkie dostępne struktury. Jeśli dopsaowanie jest znalezione, wypełnia ona pamięć w parametrze data z zawartością pasującego pola extra_data i zwraca pasujący indeks w tablicy. W przeciwnym wypadku zwraca ona B_ERROR.
![]() | Flatten |
Szczegół implementacji. Patrz do BFlattenable::Flatten().
![]() | FlattenedSize() |
Szczegół implementacji. Patrz do BFlattenable::FlattenedSize().
![]() | IsFixedSize() |
Szczegół implementacji. Patrz do BFlattenable::IsFixedSize().
![]() | TypeCode() |
Szczegół implementacji. Patrz do BFlattenable::TypeCode().
![]() | PrintToStream() |
void PrintToStream(void) const Drukuje informację o BPropertyInfo na standardowym wyjściu.
![]() | PropertyInfo() |
const property_info *PropertyInfo(void) const Zwraca listę property_info przypisaną do obiektu.
![]() | Unflatten() |
Szczegół implementacji. Patrz do BFlattenable::Unflatten()
|
Be
Book,
...w ślicznym HTML...
dla BeOS wydanie 5
Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.