summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnathan Corgan <johnathan@corganlabs.com>2014-05-16 16:13:47 -0700
committerJohnathan Corgan <johnathan@corganlabs.com>2014-05-16 16:13:47 -0700
commitcb0bc7f070c41825ab7aee7f093dc326e62e2fdb (patch)
tree5690633482fcdc9f8972491b90c8ba79d4405a14
parenta9b241b7505be3eaefd36205346e7238b6f2163a (diff)
parent496c74a460bb7fe472f5ee4b8861b65a0f488331 (diff)
Merge remote-tracking branch 'osh/pdu_uvector_itemsize'
-rw-r--r--gnuradio-runtime/include/pmt/pmt.h3
-rw-r--r--gnuradio-runtime/lib/pmt/pmt.cc10
-rw-r--r--gnuradio-runtime/lib/pmt/pmt_int.h1
-rw-r--r--gnuradio-runtime/lib/pmt/unv_template.h.t1
-rwxr-xr-xgnuradio-runtime/python/pmt/qa_pmt.py2
-rw-r--r--gnuradio-runtime/swig/pmt_swig.i1
6 files changed, 18 insertions, 0 deletions
diff --git a/gnuradio-runtime/include/pmt/pmt.h b/gnuradio-runtime/include/pmt/pmt.h
index 3cae2f2dc9..5929975a29 100644
--- a/gnuradio-runtime/include/pmt/pmt.h
+++ b/gnuradio-runtime/include/pmt/pmt.h
@@ -411,6 +411,9 @@ PMT_API bool is_f64vector(pmt_t x);
PMT_API bool is_c32vector(pmt_t x);
PMT_API bool is_c64vector(pmt_t x);
+//! item size in bytes if \p x is any kind of uniform numeric vector
+PMT_API size_t uniform_vector_itemsize(pmt_t x);
+
PMT_API pmt_t make_u8vector(size_t k, uint8_t fill);
PMT_API pmt_t make_s8vector(size_t k, int8_t fill);
PMT_API pmt_t make_u16vector(size_t k, uint16_t fill);
diff --git a/gnuradio-runtime/lib/pmt/pmt.cc b/gnuradio-runtime/lib/pmt/pmt.cc
index 7760c02815..8315100ab3 100644
--- a/gnuradio-runtime/lib/pmt/pmt.cc
+++ b/gnuradio-runtime/lib/pmt/pmt.cc
@@ -760,6 +760,14 @@ is_uniform_vector(pmt_t x)
return x->is_uniform_vector();
}
+size_t
+uniform_vector_itemsize(pmt_t vector)
+{
+ if (!vector->is_uniform_vector())
+ throw wrong_type("pmt_uniform_vector_itemsize", vector);
+ return _uniform_vector(vector)->itemsize();
+}
+
const void *
uniform_vector_elements(pmt_t vector, size_t &len)
{
@@ -776,6 +784,8 @@ uniform_vector_writable_elements(pmt_t vector, size_t &len)
return _uniform_vector(vector)->uniform_writable_elements(len);
}
+
+
////////////////////////////////////////////////////////////////////////////
// Dictionaries
////////////////////////////////////////////////////////////////////////////
diff --git a/gnuradio-runtime/lib/pmt/pmt_int.h b/gnuradio-runtime/lib/pmt/pmt_int.h
index aceb7b74d9..ca90c5a475 100644
--- a/gnuradio-runtime/lib/pmt/pmt_int.h
+++ b/gnuradio-runtime/lib/pmt/pmt_int.h
@@ -238,6 +238,7 @@ public:
virtual const void *uniform_elements(size_t &len) = 0;
virtual void *uniform_writable_elements(size_t &len) = 0;
virtual size_t length() const = 0;
+ virtual size_t itemsize() const = 0;
};
#include "pmt_unv_int.h"
diff --git a/gnuradio-runtime/lib/pmt/unv_template.h.t b/gnuradio-runtime/lib/pmt/unv_template.h.t
index 83ba0be0f4..93ca684463 100644
--- a/gnuradio-runtime/lib/pmt/unv_template.h.t
+++ b/gnuradio-runtime/lib/pmt/unv_template.h.t
@@ -14,6 +14,7 @@ public:
bool is_@TAG@vector() const { return true; }
size_t length() const { return d_v.size(); }
+ size_t itemsize() const { return sizeof(@TYPE@); }
@TYPE@ ref(size_t k) const;
void set(size_t k, @TYPE@ x);
const @TYPE@ *elements(size_t &len);
diff --git a/gnuradio-runtime/python/pmt/qa_pmt.py b/gnuradio-runtime/python/pmt/qa_pmt.py
index 2a72fa6089..5c1af2c00e 100755
--- a/gnuradio-runtime/python/pmt/qa_pmt.py
+++ b/gnuradio-runtime/python/pmt/qa_pmt.py
@@ -43,6 +43,7 @@ class test_pmt(unittest.TestCase):
s = pmt.serialize_str(v)
d = pmt.deserialize_str(s)
self.assertTrue(pmt.equal(v, d))
+ self.assertEqual(pmt.uniform_vector_itemsize(v), 4)
def test04(self):
v = pmt.init_f64vector(3, [11, -22, 33])
@@ -91,6 +92,7 @@ class test_pmt(unittest.TestCase):
s = pmt.serialize_str(v)
d = pmt.deserialize_str(s)
self.assertTrue(pmt.equal(v, d))
+ self.assertEqual(pmt.uniform_vector_itemsize(v), 8)
def test12(self):
v = pmt.init_c64vector(3, [11 + -101j, -22 + 202j, 33 + -303j])
diff --git a/gnuradio-runtime/swig/pmt_swig.i b/gnuradio-runtime/swig/pmt_swig.i
index 2c0444fdf5..5ea612b5b8 100644
--- a/gnuradio-runtime/swig/pmt_swig.i
+++ b/gnuradio-runtime/swig/pmt_swig.i
@@ -170,6 +170,7 @@ namespace pmt{
bool is_f64vector(pmt_t x);
bool is_c32vector(pmt_t x);
bool is_c64vector(pmt_t x);
+ size_t uniform_vector_itemsize(pmt_t x);
pmt_t make_u8vector(size_t k, uint8_t fill);
pmt_t make_s8vector(size_t k, int8_t fill);
pmt_t make_u16vector(size_t k, uint16_t fill);