16e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
26e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// Copyright 2006 Adobe Systems Incorporated
36e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// All Rights Reserved.
46e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim//
56e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// NOTICE:  Adobe permits you to use, modify, and distribute this file in
66e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// accordance with the terms of the Adobe license agreement accompanying it.
76e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
86e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
96e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_memory.cpp#1 $ */
106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $DateTime: 2012/05/30 13:28:51 $ */
116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Change: 832332 $ */
126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Author: tknoll $ */
136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_memory.h"
176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_bottlenecks.h"
196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_exceptions.h"
206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_safe_arithmetic.h"
216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_data::dng_memory_data ()
256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	:	fBuffer (NULL)
276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_data::dng_memory_data (uint32 size)
356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	:	fBuffer (NULL)
376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	Allocate (size);
416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_data::dng_memory_data (uint32 count, std::size_t elementSize)
476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	:	fBuffer (NULL)
496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	Allocate (count, elementSize);
536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_data::~dng_memory_data ()
596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	Clear ();
626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_memory_data::Allocate (uint32 size)
686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	Clear ();
716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (size)
736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		fBuffer = (char*)malloc (size);
766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		if (!fBuffer)
786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			ThrowMemoryFull ();
816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_memory_data::Allocate (uint32 count, std::size_t elementSize)
916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	// Convert elementSize to a uint32.
946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	const uint32 elementSizeAsUint32 = static_cast<uint32> (elementSize);
956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (static_cast<std::size_t> (elementSizeAsUint32) != elementSize)
966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull();
986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	// Compute required number of bytes and allocate memory.
1016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	uint32 numBytes;
1026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!SafeUint32Mult(count, elementSizeAsUint32, &numBytes))
1036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull();
1056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	Allocate(numBytes);
1076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
1096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_memory_data::Clear ()
1116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (fBuffer)
1146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		free (fBuffer);
1176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		fBuffer = NULL;
1196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
1236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
1256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_block * dng_memory_block::Clone (dng_memory_allocator &allocator) const
1276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	uint32 size = LogicalSize ();
1306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_memory_block * result = allocator.Allocate (size);
1326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	DoCopyBytes (Buffer (), result->Buffer (), size);
1346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
1366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
1386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
1406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimclass dng_malloc_block : public dng_memory_block
1426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	private:
1456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		void *fMalloc;
1476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	public:
1496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		dng_malloc_block (uint32 logicalSize);
1516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		virtual ~dng_malloc_block ();
1536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	private:
1556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// Hidden copy constructor and assignment operator.
1576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		dng_malloc_block (const dng_malloc_block &block);
1596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		dng_malloc_block & operator= (const dng_malloc_block &block);
1616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	};
1636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
1656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_malloc_block::dng_malloc_block (uint32 logicalSize)
1676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	:	dng_memory_block (logicalSize)
1696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fMalloc (NULL)
1716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
174bf69c2b2c98f3a4ea44058d62a8738166037ba17Yujie Qin#if (qLinux && !defined(__ANDROID_API__)) || (defined(__ANDROID_API__) && __ANDROID_API__ >= 17)
1756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	int err = ::posix_memalign( (void **) &fMalloc, 16, (size_t) PhysicalSize() );
1776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (err)
1796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
1826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#else
1866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	fMalloc = (char*)malloc (PhysicalSize ());
1886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!fMalloc)
1906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
1936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#endif
1976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	SetBuffer (fMalloc);
1996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_malloc_block::~dng_malloc_block ()
2056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (fMalloc)
2086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
2096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		free (fMalloc);
2116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
2136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_block * dng_memory_allocator::Allocate (uint32 size)
2196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_memory_block *result = new dng_malloc_block (size);
2226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
2246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
2256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
2276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
2296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
2316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_allocator gDefaultDNGMemoryAllocator;
2376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
239