mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-19 13:02:13 +01:00
zone::base
This commit is contained in:
parent
21040d9cd3
commit
5fcf1d590b
@ -45,11 +45,13 @@ public:
|
|||||||
<%}%>
|
<%}%>
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void undo_malloc(size_t s);
|
void undo_malloc(size_t size);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void object_destructor(void* obj);
|
static void object_destructor(void* obj);
|
||||||
|
|
||||||
|
typedef msgpack_zone base;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
zone(const zone&);
|
zone(const zone&);
|
||||||
};
|
};
|
||||||
@ -93,11 +95,11 @@ void zone::object_destructor(void* obj)
|
|||||||
reinterpret_cast<T*>(obj)->~T();
|
reinterpret_cast<T*>(obj)->~T();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void zone::undo_malloc(size_t s)
|
inline void zone::undo_malloc(size_t size)
|
||||||
{
|
{
|
||||||
msgpack_zone_chunk* chunk = chunk_array.tail;
|
msgpack_zone_chunk* chunk = base::chunk_array.tail;
|
||||||
chunk->ptr -= s;
|
chunk->ptr -= size;
|
||||||
chunk->free += s;
|
chunk->free += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
@ -112,7 +114,7 @@ T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>)
|
|||||||
try {
|
try {
|
||||||
return new (x) T(<%=(1..i).map{|j|"a#{j}"}.join(', ')%>);
|
return new (x) T(<%=(1..i).map{|j|"a#{j}"}.join(', ')%>);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
--finalizer_array.tail;
|
--base::finalizer_array.tail;
|
||||||
undo_malloc(sizeof(T));
|
undo_malloc(sizeof(T));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user