1
2// vim:sw=2:ai
3
4/*
5 * Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
6 * See COPYRIGHT.txt for details.
7 */
8
9#ifndef DENA_ALLOCATOR_HPP
10#define DENA_ALLOCATOR_HPP
11
12#include <stdlib.h>
13#include <string.h>
14
15#if 0
16extern "C" {
17#include <tlsf.h>
18};
19#define DENA_MALLOC(x) tlsf_malloc(x)
20#define DENA_REALLOC(x, y) tlsf_realloc(x, y)
21#define DENA_FREE(x) tlsf_free(x)
22#define DENA_NEWCHAR(x) static_cast<char *>(tlsf_malloc(x))
23#define DENA_DELETE(x) tlsf_free(x)
24typedef std::allocator<int> allocator_type;
25#endif
26
27#if 1
28#define DENA_MALLOC(x) malloc(x)
29#define DENA_REALLOC(x, y) realloc(x, y)
30#define DENA_FREE(x) free(x)
31#define DENA_NEWCHAR(x) (new char[x])
32#define DENA_DELETE(x) (delete [] x)
33typedef std::allocator<int> allocator_type;
34#endif
35
36#if 1
37#define DENA_ALLOCA_ALLOCATE(typ, len) \
38 (typ *) alloca((len) * sizeof(typ))
39#define DENA_ALLOCA_FREE(x)
40#else
41#define DENA_ALLOCA_ALLOCATE(typ, len) \
42 static_cast<typ *>(malloc((len) * sizeof(typ)))
43#define DENA_ALLOCA_FREE(x) free(x)
44#endif
45
46namespace dena {
47
48template <typename T> struct auto_alloca_free {
49 auto_alloca_free(T *value) : value(value) { }
50 ~auto_alloca_free() {
51 /* no-op if alloca() is used */
52 DENA_ALLOCA_FREE(value);
53 }
54 private:
55 auto_alloca_free(const auto_alloca_free&);
56 auto_alloca_free& operator =(const auto_alloca_free&);
57 private:
58 T *value;
59};
60
61};
62
63#endif
64
65