X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gnuradio-core%2Fsrc%2Flib%2Fruntime%2Fgr_io_signature.cc;h=1c1b06f027676ff4d33e286c5fc7bbfcace8d7bb;hb=ea29b08aeb54227e6628f655ccfdb96fe4d8c378;hp=8351202d85b9c1778b1d323b08e6efb100b0b59f;hpb=09a1e803a9e6587c78d20cdf16891e5295874668;p=debian%2Fgnuradio diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.cc b/gnuradio-core/src/lib/runtime/gr_io_signature.cc index 8351202d..1c1b06f0 100644 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.cc +++ b/gnuradio-core/src/lib/runtime/gr_io_signature.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,28 +27,86 @@ #include #include -gr_io_signature::gr_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item) +gr_io_signature_sptr +gr_make_io_signaturev(int min_streams, int max_streams, + const std::vector &sizeof_stream_items) +{ + return gr_io_signature_sptr (new gr_io_signature (min_streams, max_streams, + sizeof_stream_items)); +} + +gr_io_signature_sptr +gr_make_io_signature(int min_streams, int max_streams, + int sizeof_stream_item) +{ + std::vector sizeof_items(1); + sizeof_items[0] = sizeof_stream_item; + return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); +} + +gr_io_signature_sptr +gr_make_io_signature2(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2) +{ + std::vector sizeof_items(2); + sizeof_items[0] = sizeof_stream_item1; + sizeof_items[1] = sizeof_stream_item2; + return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); +} + +gr_io_signature_sptr +gr_make_io_signature3(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2, + int sizeof_stream_item3) +{ + std::vector sizeof_items(3); + sizeof_items[0] = sizeof_stream_item1; + sizeof_items[1] = sizeof_stream_item2; + sizeof_items[2] = sizeof_stream_item3; + return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); +} + +// ------------------------------------------------------------------------ + + +gr_io_signature::gr_io_signature (int min_streams, int max_streams, + const std::vector &sizeof_stream_items) { if (min_streams < 0 || (max_streams != IO_INFINITE && max_streams < min_streams)) - throw std::invalid_argument ("gr_io_signature"); + throw std::invalid_argument ("gr_io_signature(1)"); + if (sizeof_stream_items.size() < 1) + throw std::invalid_argument("gr_io_signature(2)"); + + for (size_t i = 0; i < sizeof_stream_items.size(); i++){ + if (max_streams != 0 && sizeof_stream_items[i] < 1) + throw std::invalid_argument("gr_io_signature(3)"); + } + d_min_streams = min_streams; d_max_streams = max_streams; - d_sizeof_stream_item = sizeof_stream_item; + d_sizeof_stream_item = sizeof_stream_items; } gr_io_signature::~gr_io_signature () { - // NOP for now - // std::cout << "destroying gr_io_signature: " << this << '\n'; } -gr_io_signature_sptr -gr_make_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item) +int +gr_io_signature::sizeof_stream_item (int _index) const { - return gr_io_signature_sptr (new gr_io_signature (min_streams, max_streams, - sizeof_stream_item)); + if (_index < 0) + throw std::invalid_argument ("gr_io_signature::sizeof_stream_item"); + + size_t index = _index; + return d_sizeof_stream_item[std::min(index, d_sizeof_stream_item.size() - 1)]; } - +std::vector +gr_io_signature::sizeof_stream_items() const +{ + return d_sizeof_stream_item; +}