diff options
author | jfolz <theriddling@gmail.com> | 2017-04-29 19:33:20 +0200 |
---|---|---|
committer | INADA Naoki <methane@users.noreply.github.com> | 2017-04-30 02:33:20 +0900 |
commit | a8d9162ca6cff6101c1f6b9547e94749c6acae96 (patch) | |
tree | 151a0d023a43cb93e586a3a377d5c2e82bdced03 /msgpack/_unpacker.pyx | |
parent | 3388e4a6ee6adea56789d97cc05ed610a4e5b4fc (diff) | |
download | msgpack-python-a8d9162ca6cff6101c1f6b9547e94749c6acae96.tar.gz |
Unpacker: add tell() (#227)
Diffstat (limited to 'msgpack/_unpacker.pyx')
-rw-r--r-- | msgpack/_unpacker.pyx | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx index a9801ee..dabc5f7 100644 --- a/msgpack/_unpacker.pyx +++ b/msgpack/_unpacker.pyx @@ -29,6 +29,7 @@ cdef extern from "Python.h": from libc.stdlib cimport * from libc.string cimport * from libc.limits cimport * +ctypedef unsigned long long uint64_t from msgpack.exceptions import ( BufferFull, @@ -314,6 +315,7 @@ cdef class Unpacker(object): cdef object object_hook, object_pairs_hook, list_hook, ext_hook cdef object encoding, unicode_errors cdef Py_ssize_t max_buffer_size + cdef uint64_t stream_offset def __cinit__(self): self.buf = NULL @@ -358,6 +360,7 @@ cdef class Unpacker(object): self.buf_size = read_size self.buf_head = 0 self.buf_tail = 0 + self.stream_offset = 0 if encoding is not None: if isinstance(encoding, unicode): @@ -468,6 +471,7 @@ cdef class Unpacker(object): try: ret = execute(&self.ctx, self.buf, self.buf_tail, &self.buf_head) + self.stream_offset += self.buf_head - prev_head if write_bytes is not None: write_bytes(PyBytes_FromStringAndSize(self.buf + prev_head, self.buf_head - prev_head)) @@ -534,6 +538,9 @@ cdef class Unpacker(object): """ return self._unpack(read_map_header, write_bytes) + def tell(self): + return self.stream_offset + def __iter__(self): return self |