summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2012-11-14 01:42:47 -0800
committerJosh Blum2012-11-14 01:42:47 -0800
commitfe61c4c8f6b3f1830b5f531b9c7d47936cd6ef82 (patch)
treef1face14c6267b6be1e6a89aee57d4d8f3ddb885
parent087b57cec17cc702a6e127c41e3058d58a38589c (diff)
downloadsandhi-fe61c4c8f6b3f1830b5f531b9c7d47936cd6ef82.tar.gz
sandhi-fe61c4c8f6b3f1830b5f531b9c7d47936cd6ef82.tar.bz2
sandhi-fe61c4c8f6b3f1830b5f531b9c7d47936cd6ef82.zip
io sigs: more accessors and size_t for sizes
-rw-r--r--include/gras/io_signature.hpp52
-rw-r--r--include/gras/io_signature.i12
2 files changed, 48 insertions, 16 deletions
diff --git a/include/gras/io_signature.hpp b/include/gras/io_signature.hpp
index 03902ea..cdc4f62 100644
--- a/include/gras/io_signature.hpp
+++ b/include/gras/io_signature.hpp
@@ -5,6 +5,7 @@
#include <vector>
#include <stdexcept>
+#include <cstdlib>
namespace gras
{
@@ -15,17 +16,25 @@ namespace gras
* Properties are a maximum and minimum number of ports,
* and an item size in bytes for each port.
*/
-struct IOSignature : std::vector<int>
+struct IOSignature : std::vector<size_t>
{
- static const int IO_INFINITE = -1;
+ static const int IO_INFINITE = ~0;
- //! Create an empty signature with infinite IO
+ //! Create an empty signature
IOSignature(void)
{
this->set_min_streams(IO_INFINITE);
this->set_max_streams(IO_INFINITE);
}
+ //! Create a signature with a single item size
+ IOSignature(const size_t size)
+ {
+ this->push_back(size);
+ this->set_min_streams(IO_INFINITE);
+ this->set_max_streams(IO_INFINITE);
+ }
+
//! Create a signature with the specified min and max streams
IOSignature(const int min_streams, const int max_streams)
{
@@ -38,14 +47,14 @@ struct IOSignature : std::vector<int>
}
//! Create a signature from a vector of IO widths
- IOSignature(const std::vector<int> &sig)
+ IOSignature(const std::vector<size_t> &sig)
{
this->assign(sig.begin(), sig.end());
- this->set_min_streams(this->size());
- this->set_max_streams(this->size());
+ this->set_min_streams(IO_INFINITE);
+ this->set_max_streams(IO_INFINITE);
}
- //! Construct from pointer for backwards compatible shared_ptr usage.
+ //! Construct from posize_ter for backwards compatible shared_ptr usage.
IOSignature(const IOSignature *sig)
{
*this = *sig;
@@ -63,6 +72,24 @@ struct IOSignature : std::vector<int>
return this;
};
+ const size_t &at(const size_t index) const
+ {
+ if (this->empty())
+ {
+ throw std::invalid_argument("io signature fail: indexing empty vector");
+ }
+ if (this->size() > index)
+ {
+ return std::vector<size_t>::at(index);
+ }
+ return this->back();
+ }
+
+ const size_t &operator[](const size_t index) const
+ {
+ return this->at(index);
+ }
+
void set_min_streams(const int val)
{
_min_streams = val;
@@ -83,17 +110,12 @@ struct IOSignature : std::vector<int>
return _max_streams;
}
- int sizeof_stream_item(const int index) const
+ int sizeof_stream_item(const size_t index) const
{
- if (this->empty()) return 0;
- if (this->size() > unsigned(index))
- {
- return this->at(index);
- }
- return this->back();
+ return this->at(index);
}
- std::vector<int> sizeof_stream_items(void) const
+ const std::vector<size_t> &sizeof_stream_items(void) const
{
return *this;
}
diff --git a/include/gras/io_signature.i b/include/gras/io_signature.i
index 1f41cc0..563dc2b 100644
--- a/include/gras/io_signature.i
+++ b/include/gras/io_signature.i
@@ -11,8 +11,18 @@
%ignore gras::IOSignature::operator->() const;
%include <std_vector.i>
-%template () std::vector<int>;
+%template () std::vector<size_t>;
+
+%ignore gras::IOSignature::operator[]; //ignore warnings about %extend
%include <gras/io_signature.hpp>
+%extend gras::IOSignature
+{
+ const size_t &__getitem__(const size_t index)
+ {
+ return ($self)->at(index);
+ }
+}
+
#endif /*INCLUDED_GRAS_IO_SIGNATURE_I*/