summaryrefslogtreecommitdiff
path: root/lib/element_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/element_impl.hpp')
-rw-r--r--lib/element_impl.hpp135
1 files changed, 15 insertions, 120 deletions
diff --git a/lib/element_impl.hpp b/lib/element_impl.hpp
index d0f7f5d..988bbbf 100644
--- a/lib/element_impl.hpp
+++ b/lib/element_impl.hpp
@@ -17,31 +17,13 @@
#ifndef INCLUDED_LIBGRAS_ELEMENT_IMPL_HPP
#define INCLUDED_LIBGRAS_ELEMENT_IMPL_HPP
-#include <gras_impl/debug.hpp>
-#include <gras_impl/token.hpp>
-#include <gras_impl/messages.hpp>
-#include <gras_impl/output_buffer_queues.hpp>
-#include <gras_impl/input_buffer_queues.hpp>
-#include <gras_impl/interruptible_thread.hpp>
-
-#include <tsbe/block.hpp>
-#include <tsbe/topology.hpp>
-#include <tsbe/executor.hpp>
+#include <gras_impl/block_actor.hpp>
+#include <Apology/Topology.hpp>
+#include <Apology/Executor.hpp>
#include <gnuradio/element.hpp>
#include <gnuradio/block.hpp>
-#include <set>
-#include <vector>
-#include <queue>
-
-static GRAS_FORCE_INLINE unsigned long myulround(const double x)
-{
- return (unsigned long)(x + 0.5);
-}
-
-static GRAS_FORCE_INLINE unsigned long long myullround(const double x)
-{
- return (unsigned long long)(x + 0.5);
-}
+#include <gras_impl/token.hpp>
+#include <gras_impl/interruptible_thread.hpp>
namespace gnuradio
{
@@ -54,114 +36,27 @@ struct ElementImpl
void top_block_cleanup(void);
void hier_block_cleanup(void);
- //stuff for when its a block
+ //common element properties
std::string name;
long unique_id;
-
- //per port properties
- std::vector<size_t> input_items_sizes;
- std::vector<size_t> output_items_sizes;
IOSignature input_signature;
IOSignature output_signature;
- std::vector<size_t> input_history_items;
- std::vector<size_t> output_multiple_items;
- std::vector<size_t> input_multiple_items;
- std::vector<bool> input_inline_enables;
-
- //keeps track of production
- std::vector<uint64_t> items_consumed;
- std::vector<uint64_t> items_produced;
-
- //work buffers for the classic interface
- size_t work_noutput_items;
- std::vector<const void *> work_input_items;
- std::vector<void *> work_output_items;
- std::vector<int> work_ninput_items;
- std::vector<int> fcast_ninput_items;
-
- //work buffers for the new work interface
- Block::InputItems input_items;
- Block::OutputItems output_items;
- ptrdiff_t work_io_ptr_mask;
- //track work's calls to produce and consume
- std::vector<size_t> produce_items;
- std::vector<size_t> consume_items;
- std::vector<bool> consume_called;
-
- //track the subscriber counts
- std::vector<Token> input_tokens;
- std::vector<Token> output_tokens;
- std::set<Token> token_pool;
-
- std::vector<SBufferToken> output_buffer_tokens;
-
- //buffer queues and ready conditions
- InputBufferQueues input_queues;
- OutputBufferQueues<SBuffer> output_queues;
-
- //tag tracking
- std::vector<bool> input_tags_changed;
- std::vector<std::vector<Tag> > input_tags;
- Block::tag_propagation_policy_t tag_prop_policy;
-
- //topological things
- tsbe::Block block;
- tsbe::Topology topology;
- tsbe::Executor executor;
- const tsbe::Element &get_elem(void) const
- {
- if (block) return block;
- return topology;
- }
- //gets the handlers access for forecast and work
- Block *block_ptr;
- tsbe::TaskInterface work_task_iface; //only valid during work
-
- //interruptible thread stuff
+ //top block stuff
SharedThreadGroup thread_group;
- boost::shared_ptr<InterruptibleThread> interruptible_thread;
-
- //handlers
- void handle_input_msg(const tsbe::TaskInterface &, const size_t, const tsbe::Wax &);
- void handle_output_msg(const tsbe::TaskInterface &, const size_t, const tsbe::Wax &);
- void topology_update(const tsbe::TaskInterface &);
- void handle_block_msg(const tsbe::TaskInterface &, const tsbe::Wax &);
- void handle_allocation(const tsbe::TaskInterface &);
- void handle_task(const tsbe::TaskInterface &);
- void mark_done(const tsbe::TaskInterface &);
- void conclusion(const tsbe::TaskInterface &task_iface, const bool);
- void buffer_returner(const size_t index, SBuffer &buffer);
- void input_update(const tsbe::TaskInterface &task_iface);
- void sort_tags(const size_t index);
- void trim_tags(const tsbe::TaskInterface &, const size_t index);
+ Token token;
- //work helpers
- int work_ret;
- inline void task_work(void)
+ //things may be in this element
+ boost::shared_ptr<Apology::Topology> topology;
+ boost::shared_ptr<Apology::Executor> executor;
+ boost::shared_ptr<BlockActor> block;
+ Apology::Base *get_elem(void) const
{
- this->work_ret = block_ptr->Work(this->input_items, this->output_items);
+ if (block) return block.get();
+ return topology.get();
}
- //is the fg running?
- enum
- {
- BLOCK_STATE_INIT,
- BLOCK_STATE_LIVE,
- BLOCK_STATE_DONE,
- } block_state;
- Token token;
- size_t hint; //some kind of allocation hint
- Affinity buffer_affinity;
-
- std::vector<std::vector<BufferHintMessage> > output_allocation_hints;
- //rate settings
- bool enable_fixed_rate;
- double relative_rate;
- bool forecast_fail;
- bool forecast_enable;
- bool topology_init;
};
} //namespace gnuradio