]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/include/tuple.hh
Merge with master
[lilypond.git] / flower / include / tuple.hh
index 1adf194f1a90377a6ab4070963c13b089e200dd0..5f2705b8fab12501a9f615114eb7a32cb7b27e09 100644 (file)
@@ -1,34 +1,62 @@
-/*   
+/*
   tuple.hh -- declare Tuple
-  
+
   source file of the GNU LilyPond music typesetter
-  
-  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
 
-#ifndef TUPLET_HH
-#define TUPLET_HH
-#error
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+*/
 
+#ifndef TUPLE_HH
+#define TUPLE_HH
 
-template<class T, class U>
+template<class T, int N>
 struct Tuple
 {
-  T e1_;
-  U e2_;
-
-  Tuple (T t, U u)
-    {
-      e1_ = t;
-      e2_ = u;
-    }
+  T t_array[N];
   Tuple ()
-    {
-    }
+  {
+  }
+  
+  Tuple (T const *src)
+  {
+    for (int i = 0; i < N; i++)
+      t_array[i] = src[i];
+  }
 };
 
+template<class K>
+struct Tuple2 : public Tuple<K, 2>
+{
+  Tuple2 ()
+  {
+
+  }
+  
+  Tuple2 (K a, K b)
+  {
+    Tuple<K,2> *p(this);       //  ugr.
+    
+    p->t_array[0] = a;
+    p->t_array[1] = b;
+  }
+};
 
+  
+template<class T, int N>
+inline bool
+operator<(Tuple<T, N> const &t1,
+         Tuple<T, N> const &t2)
+{
+  for (int i = 0; i < N ; i++)
+    {
+      if (t1.t_array[i] > t2.t_array[i])
+       return false;
+      if (t1.t_array[i] < t2.t_array[i])
+       return true;
+    }
 
-#endif /* TUPLET_HH */
+  return false;
+}
 
+#endif /* TUPLE_HH */