12 #ifndef ZYPP_AUTODISPOSE_H
13 #define ZYPP_AUTODISPOSE_H
16 #include <boost/call_traits.hpp>
18 #include <zypp-core/base/NonCopyable.h>
19 #include <zypp-core/base/PtrTypes.h>
20 #include <zypp-core/base/Function.h>
21 #include <zypp-core/Pathname.h>
96 typedef typename boost::call_traits<Tp>::param_type
param_type;
97 typedef typename boost::call_traits<Tp>::reference
reference;
144 {
return _pimpl->_value; }
148 {
return _pimpl->_value; }
152 {
return _pimpl->_value; }
156 {
return &
_pimpl->_value; }
169 {
return _pimpl->_dispose; }
173 {
_pimpl->_dispose = dispose_r; }
181 {
_pimpl->_dispose.swap( dispose_r ); }
186 template <
typename T>
190 template <
typename T,
typename D>
191 Impl( T &&value_r, D &&dispose_r )
238 {
return _pimpl->_dispose; }
242 {
_pimpl->_dispose = dispose_r; }
250 {
_pimpl->_dispose.swap( dispose_r ); }
298 AutoFD(
int fd_r = -1 ) :
AutoDispose<int>( fd_r, [] ( int fd_r ) {
if ( fd_r != -1 ) ::close( fd_r ); } ) {}
309 AutoFILE( FILE* file_r =
nullptr ) :
AutoDispose<FILE*>( file_r, [] ( FILE* file_r ) {
if ( file_r ) ::fclose( file_r ); } ) {}
317 template <
typename Tp>
320 AutoFREE( Tp* ptr_r =
nullptr ) :
AutoDispose<Tp*>( ptr_r, [] ( Tp* ptr_r ) {
if ( ptr_r ) ::free( ptr_r ); } ) {}
327 AutoFREE(
void* ptr_r =
nullptr ) :
AutoDispose<void*>( ptr_r, [] ( void* ptr_r ) {
if ( ptr_r ) ::free( ptr_r ); } ) {}
RepoManager implementation.
function< void()> Dispose
Dispose function signatue.
void reset()
Reset to default Ctor values.
void swapDispose(Dispose &dispose_r)
Exchange the dispose function.
void swap(AutoDispose &rhs)
Exchange the contents of two AutoDispose objects.
AutoDispose()
Default Ctor using default constructed value and no dispose function.
AutoDispose(const Dispose &dispose_r)
Ctor taking dispose function and using default constructed value.
void setDispose(const Dispose &dispose_r)
Set a new dispose function.
shared_ptr< Impl > _pimpl
const Dispose & getDispose() const
Return the current dispose function.
void resetDispose()
Set no dispose function.
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
AutoDispose(const value_type &value_r)
Ctor taking value and no dispose function.
AutoDispose(value_type &&value_r)
Ctor taking rvalue and no dispose function.
const Dispose & getDispose() const
Return the current dispose function.
AutoDispose(const value_type &value_r, const Dispose &dispose_r)
Ctor taking value and dispose function.
reference value() const
Reference to the Tp object.
std::ostream & operator<<(std::ostream &str, const AutoDispose< Tp > &obj)
Stream output of the Tp object.
void resetDispose()
Set no dispose function.
function< void(dispose_param_type)> Dispose
Dispose function signatue.
AutoDispose()
Default Ctor using default constructed value and no dispose function.
AutoDispose(const Dispose &dispose_r)
Ctor taking dispose function and using default constructed value.
value_type * operator->() const
Pointer to the Tp object (asserted to be != NULL).
reference operator*() const
Reference to the Tp object.
void reset()
Reset to default Ctor values.
shared_ptr< Impl > _pimpl
void swap(AutoDispose &rhs)
Exchange the contents of two AutoDispose objects.
void swapDispose(Dispose &dispose_r)
Exchange the dispose function.
boost::call_traits< Tp >::param_type param_type
AutoDispose(value_type &&value_r, const Dispose &dispose_r)
Ctor taking rvalue and dispose function.
boost::call_traits< Tp >::reference reference
boost::call_traits< Tp >::const_reference const_reference
void setDispose(const Dispose &dispose_r)
Set a new dispose function.
boost::call_traits< Tp >::value_type result_type
typename std::conditional< std::is_pointer< Tp >::value||std::is_integral< Tp >::value, Tp const, reference >::type dispose_param_type
String related utilities and Regular expression matching.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Easy-to use interface to the ZYPP dependency resolver.
Impl(T &&value_r, D &&dispose_r)
Impl(const Dispose &dispose_r)
AutoDispose<int> calling ::close
AutoDispose<FILE*> calling ::fclose
AutoFILE(FILE *file_r=nullptr)
AutoFREE(void *ptr_r=nullptr)
AutoFREE(Tp *ptr_r=nullptr)