12 #ifndef ZYPP_AUTODISPOSE_H 13 #define ZYPP_AUTODISPOSE_H 16 #include <boost/call_traits.hpp> 97 using param_type =
typename boost::call_traits<Tp>::param_type;
98 using reference =
typename boost::call_traits<Tp>::reference;
108 using Dispose = function<void ( dispose_param_type )>;
135 {
return _pimpl->_value; }
139 {
return _pimpl->_value; }
143 {
return _pimpl->_value; }
147 {
return &
_pimpl->_value; }
155 {
_pimpl.swap( rhs._pimpl ); }
159 {
return _pimpl.unique(); }
164 {
return _pimpl->_dispose; }
168 {
_pimpl->_dispose = dispose_r; }
176 {
_pimpl->_dispose.swap( dispose_r ); }
181 template <
typename T>
185 template <
typename T,
typename D>
186 Impl( T &&value_r, D &&dispose_r )
228 {
_pimpl.swap( rhs._pimpl ); }
233 {
return _pimpl->_dispose; }
237 {
_pimpl->_dispose = dispose_r; }
245 {
_pimpl->_dispose.swap( dispose_r ); }
280 template <
typename F>
287 #define __zypp_defer_concatenate(__lhs, __rhs) \ 290 #define __zypp_defer_declarator(__id) \ 291 zypp::Deferred __zypp_defer_concatenate(__defer, __id) = [&]() 294 __zypp_defer_declarator(__LINE__) 300 inline std::ostream & operator<<( std::ostream & str, const AutoDispose<Tp> & obj )
301 {
return str << obj.value(); }
311 AutoFD(
int fd_r = -1 ) :
AutoDispose<int>( fd_r, [] ( int fd_r ) {
if ( fd_r != -1 ) ::close( fd_r ); } ) {}
330 template <
typename Tp>
333 AutoFREE( Tp* ptr_r =
nullptr ) :
AutoDispose<Tp*>( ptr_r, [] ( Tp* ptr_r ) {
if ( ptr_r ) ::free( ptr_r ); } ) {}
340 AutoFREE(
void* ptr_r =
nullptr ) :
AutoDispose<void*>( ptr_r, [] ( void* ptr_r ) {
if ( ptr_r ) ::free( ptr_r ); } ) {}
346 #endif // ZYPP_AUTODISPOSE_H AutoFREE(Tp *ptr_r=nullptr)
void reset()
Reset to default Ctor values.
bool unique() const
Returns true if this is the only AutoDispose instance managing the current data object.
void swapDispose(Dispose &dispose_r)
Exchange the dispose function.
shared_ptr< Impl > _pimpl
String related utilities and Regular expression matching.
typename boost::call_traits< const Pathname >::const_reference const_reference
std::conditional_t< std::is_pointer_v< const Pathname >||std::is_integral_v< const Pathname >, const Pathname const, reference > dispose_param_type
void reset()
Reset to default Ctor values.
AutoDispose<int> calling ::close
shared_ptr< Impl > _pimpl
void resetDispose()
Set no dispose function.
function< void(dispose_param_type)> Dispose
Dispose function signatue.
void setDispose(const Dispose &dispose_r)
Set a new dispose function.
void swap(AutoDispose &rhs) noexcept
Exchange the contents of two AutoDispose objects.
AutoDispose()
Default Ctor using default constructed value and no dispose function.
const Dispose & getDispose() const
Return the current dispose function.
Impl(T &&value_r, D &&dispose_r)
reference operator*() const
Reference to the Tp object.
function< void()> Dispose
Dispose function signatue.
AutoDispose()
Default Ctor using default constructed value and no dispose function.
typename conditional< B, T, F >::type conditional_t
typename boost::call_traits< const Pathname >::value_type result_type
void resetDispose()
Set 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.
AutoDispose(value_type value_r)
Ctor taking value and no dispose function.
AutoFILE(FILE *file_r=nullptr)
constexpr std::string_view FILE("file")
AutoFREE(void *ptr_r=nullptr)
AutoDispose(Dispose dispose_r)
Ctor taking dispose function and using default constructed value.
reference value() const
Reference to the Tp object.
AutoDispose(value_type value_r, Dispose dispose_r)
Ctor taking value and dispose function.
void swapDispose(Dispose &dispose_r)
Exchange the dispose function.
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
AutoDispose<FILE*> calling ::fclose
typename boost::call_traits< const Pathname >::reference reference
value_type * operator->() const
Pointer to the Tp object (asserted to be != NULL).
typename boost::call_traits< const Pathname >::param_type param_type
Easy-to use interface to the ZYPP dependency resolver.
void swap(AutoDispose &rhs) noexcept
Exchange the contents of two AutoDispose objects.
const Dispose & getDispose() const
Return the current dispose function.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.