diff options
author | fpc <fpc@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2005-05-16 18:37:41 +0000 |
---|---|---|
committer | fpc <fpc@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2005-05-16 18:37:41 +0000 |
commit | f206a9c2b1ae1d8727ca27a96d448b61fdb4c766 (patch) | |
tree | f28256ff9964c1fc7c0f7fb00891268a117b745d /compiler/nstate.pas | |
download | fpc-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.pas | 131 |
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 + +} |