libzypp  17.5.0
zypp::AutoDispose< Tp > Class Template Reference

Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose handle to it is destroyed or reset. More...

#include <AutoDispose.h>

Classes

struct  Impl
 

Public Types

typedef boost::call_traits< Tp >::param_type param_type
 
typedef boost::call_traits< Tp >::reference reference
 
typedef boost::call_traits< Tp >::const_reference const_reference
 
typedef Tp value_type
 
typedef boost::call_traits< Tp >::value_type result_type
 
typedef function< void(param_type)> Dispose
 Dispose function signatue. More...
 

Public Member Functions

 AutoDispose ()
 Default Ctor using default constructed value and no dispose function. More...
 
 AutoDispose (const Dispose &dispose_r)
 Ctor taking dispose function and using default constructed value. More...
 
 AutoDispose (param_type value_r)
 Ctor taking value and no dispose function. More...
 
 AutoDispose (param_type value_r, const Dispose &dispose_r)
 Ctor taking value and dispose function. More...
 
 operator reference () const
 Provide implicit conversion to Tp&. More...
 
reference value () const
 Reference to the Tp object. More...
 
reference operator* () const
 Reference to the Tp object. More...
 
value_typeoperator-> () const
 Pointer to the Tp object (asserted to be != NULL). More...
 
void reset ()
 Reset to default Ctor values. More...
 
void swap (AutoDispose &rhs)
 Exchange the contents of two AutoDispose objects. More...
 
const DisposegetDispose () const
 Return the current dispose function. More...
 
void setDispose (const Dispose &dispose_r)
 Set a new dispose function. More...
 
void resetDispose ()
 Set no dispose function. More...
 
void swapDispose (Dispose &dispose_r)
 Exchange the dispose function. More...
 

Private Attributes

shared_ptr< Impl_pimpl
 

Related Functions

(Note that these are not member functions.)

template<class Tp >
std::ostream & operator<< (std::ostream &str, const AutoDispose< Tp > &obj)
 

Detailed Description

template<class Tp>
class zypp::AutoDispose< Tp >

Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose handle to it is destroyed or reset.

Note
As with pointers, constness of an AutoDispose object does not apply to the stored Tp object. If the stored Tp object should be immutable, you should use AutoDispose<const Tp>.

Pass a filename to the application and provide the appropriate code to be executed when the file is no longer needed:

struct FileCache
{
Pathname getFile();
void releaseFile( const Pathname & );
};
static FileCache cache;
void unlink( const Pathname & file_r );
AutoDispose<const Pathname> provideFile( ... )
{
if ( file_is_in_cache )
{
// will call 'cache.releaseFile( file )'
return AutoDispose<const Pathname>( cache.getFile(),
bind( &FileCache::releaseFile, ref(cache), _1 ) );
}
else if ( file_is_temporary )
{
// will call 'unlink( file )'
return AutoDispose<const Pathname>( file, unlink );
}
else if ( file_is_permanent )
{
// will do nothing.
return AutoDispose<const Pathname>( file );
}
else
{
// will do nothing.
return AutoDispose<const Pathname>();
}
}

Exception safe handling of temporary files:

void provideFileAt( const Pathname & destination )
{
AutoDispose<const Pathname> guard( destination, unlink );
// Any exception here will lead to 'unlink( destination )'
// ...
// On success: reset the dispose function to NOOP.
guard.resetDispose();
}

Definition at line 92 of file AutoDispose.h.

Member Typedef Documentation

◆ param_type

template<class Tp>
typedef boost::call_traits<Tp>::param_type zypp::AutoDispose< Tp >::param_type

Definition at line 95 of file AutoDispose.h.

◆ reference

template<class Tp>
typedef boost::call_traits<Tp>::reference zypp::AutoDispose< Tp >::reference

Definition at line 96 of file AutoDispose.h.

◆ const_reference

template<class Tp>
typedef boost::call_traits<Tp>::const_reference zypp::AutoDispose< Tp >::const_reference

Definition at line 97 of file AutoDispose.h.

◆ value_type

template<class Tp>
typedef Tp zypp::AutoDispose< Tp >::value_type

Definition at line 98 of file AutoDispose.h.

◆ result_type

template<class Tp>
typedef boost::call_traits<Tp>::value_type zypp::AutoDispose< Tp >::result_type

Definition at line 99 of file AutoDispose.h.

◆ Dispose

template<class Tp>
typedef function<void ( param_type )> zypp::AutoDispose< Tp >::Dispose

Dispose function signatue.

Definition at line 103 of file AutoDispose.h.

Constructor & Destructor Documentation

◆ AutoDispose() [1/4]

template<class Tp>
zypp::AutoDispose< Tp >::AutoDispose ( )
inline

Default Ctor using default constructed value and no dispose function.

Definition at line 107 of file AutoDispose.h.

◆ AutoDispose() [2/4]

template<class Tp>
zypp::AutoDispose< Tp >::AutoDispose ( const Dispose dispose_r)
inlineexplicit

Ctor taking dispose function and using default constructed value.

Definition at line 112 of file AutoDispose.h.

◆ AutoDispose() [3/4]

template<class Tp>
zypp::AutoDispose< Tp >::AutoDispose ( param_type  value_r)
inlineexplicit

Ctor taking value and no dispose function.

Definition at line 117 of file AutoDispose.h.

◆ AutoDispose() [4/4]

template<class Tp>
zypp::AutoDispose< Tp >::AutoDispose ( param_type  value_r,
const Dispose dispose_r 
)
inline

Ctor taking value and dispose function.

Definition at line 122 of file AutoDispose.h.

Member Function Documentation

◆ operator reference()

template<class Tp>
zypp::AutoDispose< Tp >::operator reference ( ) const
inline

Provide implicit conversion to Tp&.

Definition at line 129 of file AutoDispose.h.

◆ value()

template<class Tp>
reference zypp::AutoDispose< Tp >::value ( ) const
inline

Reference to the Tp object.

Definition at line 133 of file AutoDispose.h.

◆ operator*()

template<class Tp>
reference zypp::AutoDispose< Tp >::operator* ( ) const
inline

Reference to the Tp object.

Definition at line 137 of file AutoDispose.h.

◆ operator->()

template<class Tp>
value_type* zypp::AutoDispose< Tp >::operator-> ( ) const
inline

Pointer to the Tp object (asserted to be != NULL).

Definition at line 141 of file AutoDispose.h.

◆ reset()

template<class Tp>
void zypp::AutoDispose< Tp >::reset ( )
inline

Reset to default Ctor values.

Definition at line 145 of file AutoDispose.h.

◆ swap()

template<class Tp>
void zypp::AutoDispose< Tp >::swap ( AutoDispose< Tp > &  rhs)
inline

Exchange the contents of two AutoDispose objects.

Definition at line 149 of file AutoDispose.h.

◆ getDispose()

template<class Tp>
const Dispose& zypp::AutoDispose< Tp >::getDispose ( ) const
inline

Return the current dispose function.

Definition at line 154 of file AutoDispose.h.

◆ setDispose()

template<class Tp>
void zypp::AutoDispose< Tp >::setDispose ( const Dispose dispose_r)
inline

Set a new dispose function.

Definition at line 158 of file AutoDispose.h.

◆ resetDispose()

template<class Tp>
void zypp::AutoDispose< Tp >::resetDispose ( )
inline

Set no dispose function.

Definition at line 162 of file AutoDispose.h.

◆ swapDispose()

template<class Tp>
void zypp::AutoDispose< Tp >::swapDispose ( Dispose dispose_r)
inline

Exchange the dispose function.

Definition at line 166 of file AutoDispose.h.

Friends And Related Function Documentation

◆ operator<<()

template<class Tp >
std::ostream & operator<< ( std::ostream &  str,
const AutoDispose< Tp > &  obj 
)
related

Stream output of the Tp object.

Definition at line 194 of file AutoDispose.h.

Member Data Documentation

◆ _pimpl

template<class Tp>
shared_ptr<Impl> zypp::AutoDispose< Tp >::_pimpl
private

Definition at line 188 of file AutoDispose.h.


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