1 #ifndef ZYPP_NG_BASE_ZYPPGLOBAL_H_INCLUDED 2 #define ZYPP_NG_BASE_ZYPPGLOBAL_H_INCLUDED 7 #ifndef EXPORT_EXPERIMENTAL_API 8 #define LIBZYPP_NG_EXPORT 9 #define LIBZYPP_NG_NO_EXPORT 11 #include <zypp-ng_export.h> 84 template <
typename Ptr>
inline auto zyppGetPtrHelper(
const Ptr &ptr) -> decltype(ptr.operator->()) {
return ptr.operator->(); }
85 template <
typename Ptr>
inline auto zyppGetPtrHelper(Ptr &ptr) -> decltype(ptr.operator->()) {
return ptr.operator->(); }
87 #define ZYPP_DECLARE_PRIVATE(Class) \ 88 Class##Private* d_func();\ 89 const Class##Private* d_func() const; \ 90 friend class Class##Private; 92 #define ZYPP_IMPL_PRIVATE(Class) \ 93 Class##Private* Class::d_func() \ 94 { return static_cast<Class##Private *>(zyppGetPtrHelper(d_ptr)); } \ 95 const Class##Private* Class::d_func() const \ 96 { return static_cast<const Class##Private *>(zyppGetPtrHelper(d_ptr)); } 98 #define ZYPP_DECLARE_PUBLIC(Class) \ 100 inline Class* z_func() { return static_cast<Class *>(z_ptr); } \ 101 inline const Class* z_func() const { return static_cast<const Class *>(z_ptr); } \ 102 friend class Class; \ 105 #define Z_D() auto const d = d_func() 106 #define Z_Z() auto const z = z_func() 109 template <
typename T>
110 using Ref = std::shared_ptr<T>;
112 template <
typename T>
119 #define ZYPP_FWD_DECL_REFS(T) \ 120 using T##Ref = ::zyppng::Ref<T>; \ 121 using T##WeakRef = ::zyppng::WeakRef<T> 126 #define ZYPP_FWD_DECL_TYPE_WITH_REFS(T) \ 128 ZYPP_FWD_DECL_REFS(T) 130 #define ZYPP_FWD_DECL_TEMPL_TYPE_WITH_REFS_ARG1(T, TArg1) \ 131 template< typename TArg1> \ 133 template< typename TArg1> \ 134 using T##Ref = Ref<T<TArg1>>; \ 135 template< typename TArg1> \ 136 using T##WeakRef = WeakRef<T<TArg1>> 141 #define ZYPP_FWD_DECL_TEMPL_TYPE_WITH_REFS(T, TArg1, ...) \ 142 template< typename TArg1 __VA_OPT__(, typename) __VA_ARGS__ > \ 144 template< typename TArg1 __VA_OPT__(, typename) __VA_ARGS__ > \ 145 using T##Ref = std::shared_ptr<T<TArg1 __VA_OPT__(,) __VA_ARGS__>>; \ 146 template< typename TArg1 __VA_OPT__(, typename) __VA_ARGS__ > \ 147 using T##WeakRef = std::weak_ptr<T<TArg1 __VA_OPT__(,) __VA_ARGS__ >> 154 #define ZYPP_ADD_PRIVATE_CONSTR_HELPER() \ 155 struct private_constr_t { private_constr_t () noexcept = default; } 160 #define ZYPP_PRIVATE_CONSTR_ARG \ 166 #define ZYPP_PRIVATE_CONSTR_ARG_VAL \ 205 #define ZYPP_ADD_CREATE_FUNC(Class) \ 207 ZYPP_ADD_PRIVATE_CONSTR_HELPER(); \ 209 template < typename ...Args > \ 210 inline static auto create ( Args &&... args ) { \ 211 return std::make_shared< Class >( private_constr_t{}, std::forward<Args>(args)... ); \ 221 #define ZYPP_DECL_PRIVATE_CONSTR(Class) Class( private_constr_t ) 222 #define ZYPP_IMPL_PRIVATE_CONSTR(Class) Class::Class( private_constr_t ) 223 #define ZYPP_DECL_PRIVATE_CONSTR_ARGS(Class,...) Class( private_constr_t, __VA_ARGS__ ) 224 #define ZYPP_IMPL_PRIVATE_CONSTR_ARGS(Class,...) Class::Class( private_constr_t, __VA_ARGS__ ) 226 #define ZYPP_NODISCARD [[nodiscard]]
T * zyppGetPtrHelper(T *ptr)
std::weak_ptr< T > WeakRef