Changeset: 7a7c6276779b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7a7c6276779b
Modified Files:
        gdk/gdk_logger.c
        gdk/gdk_logger_internals.h
Branch: default
Log Message:

Replace type_id/type_nr/type_nme bats with a pair of small arrays.


diffs (167 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -107,42 +107,20 @@ logger_unlock(logger *lg)
        MT_lock_unset(&lg->lock);
 }
 
-static bte
+static inline bte
 find_type(logger *lg, int tpe)
 {
-       BATiter cni = bat_iterator_nolock(lg->type_nr);
-       bte *res = (bte*)Tloc(lg->type_id, 0);
-       BUN p;
-
-       /* type should be there !*/
-       if (BAThash(lg->type_nr) == GDK_SUCCEED) {
-               MT_rwlock_rdlock(&cni.b->thashlock);
-               HASHloop_int(cni, cni.b->thash, p, &tpe) {
-                       MT_rwlock_rdunlock(&cni.b->thashlock);
-                       return res[p];
-               }
-               MT_rwlock_rdunlock(&cni.b->thashlock);
-       }
-       return -1;
+       assert(tpe >= 0 && tpe < MAXATOMS);
+       return lg->type_id[tpe];
 }
 
-static int
+static inline int
 find_type_nr(logger *lg, bte tpe)
 {
-       BATiter cni = bat_iterator_nolock(lg->type_id);
-       int *res = (int*)Tloc(lg->type_nr, 0);
-       BUN p;
-
-       /* type should be there !*/
-       if (BAThash(lg->type_id) == GDK_SUCCEED) {
-               MT_rwlock_rdlock(&cni.b->thashlock);
-               HASHloop_bte(cni, cni.b->thash, p, &tpe) {
-                       MT_rwlock_rdunlock(&cni.b->thashlock);
-                       return res[p];
-               }
-               MT_rwlock_rdunlock(&cni.b->thashlock);
-       }
-       return -1;
+       int nr = lg->type_nr[tpe < 0 ? 256 + tpe : tpe];
+       if (nr == 255)
+               return -1;
+       return nr;
 }
 
 static BUN
@@ -792,11 +770,10 @@ logger_write_new_types(logger *lg, FILE 
        for (int i = 0; i < GDKatomcnt; i++) {
                if (ATOMvarsized(i))
                        continue;
-               if (append &&
-                   (BUNappend(lg->type_id, &id, false) != GDK_SUCCEED ||
-                    BUNappend(lg->type_nme, BATatoms[i].name, false) != 
GDK_SUCCEED ||
-                    BUNappend(lg->type_nr, &i, false) != GDK_SUCCEED))
-                       return GDK_FAIL;
+               if (append) {
+                       lg->type_id[i] = id;
+                       lg->type_nr[id] = i;
+               }
                if (fprintf(fp, "%d,%s\n", id, BATatoms[i].name) < 0)
                        return GDK_FAIL;
                id++;
@@ -806,11 +783,10 @@ logger_write_new_types(logger *lg, FILE 
        for (int i = 0; i < GDKatomcnt; i++) {
                if (!ATOMvarsized(i))
                        continue;
-               if (append &&
-                   (BUNappend(lg->type_id, &id, false) != GDK_SUCCEED ||
-                    BUNappend(lg->type_nme, BATatoms[i].name, false) != 
GDK_SUCCEED ||
-                    BUNappend(lg->type_nr, &i, false) != GDK_SUCCEED))
-                       return GDK_FAIL;
+               if (append) {
+                       lg->type_id[i] = id;
+                       lg->type_nr[256 + id] = i;
+               }
                if (fprintf(fp, "%d,%s\n", id, BATatoms[i].name) < 0)
                        return GDK_FAIL;
                id++;
@@ -952,16 +928,12 @@ logger_read_types_file(logger *lg, FILE 
        while(fscanf(fp, "%d,%63s\n", &id, atom_name) == 2) {
                int i = ATOMindex(atom_name);
 
-               if (id > 255 || i < 0) {
+               if (id < -127 || id > 127 || i < 0) {
                        GDKerror("unknown type in log file '%s'\n", atom_name);
                        return GDK_FAIL;
                }
-               bte lid = (bte)id;
-               if (BUNappend(lg->type_id, &lid, false) != GDK_SUCCEED ||
-                   BUNappend(lg->type_nme, atom_name, false) != GDK_SUCCEED ||
-                   BUNappend(lg->type_nr, &i, false) != GDK_SUCCEED) {
-                       return GDK_FAIL;
-               }
+               lg->type_id[i] = (int8_t) id;
+               lg->type_nr[id < 0 ? 256 + id : id] = i;
        }
        return GDK_SUCCEED;
 }
@@ -1803,10 +1775,6 @@ logger_load(int debug, const char *fn, c
        lg->seqs_val = NULL;
        lg->dseqs = NULL;
 
-       lg->type_id = NULL;
-       lg->type_nme = NULL;
-       lg->type_nr = NULL;
-
        if (!LOG_DISABLED(lg)) {
                /* try to open logfile backup, or failing that, the file
                 * itself. we need to know whether this file exists when
@@ -1831,18 +1799,9 @@ logger_load(int debug, const char *fn, c
        strconcat_len(bak, sizeof(bak), fn, "_catalog_bid", NULL);
        catalog_bid = BBPindex(bak);
 
-       /* create transient bats for type mapping, to be read from disk */
-       lg->type_id = logbat_new(TYPE_bte, BATSIZE, TRANSIENT);
-       lg->type_nme = logbat_new(TYPE_str, BATSIZE, TRANSIENT);
-       lg->type_nr = logbat_new(TYPE_int, BATSIZE, TRANSIENT);
-
-       if (lg->type_id == NULL || lg->type_nme == NULL || lg->type_nr == NULL) 
{
-               if (fp)
-                       fclose(fp);
-               fp = NULL;
-               GDKerror("cannot create type bats");
-               goto error;
-       }
+       /* initialize arrays for type mapping, to be read from disk */
+       memset(lg->type_id, -1, sizeof(lg->type_id));
+       memset(lg->type_nr, 255, sizeof(lg->type_nr));
 
        /* this is intentional - if catalog_bid is 0, force it to find
         * the persistent catalog */
@@ -2070,9 +2029,6 @@ logger_load(int debug, const char *fn, c
        logbat_destroy(lg->seqs_id);
        logbat_destroy(lg->seqs_val);
        logbat_destroy(lg->dseqs);
-       logbat_destroy(lg->type_id);
-       logbat_destroy(lg->type_nme);
-       logbat_destroy(lg->type_nr);
        GDKfree(lg->fn);
        GDKfree(lg->dir);
        GDKfree(lg->local_dir);
diff --git a/gdk/gdk_logger_internals.h b/gdk/gdk_logger_internals.h
--- a/gdk/gdk_logger_internals.h
+++ b/gdk/gdk_logger_internals.h
@@ -56,10 +56,10 @@ struct logger {
        BAT *seqs_val;          /* lng value column */
        BAT *dseqs;             /* deleted from seqs table */
 
-       /* we map type names into internal log ids, split in 2 ranges (0-127 
fixed size types and 128 - 254 varsized) */
-       BAT *type_id;           /* id of a type */
-       BAT *type_nme;          /* names of types */
-       BAT *type_nr;           /* atom number of this type (transient) */
+       /* we map type names into internal log ids, split in 2 ranges
+        * (0-127 fixed size types and 129 - 255 varsized) */
+       uint8_t type_nr[256];   /* mapping from logger type id to GDK type nr */
+       int8_t type_id[128];    /* mapping from GDK type nr to logger type id */
 
        void *buf;
        size_t bufsize;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to