summaryrefslogtreecommitdiff
path: root/gruel/src/lib/pmt/pmt.cc
diff options
context:
space:
mode:
authorEric Blossom <eb@comsec.com>2009-08-15 01:02:15 -0700
committerEric Blossom <eb@comsec.com>2009-08-15 01:02:15 -0700
commitf8f85dcf9de45cbb42ee46b6f6e3d1e685b0103a (patch)
tree9dde867c23c7b3593e70b56d496b01a212a71fa2 /gruel/src/lib/pmt/pmt.cc
parent7ca21b2eb16ed1495001cdd62d58a9d51dd3f436 (diff)
Additional QA for tuple.
Diffstat (limited to 'gruel/src/lib/pmt/pmt.cc')
-rw-r--r--gruel/src/lib/pmt/pmt.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/gruel/src/lib/pmt/pmt.cc b/gruel/src/lib/pmt/pmt.cc
index 8bf5b2dea5..20dc4e42c4 100644
--- a/gruel/src/lib/pmt/pmt.cc
+++ b/gruel/src/lib/pmt/pmt.cc
@@ -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);