diff liboctave/dim-vector.h @ 10419:afe44ee90cbd

implement generic macro magic for repeated decls
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 17 Mar 2010 10:30:36 +0100
parents 6c19d6fcd7e5
children 3373fdc0b14a
line wrap: on
line diff
--- a/liboctave/dim-vector.h	Wed Mar 17 08:46:46 2010 +0100
+++ b/liboctave/dim-vector.h	Wed Mar 17 10:30:36 2010 +0100
@@ -31,6 +31,7 @@
 #include <string>
 
 #include "lo-error.h"
+#include "lo-macros.h"
 
 // Rationale: This implementation is more tricky than Array, but the
 // big plus is that dim_vector requires only one allocation instead of
@@ -154,54 +155,24 @@
     rep[1] = c;
     rep[2] = p;
   }
-  
-  dim_vector (octave_idx_type r, octave_idx_type c, octave_idx_type p,
-              octave_idx_type q)
-    : rep (newrep (4))
-  {
-    rep[0] = r;
-    rep[1] = c;
-    rep[2] = p;
-    rep[3] = q;
-  }
-  
-  dim_vector (octave_idx_type r, octave_idx_type c, octave_idx_type p,
-              octave_idx_type q, octave_idx_type s)
-    : rep (newrep (5))
-  {
-    rep[0] = r;
-    rep[1] = c;
-    rep[2] = p;
-    rep[3] = q;
-    rep[4] = s;
+
+#define ASSIGN_REP(i) rep[i] = d ## i;
+#define DIM_VECTOR_CTOR(N) \
+  dim_vector (OCT_MAKE_DECL_LIST(octave_idx_type, d, N)) \
+    : rep (newrep (N)) \
+  { \
+    OCT_ITERATE_MACRO(ASSIGN_REP, N) \
   }
-  
-  dim_vector (octave_idx_type r, octave_idx_type c, octave_idx_type p,
-              octave_idx_type q, octave_idx_type s, octave_idx_type t)
-    : rep (newrep (6))
-  {
-    rep[0] = r;
-    rep[1] = c;
-    rep[2] = p;
-    rep[3] = q;
-    rep[4] = s;
-    rep[5] = t;
-  }
-  
-  dim_vector (octave_idx_type r, octave_idx_type c, octave_idx_type p,
-              octave_idx_type q, octave_idx_type s, octave_idx_type t,
-              octave_idx_type u)
-    : rep (newrep (7))
-  {
-    rep[0] = r;
-    rep[1] = c;
-    rep[2] = p;
-    rep[3] = q;
-    rep[4] = s;
-    rep[5] = t;
-    rep[6] = u;
-  }
-  
+
+  // Add more if needed.
+  DIM_VECTOR_CTOR(4)
+  DIM_VECTOR_CTOR(5)
+  DIM_VECTOR_CTOR(6)
+  DIM_VECTOR_CTOR(7)
+
+#undef ASSIGN_REP
+#undef DIM_VECTOR_CTOR
+
   dim_vector (const octave_idx_type *vec, size_t vec_size)
     : rep (newrep (vec_size))
   {