libzypp 17.38.7
zypp::RW_pointer< D, DTraits > Struct Template Reference

Wrapper for const correct access via Smart pointer types. More...

#include <zypp-core/base/PtrTypes.h>

Public Types

using PtrType = typename DTraits::PtrType
using constPtrType = typename DTraits::constPtrType

Public Member Functions

 RW_pointer ()
 RW_pointer (const RW_pointer &)=default
 RW_pointer (RW_pointer &&)=default
RW_pointeroperator= (const RW_pointer &)=default
RW_pointeroperator= (RW_pointer &&)=default
 RW_pointer (std::nullptr_t)
 RW_pointer (typename PtrType::element_type *dptr)
 RW_pointer (PtrType dptr)
RW_pointeroperator= (std::nullptr_t)
void reset ()
void reset (typename PtrType::element_type *dptr)
void swap (RW_pointer &rhs) noexcept
void swap (PtrType &rhs) noexcept
 operator bool () const
const D & operator* () const
const D * operator-> () const
const D * get () const
D & operator* ()
D * operator-> ()
D * get ()
bool unique () const
long use_count () const
constPtrType getPtr () const
PtrType getPtr ()
constPtrType cgetPtr ()

Private Attributes

PtrType _dptr

Detailed Description

template<class D, class DTraits = rw_pointer::Shared<D>>
struct zypp::RW_pointer< D, DTraits >

Wrapper for const correct access via Smart pointer types.

zypp::RW_pointer<D,DTraits> stores a Smart pointer types of type DTraits::PtrType, which must be convertible into a D *. Pointer style access (via -> and *) offers a const D * in const a context, otherwise a D *. Thus RW_ means read/write, as you get a different type, dependent on whether you're allowed to read or write.

Forwarding access from an interface to an implemantation class, an RW_pointer prevents const interface methods from accidentally calling nonconst implementation methods.

The second template argument defaults to DTraits = rw_pointer::Shared<D> thus wraping a shared_ptr<D>. To wrap an intrusive_ptr<D> use rw_pointer::Intrusive<D>.

See also
zypp::RWCOW_pointer for 'copy on write' functionality.
class Foo
{
...
private:
// Implementation class
struct Impl;
// Pointer to implementation; actually a shared_ptr<Impl>
void baa() { _pimpl->... } // is Impl *
void baa() const { _pimpl->... } // is Impl const *
};

Definition at line 292 of file PtrTypes.h.

Member Typedef Documentation

◆ PtrType

template<class D, class DTraits = rw_pointer::Shared<D>>
using zypp::RW_pointer< D, DTraits >::PtrType = typename DTraits::PtrType

Definition at line 294 of file PtrTypes.h.

◆ constPtrType

template<class D, class DTraits = rw_pointer::Shared<D>>
using zypp::RW_pointer< D, DTraits >::constPtrType = typename DTraits::constPtrType

Definition at line 295 of file PtrTypes.h.

Constructor & Destructor Documentation

◆ RW_pointer() [1/6]

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::RW_pointer ( )
inline

Definition at line 297 of file PtrTypes.h.

◆ RW_pointer() [2/6]

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::RW_pointer ( const RW_pointer< D, DTraits > & )
default

◆ RW_pointer() [3/6]

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::RW_pointer ( RW_pointer< D, DTraits > && )
default

◆ RW_pointer() [4/6]

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::RW_pointer ( std::nullptr_t )
inline

Definition at line 304 of file PtrTypes.h.

◆ RW_pointer() [5/6]

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::RW_pointer ( typename PtrType::element_type * dptr)
inlineexplicit

Definition at line 307 of file PtrTypes.h.

◆ RW_pointer() [6/6]

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::RW_pointer ( PtrType dptr)
inlineexplicit

Definition at line 312 of file PtrTypes.h.

Member Function Documentation

◆ operator=() [1/3]

template<class D, class DTraits = rw_pointer::Shared<D>>
RW_pointer & zypp::RW_pointer< D, DTraits >::operator= ( const RW_pointer< D, DTraits > & )
default

◆ operator=() [2/3]

template<class D, class DTraits = rw_pointer::Shared<D>>
RW_pointer & zypp::RW_pointer< D, DTraits >::operator= ( RW_pointer< D, DTraits > && )
default

◆ operator=() [3/3]

template<class D, class DTraits = rw_pointer::Shared<D>>
RW_pointer & zypp::RW_pointer< D, DTraits >::operator= ( std::nullptr_t )
inline

Definition at line 316 of file PtrTypes.h.

◆ reset() [1/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
void zypp::RW_pointer< D, DTraits >::reset ( )
inline

Definition at line 319 of file PtrTypes.h.

◆ reset() [2/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
void zypp::RW_pointer< D, DTraits >::reset ( typename PtrType::element_type * dptr)
inline

Definition at line 322 of file PtrTypes.h.

◆ swap() [1/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
void zypp::RW_pointer< D, DTraits >::swap ( RW_pointer< D, DTraits > & rhs)
inlinenoexcept

Definition at line 325 of file PtrTypes.h.

◆ swap() [2/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
void zypp::RW_pointer< D, DTraits >::swap ( PtrType & rhs)
inlinenoexcept

Definition at line 328 of file PtrTypes.h.

◆ operator bool()

template<class D, class DTraits = rw_pointer::Shared<D>>
zypp::RW_pointer< D, DTraits >::operator bool ( ) const
inlineexplicit

Definition at line 331 of file PtrTypes.h.

◆ operator*() [1/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
const D & zypp::RW_pointer< D, DTraits >::operator* ( ) const
inline

Definition at line 334 of file PtrTypes.h.

◆ operator->() [1/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
const D * zypp::RW_pointer< D, DTraits >::operator-> ( ) const
inline

Definition at line 337 of file PtrTypes.h.

◆ get() [1/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
const D * zypp::RW_pointer< D, DTraits >::get ( ) const
inline

Definition at line 340 of file PtrTypes.h.

◆ operator*() [2/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
D & zypp::RW_pointer< D, DTraits >::operator* ( )
inline

Definition at line 343 of file PtrTypes.h.

◆ operator->() [2/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
D * zypp::RW_pointer< D, DTraits >::operator-> ( )
inline

Definition at line 346 of file PtrTypes.h.

◆ get() [2/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
D * zypp::RW_pointer< D, DTraits >::get ( )
inline

Definition at line 349 of file PtrTypes.h.

◆ unique()

template<class D, class DTraits = rw_pointer::Shared<D>>
bool zypp::RW_pointer< D, DTraits >::unique ( ) const
inline

Definition at line 353 of file PtrTypes.h.

◆ use_count()

template<class D, class DTraits = rw_pointer::Shared<D>>
long zypp::RW_pointer< D, DTraits >::use_count ( ) const
inline

Definition at line 356 of file PtrTypes.h.

◆ getPtr() [1/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
constPtrType zypp::RW_pointer< D, DTraits >::getPtr ( ) const
inline

Definition at line 359 of file PtrTypes.h.

◆ getPtr() [2/2]

template<class D, class DTraits = rw_pointer::Shared<D>>
PtrType zypp::RW_pointer< D, DTraits >::getPtr ( )
inline

Definition at line 362 of file PtrTypes.h.

◆ cgetPtr()

template<class D, class DTraits = rw_pointer::Shared<D>>
constPtrType zypp::RW_pointer< D, DTraits >::cgetPtr ( )
inline

Definition at line 365 of file PtrTypes.h.

Member Data Documentation

◆ _dptr

template<class D, class DTraits = rw_pointer::Shared<D>>
PtrType zypp::RW_pointer< D, DTraits >::_dptr
private

Definition at line 369 of file PtrTypes.h.


The documentation for this struct was generated from the following file: