aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/hybrid/xdr/istream.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/hybrid/xdr/istream.cxx
parent161beba6cdb0d91b15ad19fa8b3e51d986203915 (diff)
Add support for custom allocators
New example: examples/cxx/hybrid/allocator.
Diffstat (limited to 'libxsde/xsde/cxx/hybrid/xdr/istream.cxx')
-rw-r--r--libxsde/xsde/cxx/hybrid/xdr/istream.cxx23
1 files changed, 19 insertions, 4 deletions
diff --git a/libxsde/xsde/cxx/hybrid/xdr/istream.cxx b/libxsde/xsde/cxx/hybrid/xdr/istream.cxx
index 2f870d0..e31fb7f 100644
--- a/libxsde/xsde/cxx/hybrid/xdr/istream.cxx
+++ b/libxsde/xsde/cxx/hybrid/xdr/istream.cxx
@@ -23,7 +23,7 @@ namespace xsde
throw xdr_exception ();
x.clear ();
-
+
if (n != 0)
{
x.resize (n);
@@ -42,11 +42,19 @@ namespace xsde
if (!xdr_u_int (&xdr_, &n))
throw xdr_exception ();
+#ifndef XSDE_CUSTOM_ALLOCATOR
x = new char[n + 1];
+#else
+ x = static_cast<char*> (alloc (n + 1));
+#endif
if (!xdr_opaque (&xdr_, x, n))
{
+#ifndef XSDE_CUSTOM_ALLOCATOR
delete[] x;
+#else
+ cxx::free (x);
+#endif
throw xdr_exception ();
}
@@ -80,14 +88,14 @@ namespace xsde
return false;
x.clear ();
-
+
if (n != 0)
{
x.resize (n);
char* p = const_cast<char*> (x.c_str ());
return xdr_opaque (&xdr_, p, n);
}
-
+
return true;
}
#else
@@ -99,14 +107,21 @@ namespace xsde
if (!xdr_u_int (&xdr_, &n))
return false;
+#ifndef XSDE_CUSTOM_ALLOCATOR
x = new char[n + 1];
-
+#else
+ x = static_cast<char*> (alloc (n + 1));
+#endif
if (x == 0)
return false;
if (!xdr_opaque (&xdr_, x, n))
{
+#ifndef XSDE_CUSTOM_ALLOCATOR
delete[] x;
+#else
+ cxx::free (x);
+#endif
return false;
}