Commit 727de76a authored by Zhang, Hua's avatar Zhang, Hua

don't truncate Buffer.data in every read

parent b98292a3
......@@ -26,25 +26,29 @@ class Buffer(object):
"""
def __init__(self, data):
self.logger = logging.getLogger(__name__)
self.data = data
# self.logger = logging.getLogger(__name__)
self._data = data
self.rsize = 0
def __str__(self):
return "Buffer(size:{}, data:{})".format(len(self.data), self.data)
return "Buffer(size:{}, data:{})".format(len(self), self.data)
__repr__ = __str__
def __len__(self):
return len(self.data)
return len(self._data) - self.rsize
def read(self, size):
"""
read and pop number of bytes for buffer
"""
if size > len(self.data):
rsize = self.rsize
nrsize = rsize + size
mydata = self._data
if nrsize > len(mydata):
raise Exception("Not enough data left in buffer, request for {}, we have {}".format(size, self))
#self.logger.debug("Request for %s bytes, from %s", size, self)
data = self.data[:size]
self.data = self.data[size:]
data = mydata[rsize:nrsize]
self.rsize = nrsize
#self.logger.debug("Returning: %s ", data)
return data
......@@ -53,17 +57,27 @@ class Buffer(object):
return a copy, optionnaly only copy 'size' bytes
"""
if size is None:
return Buffer(self.data)
return Buffer(self._data[self.rsize:])
else:
return Buffer(self.data[:size])
return Buffer(self._data[self.rsize:self.rsize + size])
def test_read(self, size):
"""
read 'size' bytes from buffer, without removing them from buffer
"""
if size > len(self.data):
if self.rsize + size > len(self._data):
raise Exception("Not enough data left in buffer, request for {}, we have {}".format(size, self))
return self.data[:size]
return self._data[self.rsize:self.rsize + size]
def get_data(self):
return self._data[self.rsize:]
def set_data(self, v):
self._data = v
self.rsize = 0
data = property(get_data, set_data)
class SocketClosedException(Exception):
pass
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment