#ifndef DMEM_H
# define DMEM_H

# include <stdlib.h>

# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */

# ifdef DMEM

  void *dmalloc(size_t bytes);
  void *dcalloc(size_t size, size_t bytes);
  void dfree(void *ptr);

  void dmem_dot(char const *fileName);

#  ifndef DMEM_KEEP_STD

#   ifdef malloc 
#    undef malloc
#   endif /* malloc */

#   ifdef calloc 
#    undef calloc
#   endif /* calloc */

#   ifdef free 
#    undef free
#   endif /* free */

#   define malloc dmalloc
#   define calloc dcalloc
#   define free   dfree

#  endif /* DMEM_KEEP_STD */

# else /* !defined(DMEM) */

#  define dmalloc malloc
#  define dcalloc calloc
#  define dfree   free

#  define dmem_dot(fileName) ((void)0)

# endif /* DMEM */

# ifdef __cplusplus
} /* extern "C" */
# endif /* __cplusplus */
#endif /* DMEM_H */
