diff --git a/ofdm/buffer.m b/ofdm/buffer.m new file mode 100644 index 0000000..a248e7f --- /dev/null +++ b/ofdm/buffer.m @@ -0,0 +1,44 @@ +function [buf] = buffer() + + buf = struct('mem', [], 'ri', 0, 'wi', 0, 'fill', 0, 'obj', @()obj_(), 'len', @()len_(), 'read', @(len)read_(len), 'readAt', @(len, offset)readAt_(len, offset), 'setReadIndex', @(offset)setReadIndex_(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] = readAt_(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] = read_(len) + x = readAt_(len, 0); + if ~isempty(x) + buf.ri = buf.ri + len; + end + end + + function setReadIndex_(offset) + buf.ri = offset; + end + + function write_(x) + len = length(x); + buf.mem(buf.wi+1:buf.wi+len,:) = x; + buf.fill = buf.fill + len; + buf.wi = buf.wi + len; + end + +end