diff options
Diffstat (limited to 'pmt/src/lib/pmt.cc')
-rw-r--r-- | pmt/src/lib/pmt.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/pmt/src/lib/pmt.cc b/pmt/src/lib/pmt.cc index a1569e414..093f6fb22 100644 --- a/pmt/src/lib/pmt.cc +++ b/pmt/src/lib/pmt.cc @@ -91,6 +91,12 @@ _vector(pmt_t x) 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) { @@ -432,6 +438,32 @@ pmt_vector_fill(pmt_t vector, pmt_t 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 //////////////////////////////////////////////////////////////////////////// @@ -703,3 +735,4 @@ pmt_reverse_x(pmt_t list) // FIXME do it destructively return pmt_reverse(list); } + |