trunk/src/emu/netlist/pstring.c
| r26473 | r26474 | |
| 7 | 7 | #include <cstdio> |
| 8 | 8 | |
| 9 | 9 | |
| 10 | | pblockpool *pstring::m_pool = new pblockpool; |
| 11 | | pstring::str_t *pstring::m_zero = new(*pstring::m_pool, 0) pstring::str_t(0); |
| 10 | //pblockpool *pstring::m_pool = new pblockpool; |
| 11 | //pstring::str_t *pstring::m_zero = new(pstring::m_pool, 0) pstring::str_t(0); |
| 12 | 12 | |
| 13 | pblockpool pstring::m_pool; |
| 14 | |
| 15 | pstring::str_t *pstring::m_zero = NULL; |
| 16 | |
| 13 | 17 | #define IMMEDIATE_MODE (1) |
| 14 | 18 | #define DEBUG_MODE (0) |
| 15 | 19 | |
| r26473 | r26474 | |
| 90 | 94 | { |
| 91 | 95 | s->m_ref_count--; |
| 92 | 96 | if (s->m_ref_count == 0) |
| 93 | | m_pool->dealloc(s); |
| 97 | m_pool.dealloc(s); |
| 94 | 98 | } |
| 95 | 99 | |
| 96 | 100 | pstring::str_t *pstring::salloc(int n) |
| 97 | 101 | { |
| 98 | | str_t *ret = new(*m_pool, n) str_t(n); |
| 102 | str_t *ret = new(m_pool, n) str_t(n); |
| 99 | 103 | return ret; |
| 100 | 104 | } |
| 101 | 105 | |
| r26473 | r26474 | |
| 115 | 119 | if (m_zero != NULL) |
| 116 | 120 | sfree(m_zero); |
| 117 | 121 | m_zero = NULL; |
| 118 | | m_pool->m_shutdown = true; |
| 119 | | m_pool->resetmem(); |
| 122 | m_pool.m_shutdown = true; |
| 123 | m_pool.resetmem(); |
| 120 | 124 | } |
| 121 | 125 | |
| 122 | 126 | // ---------------------------------------------------------------------------------------- |
trunk/src/emu/netlist/pstring.h
| r26473 | r26474 | |
| 45 | 45 | int m_align; |
| 46 | 46 | }; |
| 47 | 47 | |
| 48 | /* objects must be destroyed using destroy above */ |
| 49 | |
| 50 | inline void *operator new(std::size_t size, pblockpool &pool, int extra = 0) throw (std::bad_alloc) |
| 51 | { |
| 52 | void *result = pool.alloc(size + extra); |
| 53 | if (result == NULL) |
| 54 | throw std::bad_alloc(); |
| 55 | return result; |
| 56 | } |
| 57 | |
| 48 | 58 | // ---------------------------------------------------------------------------------------- |
| 49 | 59 | // nstring: immutable strings ... |
| 50 | 60 | // |
| r26473 | r26474 | |
| 148 | 158 | |
| 149 | 159 | str_t *m_ptr; |
| 150 | 160 | |
| 151 | | static pblockpool *m_pool; |
| 161 | static pblockpool m_pool; |
| 152 | 162 | |
| 153 | 163 | private: |
| 154 | 164 | inline void init() |
| 155 | 165 | { |
| 166 | if (m_zero == NULL) |
| 167 | m_zero = new(pstring::m_pool, 0) pstring::str_t(0); |
| 156 | 168 | m_ptr = m_zero; |
| 157 | 169 | m_ptr->m_ref_count++; |
| 158 | 170 | } |
| r26473 | r26474 | |
| 194 | 206 | static str_t *m_zero; |
| 195 | 207 | }; |
| 196 | 208 | |
| 197 | | /* objects must be destroyed using destroy above */ |
| 198 | 209 | |
| 199 | | inline void *operator new(std::size_t size, pblockpool &pool, int extra = 0) throw (std::bad_alloc) |
| 200 | | { |
| 201 | | void *result = pool.alloc(size + extra); |
| 202 | | if (result == NULL) |
| 203 | | throw std::bad_alloc(); |
| 204 | | return result; |
| 205 | | } |
| 206 | 210 | |
| 207 | | |
| 208 | 211 | #endif /* _PSTRING_H_ */ |
| 209 | 212 | |