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 16 extern "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) 24 typedef 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) 33 typedef 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 46 namespace dena { 47 48 template <typename T> struct auto_alloca_free { auto_alloca_freedena::auto_alloca_free49 auto_alloca_free(T *value) : value(value) { } ~auto_alloca_freedena::auto_alloca_free50 ~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