Changeset: 243640a99dad for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/243640a99dad
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_private.h
        gdk/gdk_rtree.c
        geom/monetdb5/geomBulk.c
Branch: default
Log Message:

Do some cleaning up of the RTree code.
Remove unnecessary stuff from include files and fix some interfaces.


diffs (truncated from 355 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -400,12 +400,10 @@ ssize_t OIDtoStr(str *dst, size_t *len, 
 BUN ORDERfnd(BAT *b, Heap *oidxh, const void *v);
 BUN ORDERfndfirst(BAT *b, Heap *oidxh, const void *v);
 BUN ORDERfndlast(BAT *b, Heap *oidxh, const void *v);
-void RTREEdecref(BAT *b);
 void RTREEdestroy(BAT *b);
 bool RTREEexists(BAT *b);
-bool RTREEexists_bid(bat *bid);
+bool RTREEexists_bid(bat bid);
 void RTREEfree(BAT *b);
-void RTREEincref(BAT *b);
 BUN *RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit);
 BUN SORTfnd(BAT *b, const void *v);
 BUN SORTfndfirst(BAT *b, const void *v);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -357,13 +357,6 @@ gdk_export _Noreturn void GDKfatal(_In_z
 #include "stream.h"
 #include "mstring.h"
 
-#ifdef HAVE_RTREE
-#ifndef SIZEOF_RTREE_COORD_T
-#define SIZEOF_RTREE_COORD_T 4
-#endif
-#include <rtree.h>
-#endif
-
 #undef MIN
 #undef MAX
 #define MAX(A,B)       ((A)<(B)?(B):(A))
@@ -1902,21 +1895,12 @@ gdk_export gdk_return BATsetstrimps(BAT 
 
 /* Rtree structure functions */
 #ifdef HAVE_RTREE
-//TODO REMOVE
-typedef struct mbr_t {
-       float xmin;
-       float ymin;
-       float xmax;
-       float ymax;
-
-} mbr_t;
-
 gdk_export bool RTREEexists(BAT *b);
-gdk_export bool RTREEexists_bid(bat *bid);
+gdk_export bool RTREEexists_bid(bat bid);
 gdk_export gdk_return BATrtree(BAT *wkb, BAT* mbr);
-gdk_export BUN* RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit);
-gdk_export void RTREEdecref(BAT *b);
-gdk_export void RTREEincref(BAT *b);
+/* inMBR is really a struct mbr * from geom module, but that is not
+ * available here */
+gdk_export BUN* RTREEsearch(BAT *b, const void *inMBR, int result_limit);
 #endif
 
 gdk_export void RTREEdestroy(BAT *b);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -459,14 +459,6 @@ struct Strimps {
                                 * bitstring construction */
 };
 
-#ifdef HAVE_RTREE
-struct RTree {
-       ATOMIC_TYPE refs;       /* counter for logical references to the rtree 
*/
-       rtree_t *rtree;         /* rtree structure */
-       bool destroy;           /* destroy rtree when there are no more logical 
references */
-};
-#endif
-
 typedef struct {
        MT_Lock swap;
 } batlock_t;
diff --git a/gdk/gdk_rtree.c b/gdk/gdk_rtree.c
--- a/gdk/gdk_rtree.c
+++ b/gdk/gdk_rtree.c
@@ -25,15 +25,37 @@
  * - DB Farm is persistent i.e. not in memory
  */
 #ifdef HAVE_RTREE
+
+#ifndef SIZEOF_RTREE_COORD_T
+#define SIZEOF_RTREE_COORD_T 4
+#endif
+#include <rtree.h>
+
+struct RTree {
+       ATOMIC_TYPE refs;       /* counter for logical references to the rtree 
*/
+       rtree_t *rtree;         /* rtree structure */
+       bool destroy;           /* destroy rtree when there are no more logical 
references */
+};
+
+/* this is a copy from the geom module */
+typedef struct mbr {
+       float xmin;
+       float ymin;
+       float xmax;
+       float ymax;
+
+} mbr;
+
 static bool
-RTREEpersistcheck (BAT *b) {
+RTREEpersistcheck(BAT *b)
+{
        return ((BBP_status(b->batCacheid) & BBPEXISTING)
                && b->batInserted == b->batCount
                && !b->theap->dirty
                && !GDKinmemory(b->theap->farmid));
 }
 
-void
+static void
 RTREEdecref(BAT *b)
 {
        ATOMIC_BASE_TYPE refs = ATOMIC_DEC(&b->trtree->refs);
@@ -48,7 +70,7 @@ RTREEdecref(BAT *b)
 
 }
 
-void
+static void
 RTREEincref(BAT *b)
 {
        (void) ATOMIC_INC(&b->trtree->refs);
@@ -56,7 +78,7 @@ RTREEincref(BAT *b)
 
 // Persist rtree to disk if the conditions are right
 static gdk_return
-persistRtree (BAT *b)
+persistRtree(BAT *b)
 {
        if (RTREEpersistcheck(b)) {
                //TODO Necessary?
@@ -67,8 +89,7 @@ persistRtree (BAT *b)
                        const char * filename = BBP_physical(b->batCacheid);
                        int farmid = b->theap->farmid;
 
-                       int fd = GDKfdlocate(farmid, filename, "w", "bsrt");
-                       FILE *file_stream = fdopen(fd,"w");
+                       FILE *file_stream = GDKfilelocate(farmid, filename, 
"w", "bsrt");
 
                        if (file_stream != NULL) {
                                int err;
@@ -79,20 +100,21 @@ persistRtree (BAT *b)
                                        return GDK_FAIL;
                                }
 
-                               if (!(GDKdebug & NOSYNCMASK)) {
-       #if defined(NATIVE_WIN32)
-                                       _commit(fd);
-       #elif defined(HAVE_FDATASYNC)
-                                       fdatasync(fd);
-       #elif defined(HAVE_FSYNC)
-                                       fsync(fd);
-       #endif
+                               if (fflush(file_stream) == EOF ||
+                                   (!(ATOMIC_GET(&GDKdebug) & NOSYNCMASK)
+#if defined(NATIVE_WIN32)
+                                    && _commit(_fileno(file_stream)) < 0
+#elif defined(HAVE_FDATASYNC)
+                                    && fdatasync(fileno(file_stream)) < 0
+#elif defined(HAVE_FSYNC)
+                                    && fsync(fileno(file_stream)) < 0
+#endif
+                                           )) {
+                                       GDKsyserror("Syncing %s.bsrt failed\n", 
filename);
                                }
                                fclose(file_stream);
                        }
                        else {
-                               GDKerror("%s",strerror(errno));
-                               close(fd);
                                return GDK_FAIL;
                        }
                }
@@ -103,16 +125,13 @@ persistRtree (BAT *b)
 }
 
 static gdk_return
-BATcheckrtree(BAT *b) {
+BATcheckrtree(BAT *b)
+{
        const char * filename = BBP_physical(b->batCacheid);
        int farmid = b->theap->farmid;
-       int fd = GDKfdlocate(farmid, filename, "r", "bsrt");
 
        //Do we have the rtree on file?
-       if (fd == -1)
-               return GDK_SUCCEED;
-
-       FILE *file_stream = fdopen(fd,"r");
+       FILE *file_stream = GDKfilelocate(farmid, filename, "r", "bsrt");
        if (file_stream != NULL) {
                rtree_t* rtree = rtree_bsrt_read(file_stream);
                if (!rtree) {
@@ -128,15 +147,14 @@ BATcheckrtree(BAT *b) {
                return GDK_SUCCEED;
        }
        else {
-               GDKerror("%s",strerror(errno));
-               close(fd);
                return GDK_FAIL;
        }
 }
 
 //Check if RTree exists on file (previously created index)
 static bool
-RTREEexistsonfile(BAT *b) {
+RTREEexistsonfile(BAT *b)
+{
        const char * filename = BBP_physical(b->batCacheid);
 
        if (!b->theap) return false;
@@ -176,11 +194,11 @@ RTREEexists(BAT *b)
 }
 
 bool
-RTREEexists_bid(bat *bid)
+RTREEexists_bid(bat bid)
 {
        BAT *b;
        bool ret;
-       if ((b = BATdescriptor(*bid)) == NULL)
+       if ((b = BATdescriptor(bid)) == NULL)
                return false;
        ret = RTREEexists(b);
        BBPunfix(b->batCacheid);
@@ -188,7 +206,7 @@ RTREEexists_bid(bat *bid)
 }
 
 gdk_return
-BATrtree(BAT *wkb, BAT *mbr)
+BATrtree(BAT *wkb, BAT *mbrb)
 {
        BAT *pb;
        BATiter bi;
@@ -219,12 +237,12 @@ BATrtree(BAT *wkb, BAT *mbr)
                        GDKerror("rtree_new failed\n");
                        return GDK_FAIL;
                }
-               bi = bat_iterator(mbr);
-               canditer_init(&ci, mbr,NULL);
+               bi = bat_iterator(mbrb);
+               canditer_init(&ci, mbrb,NULL);
 
                for (BUN i = 0; i < ci.ncand; i++) {
-                       oid p = canditer_next(&ci) - mbr->hseqbase;
-                       mbr_t *inMBR = (mbr_t *)BUNtail(bi, p);
+                       oid p = canditer_next(&ci) - mbrb->hseqbase;
+                       const mbr *inMBR = (const mbr *)BUNtail(bi, p);
 
                        rtree_id_t rtree_id = i;
                        rtree_coord_t rect[4];
@@ -308,7 +326,8 @@ struct results_rtree {
 };
 
 static int
-f (rtree_id_t id, void *context) {
+f(rtree_id_t id, void *context)
+{
        struct results_rtree *results_rtree = (struct results_rtree *) context;
        results_rtree->candidates[results_rtree->results_next++] = (BUN) id;
        --results_rtree->results_left;
@@ -316,8 +335,10 @@ f (rtree_id_t id, void *context) {
 }
 
 BUN*
-RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit) {
+RTREEsearch(BAT *b, const void *inMBRptr, int result_limit)
+{
        BAT *pb;
+       const mbr *inMBR = inMBRptr;
        if (VIEWtparent(b)) {
                pb = BBP_desc(VIEWtparent(b));
        } else {
@@ -364,12 +385,14 @@ RTREEsearch(BAT *b, mbr_t *inMBR, int re
 }
 #else
 void
-RTREEdestroy(BAT *b) {
+RTREEdestroy(BAT *b)
+{
        (void) b;
 }
 
 void
-RTREEfree(BAT *b) {
+RTREEfree(BAT *b)
+{
        (void) b;
 }
 #endif
diff --git a/geom/monetdb5/geomBulk.c b/geom/monetdb5/geomBulk.c
--- a/geom/monetdb5/geomBulk.c
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to