mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
better encapsulation.
This commit is contained in:
parent
f1b478f4ac
commit
e6823cb373
2 changed files with 27 additions and 11 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
MODULE vpkResolver;
|
MODULE vpkResolver;
|
||||||
IMPORT Out, Strings, StringList, vpkdepTree, vpkRetriever;
|
IMPORT Out, StringList, vpkdepTree, vpkRetriever;
|
||||||
|
|
||||||
TYPE
|
TYPE
|
||||||
Tdep = vpkdepTree.Tdep;
|
Tdep = vpkdepTree.Tdep;
|
||||||
|
|
@ -16,7 +16,6 @@ BEGIN
|
||||||
res := FALSE;
|
res := FALSE;
|
||||||
i := 0;
|
i := 0;
|
||||||
REPEAT
|
REPEAT
|
||||||
Out.Int(i, 0); Out.Ln;
|
|
||||||
d2 := depTree.Get(depTree, i);
|
d2 := depTree.Get(depTree, i);
|
||||||
IF d2 # NIL THEN
|
IF d2 # NIL THEN
|
||||||
IF d = d2 THEN res := TRUE END;
|
IF d = d2 THEN res := TRUE END;
|
||||||
|
|
@ -40,21 +39,20 @@ BEGIN
|
||||||
depStrs := vpkRetriever.getDeps(d.name^);
|
depStrs := vpkRetriever.getDeps(d.name^);
|
||||||
IF depStrs # NIL THEN
|
IF depStrs # NIL THEN
|
||||||
NEW (deps, depStrs.Count);
|
NEW (deps, depStrs.Count);
|
||||||
d.deps := deps;
|
|
||||||
i := 0;
|
i := 0;
|
||||||
REPEAT
|
REPEAT
|
||||||
e := depStrs.Get(depStrs, i);
|
e := depStrs.Get(depStrs, i);
|
||||||
IF e # NIL THEN
|
IF e # NIL THEN
|
||||||
t := met.GetByName(met, e.obj(StringList.TString).str^);
|
t := met.GetByName(met, e.obj(StringList.TString).str^);
|
||||||
IF t = NIL THEN
|
IF t = NIL THEN
|
||||||
NEW(t); NEW(t.name, Strings.Length(e.obj(StringList.TString).str^)+1);
|
t := vpkdepTree.CreateDep(e.obj(StringList.TString).str^);
|
||||||
COPY (e.obj(StringList.TString).str^, t.name^);
|
|
||||||
END;
|
END;
|
||||||
deps[i] := t;
|
deps[i] := t;
|
||||||
IF ~treeContains(t, depTree) THEN
|
IF ~treeContains(t, depTree) THEN
|
||||||
IF treeContains(t, met) 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(d.name^); Out.String(" requires "); Out.String(t.name^); Out.Ln;
|
||||||
|
Out.String("unable to continue."); Out.Ln;
|
||||||
HALT(60)
|
HALT(60)
|
||||||
ELSE
|
ELSE
|
||||||
mkDepTree(t, depTree, met)
|
mkDepTree(t, depTree, met)
|
||||||
|
|
@ -63,6 +61,7 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
INC(i)
|
INC(i)
|
||||||
UNTIL i = depStrs.Count - 1;
|
UNTIL i = depStrs.Count - 1;
|
||||||
|
d.AssignDeps(d, deps);
|
||||||
END;
|
END;
|
||||||
depTree.Add(depTree, d);
|
depTree.Add(depTree, d);
|
||||||
END mkDepTree;
|
END mkDepTree;
|
||||||
|
|
@ -75,8 +74,7 @@ VAR
|
||||||
BEGIN
|
BEGIN
|
||||||
depTree := vpkdepTree.Create();
|
depTree := vpkdepTree.Create();
|
||||||
met := vpkdepTree.Create(); (* for deps that we already met *)
|
met := vpkdepTree.Create(); (* for deps that we already met *)
|
||||||
NEW(dep); NEW(dep.name, Strings.Length(first) + 1);
|
dep := vpkdepTree.CreateDep(first);
|
||||||
COPY(first, dep.name^);
|
|
||||||
mkDepTree(dep, depTree, met);
|
mkDepTree(dep, depTree, met);
|
||||||
RETURN depTree
|
RETURN depTree
|
||||||
END resolve;
|
END resolve;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
MODULE vpkdepTree;
|
MODULE vpkdepTree;
|
||||||
IMPORT Out, strutils, StringList;
|
IMPORT Out, Strings, strutils, StringList;
|
||||||
TYPE
|
TYPE
|
||||||
|
|
||||||
pstring = strutils.pstring;
|
pstring = strutils.pstring;
|
||||||
|
|
@ -25,10 +25,28 @@ TYPE
|
||||||
|
|
||||||
TdepDesc* = RECORD
|
TdepDesc* = RECORD
|
||||||
prev-, next-: Tdep;
|
prev-, next-: Tdep;
|
||||||
name* : pstring;
|
name- : pstring;
|
||||||
deps* : Tdeps;
|
deps- : Tdeps;
|
||||||
|
Create* : PROCEDURE (VAR name: ARRAY OF CHAR): Tdep;
|
||||||
|
AssignDeps* : PROCEDURE (VAR d: Tdep; VAR deps: Tdeps);
|
||||||
END;
|
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);
|
PROCEDURE list(VAR s : StringList.TStringList);
|
||||||
VAR e : StringList.Node;
|
VAR e : StringList.Node;
|
||||||
i : INTEGER;
|
i : INTEGER;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue