#ifndef _DEMEMORY_H
#define _DEMEMORY_H
/*-------------------------------------------------------------------------
 * drawElements Base Portability Library
 * -------------------------------------
 *
 * Copyright 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief Memory management.
 *//*--------------------------------------------------------------------*/

#include "deDefs.h"

#include <string.h>

DE_BEGIN_EXTERN_C

#define DE_NEW(TYPE)			((TYPE*)deMalloc(sizeof(TYPE)))
#define DE_DELETE(TYPE, PTR)	deFree(PTR)

void*	deMalloc		(size_t numBytes);
void*	deCalloc		(size_t numBytes);
void*	deRealloc		(void* ptr, size_t numBytes);
void	deFree			(void* ptr);

void*	deAlignedMalloc	(size_t numBytes, size_t alignBytes);
void*	deAlignedRealloc(void* ptr, size_t numBytes, size_t alignBytes);
void	deAlignedFree	(void* ptr);

char*	deStrdup		(const char* str);

/*--------------------------------------------------------------------*//*!
 * \brief Fill a block of memory with an 8-bit value.
 * \param ptr		Pointer to memory to free.
 * \param value		Value to fill with.
 * \param numBytes	Number of bytes to write.
 *//*--------------------------------------------------------------------*/
DE_INLINE void deMemset (void* ptr, int value, size_t numBytes)
{
	DE_ASSERT((value & 0xFF) == value);
	memset(ptr, value, numBytes);
}

DE_INLINE int deMemCmp (const void* a, const void* b, size_t numBytes)
{
	return memcmp(a, b, numBytes);
}

/*--------------------------------------------------------------------*//*!
 * \brief Copy bytes between buffers
 * \param dst		Destination buffer
 * \param src		Source buffer
 * \param numBytes	Number of bytes to copy
 * \return Destination buffer.
 *//*--------------------------------------------------------------------*/
DE_INLINE void* deMemcpy (void* dst, const void* src, size_t numBytes)
{
	return memcpy(dst, src, numBytes);
}

DE_INLINE void* deMemmove (void* dst, const void* src, size_t numBytes)
{
	return memmove(dst, src, numBytes);
}

void	deMemory_selfTest	(void);

DE_END_EXTERN_C

#endif /* _DEMEMORY_H */
