From 2e501c68a8641a2b3c430b55f13491a9c1c5d0f5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 11 May 2010 12:20:11 +0200 Subject: Add support for custom allocators New example: examples/cxx/hybrid/allocator. --- xsde/cxx/hybrid/default-value.cxx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'xsde/cxx/hybrid/default-value.cxx') diff --git a/xsde/cxx/hybrid/default-value.cxx b/xsde/cxx/hybrid/default-value.cxx index a255c92..58a5507 100644 --- a/xsde/cxx/hybrid/default-value.cxx +++ b/xsde/cxx/hybrid/default-value.cxx @@ -499,7 +499,29 @@ namespace CXX member_ = "tmp."; else { - os << "tmp = new " << fq_name (t) << ";"; + String tn (fq_name (t)); + + if (!custom_alloc) + os << "tmp = new " << tn << ";"; + else + { + os << "tmp = static_cast< " << tn << "* > (" << endl + << "::xsde::cxx::alloc (sizeof (" << tn << ")));"; + + if (exceptions) + os << "::xsde::cxx::alloc_guard tmpg (tmp);"; + else + os << endl + << "if (tmp)" << endl; + + os << "new (tmp) " << fq_name (t) << ";"; + + if (exceptions) + os << "tmpg.release ();"; + else + os << endl; + + } if (!exceptions) { -- cgit v1.1