Additional QA for tuple.
[debian/gnuradio] / gruel / src / lib / pmt / pmt.cc
index 8bf5b2dea51069f46698cb03ee9da2fd8c1be308..20dc4e42c403014b37d0f36fcbebd9a2889dea32 100644 (file)
@@ -673,20 +673,21 @@ pmt_to_tuple(const pmt_t &x)
 
   size_t len = pmt_length(x);
   pmt_tuple *t = new pmt_tuple(len);
+  pmt_t r = pmt_t(t);
 
   if (x->is_vector()){
     for (size_t i = 0; i < len; i++)
       t->_set(i, _vector(x)->ref(i));
-    return pmt_t(t);
+    return r;
   }
 
   if (x->is_pair()){
     pmt_t y = x;
     for (size_t i = 0; i < len; i++){
       t->_set(i, pmt_car(y));
-      y = pmt_cdr(x);
+      y = pmt_cdr(y);
     }
-    return pmt_t(t);
+    return r;
   }
 
   throw pmt_wrong_type("pmt_to_tuple", x);
@@ -928,6 +929,19 @@ pmt_equal(const pmt_t& x, const pmt_t& y)
     return true;
   }
 
+  if (x->is_tuple() && y->is_tuple()){
+    pmt_tuple *xv = _tuple(x);
+    pmt_tuple *yv = _tuple(y);
+    if (xv->length() != yv->length())
+      return false;
+
+    for (unsigned i = 0; i < xv->length(); i++)
+      if (!pmt_equal(xv->_ref(i), yv->_ref(i)))
+       return false;
+
+    return true;
+  }
+
   if (x->is_uniform_vector() && y->is_uniform_vector()){
     pmt_uniform_vector *xv = _uniform_vector(x);
     pmt_uniform_vector *yv = _uniform_vector(y);