[gegl] gegl-random: fix y handling in the new positional random stuff



commit 4c877f04bd2f70791cc42f96b8540e8566f49046
Author: Michael Natterer <mitch gimp org>
Date:   Thu Dec 13 21:24:34 2012 +0100

    gegl-random: fix y handling in the new positional random stuff
    
    and apply some coding style.

 gegl/gegl-random.c |   85 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 63 insertions(+), 22 deletions(-)
---
diff --git a/gegl/gegl-random.c b/gegl/gegl-random.c
index 8c4e82b..60b4bf3 100644
--- a/gegl/gegl-random.c
+++ b/gegl/gegl-random.c
@@ -42,10 +42,8 @@ static long primes[]={
  101963,101977,101987,101999,102001,102013,102019,102023
 };
 
-#define N_PRIMES  (sizeof(primes)/sizeof(primes[0]))
-
 /* these primes should not exist in the above set */
-#define XPRIME     103423 
+#define XPRIME     103423
 #define ZPRIME     101359
 #define NPRIME     101111
 #define MAX_TABLES 3
@@ -58,40 +56,52 @@ typedef struct GeglRandomSet
   long    prime[MAX_TABLES];
 } GeglRandomSet;
 
-#define make_index(x,y,n)   ((x) * XPRIME + (z) * ZPRIME * XPRIME + (n) * NPRIME * ZPRIME * XPRIME)
+#define make_index(x,y,n) ((x) * XPRIME + \
+                           (y) * ZPRIME * XPRIME + \
+                           (n) * NPRIME * ZPRIME * XPRIME)
 
-static GeglRandomSet *gegl_random_set_new (int seed)
+static GeglRandomSet *
+gegl_random_set_new (int seed)
 {
-  GRand    *gr;
-  int i;
   GeglRandomSet *set = g_malloc0 (sizeof (GeglRandomSet));
+  GRand *gr;
+  int i;
+
   set->seed = seed;
   set->tables = MAX_TABLES;
 
   gr = g_rand_new_with_seed (set->seed);
+
   for (i = 0; i < set->tables; i++)
     {
       int j;
-      set->prime[i] = primes[g_rand_int_range (gr, 0, N_PRIMES-2)];
-      /*
-       * it might be possible to share a set of random data between sets
+
+      set->prime[i] = primes[g_rand_int_range (gr, 0, G_N_ELEMENTS (primes) - 2)];
+
+      /* it might be possible to share a set of random data between sets
        * and rejuggle the prime sizes chosen and keep an additional offset
        * for feeding randomness.
        *
        */
-      set->table[i] = g_malloc0 (sizeof (gint64) * set->prime[i]); 
+      set->table[i] = g_malloc0 (sizeof (gint64) * set->prime[i]);
+
       for (j = 0; j < set->prime[i]; j++)
-        set->table[i][j] = (((gint64)g_rand_int (gr)) << 32) + g_rand_int(gr);
+        set->table[i][j] = (((gint64) g_rand_int (gr)) << 32) + g_rand_int (gr);
     }
+
   g_rand_free (gr);
+
   return set;
 }
 
-static void gegl_random_set_free (GeglRandomSet *set)
+static void
+gegl_random_set_free (GeglRandomSet *set)
 {
   int i;
+
   for (i = 0; i < set->tables; i++)
     g_free (set->table[i]);
+
   g_free (set);
 }
 
@@ -99,17 +109,20 @@ static void gegl_random_set_free (GeglRandomSet *set)
 static GeglRandomSet *cached = NULL;
 static GList         *cache  = NULL;
 
-static void trim_cache_to_length (int length)
+static void
+trim_cache_to_length (int length)
 {
   while (g_list_length (cache) > length)
     {
       GeglRandomSet *last = g_list_last (cache)->data;
+
       cache = g_list_remove (cache, last);
       gegl_random_set_free (last);
     }
 }
 
-static inline GeglRandomSet *gegl_random_get_set_for_seed (int seed)
+static inline GeglRandomSet *
+gegl_random_get_set_for_seed (int seed)
 {
   if (cached && cached->seed == seed)
     {
@@ -118,6 +131,7 @@ static inline GeglRandomSet *gegl_random_get_set_for_seed (int seed)
   else
     {
       GList *l;
+
       if (cached)
         {
           cache = g_list_prepend (cache, cached);
@@ -128,37 +142,54 @@ static inline GeglRandomSet *gegl_random_get_set_for_seed (int seed)
       for (l = cache; l; l=l->next)
         {
           GeglRandomSet *s = l->data;
+
           if (s->seed == seed)
             {
               cached = s;
               cache = g_list_remove (cache, cached);
+
               return cached;
             }
         }
+
       cached = gegl_random_set_new (seed);
     }
+
   return cached;
 }
 
 gint64
-gegl_random_int (int seed, int x, int y, int z, int n)
+gegl_random_int (int seed,
+                 int x,
+                 int y,
+                 int z,
+                 int n)
 {
   GeglRandomSet *set = gegl_random_get_set_for_seed (seed);
   /* XXX: z is unhandled, it should average like a mipmap - or even
    * use mipmap versions of random set
    */
-  unsigned long idx = make_index(x,y,n);
+  unsigned long idx = make_index (x, y, n);
   gint64 ret = 0;
   int i;
+
   for (i = 0; i < set->tables; i++)
     ret ^= set->table[i][idx % (set->prime[i])];
+
   return ret;
 }
 
 gint64
-gegl_random_int_range (int seed, int x, int y, int z, int n, int min, int max)
+gegl_random_int_range (int seed,
+                       int x,
+                       int y,
+                       int z,
+                       int n,
+                       int min,
+                       int max)
 {
   gint64 ret = gegl_random_int (seed, x, y, z, n);
+
   return (ret % (max-min)) + min;
 }
 
@@ -166,13 +197,23 @@ gegl_random_int_range (int seed, int x, int y, int z, int n, int min, int max)
 #define G_RAND_DOUBLE_TRANSFORM 2.3283064365386962890625e-10
 
 double
-gegl_random_double (int seed, int x, int y, int z, int n)
+gegl_random_double (int seed,
+                    int x,
+                    int y,
+                    int z,
+                    int n)
 {
-  return (gegl_random_int (seed,x,y,z,n) & 0xffffffff) * G_RAND_DOUBLE_TRANSFORM;
+  return (gegl_random_int (seed, x, y, z, n) & 0xffffffff) * G_RAND_DOUBLE_TRANSFORM;
 }
 
 double
-gegl_random_double_range (int seed, int x, int y, int z, int n, double min, double max)
+gegl_random_double_range (int seed,
+                          int x,
+                          int y,
+                          int z,
+                          int n,
+                          double min,
+                          double max)
 {
-  return gegl_random_double (seed, x, y, z, n) * (max-min) + min;
+  return gegl_random_double (seed, x, y, z, n) * (max - min) + min;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]