summaryrefslogtreecommitdiff
path: root/compiler/nstate.pas
diff options
context:
space:
mode:
authorfpc <fpc@3ad0048d-3df7-0310-abae-a5850022a9f2>2005-05-16 18:37:41 +0000
committerfpc <fpc@3ad0048d-3df7-0310-abae-a5850022a9f2>2005-05-16 18:37:41 +0000
commitf206a9c2b1ae1d8727ca27a96d448b61fdb4c766 (patch)
treef28256ff9964c1fc7c0f7fb00891268a117b745d /compiler/nstate.pas
downloadfpc-f206a9c2b1ae1d8727ca27a96d448b61fdb4c766.tar.gz
initial import
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@1 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/nstate.pas')
-rw-r--r--compiler/nstate.pas131
1 files changed, 131 insertions, 0 deletions
diff --git a/compiler/nstate.pas b/compiler/nstate.pas
new file mode 100644
index 0000000000..37341c68b3
--- /dev/null
+++ b/compiler/nstate.pas
@@ -0,0 +1,131 @@
+{
+ $Id: nstate.pas,v 1.5 2005/02/14 17:13:06 peter Exp $
+ Copyright (c) 1998-2002 by Daniel Mantione
+
+ This unit contains support routines for the state tracker
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+}
+
+unit nstate;
+
+{$i fpcdefs.inc}
+
+interface
+
+uses cclasses,node;
+
+type Tstate_entry=class(Tlinkedlistitem)
+ what:Tnode;
+ value:Tnode;
+ constructor create(w,v:Tnode);
+ end;
+
+ Tstate_storage=class
+ storage:Tlinkedlist;
+ constructor create;
+ procedure store_fact(w,v:Tnode);
+ function find_fact(what:Tnode):Tnode;
+ procedure delete_fact(what:Tnode);
+ end;
+
+var aktstate:Tstate_storage;
+
+implementation
+
+constructor Tstate_entry.create(w,v:Tnode);
+
+begin
+ inherited create;
+ what:=w;
+ value:=v;
+end;
+
+constructor Tstate_storage.create;
+
+begin
+ storage:=Tlinkedlist.create;
+end;
+
+procedure Tstate_storage.store_fact(w,v:Tnode);
+
+var se:Tstate_entry;
+
+begin
+{ writeln('fact:');
+ writenode(w);
+ writeln('=');
+ writenode(v);}
+ se:=Tstate_entry(storage.first);
+ while assigned(se) do
+ begin
+ if se.what.isequal(w) then
+ begin
+ storage.remove(se);
+ se.destroy;
+ break;
+ end;
+ se:=Tstate_entry(se.next);
+ end;
+ se:=Tstate_entry.create(w,v);
+ storage.concat(se);
+end;
+
+function Tstate_storage.find_fact(what:Tnode):Tnode;
+
+var se:Tstate_entry;
+
+begin
+ find_fact:=nil;
+ se:=storage.first as Tstate_entry;
+ while assigned(se) do
+ begin
+ if se.what.isequal(what) then
+ begin
+ find_fact:=se.value;
+ break;
+ end;
+ se:=se.next as Tstate_entry;
+ end;
+end;
+
+procedure Tstate_storage.delete_fact(what:Tnode);
+
+var se:Tstate_entry;
+
+begin
+ se:=storage.first as Tstate_entry;
+ while assigned(se) do
+ begin
+ if se.what.isequal(what) then
+ begin
+ storage.remove(se);
+ se.destroy;
+ break;
+ end;
+ se:=se.next as Tstate_entry;
+ end;
+end;
+
+end.
+
+{
+ $Log: nstate.pas,v $
+ Revision 1.5 2005/02/14 17:13:06 peter
+ * truncate log
+
+}