/*
 *  Copyright (c) 2010 The VP8 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__*/
