source: XIOS/trunk/src/filter/output_pin.hpp @ 1006

Last change on this file since 1006 was 1006, checked in by rlacroix, 7 years ago

The workflow is now triggered when using xios_recv_field for fields in read mode received from the servers.

Previously the workflow was triggered upon receiving the data which could cause deadlocks since there are no garanties that clients are receiving data at the same time.

File size: 2.6 KB
Line 
1#ifndef __XIOS_COutputPin__
2#define __XIOS_COutputPin__
3
4#include "garbage_collector.hpp"
5#include "input_pin.hpp"
6
7namespace xios
8{
9  /*!
10   * An output pin handles the connections with downstream filters.
11   */
12  class COutputPin : public InvalidableObject
13  {
14    public:
15      /*!
16       * Constructs an ouput pin with manual or automatic trigger
17       * and an associated garbage collector.
18       *
19       * \param gc the garbage collector associated with this ouput pin
20       * \param slotsCount the number of slots
21       */
22      COutputPin(CGarbageCollector& gc, bool manualTrigger = false);
23
24      /*!
25       * Connects to a specific slot of the input pin of a downstream filter.
26       * Note that the output pin holds a reference on the downstream filter.
27       *
28       * \param inputPin the input pin to connect
29       * \param inputSlot the input slot number
30       */
31      void connectOutput(boost::shared_ptr<CInputPin> inputPin, size_t inputSlot);
32
33      /*!
34       * Triggers the output of any buffered packet for the specified timestamp.
35       *
36       * \param timestamp the timestamp for which we are triggering the output
37       */
38      void virtual trigger(Time timestamp);
39
40      /*!
41       * Tests if the pin can be triggered.
42       *
43       * \return true if the pin can be triggered
44       */
45      bool virtual canBeTriggered() const;
46
47      /*!
48       * Removes all pending packets which are older than the specified timestamp.
49       *
50       * \param timestamp the timestamp used for invalidation
51       */
52      void virtual invalidate(Time timestamp);
53
54    protected:
55      /*!
56       * Function triggered when a packet is ready to be delivered.
57       *
58       * \param packet the packet ready for output
59       */
60      void onOutputReady(CDataPacketPtr packet);
61
62      /*!
63       * Informs the downstream pins that this output pin should be triggered.
64       */
65      void setOutputTriggers();
66
67    private:
68      /*!
69       * Delivers an output packet to the downstreams filter.
70       *
71       * \param packet the packet to output
72       */
73      void deliverOuput(CDataPacketPtr packet);
74
75      CGarbageCollector& gc; //!< The garbage collector associated to the output pin
76
77      //!< Whether the ouput should be triggered manually
78      bool manualTrigger;
79
80      //!< The list of connected filters and the corresponding slot numbers
81      std::vector<std::pair<boost::shared_ptr<CInputPin>, size_t> > outputs;
82
83      //! Output buffer, store the packets until the output is triggered
84      std::map<Time, CDataPacketPtr> outputPackets;
85  }; // class COutputPin
86} // namespace xios
87
88#endif //__XIOS_COutputPin__
Note: See TracBrowser for help on using the repository browser.