Up Right 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