Imported Upstream version 3.2.2
[debian/gnuradio] / pmt / src / lib / unv_template.cc.t
1 ////////////////////////////////////////////////////////////////////////////
2 //                           pmt_@TAG@vector
3 ////////////////////////////////////////////////////////////////////////////
4
5 static pmt_@TAG@vector *
6 _@TAG@vector(pmt_t x)
7 {
8   return dynamic_cast<pmt_@TAG@vector*>(x.get());
9 }
10
11
12 pmt_@TAG@vector::pmt_@TAG@vector(size_t k, @TYPE@ fill)
13   : d_v(k)
14 {
15   for (size_t i = 0; i < k; i++)
16     d_v[i] = fill;
17 }
18
19 pmt_@TAG@vector::pmt_@TAG@vector(size_t k, const @TYPE@ *data)
20   : d_v(k)
21 {
22   for (size_t i = 0; i < k; i++)
23     d_v[i] = data[i];
24 }
25
26 @TYPE@
27 pmt_@TAG@vector::ref(size_t k) const
28 {
29   if (k >= length())
30     throw pmt_out_of_range("pmt_@TAG@vector_ref", pmt_from_long(k));
31   return d_v[k];
32 }
33
34 void 
35 pmt_@TAG@vector::set(size_t k, @TYPE@ x)
36 {
37   if (k >= length())
38     throw pmt_out_of_range("pmt_@TAG@vector_set", pmt_from_long(k));
39   d_v[k] = x;
40 }
41
42 const @TYPE@ *
43 pmt_@TAG@vector::elements(size_t &len)
44 {
45   len = length();
46   return &d_v[0];
47 }
48
49 @TYPE@ *
50 pmt_@TAG@vector::writable_elements(size_t &len)
51 {
52   len = length();
53   return &d_v[0];
54 }
55
56 const void*
57 pmt_@TAG@vector::uniform_elements(size_t &len)
58 {
59   len = length() * sizeof(@TYPE@);
60   return &d_v[0];
61 }
62
63 void*
64 pmt_@TAG@vector::uniform_writable_elements(size_t &len)
65 {
66   len = length() * sizeof(@TYPE@);
67   return &d_v[0];
68 }
69
70 bool
71 pmt_is_@TAG@vector(pmt_t obj)
72 {
73   return obj->is_@TAG@vector();
74 }
75
76 pmt_t
77 pmt_make_@TAG@vector(size_t k, @TYPE@ fill)
78 {
79   return pmt_t(new pmt_@TAG@vector(k, fill));
80 }
81
82 pmt_t
83 pmt_init_@TAG@vector(size_t k, const @TYPE@ *data)
84 {
85   return pmt_t(new pmt_@TAG@vector(k, data));
86 }
87
88 @TYPE@
89 pmt_@TAG@vector_ref(pmt_t vector, size_t k)
90 {
91   if (!vector->is_@TAG@vector())
92     throw pmt_wrong_type("pmt_@TAG@vector_ref", vector);
93   return _@TAG@vector(vector)->ref(k);
94 }
95
96 void
97 pmt_@TAG@vector_set(pmt_t vector, size_t k, @TYPE@ obj)
98 {
99   if (!vector->is_@TAG@vector())
100     throw pmt_wrong_type("pmt_@TAG@vector_set", vector);
101   _@TAG@vector(vector)->set(k, obj);
102 }
103
104 const @TYPE@ *
105 pmt_@TAG@vector_elements(pmt_t vector, size_t &len)
106 {
107   if (!vector->is_@TAG@vector())
108     throw pmt_wrong_type("pmt_@TAG@vector_elements", vector);
109   return _@TAG@vector(vector)->elements(len);
110 }
111
112 @TYPE@ *
113 pmt_@TAG@vector_writable_elements(pmt_t vector, size_t &len)
114 {
115   if (!vector->is_@TAG@vector())
116     throw pmt_wrong_type("pmt_@TAG@vector_writable_elements", vector);
117   return _@TAG@vector(vector)->writable_elements(len);
118 }