Newer
Older

jacques.grelet_ird.fr
committed
function self = push(self, object)
%PUSH put new object in queue
% queue = push(queue,object)

jacques.grelet_ird.fr
committed
%
% $Id$

jacques.grelet_ird.fr
committed
% if empty object, no action

jacques.grelet_ird.fr
committed
% --------------------------

jacques.grelet_ird.fr
committed
if isempty(object)

jacques.grelet_ird.fr
committed
return
end

jacques.grelet_ird.fr
committed
% if new entrie is equal to last entry, no action
% use short circuit operator, second expression (isequal) isn't evaluate
% if first expression (isempty) is true
% -----------------------------------------------

jacques.grelet_ird.fr
committed
if ~self.index || isempty(self.buffer) || ~isequal(object, self.buffer{self.index})

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% increment internal index
% ------------------------

jacques.grelet_ird.fr
committed
self.index = self.index+1;

jacques.grelet_ird.fr
committed
% store new object at index
% -------------------------
self.buffer{self.index} = object;

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% test if index reach end of buffer
% --------------------------------
if self.index <= self.size
% reset all data stored in buffer after index
% -------------------------------------------
self.buffer(self.index+1:end) = [];
% reset size
% ----------
self.size = self.index;
else
% increment size
% --------------
self.size = self.size +1;
end
% if an object was previously prepare in data with undo or redo, reset it
% -----------------------------------------------------------------------
if ~isempty(self.data)
self.data = {};

jacques.grelet_ird.fr
committed
end
else
return
end