* Added DescriptorCloser helper class.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37986 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -5,17 +5,23 @@
|
|||||||
#ifndef _AUTO_DELETER_H
|
#ifndef _AUTO_DELETER_H
|
||||||
#define _AUTO_DELETER_H
|
#define _AUTO_DELETER_H
|
||||||
|
|
||||||
|
|
||||||
/*! Scope-based automatic deletion of objects/arrays.
|
/*! Scope-based automatic deletion of objects/arrays.
|
||||||
ObjectDeleter - deletes an object
|
ObjectDeleter - deletes an object
|
||||||
ArrayDeleter - deletes an array
|
ArrayDeleter - deletes an array
|
||||||
MemoryDeleter - free()s malloc()ed memory
|
MemoryDeleter - free()s malloc()ed memory
|
||||||
CObjectDeleter - calls an arbitrary specified destructor function
|
CObjectDeleter - calls an arbitrary specified destructor function
|
||||||
|
DescriptorCloser - closes a file descriptor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
namespace BPrivate {
|
namespace BPrivate {
|
||||||
|
|
||||||
|
|
||||||
// AutoDeleter
|
// AutoDeleter
|
||||||
|
|
||||||
template<typename C, typename DeleteFunc>
|
template<typename C, typename DeleteFunc>
|
||||||
@@ -214,12 +220,41 @@ struct MethodDeleter
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// DescriptorCloser
|
||||||
|
|
||||||
|
struct DescriptorCloser {
|
||||||
|
inline DescriptorCloser(int descriptor)
|
||||||
|
:
|
||||||
|
fDescriptor(descriptor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ~DescriptorCloser()
|
||||||
|
{
|
||||||
|
if (fDescriptor >= 0)
|
||||||
|
close(fDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Detach()
|
||||||
|
{
|
||||||
|
fDescriptor = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int fDescriptor;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|
||||||
|
|
||||||
using BPrivate::ObjectDeleter;
|
using BPrivate::ObjectDeleter;
|
||||||
using BPrivate::ArrayDeleter;
|
using BPrivate::ArrayDeleter;
|
||||||
using BPrivate::MemoryDeleter;
|
using BPrivate::MemoryDeleter;
|
||||||
using BPrivate::CObjectDeleter;
|
using BPrivate::CObjectDeleter;
|
||||||
using BPrivate::MethodDeleter;
|
using BPrivate::MethodDeleter;
|
||||||
|
using BPrivate::DescriptorCloser;
|
||||||
|
|
||||||
|
|
||||||
#endif // _AUTO_DELETER_H
|
#endif // _AUTO_DELETER_H
|
||||||
|
|||||||
Reference in New Issue
Block a user