* 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:
Axel Dörfler 2010-08-09 16:30:24 +00:00
parent 969d58acec
commit d91215d3f1
1 changed files with 35 additions and 0 deletions

View File

@ -5,17 +5,23 @@
#ifndef _AUTO_DELETER_H
#define _AUTO_DELETER_H
/*! Scope-based automatic deletion of objects/arrays.
ObjectDeleter - deletes an object
ArrayDeleter - deletes an array
MemoryDeleter - free()s malloc()ed memory
CObjectDeleter - calls an arbitrary specified destructor function
DescriptorCloser - closes a file descriptor
*/
#include <stdlib.h>
#include <unistd.h>
namespace BPrivate {
// AutoDeleter
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
using BPrivate::ObjectDeleter;
using BPrivate::ArrayDeleter;
using BPrivate::MemoryDeleter;
using BPrivate::CObjectDeleter;
using BPrivate::MethodDeleter;
using BPrivate::DescriptorCloser;
#endif // _AUTO_DELETER_H