1 /* Boolector: Satisfiability Modulo Theories (SMT) solver. 2 * 3 * Copyright (C) 2007-2021 by the authors listed in the AUTHORS file. 4 * 5 * This file is part of Boolector. 6 * See COPYING for more information on using this software. 7 */ 8 9 #ifndef BTORMEM_H_INCLUDED 10 #define BTORMEM_H_INCLUDED 11 12 #include <stdarg.h> 13 #include <stdint.h> 14 #include <stdlib.h> 15 #include <string.h> 16 17 /*------------------------------------------------------------------------*/ 18 19 #define BTOR_NEWN(mm, ptr, nelems) \ 20 do \ 21 { \ 22 (ptr) = (typeof(ptr)) btor_mem_malloc ((mm), (nelems) * sizeof *(ptr)); \ 23 } while (0) 24 25 #define BTOR_CNEWN(mm, ptr, nelems) \ 26 do \ 27 { \ 28 (ptr) = (typeof(ptr)) btor_mem_calloc ((mm), (nelems), sizeof *(ptr)); \ 29 } while (0) 30 31 #define BTOR_CLRN(ptr, nelems) \ 32 do \ 33 { \ 34 memset ((ptr), 0, (nelems) * sizeof *(ptr)); \ 35 } while (0) 36 37 #define BTOR_DELETEN(mm, ptr, nelems) \ 38 do \ 39 { \ 40 btor_mem_free ((mm), (ptr), (nelems) * sizeof *(ptr)); \ 41 } while (0) 42 43 #define BTOR_REALLOC(mm, p, o, n) \ 44 do \ 45 { \ 46 (p) = (typeof(p)) btor_mem_realloc ( \ 47 (mm), (p), ((o) * sizeof *(p)), ((n) * sizeof *(p))); \ 48 } while (0) 49 50 #define BTOR_NEW(mm, ptr) BTOR_NEWN ((mm), (ptr), 1) 51 52 #define BTOR_CNEW(mm, ptr) BTOR_CNEWN ((mm), (ptr), 1) 53 54 #define BTOR_CLR(ptr) BTOR_CLRN ((ptr), 1) 55 56 #define BTOR_DELETE(mm, ptr) BTOR_DELETEN ((mm), (ptr), 1) 57 58 #define BTOR_ENLARGE(mm, p, o, n) \ 59 do \ 60 { \ 61 size_t internaln = (o) ? 2 * (o) : 1; \ 62 BTOR_REALLOC ((mm), (p), (o), internaln); \ 63 (n) = internaln; \ 64 } while (0) 65 66 /*------------------------------------------------------------------------*/ 67 68 struct BtorMemMgr 69 { 70 size_t allocated; 71 size_t maxallocated; 72 size_t sat_allocated; 73 size_t sat_maxallocated; 74 }; 75 76 typedef struct BtorMemMgr BtorMemMgr; 77 78 /*------------------------------------------------------------------------*/ 79 80 BtorMemMgr *btor_mem_mgr_new (void); 81 82 void btor_mem_mgr_delete (BtorMemMgr *mm); 83 84 void *btor_mem_sat_malloc (BtorMemMgr *mm, size_t size); 85 86 void *btor_mem_sat_realloc (BtorMemMgr *mm, void *, size_t oldsz, size_t newsz); 87 88 void btor_mem_sat_free (BtorMemMgr *mm, void *p, size_t freed); 89 90 void *btor_mem_malloc (BtorMemMgr *mm, size_t size); 91 92 void *btor_mem_realloc (BtorMemMgr *mm, void *, size_t oldsz, size_t newsz); 93 94 void *btor_mem_calloc (BtorMemMgr *mm, size_t nobj, size_t size); 95 96 void btor_mem_free (BtorMemMgr *mm, void *p, size_t freed); 97 98 char *btor_mem_strdup (BtorMemMgr *mm, const char *str); 99 100 void btor_mem_freestr (BtorMemMgr *mm, char *str); 101 102 size_t btor_mem_parse_error_msg_length (const char *name, 103 const char *fmt, 104 va_list ap); 105 106 char *btor_mem_parse_error_msg (BtorMemMgr *, 107 const char *name, 108 int32_t lineno, 109 int32_t columnno, 110 const char *fmt, 111 va_list, 112 size_t bytes); 113 #endif 114