From e6823cb373c80222acc5d8adcf56f72ec7449a01 Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Wed, 10 Jun 2020 22:06:34 +0400 Subject: [PATCH] better encapsulation. --- src/vpkResolver.Mod | 14 ++++++-------- src/vpkdepTree.Mod | 24 +++++++++++++++++++++--- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/vpkResolver.Mod b/src/vpkResolver.Mod index de883df..9793865 100644 --- a/src/vpkResolver.Mod +++ b/src/vpkResolver.Mod @@ -1,5 +1,5 @@ MODULE vpkResolver; -IMPORT Out, Strings, StringList, vpkdepTree, vpkRetriever; +IMPORT Out, StringList, vpkdepTree, vpkRetriever; TYPE Tdep = vpkdepTree.Tdep; @@ -16,7 +16,6 @@ BEGIN res := FALSE; i := 0; REPEAT - Out.Int(i, 0); Out.Ln; d2 := depTree.Get(depTree, i); IF d2 # NIL THEN IF d = d2 THEN res := TRUE END; @@ -40,21 +39,20 @@ BEGIN depStrs := vpkRetriever.getDeps(d.name^); IF depStrs # NIL THEN NEW (deps, depStrs.Count); - d.deps := deps; i := 0; REPEAT e := depStrs.Get(depStrs, i); IF e # NIL THEN t := met.GetByName(met, e.obj(StringList.TString).str^); IF t = NIL THEN - NEW(t); NEW(t.name, Strings.Length(e.obj(StringList.TString).str^)+1); - COPY (e.obj(StringList.TString).str^, t.name^); + t := vpkdepTree.CreateDep(e.obj(StringList.TString).str^); END; deps[i] := t; IF ~treeContains(t, depTree) THEN IF treeContains(t, met) THEN - Out.String("curcular dependency!"); Out.Ln; + Out.Ln; Out.String("curcular dependency: "); Out.String(d.name^); Out.String(" requires "); Out.String(t.name^); Out.Ln; + Out.String("unable to continue."); Out.Ln; HALT(60) ELSE mkDepTree(t, depTree, met) @@ -63,6 +61,7 @@ BEGIN END; INC(i) UNTIL i = depStrs.Count - 1; + d.AssignDeps(d, deps); END; depTree.Add(depTree, d); END mkDepTree; @@ -75,8 +74,7 @@ VAR BEGIN depTree := vpkdepTree.Create(); met := vpkdepTree.Create(); (* for deps that we already met *) - NEW(dep); NEW(dep.name, Strings.Length(first) + 1); - COPY(first, dep.name^); + dep := vpkdepTree.CreateDep(first); mkDepTree(dep, depTree, met); RETURN depTree END resolve; diff --git a/src/vpkdepTree.Mod b/src/vpkdepTree.Mod index 8b1064a..8d5c148 100644 --- a/src/vpkdepTree.Mod +++ b/src/vpkdepTree.Mod @@ -1,5 +1,5 @@ MODULE vpkdepTree; -IMPORT Out, strutils, StringList; +IMPORT Out, Strings, strutils, StringList; TYPE pstring = strutils.pstring; @@ -25,10 +25,28 @@ TYPE TdepDesc* = RECORD prev-, next-: Tdep; - name* : pstring; - deps* : Tdeps; + name- : pstring; + deps- : Tdeps; + Create* : PROCEDURE (VAR name: ARRAY OF CHAR): Tdep; + AssignDeps* : PROCEDURE (VAR d: Tdep; VAR deps: Tdeps); END; +PROCEDURE AssignDeps*(VAR d: Tdep; VAR deps: Tdeps); +BEGIN + d.deps := deps +END AssignDeps; + +PROCEDURE CreateDep*(VAR name: ARRAY OF CHAR): Tdep; +VAR + dep: Tdep; +BEGIN + NEW(dep); + NEW(dep.name, Strings.Length(name) + 1); + COPY(name, dep.name^); + dep.AssignDeps := AssignDeps; + RETURN dep +END CreateDep; + PROCEDURE list(VAR s : StringList.TStringList); VAR e : StringList.Node; i : INTEGER;