Nisserver mit mehreren Typen von Maps
Abstrakte Map-Schnittstelle dmap
Klasse Dmap definiert die Abstrakte Schnittstelle für Abbildungen
auf Dateiebene:
class Dmap
{
public:
virtual int open()=0; //Bereitstellen
virtual int close()=0; //Bereitstellung aufheben
virtual int fetch(Gdat &key,Gdat &val)=0;
virtual int firstkey(Gdat &fkey)=0;
virtual int nextkey(Gdat &erg,Gdat &vorg)=0;
virtual unsigned long get_dtm()=0;
};
Modifizierbare Dmap:
class mDmap : public Dmap
{
public:
virtual int create()=0;
virtual int openforchange()=0;
virtual int store(Gdat &key,Gdat &value,Dmapflag flag)=0;
};
Gdat die generalisierte Datumsklasse
wickelt das Speichergeraffel ab
Die eigentliche Versorgung der Parameter erfolgt in den
Unterklassen-Konstruktoren:
- Klasse Dmap_dbtree
-
- Konstuktor: Dmap_dbtree(char *rumpfpfad)
- ist Unterklasse von mDmap
- Klasse Dmap_dbhash
-
- Konstruktor: Dmap_dbhash(char *rumpfpfad)
- ist Unterklasse von mDmap
- Klasse Dmap_gdbm
-
- Konstruktor: Dmap_gdbm(const char *rumpfpfad)
- ist Unterklasse von mDmap
- Klasse Dmap_adabas
-
(Andere Datenbanken kann man ähnlich einbinden)
Einordnung
Diese Klassen sind die Datenabstraktionsschicht (Data AbstraktionLayer) und sind so vielseitig einsetzbar.
Sonstiges
Ideen
- Ein Interator/Cursor könnte die Elemente einer Dmap aufzählen.
Gerade für die Datenbanken wäre das effizienter, wenn im Konstruktor
die Generierung der Datenmenge stattfinden würde und die Nachfolgeoperation
ein Fetch wäre.
Ähnliche Arbeiten
- In Perl, TCL und sendmail
- gibt es auch allgemeine Schnittstellen
für die Maps.
Natürlich hätte ich es auch aus einem extrahieren können, doch
die Idee kam zu spät und schlieslich bin ich ein Freund der
Objektorientierten Programmierung
- AnyDBM von
Webping
- Diese habe ich mir auch angesehen.
Positiv: Können besser C++ als ich.
Negativ:
- Es kann wohl nur ein Map-Typ gleichzeitig im Programm sein
- Sehr viel C++-Schnickschack
- mir ist unwohl was mit dem Speicher geschieht
- C++-Kritik: Dunkle Ecken bei Rückgabe wird alles kopiert
usw. (hier nicht der richtige Ort zur Diskussion)
Rudolf Weber Informatik und Netzwerkverein Ravensburg e.V