#ifndef R_MALLOC
#define R_MALLOC
#include <malloc.h>

long long int r_malloc_alloc_count = 0;
long long int r_malloc_alloc_total = 0;

void *r_malloc(size_t size) {
  r_malloc_alloc_count++;
  r_malloc_alloc_total++;

  return malloc(size);
}

void r_free(void *ptr) {
  r_malloc_alloc_count--;

  free(ptr);
}

void r_malloc_stats() {
  fprintf(stderr, "r_malloc_alloc_count: %lld\n", r_malloc_alloc_count);
  fprintf(stderr, "r_malloc_alloc_total: %lld\n", r_malloc_alloc_total);
  fprintf(stderr, "r_malloc_freed_total: %lld\n",
          r_malloc_alloc_total - r_malloc_alloc_count);
}

#define malloc(x) r_malloc(x)
#define free(x) r_free(x)

#include <stdio.h>

#endif