00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(VDB_HPP)
00012 #define VDB_HPP
00013
00014 #include "gtbuffer.hpp"
00015 #include "gtlist.hpp"
00016 #include "gkeygen.hpp"
00017
00018
00019 #if !defined(GVDB_STRUCT)
00020 #define GVDB_STRUCT
00021 #define NVDBST_MEM 6
00022 #define NULL_HOSTKEY -1
00023 struct GVDBst {
00024 GKEY hostkey;
00025 GKEY hostrootkey;
00026 GINT hostid;
00027 GINT id;
00028 GINT ancillary;
00029 GDOUBLE x [GDIM];
00030 };
00031 #endif
00032
00033 class VDB
00034 {
00035 public:
00036 VDB();
00037 ~VDB();
00038 VDB(const VDB &a);
00039
00040 void add(Point3D *point, GKEY *key, GKEY *hostkey,
00041 GKEY *hostrootkey, GINT *localid, GINT *ancillary, GINT *hostid,
00042 GSHORT *iproc, GINT num=1);
00043 GBOOL del(Point3D *point, GINT num=1);
00044 GBOOL del(GKEY *key , GINT num=1);
00045 GINT size();
00046 GINT multiplicity(Point3D *point);
00047 GINT multiplicity(GKEY *key);
00048 void multiplicity(Point3D *point, GINT *&mult, GINT num=1);
00049 void multiplicity(GKEY *hostkey , GINT *&mult, GINT num=1);
00050 void procs(Point3D *point, GSBuffer **&iprocs, GINT num=1);
00051 void procs(GKEY *hostkey , GSBuffer **&iprocs, GINT num=1);
00052 void synch ();
00053 VDBData *record(GINT irec);
00054 VDBData *record(Point3D &point, VDBData **&vdbelems, GINT &num);
00055 VDBData *record(GKEY &key , VDBData **&vdbelems, GINT &num);
00056 GBOOL duplicates(VDBData &rec, GINT *&indices, GINT &num);
00057 void SetKeyGen(GKeyGen *keygen);
00058 void CleanAll();
00059 void Bracket(GDOUBLE eps);
00060 friend ostream& operator<<(ostream&, VDB &);
00061
00062
00063 private:
00064
00065 void CleanNonLocal();
00066
00067
00068
00069 GSHORT nprocs_;
00070 GSHORT this_rank_;
00071 GDOUBLE eps_;
00072 VDBList vdb_list_;
00073 GKeyGen *keygen_;
00074 GC_DATATYPE vdbst_type_;
00075
00076 };
00077 #endif
00078