Util-defines: avoid multiple calculation/access for MIN/MAX macros
authorCampbell Barton <ideasman42@gmail.com>
Sun, 8 Dec 2013 06:29:22 +0000 (17:29 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 8 Dec 2013 06:29:22 +0000 (17:29 +1100)
source/blender/blenkernel/intern/bmfont.c
source/blender/blenlib/BLI_utildefines.h
source/blender/blenlib/intern/BLI_heap.c
source/blender/blenlib/intern/BLI_mempool.c
source/blender/makesrna/intern/rna_define.c

index e962e8ca8310bb4e71fdf44e59b5b77099fd5e69..79b3f89da200f3f75678ed49b14e820e3810e2c6 100644 (file)
@@ -68,9 +68,6 @@ void printfGlyph(bmGlyph *glyph)
        printf(" advan: %3d reser: %3d\n", glyph->advance, glyph->reserved);
 }
 
-#define MAX2(x, y)          ((x) > (y) ? (x) : (y))
-#define MAX3(x, y, z)       (MAX2(MAX2((x), (y)), (z)))
-
 void calcAlpha(ImBuf *ibuf)
 {
        int i;
index 9e1297658b8bebe9a10f0b36339f87776337015a..ef2c61cc45a6ee3a362f3500fddc888109bbdb16 100644 (file)
 #endif
 
 /* min/max */
+#if defined(__GNUC__) || defined(__clang__)
+
+#define MIN2(x, y)  ({  \
+       typeof(x) x_ = (x); \
+       typeof(y) y_ = (y); \
+       ((x_) < (y_) ? (x_) : (y_)); })
+
+#define MAX2(x, y)  ({  \
+       typeof(x) x_ = (x); \
+       typeof(y) y_ = (y); \
+       ((x_) > (y_) ? (x_) : (y_)); })
+
+#else
 #define MIN2(x, y)          ((x) < (y) ? (x) : (y))
+#define MAX2(x, y)          ((x) > (y) ? (x) : (y))
+#endif
+
 #define MIN3(x, y, z)       (MIN2(MIN2((x), (y)), (z)))
 #define MIN4(x, y, z, a)    (MIN2(MIN2((x), (y)), MIN2((z), (a))))
 
-#define MAX2(x, y)          ((x) > (y) ? (x) : (y))
 #define MAX3(x, y, z)       (MAX2(MAX2((x), (y)), (z)))
 #define MAX4(x, y, z, a)    (MAX2(MAX2((x), (y)), MAX2((z), (a))))
 
index 206a8041c4adc3f90fbdab6642f14bcfd1925039..55dee4e8677fe3b671d44f9e0c796cc19b289a47 100644 (file)
@@ -125,7 +125,7 @@ Heap *BLI_heap_new_ex(unsigned int tot_reserve)
 {
        Heap *heap = (Heap *)MEM_callocN(sizeof(Heap), __func__);
        /* ensure we have at least one so we can keep doubling it */
-       heap->bufsize = MAX2(1, tot_reserve);
+       heap->bufsize = MAX2(1u, tot_reserve);
        heap->tree = (HeapNode **)MEM_mallocN(heap->bufsize * sizeof(HeapNode *), "BLIHeapTree");
        heap->arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "heap arena");
 
index 28539d9ca3470430cf436c23d3a3b2f635236605..c2b54023621e2923df82132ac0653a6bcee4965b 100644 (file)
@@ -257,7 +257,7 @@ BLI_mempool *BLI_mempool_create(unsigned int esize, unsigned int totelem,
        }
 
        if (flag & BLI_MEMPOOL_ALLOW_ITER) {
-               pool->esize = MAX2(esize, (int)sizeof(BLI_freenode));
+               pool->esize = MAX2(esize, (unsigned int)sizeof(BLI_freenode));
        }
        else {
                pool->esize = esize;
index fe9e957395733b88f7c4d4535a6a765120ce66c7..fe38ce2d86a669ea0625dc63d9f69ddf7d4ea11a 100644 (file)
@@ -66,11 +66,6 @@ BlenderDefRNA DefRNA = {NULL, {NULL, NULL}, {NULL, NULL}, NULL, 0, 0, 0, 1, 1};
 
 /* Duplicated code since we can't link in blenkernel or blenlib */
 
-#ifndef MIN2
-#define MIN2(x, y) ((x) < (y) ? (x) : (y))
-#define MAX2(x, y) ((x) > (y) ? (x) : (y))
-#endif
-
 /* pedantic check for '.', do this since its a hassle for translators */
 #ifndef NDEBUG
 #  define DESCR_CHECK(description, id1, id2)                                  \