37#include <pcl/pcl_config.h>
49#include <pcl/exceptions.h>
50#include <boost/signals2.hpp>
98 template<
typename T> boost::signals2::connection
99 registerCallback (
const std::function<T>& callback);
104 template<
typename T>
bool
145 signalsChanged () { }
147 template<
typename T> boost::signals2::signal<T>*
154 disconnect_all_slots ();
189 template<
typename T> boost::signals2::signal<T>*
192 using Signal = boost::signals2::signal<T>;
194 const auto signal_it = signals_.find (
typeid (T).name ());
202 template<
typename T>
void
203 Grabber::disconnect_all_slots ()
208 signal->disconnect_all_slots ();
212 template<
typename T>
void
213 Grabber::block_signal ()
215 if (connections_.find (
typeid (T).name ()) != connections_.end ())
216 for (
auto &
connection : shared_connections_[
typeid (T).name ()])
220 template<
typename T>
void
221 Grabber::unblock_signal ()
223 if (connections_.find (
typeid (T).name ()) != connections_.end ())
224 for (
auto &
connection : shared_connections_[
typeid (T).name ()])
229 Grabber::block_signals ()
231 for (
const auto &
signal : signals_)
237 Grabber::unblock_signals ()
239 for (
const auto &
signal : signals_)
244 template<
typename T>
int
250 return static_cast<int> (
signal->num_slots ());
255 template<
typename T> boost::signals2::signal<T>*
256 Grabber::createSignal ()
258 using Signal = boost::signals2::signal<T>;
259 using Base = boost::signals2::signal_base;
266 operator std::unique_ptr<Base>()
const {
return std::make_unique<Signal>(); }
269 #ifdef __cpp_structured_bindings
270 const auto [iterator,
success] =
272 typename decltype(signals_)::const_iterator iterator;
277 #ifdef __cpp_lib_map_try_emplace
278 signals_.try_emplace (
287 return static_cast<Signal*
> (iterator->second.get ());
290 template<
typename T> boost::signals2::connection
291 Grabber::registerCallback (
const std::function<T> & callback)
298 sstream <<
"no callback for type:" <<
typeid (T).name ();
303 boost::signals2::connection
ret =
signal->connect (callback);
305 connections_[
typeid (T).name ()].push_back (
ret);
306 shared_connections_[
typeid (T).name ()].push_back (boost::signals2::shared_connection_block (connections_[
typeid (T).name ()].back (),
false));
311 template<
typename T>
bool
Iterator class for point clouds with or without given indices.
Grabber interface for PCL 1.x device drivers.
Grabber(Grabber &&)=default
Move ctor.
Grabber(const Grabber &)=delete
No copy ctor since Grabber can't be copied.
Grabber()=default
Default ctor.
virtual ~Grabber() noexcept=default
virtual destructor.
Grabber & operator=(const Grabber &)=delete
No copy assign operator since Grabber can't be copied.
Grabber & operator=(Grabber &&)=default
Move assign operator.
An exception that is thrown during an IO error (typical read/write errors)
Defines all the PCL and non-PCL macros used.