14 #ifndef ZYPP_NG_BASE_BASE_H_INCLUDED 15 #define ZYPP_NG_BASE_BASE_H_INCLUDED 20 #include <unordered_set> 30 template <
typename Func>
33 template <
typename BType,
typename Ret,
typename ...Args >
39 inline constexpr
bool is_base_receiver = std::is_base_of_v<Base, T> || std::is_base_of_v<BasePrivate, T>;
65 using Ptr = std::shared_ptr<Base>;
86 void removeChild (
const Ptr& child );
91 const std::unordered_set<Ptr> &children()
const;
96 std::thread::id threadId ()
const;
103 std::vector< std::weak_ptr<T> > result;
104 for (
const Ptr& p : children() ) {
105 std::shared_ptr<T> casted = std::dynamic_pointer_cast<T>(p);
107 result.push_back( std::weak_ptr<T>(casted) );
114 return std::static_pointer_cast<T>( shared_from_this() );
119 return std::static_pointer_cast<T>( shared_from_this() );
124 return std::static_pointer_cast<T>( weak_from_this().lock() );
129 return std::static_pointer_cast<T>( weak_from_this().lock() );
132 template<
typename Obj,
typename Functor >
133 static decltype (
auto) make_base_slot( Obj *o, Functor &&f ) {
141 template<
typename SenderFunc,
typename ReceiverFunc >
143 return std::invoke( std::forward<SenderFunc>(sFun), &s ).connect( make_base_slot( &recv, std::forward<ReceiverFunc>(rFunc) ) );
153 template<
typename SenderFunc,
typename ReceiverFunc >
162 template<
typename SenderFunc,
typename ReceiverFunc,
typename ...Tracker >
167 template<
typename SenderFunc,
typename ReceiverFunc,
typename ...Tracker >
178 template<
typename Obj,
typename Functor,
186 template<
typename Obj,
typename Functor,
196 #endif // ZYPP_NG_CORE_BASE_H_INCLUDED decltype(auto) base_slot(Obj *o, Functor &&f)
std::weak_ptr< Base > WeakPtr
std::enable_if< std::is_member_pointer< typename std::decay< Functor >::type >::value, typename std::result_of< Functor &&(Args &&...)>::type >::type invoke(Functor &&f, Args &&... args)
std::shared_ptr< T > shared_this()
std::vector< std::weak_ptr< T > > findChildren() const
typename enable_if< B, T >::type enable_if_t
static auto connect(typename internal::MemberFunction< SenderFunc >::ClassType &s, SenderFunc &&sFun, typename internal::MemberFunction< ReceiverFunc >::ClassType &recv, ReceiverFunc &&rFunc)
std::enable_if_t< std::is_member_function_pointer_v< SenderFunc >, connection > connectFunc(SenderFunc &&sFun, ReceiverFunc &&rFunc, const Tracker &...trackers)
std::weak_ptr< T > weak_this() const
static decltype(auto) make_base_slot(Obj *o, Functor &&f)
auto connect(SenderFunc &&sFun, typename internal::MemberFunction< ReceiverFunc >::ClassType &recv, ReceiverFunc &&rFunc)
sigc::connection connection
#define ZYPP_DECLARE_PRIVATE(Class)
static auto connectFunc(typename internal::MemberFunction< SenderFunc >::ClassType &s, SenderFunc &&sFun, ReceiverFunc &&rFunc, const Tracker &...trackers)
constexpr bool is_base_receiver
#define LIBZYPP_NG_EXPORT
#define NON_COPYABLE(CLASS)
Delete copy ctor and copy assign.
decltype(auto) locking_fun(const Functor &f, const Obj &... o)
std::unique_ptr< BasePrivate > d_ptr
sigc::trackable trackable
std::weak_ptr< T > weak_this()
std::shared_ptr< T > shared_this() const
std::shared_ptr< Base > Ptr