libzypp  17.30.2
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
 
using dispose_param_type = typename std::conditional< std::is_pointer< Tp >::value||std::is_integral< Tp >::value, Tp const, reference >::type
 
using Dispose = function< void(dispose_param_type)>
 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 (const value_type &value_r)
 Ctor taking value and no dispose function. More...
 
 AutoDispose (const value_type &value_r, const Dispose &dispose_r)
 Ctor taking value and dispose function. More...
 
 AutoDispose (value_type &&value_r)
 Ctor taking rvalue and no dispose function. More...
 
 AutoDispose (value_type &&value_r, const Dispose &dispose_r)
 Ctor taking rvalue 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)
 Stream output of the Tp object. More...
 

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>();
}
}
int unlink(const Pathname &path)
Like 'unlink'.
Definition: PathInfo.cc:700
ManagedFile provideFile(RepoInfo repo_r, const OnMediaLocation &loc_r, const ProvideFilePolicy &policy_r)
Provide a file from a Repository.

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 93 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 96 of file AutoDispose.h.

◆ reference

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

Definition at line 97 of file AutoDispose.h.

◆ const_reference

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

Definition at line 98 of file AutoDispose.h.

◆ value_type

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

Definition at line 99 of file AutoDispose.h.

◆ result_type

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

Definition at line 100 of file AutoDispose.h.

◆ dispose_param_type

template<class Tp >
using zypp::AutoDispose< Tp >::dispose_param_type = typename std::conditional< std::is_pointer<Tp>::value || std::is_integral<Tp>::value, Tp const, reference >::type

Definition at line 103 of file AutoDispose.h.

◆ Dispose

template<class Tp >
using zypp::AutoDispose< Tp >::Dispose = function<void ( dispose_param_type )>

Dispose function signatue.

Definition at line 107 of file AutoDispose.h.

Constructor & Destructor Documentation

◆ AutoDispose() [1/6]

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

Default Ctor using default constructed value and no dispose function.

Definition at line 111 of file AutoDispose.h.

◆ AutoDispose() [2/6]

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

Ctor taking dispose function and using default constructed value.

Definition at line 116 of file AutoDispose.h.

◆ AutoDispose() [3/6]

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

Ctor taking value and no dispose function.

Definition at line 121 of file AutoDispose.h.

◆ AutoDispose() [4/6]

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

Ctor taking value and dispose function.

Definition at line 126 of file AutoDispose.h.

◆ AutoDispose() [5/6]

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

Ctor taking rvalue and no dispose function.

Definition at line 131 of file AutoDispose.h.

◆ AutoDispose() [6/6]

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

Ctor taking rvalue and dispose function.

Definition at line 136 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 143 of file AutoDispose.h.

◆ value()

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

Reference to the Tp object.

Definition at line 147 of file AutoDispose.h.

◆ operator*()

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

Reference to the Tp object.

Definition at line 151 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 155 of file AutoDispose.h.

◆ reset()

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

Reset to default Ctor values.

Definition at line 159 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 163 of file AutoDispose.h.

◆ getDispose()

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

Return the current dispose function.

Definition at line 168 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 172 of file AutoDispose.h.

◆ resetDispose()

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

Set no dispose function.

Definition at line 176 of file AutoDispose.h.

◆ swapDispose()

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

Exchange the dispose function.

Definition at line 180 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 287 of file AutoDispose.h.

Member Data Documentation

◆ _pimpl

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

Definition at line 204 of file AutoDispose.h.


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