summaryrefslogtreecommitdiff
path: root/cpp/unpack.hpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:56 +0000
committerfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:56 +0000
commit529a50633dffc91dd5ce58ae5a905a0ac4a5fdf9 (patch)
treedd81e58a7ef270790969f3179b655136757bc303 /cpp/unpack.hpp
parent9f460f17d73e749d58c2f58beb621e1f7292cfa6 (diff)
downloadmsgpack-python-529a50633dffc91dd5ce58ae5a905a0ac4a5fdf9.tar.gz
lang/c/msgpack: added C++ binding
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@50 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
Diffstat (limited to 'cpp/unpack.hpp')
-rw-r--r--cpp/unpack.hpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/cpp/unpack.hpp b/cpp/unpack.hpp
new file mode 100644
index 0000000..61ba781
--- /dev/null
+++ b/cpp/unpack.hpp
@@ -0,0 +1,48 @@
+#ifndef MSGPACK_UNPACK_HPP__
+#define MSGPACK_UNPACK_HPP__
+
+#include "msgpack/object.hpp"
+#include "msgpack/zone.hpp"
+#include <stdexcept>
+
+namespace msgpack {
+
+
+struct unpack_error : public std::runtime_error {
+ unpack_error(const std::string& msg) :
+ std::runtime_error(msg) { }
+};
+
+
+class unpacker {
+public:
+ unpacker(zone& z);
+ ~unpacker();
+public:
+ size_t execute(const void* data, size_t len, size_t off);
+ bool is_finished() { return m_finished; }
+ object data();
+ void reset();
+private:
+ struct context;
+ context* m_ctx;
+ zone& m_zone;
+ bool m_finished;
+private:
+ unpacker();
+ unpacker(const unpacker&);
+public:
+ static object unpack(const void* data, size_t len, zone& z);
+};
+
+
+inline object unpack(const void* data, size_t len, zone& z)
+{
+ return unpacker::unpack(data, len, z);
+}
+
+
+} // namespace msgpack
+
+#endif /* msgpack/unpack.hpp */
+