Allgemeine Mapschnittstelle, die auch relationele Datenbanken einbindet
Klasse Gdat
#include"gdat.h"
Zweck
Klasse Gdat generalisiert die Wertbehälter für die leichtgewichtige
Datenbanken ohne viel C++ schnickschnack.
Manche Maps allokieren über malloc(3) Speicher, manche nicht.
Oft möchte man auch ein genügend großen Puffer (Datensegment oder
Stack) der Map zur verfügung stellen. Diese Klasse verwaltet
transparent einen Puffer und einen Zeiger auf dynamischen Speicher und
abstrahiert so von dem ganzen Speichergeraffel.
enum PSpeichertyp { PST_STATIC=0,PST_DYNAMIC=1 };
Konstruktor
Gdat(char *usermem,int usermemlen);
Initialisert den internen Puffer. Augruf mit (NULL,0) möglich, dann
wird
immer dynamisch verwaltet.
Desstruktor
~Gdat()
Gibt den dynmaischen Speicher frei (nicht den puffer)
Operationen
Importoperationen
Diese Operationen werden meist von den fetch-Operationen aufrerufen,
die einen Wert zurückliefern wollen:
- void set(char *usermem,int lang);
- setzt einen neuen Puffer
- void set(datum &d,PSpeichertyp st);
- übernimmt den Speicher von Gdbm und ndbm. Falls
st=PST_DYNAMIC, dann wird er dynamische Speicher
initialiisert,
st=PST_STATIC, dann wird d in den Puffer kopiert, da
ndbm bekanntlich einen zeiger af inen statischen Puffer übergibt, der
jedesmal überschreiben wird.
- void set(DBT &d);
- imporiert einen Wert von einem Berkely-DBT
Abgleich mit DBT von berkley
Die Export-Funktionen setzen den DBT auf dein internen Gdat-Puffer
- void export(DBT &erg);
- exportiert freien Speicher
- void export_val(DBT &erg);
- exportiert Wert, also wenn z.B ein
Schlüssel an DBT übergegen werden soll.
Ausleseoperationen
- void *get_data()
- Zeiger auf den Inhalt
- int get_len()
- Länge des Inhalts
Sahne
- void exchangetake(Gdat& v);
- Übernimmt den speicher oder
tauscht usermem , damit kann man schöne Operatoren ohne
Umkopierereien machen.
- char *take()
- Nutzer verspricht dynamischen Speicher
freizugeben , liefert einen Zeiger auf den Inhalt.
- void *garantie(size_t l);
- Garantiert das Speicher länge l
vorhanden ist. Eventuell wird dynmischer Speicher angefordert.
Hilfsoperationen
- void frei();
- Gibt den dynmaschen Speicher frei (nicht den
puffer)
- void set_len(int lang);
- zum kürzen der Länge
- int get_ulen() Liefert die Länge des Puffers
- void set_len(int lang); kürzt der Länge (z.B. mangeling)
Ausgabeoperation
ostream& operator<<(ostream& str,Gdat& d);
Rudolf Weber Informatik und Netzwerkverein Ravensburg e.V