| -- |
| -- Licensed to the Apache Software Foundation (ASF) under one |
| -- or more contributor license agreements. See the NOTICE file |
| -- distributed with this work for additional information |
| -- regarding copyright ownership. The ASF licenses this file |
| -- to you under the Apache License, Version 2.0 (the |
| -- "License"); you may not use this file except in compliance |
| -- with the License. You may obtain a copy of the License at |
| -- |
| -- http://www.apache.org/licenses/LICENSE-2.0 |
| -- |
| -- Unless required by applicable law or agreed to in writing, |
| -- software distributed under the License is distributed on an |
| -- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| -- KIND, either express or implied. See the License for the |
| -- specific language governing permissions and limitations |
| -- under the License. |
| -- |
| |
| require 'TTransport' |
| |
| TMemoryBuffer = TTransportBase:new{ |
| __type = 'TMemoryBuffer', |
| buffer = '', |
| bufferSize = 1024, |
| wPos = 0, |
| rPos = 0 |
| } |
| function TMemoryBuffer:isOpen() |
| return 1 |
| end |
| function TMemoryBuffer:open() end |
| function TMemoryBuffer:close() end |
| |
| function TMemoryBuffer:peak() |
| return self.rPos < self.wPos |
| end |
| |
| function TMemoryBuffer:getBuffer() |
| return self.buffer |
| end |
| |
| function TMemoryBuffer:resetBuffer(buf) |
| if buf then |
| self.buffer = buf |
| self.bufferSize = string.len(buf) |
| else |
| self.buffer = '' |
| self.bufferSize = 1024 |
| end |
| self.wPos = string.len(buf) |
| self.rPos = 0 |
| end |
| |
| function TMemoryBuffer:available() |
| return self.wPos - self.rPos |
| end |
| |
| function TMemoryBuffer:read(len) |
| local avail = self:available() |
| if avail == 0 then |
| return '' |
| end |
| |
| if avail < len then |
| len = avail |
| end |
| |
| local val = string.sub(self.buffer, self.rPos + 1, self.rPos + len) |
| self.rPos = self.rPos + len |
| return val |
| end |
| |
| function TMemoryBuffer:readAll(len) |
| local avail = self:available() |
| |
| if avail < len then |
| local msg = string.format('Attempt to readAll(%d) found only %d available', |
| len, avail) |
| terror(TTransportException:new{message = msg}) |
| end |
| -- read should block so we don't need a loop here |
| return self:read(len) |
| end |
| |
| function TMemoryBuffer:write(buf) |
| self.buffer = self.buffer .. buf |
| self.wPos = self.wPos + string.len(buf) |
| end |
| |
| function TMemoryBuffer:flush() end |