Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/rti/routing/detail/ShutdownHookForwarder.hpp
T

80 lines
1.6 KiB
C++

/*
* (c) Copyright, Real-Time Innovations, 2017.
* All rights reserved.
*
* No duplications, whole or partial, manual or electronic, may be made
* without express written permission. Any such copies, or
* revisions thereof, must display this notice unaltered.
* This code contains trade secrets of Real-Time Innovations, Inc.
*/
#ifndef RTI_ROUTING_SHUTDOWN_HOOK_HPP_
#define RTI_ROUTING_SHUTDOWN_HOOK_HPP_
#include "routingservice/routingservice_service.h"
namespace rti { namespace routing { namespace detail {
class AbstractShutdownHookForwarder {
public:
AbstractShutdownHookForwarder()
{
native_.on_shutdown = on_shutdown_forwarder;
native_.shutdown_hook_data = this;
}
virtual ~AbstractShutdownHookForwarder()
{
}
virtual void on_shutdown()
{
}
static void on_shutdown_forwarder(void *hook_data)
{
AbstractShutdownHookForwarder *self =
static_cast<AbstractShutdownHookForwarder*>(hook_data);
try {
self->on_shutdown();
} catch(...) {}
}
const RTI_RoutingServiceRemoteShutdownHook* native() const
{
return &native_;
}
private:
RTI_RoutingServiceRemoteShutdownHook native_;
};
template<typename HookFunc>
class ShutdownHookForwarder : public AbstractShutdownHookForwarder {
public:
ShutdownHookForwarder(HookFunc& shutdown_hook)
: shutdown_hook_(shutdown_hook)
{
}
void on_shutdown()
{
shutdown_hook_();
};
private:
HookFunc& shutdown_hook_;
};
}
} }
#endif /* RTI_ROUTING_SHUTDOWN_HOOK_HPP_ */