return dynamic_cast<pmt_vector*>(x.get());
}
+static pmt_uniform_vector *
+_uniform_vector(pmt_t x)
+{
+ return dynamic_cast<pmt_uniform_vector*>(x.get());
+}
+
static pmt_dict *
_dict(pmt_t x)
{
_vector(vector)->fill(obj);
}
+////////////////////////////////////////////////////////////////////////////
+// Uniform Numeric Vectors
+////////////////////////////////////////////////////////////////////////////
+
+bool
+pmt_is_uniform_vector(pmt_t x)
+{
+ return x->is_uniform_vector();
+}
+
+const void *
+pmt_uniform_vector_elements(pmt_t vector, size_t &len)
+{
+ if (!vector->is_uniform_vector())
+ throw pmt_wrong_type("pmt_uniform_vector_elements", vector);
+ return _uniform_vector(vector)->uniform_elements(len);
+}
+
+void *
+pmt_uniform_vector_writeable_elements(pmt_t vector, size_t &len)
+{
+ if (!vector->is_uniform_vector())
+ throw pmt_wrong_type("pmt_uniform_vector_writeable_elements", vector);
+ return _uniform_vector(vector)->uniform_writeable_elements(len);
+}
+
////////////////////////////////////////////////////////////////////////////
// Dictionaries
////////////////////////////////////////////////////////////////////////////
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);
+ if (xv->length() != yv->length())
+ return false;
+
+ size_t len_x, len_y;
+ if (memcmp(xv->uniform_elements(len_x),
+ yv->uniform_elements(len_y),
+ len_x) == 0)
+ return true;
+
+ return true;
+ }
+
// FIXME add other cases here...
return false;
if (x->is_vector())
return _vector(x)->length();
+ if (x->is_uniform_vector())
+ return _uniform_vector(x)->length();
+
// FIXME list length
- // FIXME uniform vector length
// FIXME dictionary length (number of entries)
throw pmt_wrong_type("pmt_length", x);
// FIXME do it destructively
return pmt_reverse(list);
}
+