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 = Ref<T>; \ 
  121  using T##WeakRef = 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)