Changeset: 5df2abd05a24 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5df2abd05a24
Modified Files:
        gdk/gdk.h
Branch: Jul2015
Log Message:

32-bit versions of macros.


diffs (99 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1154,6 +1154,7 @@ gdk_export bte ATOMelmshift(int sz);
  * @end itemize
  */
 /* NOTE: `p' is evaluated after a possible upgrade of the heap */
+#if SIZEOF_VAR_T == 8
 #define HTputvalue(b, p, v, copyall, HT)                               \
        do {                                                            \
                if ((b)->HT->varsized && (b)->HT->type) {               \
@@ -1185,8 +1186,6 @@ gdk_export bte ATOMelmshift(int sz);
                        ATOMputFIX((b)->HT->type, (p), v);              \
                }                                                       \
        } while (0)
-#define Hputvalue(b, p, v, copyall)    HTputvalue(b, p, v, copyall, H)
-#define Tputvalue(b, p, v, copyall)    HTputvalue(b, p, v, copyall, T)
 #define HTreplacevalue(b, p, v, HT)                                    \
        do {                                                            \
                if ((b)->HT->varsized && (b)->HT->type) {               \
@@ -1233,6 +1232,78 @@ gdk_export bte ATOMelmshift(int sz);
                        ATOMreplaceFIX((b)->HT->type, (p), v);          \
                }                                                       \
        } while (0)
+#else
+#define HTputvalue(b, p, v, copyall, HT)                               \
+       do {                                                            \
+               if ((b)->HT->varsized && (b)->HT->type) {               \
+                       var_t _d;                                       \
+                       ptr _ptr;                                       \
+                       ATOMputVAR((b)->HT->type, (b)->HT->vheap, &_d, v); \
+                       if ((b)->HT->width < SIZEOF_VAR_T &&            \
+                           ((b)->HT->width <= 2 ? _d - GDK_VAROFFSET : _d) >= 
((size_t) 1 << (8 * (b)->HT->width))) { \
+                               /* doesn't fit in current heap, upgrade it */ \
+                               if (GDKupgradevarheap((b)->HT, _d, (copyall), 
(b)->batRestricted == BAT_READ) != GDK_SUCCEED) \
+                                       goto bunins_failed;             \
+                       }                                               \
+                       _ptr = (p);                                     \
+                       switch ((b)->HT->width) {                       \
+                       case 1:                                         \
+                               * (unsigned char *) _ptr = (unsigned char) (_d 
- GDK_VAROFFSET); \
+                               break;                                  \
+                       case 2:                                         \
+                               * (unsigned short *) _ptr = (unsigned short) 
(_d - GDK_VAROFFSET); \
+                               break;                                  \
+                       case 4:                                         \
+                               * (var_t *) _ptr = _d;                  \
+                               break;                                  \
+                       }                                               \
+               } else {                                                \
+                       ATOMputFIX((b)->HT->type, (p), v);              \
+               }                                                       \
+       } while (0)
+#define HTreplacevalue(b, p, v, HT)                                    \
+       do {                                                            \
+               if ((b)->HT->varsized && (b)->HT->type) {               \
+                       var_t _d;                                       \
+                       ptr _ptr;                                       \
+                       _ptr = (p);                                     \
+                       switch ((b)->HT->width) {                       \
+                       case 1:                                         \
+                               _d = (var_t) * (unsigned char *) _ptr + 
GDK_VAROFFSET; \
+                               break;                                  \
+                       case 2:                                         \
+                               _d = (var_t) * (unsigned short *) _ptr + 
GDK_VAROFFSET; \
+                               break;                                  \
+                       case 4:                                         \
+                               _d = * (var_t *) _ptr;                  \
+                               break;                                  \
+                       }                                               \
+                       ATOMreplaceVAR((b)->HT->type, (b)->HT->vheap, &_d, v); \
+                       if ((b)->HT->width < SIZEOF_VAR_T &&            \
+                           ((b)->HT->width <= 2 ? _d - GDK_VAROFFSET : _d) >= 
((size_t) 1 << (8 * (b)->HT->width))) { \
+                               /* doesn't fit in current heap, upgrade it */ \
+                               if (GDKupgradevarheap((b)->HT, _d, 0, 
(b)->batRestricted == BAT_READ) != GDK_SUCCEED) \
+                                       goto bunins_failed;             \
+                       }                                               \
+                       _ptr = (p);                                     \
+                       switch ((b)->HT->width) {                       \
+                       case 1:                                         \
+                               * (unsigned char *) _ptr = (unsigned char) (_d 
- GDK_VAROFFSET); \
+                               break;                                  \
+                       case 2:                                         \
+                               * (unsigned short *) _ptr = (unsigned short) 
(_d - GDK_VAROFFSET); \
+                               break;                                  \
+                       case 4:                                         \
+                               * (var_t *) _ptr = _d;                  \
+                               break;                                  \
+                       }                                               \
+               } else {                                                \
+                       ATOMreplaceFIX((b)->HT->type, (p), v);          \
+               }                                                       \
+       } while (0)
+#endif
+#define Hputvalue(b, p, v, copyall)    HTputvalue(b, p, v, copyall, H)
+#define Tputvalue(b, p, v, copyall)    HTputvalue(b, p, v, copyall, T)
 #define Hreplacevalue(b, p, v)         HTreplacevalue(b, p, v, H)
 #define Treplacevalue(b, p, v)         HTreplacevalue(b, p, v, T)
 #define HTfastins_nocheck(b, p, v, s, HT)                      \
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to