#ifndef _CONSTRUCTOR_H_
#define _CONSTRUCTOR_H_
#include <util/kernel_cpp.h>
template <class DataType>
class Constructor {
public:
typedef DataType* Pointer;
typedef const DataType* ConstPointer;
typedef DataType& Reference;
typedef const DataType& ConstReference;
zero-parameter constructor.
*/
inline
void Construct(Pointer object) {
if (object)
new(reinterpret_cast<void*>(object)) DataType();
}
one-parameter constructor using the given argument.
*/
template <typename ArgType1>
inline
void Construct(Pointer object, ArgType1 arg1) {
if (object)
new(reinterpret_cast<void*>(object)) DataType(arg1);
}
two-parameter constructor using the given arguments.
*/
template <typename ArgType1, typename ArgType2>
inline
void Construct(Pointer object, ArgType1 arg1, ArgType2 arg2) {
if (object)
new(reinterpret_cast<void*>(object)) DataType(arg1, arg2);
}
three-parameter constructor using the given arguments.
*/
template <typename ArgType1, typename ArgType2, typename ArgType3>
inline
void Construct(Pointer object, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3) {
if (object)
new(reinterpret_cast<void*>(object)) DataType(arg1, arg2, arg3);
}
four-parameter constructor using the given arguments.
*/
template <typename ArgType1, typename ArgType2, typename ArgType3,
typename ArgType4>
inline
void Construct(Pointer object, ArgType1 arg1, ArgType2 arg2, ArgType3 arg3,
ArgType4 arg4) {
if (object)
new(reinterpret_cast<void*>(object)) DataType(arg1, arg2, arg3, arg4);
}
*/
inline
void Destruct(Pointer object) {
if (object)
object->~DataType();
}
};
#endif