aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/sequence-base.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-05-11 12:20:11 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-05-11 12:20:11 +0200
commit2e501c68a8641a2b3c430b55f13491a9c1c5d0f5 (patch)
tree49c2748443fe3c1f01108756b647440e0647a11b /libxsde/xsde/cxx/sequence-base.cxx
parent161beba6cdb0d91b15ad19fa8b3e51d986203915 (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.cxx27
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;