mirror of https://github.com/PrimeDecomp/prime.git
47 lines
864 B
C++
47 lines
864 B
C++
|
#ifndef _RSTL_CONSTRUCT_HPP
|
||
|
#define _RSTL_CONSTRUCT_HPP
|
||
|
|
||
|
#include "types.h"
|
||
|
|
||
|
namespace rstl {
|
||
|
template < typename T >
|
||
|
inline void construct(void* dest, const T& src) {
|
||
|
*static_cast< T* >(dest) = src;
|
||
|
}
|
||
|
|
||
|
template < typename T >
|
||
|
inline void destroy(T* in) {
|
||
|
in->~T();
|
||
|
}
|
||
|
|
||
|
template < typename Iter >
|
||
|
inline void destroy(Iter begin, Iter end) {
|
||
|
Iter current = begin;
|
||
|
while (current != end) {
|
||
|
current.destroy();
|
||
|
++current;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
template < typename Iter, typename T >
|
||
|
inline void uninitialized_copy(Iter begin, Iter end, T* in) {
|
||
|
Iter current = begin;
|
||
|
while (current != end) {
|
||
|
current = *in;
|
||
|
++current;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
template < typename T >
|
||
|
inline void uninitialized_copy_n(T* dest, size_t count, T* src) {
|
||
|
for (size_t i = 0; i < count; ++i) {
|
||
|
construct(dest, *src);
|
||
|
destroy(src);
|
||
|
++dest;
|
||
|
++src;
|
||
|
}
|
||
|
}
|
||
|
} // namespace rstl
|
||
|
|
||
|
#endif
|