classdef TimeBuffer < handle % Time buffer -- Is a single buffer for time stamps. The method retire % removes all entries which are older than t-nHistory. % Florian Raudies, 09/07/2014, Boston University. properties nEntry % Number of entries. nBuffer % Number of buffers. nHistory % Time in steps to go back. Counter % Counter for each buffer. Buffer % These are the buffers that hold the time values. end methods % Constructor. function obj = TimeBuffer(nEntry,nBuffer,nHistory) obj.nEntry = nEntry; obj.nBuffer = nBuffer; obj.nHistory = nHistory; obj.Counter = zeros(nBuffer,1); obj.Buffer = zeros(nEntry,nBuffer); end function obj = clear(obj) obj.Counter = zeros(obj.nBuffer,1); obj.Buffer = zeros(obj.nEntry,obj.nBuffer); end % Retire entries. function obj = retire(obj,time) for iBuffer = 1:obj.nBuffer, if obj.Counter(iBuffer)==0, continue; end ToRetire = obj.Buffer(1:obj.Counter(iBuffer),iBuffer) < time-obj.nHistory; if sum(ToRetire)==0, continue; end Index = sum(ToRetire)+1 : obj.Counter(iBuffer); if isempty(Index), obj.Counter(iBuffer) = 0; continue; end obj.Buffer(1:length(Index),iBuffer) = obj.Buffer(Index,iBuffer); obj.Counter(iBuffer) = length(Index); end end % Add time. function obj = addTime(obj,time,ToBuffer) if any(ToBuffer) for iToBuffer = find(ToBuffer), obj.Buffer(1+obj.Counter(iToBuffer),iToBuffer) = time; obj.Counter(iToBuffer) = obj.Counter(iToBuffer) + 1; end end end % Retrieve time for iBuffer. function Time = time(obj,iBuffer) Time = obj.Buffer(1:obj.Counter(iBuffer),iBuffer); end % Print the contents of the buffer. function print(obj) for iBuffer = 1:obj.nBuffer, fprintf('buffer %d: ',iBuffer); for iEntry = 1:obj.Counter(iBuffer), fprintf('%d, ',obj.Buffer(iEntry,iBuffer)); end fprintf('\n'); end end end end