X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc%2B%2B.so_src%2Finclude_exp%2Fallocator;h=1608a3c72ed36f273230782e84a58104be4c1a3b;hb=ca9a575116285753b48fd8e0ae6dcdbf8a4af5b1;hp=0bb12ea2a3fe6eb2375495a4e4675dd9d3995fbd;hpb=a7880f755a4f48b2254616ff761ba5fecbf790a7;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc++.so_src/include_exp/allocator b/Usermode/Libraries/libc++.so_src/include_exp/allocator index 0bb12ea2..1608a3c7 100644 --- a/Usermode/Libraries/libc++.so_src/include_exp/allocator +++ b/Usermode/Libraries/libc++.so_src/include_exp/allocator @@ -8,11 +8,20 @@ #ifndef _LIBCXX_ALLOCATOR_ #define _LIBCXX_ALLOCATOR_ +#include "_libcxx_helpers.h" + +#include "new" #include "cstddef" +#include "utility" namespace std { -template class allocator +template class allocator; + +namespace _bits { + +template +class allocator_real { public: typedef T value_type; @@ -29,14 +38,14 @@ public: typedef allocator other; }; - allocator() throw() { + allocator_real() throw() { } - allocator(const allocator& alloc) throw() { + allocator_real(const allocator_real& alloc __attribute__((unused))) throw() { } template - allocator(const allocator& alloc) throw() { + allocator_real(const allocator_real& alloc) throw() { } - ~allocator() throw() { + ~allocator_real() throw() { } pointer address(reference x) const { @@ -46,13 +55,64 @@ public: return &x; } pointer allocate(size_type n, const void* hint=0) { - ::operator new (n * sizeof(value_type)); + hint = hint; + return static_cast( ::operator new (n * sizeof(value_type)) ); } void deallocate(pointer p, size_type n) { + n=n; ::operator delete(p); } + size_type max_size() { + return ((size_type)-1) / sizeof(value_type); + } + void construct( pointer p, const_reference val ) { + new ((void*)p) value_type (val); + } + // C++11 + #if _CXX11_AVAIL + template + void construct( U* p, Args&&... args ) { + ::new ((void*)p) U (::std::forward(args)...); + } + #endif + void destroy(pointer p) { + p->~value_type(); + } +}; + +template +class allocator_noconstruct: + public ::std::_bits::allocator_real +{ +public: + void construct( typename allocator_real::pointer p, typename allocator_real::const_reference val ) { + *p = val; + } + void destroy(typename allocator_real::pointer p) { + } +}; + +}; + +template +class allocator: + public _bits::allocator_real +{ }; +#if 1 +template <> +class allocator: + public _bits::allocator_noconstruct +{ +}; +template <> +class allocator: + public _bits::allocator_noconstruct +{ +}; +#endif + }; #endif