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>
84template <
typename Ptr>
inline auto zyppGetPtrHelper(
const Ptr &ptr) ->
decltype(ptr.operator->()) {
return ptr.operator->(); }
85template <
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]]
std::weak_ptr< T > WeakRef
T * zyppGetPtrHelper(T *ptr)