- improved STO correction [Buffer] - renamed readAt to peekAt - added readAt which consumes git-svn-id: http://moon:8086/svn/matlab/trunk@86 801c6759-fa7c-4059-a304-17956f83a07c
55 lines
1.2 KiB
Objective-C
55 lines
1.2 KiB
Objective-C
function [buf] = buffer()
|
|
|
|
buf = struct('mem', [], 'ri', 0, 'wi', 0, 'obj', @()obj_(), 'len', @()len_(), 'read', @(len)read_(len), 'readAt', @(len, offset)readAt_(len, offset), 'peekAt', @(len, offset)peekAt_(len, offset), 'setReadIndex', @(offset)setReadIndex_(offset), 'setReadIndexRelative', @(offset)setReadIndexRelative_(offset), 'write', @(x)write_(x));
|
|
|
|
function b = obj_()
|
|
b = buf;
|
|
end
|
|
|
|
function len = len_()
|
|
len = 0;
|
|
if (buf.wi > buf.ri)
|
|
len = buf.wi - buf.ri;
|
|
end
|
|
end
|
|
|
|
function [x] = peekAt_(len, offset)
|
|
x = [];
|
|
|
|
if (buf.ri+offset) >= 0
|
|
if (buf.wi-(buf.ri+offset) >= len)
|
|
x = buf.mem(buf.ri+1+offset:buf.ri+len+offset);
|
|
end
|
|
end
|
|
end
|
|
|
|
function [x] = readAt_(len, offset)
|
|
x = peekAt_(len, offset);
|
|
if ~isempty(x)
|
|
buf.ri = buf.ri + len;
|
|
end
|
|
end
|
|
|
|
function [x] = read_(len)
|
|
x = peekAt_(len, 0);
|
|
if ~isempty(x)
|
|
buf.ri = buf.ri + len;
|
|
end
|
|
end
|
|
|
|
function setReadIndex_(offset)
|
|
buf.ri = offset;
|
|
end
|
|
|
|
function setReadIndexRelative_(offset)
|
|
buf.ri = buf.ri+offset;
|
|
end
|
|
|
|
function write_(x)
|
|
len = length(x);
|
|
buf.mem(buf.wi+1:buf.wi+len, :) = x;
|
|
buf.wi = buf.wi + len;
|
|
end
|
|
|
|
end
|