From d3a0e7c306d0645dab8257389343a2e826b2dbe6 Mon Sep 17 00:00:00 2001 From: Tyler Dauwalder Date: Mon, 23 Jun 2003 05:56:09 +0000 Subject: [PATCH] General object constructor class git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3623 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/util/Constructor.h | 76 +++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 headers/private/kernel/util/Constructor.h diff --git a/headers/private/kernel/util/Constructor.h b/headers/private/kernel/util/Constructor.h new file mode 100644 index 0000000000..32fc276014 --- /dev/null +++ b/headers/private/kernel/util/Constructor.h @@ -0,0 +1,76 @@ +#ifndef _CONSTRUCTOR_H_ +#define _CONSTRUCTOR_H_ + +#include + +template +class Constructor { +public: + typedef DataType* Pointer; + typedef const DataType* ConstPointer; + typedef DataType& Reference; + typedef const DataType& ConstReference; + + /*! Constructs the object pointed to by \a object via a + zero-parameter constructor. + */ + inline + void Construct(Pointer object) { + if (object) + new(reinterpret_cast(object)) DataType(); + } + + /*! Constructs the object pointed to by \a object via a + one-parameter constructor using the given argument. + */ + template + inline + void Construct(Pointer object, ArgType1 arg1) { + if (object) + new(reinterpret_cast(object)) DataType(arg1); + } + + /*! Constructs the object pointed to by \a object via a + two-parameter constructor using the given arguments. + */ + template + inline + void Construct(Pointer object, ArgType1 arg1, ArgType2 arg2) { + if (object) + new(reinterpret_cast(object)) DataType(arg1, arg2); + } + + /*! Constructs the object pointed to by \a object via a + three-parameter constructor using the given arguments. + */ + template + inline + void Construct(Pointer object, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3) { + if (object) + new(reinterpret_cast(object)) DataType(arg1, arg2, arg3); + } + + /*! Constructs the object pointed to by \a object via a + four-parameter constructor using the given arguments. + */ + template + inline + void Construct(Pointer object, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3, + ArgType4 arg4) { + if (object) + new(reinterpret_cast(object)) DataType(arg1, arg2, arg3, arg4); + } + + /*! Calls the destructor for the object pointed to be \a object. + */ + inline + void Destruct(Pointer object) { + if (object) + object->~DataType(); + } + + +}; + +#endif // _CONSTRUCTOR_H_