cpp: zone::push_finalizer supports std::auto_ptr<T>

This commit is contained in:
frsyuki 2009-12-16 03:52:14 +09:00
parent 0d44348c7d
commit 5aa47d6677

View File

@ -21,6 +21,7 @@
#include "msgpack/object.hpp"
#include "msgpack/zone.h"
#include <cstdlib>
#include <memory>
#include <vector>
<% GENERATION_LIMIT = 15 %>
@ -38,6 +39,9 @@ public:
void push_finalizer(void (*func)(void*), void* data);
template <typename T>
void push_finalizer(std::auto_ptr<T> obj);
void clear();
<%0.upto(GENERATION_LIMIT) {|i|%>
@ -94,6 +98,15 @@ inline void zone::push_finalizer(void (*func)(void*), void* data)
}
}
template <typename T>
inline void zone::push_finalizer(std::auto_ptr<T> obj)
{
if(!msgpack_zone_push_finalizer(this, &zone::object_destructor<T>, obj.get())) {
throw std::bad_alloc();
}
obj.release();
}
inline void zone::clear()
{
msgpack_zone_clear(this);