mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-05-29 15:34:08 +02:00
cpp: zone::push_finalizer supports std::auto_ptr<T>
This commit is contained in:
parent
0d44348c7d
commit
5aa47d6677
@ -21,6 +21,7 @@
|
|||||||
#include "msgpack/object.hpp"
|
#include "msgpack/object.hpp"
|
||||||
#include "msgpack/zone.h"
|
#include "msgpack/zone.h"
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
<% GENERATION_LIMIT = 15 %>
|
<% GENERATION_LIMIT = 15 %>
|
||||||
@ -38,6 +39,9 @@ public:
|
|||||||
|
|
||||||
void push_finalizer(void (*func)(void*), void* data);
|
void push_finalizer(void (*func)(void*), void* data);
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void push_finalizer(std::auto_ptr<T> obj);
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%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()
|
inline void zone::clear()
|
||||||
{
|
{
|
||||||
msgpack_zone_clear(this);
|
msgpack_zone_clear(this);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user