diff options
| author | frsyuki <frsyuki@users.sourceforge.jp> | 2009-12-16 03:52:14 +0900 |
|---|---|---|
| committer | frsyuki <frsyuki@users.sourceforge.jp> | 2009-12-16 03:52:14 +0900 |
| commit | 5aa47d667783476277409b06d5829322a801df05 (patch) | |
| tree | 67167df574c99d421fee211da6d0060f51af2e82 /cpp | |
| parent | 0d44348c7dabdbfee4ac1ee17bfb141dfe8706f2 (diff) | |
| download | msgpack-python-5aa47d667783476277409b06d5829322a801df05.tar.gz | |
cpp: zone::push_finalizer supports std::auto_ptr<T>
Diffstat (limited to 'cpp')
| -rw-r--r-- | cpp/zone.hpp.erb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/cpp/zone.hpp.erb b/cpp/zone.hpp.erb index 8fd14a6..f1e4624 100644 --- a/cpp/zone.hpp.erb +++ b/cpp/zone.hpp.erb @@ -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); |
