From 9678c7f4acc364e1a6d1b6d85ce4522954b49539 Mon Sep 17 00:00:00 2001 From: Jacques Grelet <jacques.grelet@ird.fr> Date: Mon, 21 Jan 2008 13:18:08 +0000 Subject: [PATCH] add class queue, implement LIFO queue (Last In, First Out), must be used with Undo/redo functions --- @queue/display.m | 26 ++++++++++++++++++++++++++ @queue/get.m | 7 +++++++ @queue/isempty.m | 8 ++++++++ @queue/pop.m | 16 ++++++++++++++++ @queue/push.m | 17 +++++++++++++++++ @queue/queue.m | 19 +++++++++++++++++++ @queue/view.m | 11 +++++++++++ 7 files changed, 104 insertions(+) create mode 100644 @queue/display.m create mode 100644 @queue/get.m create mode 100644 @queue/isempty.m create mode 100644 @queue/pop.m create mode 100644 @queue/push.m create mode 100644 @queue/queue.m create mode 100644 @queue/view.m diff --git a/@queue/display.m b/@queue/display.m new file mode 100644 index 0000000..815ba44 --- /dev/null +++ b/@queue/display.m @@ -0,0 +1,26 @@ +function display(self) +%DISPLAY Display a queue table object +% display(queue) + +% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine + +%isLoose = strcmp(get(0,'FormatSpacing'),'loose'); +isLoose = 0; + +if(length(inputname(1)) ~= 0) + if isLoose, disp(' '), end + disp( sprintf('%s =', inputname(1)) ); +end + +if isLoose, disp(' '), end + +disp(struct(self)); + +%fprintf('\thashtable\n' ); +% if isempty(self) +% fprintf('\tEmpty\n\n' ); +% else +% % disp( sprintf('\tElements:') ); +% display( self.index ); +% end + diff --git a/@queue/get.m b/@queue/get.m new file mode 100644 index 0000000..ba37c17 --- /dev/null +++ b/@queue/get.m @@ -0,0 +1,7 @@ +function data = get(self) +%GET Get last data from the queue table +% data = get(queue) + +% $Id$ + +data = self.data; diff --git a/@queue/isempty.m b/@queue/isempty.m new file mode 100644 index 0000000..4451491 --- /dev/null +++ b/@queue/isempty.m @@ -0,0 +1,8 @@ +function bool = isempty(self) +%ISEMPTY Check to see if the queue is empty +% bool = isempty(queue) + +% + +bool = isempty(self.lifo); + diff --git a/@queue/pop.m b/@queue/pop.m new file mode 100644 index 0000000..5f6a0b8 --- /dev/null +++ b/@queue/pop.m @@ -0,0 +1,16 @@ +function self = pop(self) +%PUT get data from the queue +% [queue data] = get(queue,data) +% +% $Id$ + +if self.index==0 + self.data = []; + self.lifo = []; + return +end + +self.data = self.lifo(self.index,:); + +self.lifo(self.index,:) = []; +self.index = self.index-1; diff --git a/@queue/push.m b/@queue/push.m new file mode 100644 index 0000000..7f8eed5 --- /dev/null +++ b/@queue/push.m @@ -0,0 +1,17 @@ +function self = push(self,data) +%PUT Put data in the queue +% queue = put(queue,data) +% +% $Id$ + +if isempty(data) + return +end + +if isequal(data, self.data) + return +end + +self.index = self.index+1; +self.lifo(end+1,:) = data; +self.data = data; diff --git a/@queue/queue.m b/@queue/queue.m new file mode 100644 index 0000000..3e9295d --- /dev/null +++ b/@queue/queue.m @@ -0,0 +1,19 @@ +function queue = queue(varargin) +%HASHTABLE Constructor for LIFO queue class +% q = queue - Default constructor, empty queue table +% mq = queue(q) - Copy constructor + +% $Id$ + +if nargin == 1 && isa(varargin{1},'queue') + queue = varargin{1}; + return; +elseif nargin == 0 + q.index = 0; + q.data = []; + q.lifo = []; +else + error('queue:queue', 'Invalid arguments.'); +end + +queue = class(q,'queue'); diff --git a/@queue/view.m b/@queue/view.m new file mode 100644 index 0000000..449552e --- /dev/null +++ b/@queue/view.m @@ -0,0 +1,11 @@ +function data = view(self) +%GET Get last data from the queue table +% data = get(queue) + +% $Id$ + +self.index + +self.lifo + +self.data \ No newline at end of file -- GitLab