diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-05-11 12:20:11 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-05-11 12:20:11 +0200 |
commit | 2e501c68a8641a2b3c430b55f13491a9c1c5d0f5 (patch) | |
tree | 49c2748443fe3c1f01108756b647440e0647a11b /libxsde/xsde/cxx/sequence-base.cxx | |
parent | 161beba6cdb0d91b15ad19fa8b3e51d986203915 (diff) |
Add support for custom allocators
New example: examples/cxx/hybrid/allocator.
Diffstat (limited to 'libxsde/xsde/cxx/sequence-base.cxx')
-rw-r--r-- | libxsde/xsde/cxx/sequence-base.cxx | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/libxsde/xsde/cxx/sequence-base.cxx b/libxsde/xsde/cxx/sequence-base.cxx index d2099a3..06d4012 100644 --- a/libxsde/xsde/cxx/sequence-base.cxx +++ b/libxsde/xsde/cxx/sequence-base.cxx @@ -29,7 +29,15 @@ namespace xsde struct guard { guard (void* p) : p_ (p) {} - ~guard () {if (p_) operator delete (p_);} + ~guard () + { + if (p_) +#ifndef XSDE_CUSTOM_ALLOCATOR + operator delete (p_); +#else + cxx::free (p_); +#endif + } void release () { p_ = 0; } @@ -42,7 +50,12 @@ namespace xsde grow_ (size_t n, size_t es, move_func mv) { size_t c = n == 0 ? (capacity_ != 0 ? capacity_ * 2 : 8) : n; + +#ifndef XSDE_CUSTOM_ALLOCATOR void* d = operator new (c * es); +#else + void* d = alloc (c * es); +#endif if (size_) { @@ -57,7 +70,11 @@ namespace xsde } if (data_) +#ifndef XSDE_CUSTOM_ALLOCATOR operator delete (data_); +#else + cxx::free (data_); +#endif data_ = d; capacity_ = c; @@ -89,7 +106,11 @@ namespace xsde grow_ (size_t n, size_t es, move_func mv) { size_t c = n == 0 ? (capacity_ != 0 ? capacity_ * 2 : 8) : n; +#ifndef XSDE_CUSTOM_ALLOCATOR void* d = operator new (c * es); +#else + void* d = alloc (c * es); +#endif if (d == 0) return error_no_memory; @@ -103,7 +124,11 @@ namespace xsde } if (data_) +#ifndef XSDE_CUSTOM_ALLOCATOR operator delete (data_); +#else + cxx::free (data_); +#endif data_ = d; capacity_ = c; |