1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
// File: lzham_helpers.h
// See Copyright Notice and license at the end of include/lzham.h
#pragma once
#define LZHAM_NO_COPY_OR_ASSIGNMENT_OP(c) c(const c&); c& operator= (const c&);
namespace lzham
{
namespace helpers
{
template<typename T> struct rel_ops
{
friend inline bool operator!=(const T& x, const T& y) { return (!(x == y)); }
friend inline bool operator> (const T& x, const T& y) { return (y < x); }
friend inline bool operator<=(const T& x, const T& y) { return (!(y < x)); }
friend inline bool operator>=(const T& x, const T& y) { return (!(x < y)); }
};
template <typename T>
inline T* construct(T* p)
{
return new (static_cast<void*>(p)) T;
}
template <typename T, typename U>
inline T* construct(T* p, const U& init)
{
return new (static_cast<void*>(p)) T(init);
}
template <typename T>
inline void construct_array(T* p, uint n);
template <typename T, typename U>
inline void construct_array(T* p, uint n, const U& init)
{
T* q = p + n;
for ( ; p != q; ++p)
new (static_cast<void*>(p)) T(init);
}
template <typename T>
inline void destruct(T* p)
{
LZHAM_NOTE_UNUSED(p);
p->~T();
}
template <typename T>
inline void destruct_array(T* p, uint n);
} // namespace helpers
} // namespace lzham
|