10 #include <duds/hardware/Instrument.hpp> 12 namespace duds {
namespace hardware {
25 template <
class SVT,
class SQT,
class TVT,
class TQT>
33 typedef boost::signals2::signal<
34 void (
const std::shared_ptr<Instrument> &,
35 const std::shared_ptr<const Measurement> &)
63 const std::shared_ptr<Instrument> &i,
64 const std::shared_ptr<const Measurement> &m
72 const std::shared_ptr<Instrument> &i,
73 const std::shared_ptr<const Measurement> &m
88 for (ConnectionMapIterator iter = conns.begin(); iter != conns.end();) {
89 if (!iter->newCon.connected() && !iter->oldCon.connected()) {
90 iter = conns.erase(iter);
107 const InstrumentSptr &inst,
108 boost::signals2::connect_position at = boost::signals2::at_back
111 ConnectionMapIterator iter = conns[inst.get()];
113 if (iter->newCon.connected()) {
118 return iter->newCon = inst->newMeasurementConnect(
122 std::placeholders::_1,
123 std::placeholders::_2
129 const typename MesurementSignal::group_type &group,
130 const Instrument &inst,
131 boost::signals2::connect_position at = boost::signals2::at_back
134 ConnectionMapIterator iter = conns[inst.get()];
136 if (iter->newCon.connected()) {
141 return iter->newCon = inst->newMeasurementConnect(
144 std::placeholders::_1,
145 std::placeholders::_2
158 ConnectionMapIterator iter = conns.find(inst.get());
159 if (iter != conns.end()) {
161 iter->newCon.disconnect();
163 if (!iter->oldCon.connected()) {
172 const InstrumentSptr &inst,
173 boost::signals2::connect_position at = boost::signals2::at_back
176 ConnectionMapIterator iter = conns[inst.get()];
178 if (iter->oldCon.connected()) {
183 return iter->oldCon = inst->newMeasurementConnect(
188 const typename MesurementSignal::group_type &group,
189 const Instrument &inst,
190 boost::signals2::connect_position at = boost::signals2::at_back
193 ConnectionMapIterator iter = conns[inst.get()];
195 if (iter->oldCon.connected()) {
200 return iter->oldCon = inst->newMeasurementConnect(
212 ConnectionMapIterator iter = conns.find(inst.get());
213 if (iter != conns.end()) {
215 iter->oldCon.disconnect();
217 if (!iter->newCon.connected()) {
234 ConnectionMapIterator iter = conns.find(inst.get());
235 if (iter != conns.end()) {
237 if (iter->newCon.connected() || iter->oldCon.connected()) {
239 iter->newCon.disconnect();
240 iter->oldCon.disconnect();
251 ConnectionMapIterator iter;
252 for (iter = conns.begin(); iter != conns.end(); iter = conns.erase(iter)) {
253 iter->newCon.disconnect();
254 iter->oldCon.disconnect();
boost::signals2::connection oldCon
virtual void handleOldMeasure(const std::shared_ptr< Instrument > &i, const std::shared_ptr< const Measurement > &m)=0
Handles an incoming old measurement signal.
void disconnectAll()
Disconnects the group from all signals.
bool disconnectOldMeasurement(const InstrumentSptr &inst)
Disconnects from the old measurement signal of the given instrument.
bool disconnectAll(const InstrumentSptr &inst)
Disconnects the group from both the new and old measurement signals from the given instrument...
boost::signals2::connection newCon
ConnectionMap ConnectionMapIterator
duds::data::GenericMeasurement< SVT, SQT, TVT, TQT > Measurement
std::map< Instrument *, MeasurementConnections > ConnectionMap
Reduce typing and limit line length; no other reason.
A base class for receiving measurement signals from multiple Instruments.
bool disconnectNewMeasurement(const InstrumentSptr &inst)
Disconnects from the new measurement signal of the given instrument.
Stores connections to a specific Insturment.
boost::signals2::connection oldMeasurementSource(const typename MesurementSignal::group_type &group, const Instrument &inst, boost::signals2::connect_position at=boost::signals2::at_back)
ConnectionMap conns
Stores connections keyed by Instrument pointer.
virtual ~GenericMeasurementSignalSink()
Disconnects from all signals.
void purgeDisconnections()
Removes any disconnected connection objects held by this object.
virtual void handleNewMeasure(const std::shared_ptr< Instrument > &i, const std::shared_ptr< const Measurement > &m)=0
Handles an incoming new measurement signal.
boost::signals2::signal< void(const std::shared_ptr< Instrument > &, const std::shared_ptr< const Measurement > &) > MesurementSignal
The type used for event listeners that are told of measurments.
boost::signals2::connection oldMeasurementSource(const InstrumentSptr &inst, boost::signals2::connect_position at=boost::signals2::at_back)
boost::signals2::connection newMeasurementSource(const typename MesurementSignal::group_type &group, const Instrument &inst, boost::signals2::connect_position at=boost::signals2::at_back)
Stores a sample of something along with a timestamp stored as a sample from a clock.
GenericInstrument< SVT, SQT, TVT, TQT > Instrument
boost::signals2::connection newMeasurementSource(const InstrumentSptr &inst, boost::signals2::connect_position at=boost::signals2::at_back)
Connect this object to the new measurement signal of the given instrument, or return the existing con...