/*
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */


#ifndef __VPX_MEM_INTRNL_H__
#define __VPX_MEM_INTRNL_H__
#include "vpx_ports/config.h"

#ifndef CONFIG_MEM_MANAGER
# if defined(VXWORKS)
#  define CONFIG_MEM_MANAGER  1 /*include heap manager functionality,*/
/*default: enabled on vxworks*/
# else
#  define CONFIG_MEM_MANAGER  0 /*include heap manager functionality*/
# endif
#endif /*CONFIG_MEM_MANAGER*/

#ifndef CONFIG_MEM_TRACKER
# define CONFIG_MEM_TRACKER     1 /*include xvpx_* calls in the lib*/
#endif

#ifndef CONFIG_MEM_CHECKS
# define CONFIG_MEM_CHECKS      0 /*include some basic safety checks in
vpx_memcpy, _memset, and _memmove*/
#endif

#ifndef USE_GLOBAL_FUNCTION_POINTERS
# define USE_GLOBAL_FUNCTION_POINTERS   0  /*use function pointers instead of compiled functions.*/
#endif

#if CONFIG_MEM_TRACKER
# include "vpx_mem_tracker.h"
# if VPX_MEM_TRACKER_VERSION_CHIEF != 2 || VPX_MEM_TRACKER_VERSION_MAJOR != 5
#  error "vpx_mem requires memory tracker version 2.5 to track memory usage"
# endif
#endif

#define ADDRESS_STORAGE_SIZE      sizeof(size_t)

#ifndef DEFAULT_ALIGNMENT
# if defined(VXWORKS)
#  define DEFAULT_ALIGNMENT        32        /*default addr alignment to use in
calls to vpx_* functions other
than vpx_memalign*/
# else
#  define DEFAULT_ALIGNMENT        1
# endif
#endif

#if DEFAULT_ALIGNMENT < 1
# error "DEFAULT_ALIGNMENT must be >= 1!"
#endif

#if CONFIG_MEM_TRACKER
# define TRY_BOUNDS_CHECK         1        /*when set to 1 pads each allocation,
integrity can be checked using
vpx_memory_tracker_check_integrity
or on free by defining*/
/*TRY_BOUNDS_CHECK_ON_FREE*/
#else
# define TRY_BOUNDS_CHECK         0
#endif /*CONFIG_MEM_TRACKER*/

#if TRY_BOUNDS_CHECK
# define TRY_BOUNDS_CHECK_ON_FREE 0          /*checks mem integrity on every
free, very expensive*/
# define BOUNDS_CHECK_VALUE       0xdeadbeef /*value stored before/after ea.
mem addr for bounds checking*/
# define BOUNDS_CHECK_PAD_SIZE    32         /*size of the padding before and
after ea allocation to be filled
with BOUNDS_CHECK_VALUE.
this should be a multiple of 4*/
#else
# define BOUNDS_CHECK_VALUE       0
# define BOUNDS_CHECK_PAD_SIZE    0
#endif /*TRY_BOUNDS_CHECK*/

#ifndef REMOVE_PRINTFS
# define REMOVE_PRINTFS 0
#endif

/* Should probably use a vpx_mem logger function. */
#if REMOVE_PRINTFS
# define _P(x)
#else
# define _P(x) x
#endif

/*returns an addr aligned to the byte boundary specified by align*/
#define align_addr(addr,align) (void*)(((size_t)(addr) + ((align) - 1)) & (size_t)-(align))

#endif /*__VPX_MEM_INTRNL_H__*/
