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