libzypp  13.10.6
zypp::RW_pointer< _D, _Traits > Struct Template Reference

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

#include <PtrTypes.h>

Public Types

typedef _Traits::_Ptr _Ptr
 
typedef _Traits::_constPtr _constPtr
 

Public Member Functions

 RW_pointer ()
 
 RW_pointer (std::nullptr_t)
 
 RW_pointer (typename _Ptr::element_type *dptr)
 
 RW_pointer (_Ptr dptr)
 
RW_pointeroperator= (std::nullptr_t)
 
void reset ()
 
void reset (typename _Ptr::element_type *dptr)
 
void swap (RW_pointer &rhs)
 
void swap (_Ptr &rhs)
 
 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
 
_constPtr getPtr () const
 
_Ptr getPtr ()
 
_constPtr cgetPtr ()
 

Private Attributes

_Ptr _dptr
 

Related Functions

(Note that these are not member functions.)

template<class _D , class _Ptr >
std::ostream & operator<< (std::ostream &str, const RW_pointer< _D, _Ptr > &obj)
 
template<class _D , class _Ptr >
bool operator== (const RW_pointer< _D, _Ptr > &lhs, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator== (const RW_pointer< _D, _Ptr > &lhs, const typename _Ptr::_Ptr &rhs)
 
template<class _D , class _Ptr >
bool operator== (const typename _Ptr::_Ptr &lhs, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator== (const RW_pointer< _D, _Ptr > &lhs, const typename _Ptr::_constPtr &rhs)
 
template<class _D , class _Ptr >
bool operator== (const typename _Ptr::_constPtr &lhs, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator== (const RW_pointer< _D, _Ptr > &lhs, std::nullptr_t)
 
template<class _D , class _Ptr >
bool operator== (std::nullptr_t, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator!= (const RW_pointer< _D, _Ptr > &lhs, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator!= (const RW_pointer< _D, _Ptr > &lhs, const typename _Ptr::_Ptr &rhs)
 
template<class _D , class _Ptr >
bool operator!= (const typename _Ptr::_Ptr &lhs, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator!= (const RW_pointer< _D, _Ptr > &lhs, const typename _Ptr::_constPtr &rhs)
 
template<class _D , class _Ptr >
bool operator!= (const typename _Ptr::_constPtr &lhs, const RW_pointer< _D, _Ptr > &rhs)
 
template<class _D , class _Ptr >
bool operator!= (const RW_pointer< _D, _Ptr > &lhs, std::nullptr_t)
 
template<class _D , class _Ptr >
bool operator!= (std::nullptr_t, const RW_pointer< _D, _Ptr > &rhs)
 

Detailed Description

template<class _D, class _Traits = rw_pointer::Shared<_D>>
struct zypp::RW_pointer< _D, _Traits >

Wrapper for const correct access via Smart pointer types.

zypp::RW_pointer<tt><_D,_Traits> stores a Smart pointer types of type _Traits::_Ptr, 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 _Traits = 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.
* #include "zypp/base/PtrTypes.h"
*
* class Foo
* {
* ...
* private:
* // Implementation class
* struct Impl;
* // Pointer to implementation; actually a shared_ptr<Impl>
* RW_pointer<Impl> _pimpl;
*
* void baa() { _pimpl->... } // is Impl *
* void baa() const { _pimpl->... } // is Impl const *
* };
*

Definition at line 265 of file PtrTypes.h.

Member Typedef Documentation

template<class _D, class _Traits = rw_pointer::Shared<_D>>
typedef _Traits::_Ptr zypp::RW_pointer< _D, _Traits >::_Ptr

Definition at line 267 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
typedef _Traits::_constPtr zypp::RW_pointer< _D, _Traits >::_constPtr

Definition at line 268 of file PtrTypes.h.

Constructor & Destructor Documentation

template<class _D, class _Traits = rw_pointer::Shared<_D>>
zypp::RW_pointer< _D, _Traits >::RW_pointer ( )
inline

Definition at line 270 of file PtrTypes.h.

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

Definition at line 273 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
zypp::RW_pointer< _D, _Traits >::RW_pointer ( typename _Ptr::element_type *  dptr)
inlineexplicit

Definition at line 277 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
zypp::RW_pointer< _D, _Traits >::RW_pointer ( _Ptr  dptr)
inlineexplicit

Definition at line 282 of file PtrTypes.h.

Member Function Documentation

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

Definition at line 286 of file PtrTypes.h.

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

Definition at line 289 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
void zypp::RW_pointer< _D, _Traits >::reset ( typename _Ptr::element_type *  dptr)
inline

Definition at line 292 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
void zypp::RW_pointer< _D, _Traits >::swap ( RW_pointer< _D, _Traits > &  rhs)
inline

Definition at line 295 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
void zypp::RW_pointer< _D, _Traits >::swap ( _Ptr rhs)
inline

Definition at line 298 of file PtrTypes.h.

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

Definition at line 301 of file PtrTypes.h.

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

Definition at line 304 of file PtrTypes.h.

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

Definition at line 307 of file PtrTypes.h.

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

Definition at line 310 of file PtrTypes.h.

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

Definition at line 313 of file PtrTypes.h.

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

Definition at line 316 of file PtrTypes.h.

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

Definition at line 319 of file PtrTypes.h.

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

Definition at line 323 of file PtrTypes.h.

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

Definition at line 326 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
_constPtr zypp::RW_pointer< _D, _Traits >::getPtr ( ) const
inline

Definition at line 329 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
_Ptr zypp::RW_pointer< _D, _Traits >::getPtr ( )
inline

Definition at line 332 of file PtrTypes.h.

template<class _D, class _Traits = rw_pointer::Shared<_D>>
_constPtr zypp::RW_pointer< _D, _Traits >::cgetPtr ( )
inline

Definition at line 335 of file PtrTypes.h.

Member Data Documentation

template<class _D, class _Traits = rw_pointer::Shared<_D>>
_Ptr zypp::RW_pointer< _D, _Traits >::_dptr
private

Definition at line 339 of file PtrTypes.h.


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