mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
now works!
This commit is contained in:
parent
32679a8852
commit
c5c999f596
2 changed files with 67 additions and 9 deletions
|
|
@ -29,6 +29,26 @@ BEGIN
|
|||
RETURN res;
|
||||
END treeContains;
|
||||
|
||||
PROCEDURE treeContainsByName(VAR d: Tdep; VAR depTree: TdepTree): BOOLEAN;
|
||||
VAR
|
||||
res: BOOLEAN;
|
||||
i: INTEGER;
|
||||
d2: Tdep;
|
||||
BEGIN
|
||||
res := FALSE;
|
||||
i := 0;
|
||||
REPEAT
|
||||
d2 := depTree.Get(depTree, i);
|
||||
IF d2 # NIL THEN
|
||||
IF d.name^ = d2.name^ THEN res := TRUE END;
|
||||
(*IF d.name^ = d2.name^ THEN res := TRUE END *)
|
||||
END;
|
||||
INC(i)
|
||||
UNTIL res OR (i >= depTree.Count);
|
||||
RETURN res;
|
||||
END treeContainsByName;
|
||||
|
||||
|
||||
PROCEDURE mkDepTree(VAR d: Tdep; VAR depTree, met: TdepTree);
|
||||
VAR
|
||||
depStrs: StringList.TStringList;
|
||||
|
|
@ -38,7 +58,7 @@ VAR
|
|||
i: INTEGER;
|
||||
rtrvRes: LONGINT;
|
||||
BEGIN
|
||||
met.Add(met, d);
|
||||
vpkdepTree.Add(met, d);
|
||||
IF d.RetrieveDeps = NIL THEN Out.String("dep retriever method not installed"); Out.Ln; HALT(1) END;
|
||||
rtrvRes := d.RetrieveDeps(d, depStrs);
|
||||
IF rtrvRes = -1 THEN
|
||||
|
|
@ -55,28 +75,29 @@ BEGIN
|
|||
REPEAT
|
||||
p := depStrs.GetString(depStrs, i);
|
||||
IF p # NIL THEN
|
||||
t := NIL;
|
||||
t := met.GetByName(met, p^);
|
||||
IF t = NIL THEN
|
||||
t := vpkdepTree.CreateDep(p^);
|
||||
t.InstallRetriever(t, rtvr);
|
||||
END;
|
||||
deps[i] := t;
|
||||
IF ~treeContains(t, depTree) THEN
|
||||
IF treeContains(t, met) THEN
|
||||
IF ~treeContainsByName(t, depTree) THEN
|
||||
IF treeContainsByName(t, met) THEN
|
||||
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)
|
||||
mkDepTree(t, depTree, met);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
INC(i)
|
||||
INC(i);
|
||||
UNTIL i = depStrs.Count - 1;
|
||||
d.AssignDeps(d, deps);
|
||||
END;
|
||||
depTree.Add(depTree, d);
|
||||
vpkdepTree.AddCopy(depTree, d);
|
||||
END mkDepTree;
|
||||
|
||||
PROCEDURE resolve*(first: ARRAY OF CHAR; r: vpkdepTree.retriever): TdepTree;
|
||||
|
|
|
|||
|
|
@ -72,6 +72,17 @@ BEGIN
|
|||
UNTIL i = s.Count - 1;
|
||||
END list;
|
||||
|
||||
PROCEDURE listDeps*(VAR deps: Tdeps);
|
||||
VAR
|
||||
l: LONGINT;
|
||||
BEGIN
|
||||
l := 0;
|
||||
REPEAT
|
||||
Out.Int(l, 0); Out.String(": "); Out.String(deps[l].name^); Out.Ln;
|
||||
INC(l);
|
||||
UNTIL l = LEN(deps^) - 1;
|
||||
END listDeps;
|
||||
|
||||
PROCEDURE Free*(VAR l : TdepTree);
|
||||
BEGIN
|
||||
l := NIL
|
||||
|
|
@ -96,9 +107,33 @@ PROCEDURE Add* (VAR l : TdepTree; VAR d: Tdep);
|
|||
l.Last.next := d;
|
||||
END;
|
||||
l.Last := d;
|
||||
l.Last.next := NIL;
|
||||
INC(l.Count);
|
||||
END Add;
|
||||
|
||||
PROCEDURE AddCopy* (VAR l : TdepTree; VAR d: Tdep);
|
||||
VAR
|
||||
new: Tdep;
|
||||
ln: INTEGER;
|
||||
BEGIN
|
||||
NEW(new);
|
||||
new.prev := d.prev; new.next := d.next;
|
||||
ln := Strings.Length(d.name^) + 1; NEW(new.name, ln); COPY(d.name^, new.name^);
|
||||
new.deps := d.deps;
|
||||
new.Create := d.Create; new.AssignDeps := d.AssignDeps;
|
||||
new.RetrieveDeps := d.RetrieveDeps;
|
||||
new.InstallRetriever := d.InstallRetriever;
|
||||
|
||||
IF l.First = NIL THEN
|
||||
l.First := new;
|
||||
ELSE
|
||||
l.Last.next := new;
|
||||
END;
|
||||
l.Last := new;
|
||||
l.Last.next := NIL;
|
||||
INC(l.Count);
|
||||
END AddCopy;
|
||||
|
||||
PROCEDURE Get*(VAR l: TdepTree; inx: LONGINT): Tdep;
|
||||
VAR
|
||||
i: LONGINT;
|
||||
|
|
@ -129,14 +164,16 @@ BEGIN
|
|||
REPEAT
|
||||
IF d # NIL THEN
|
||||
IF d.name^ = name THEN
|
||||
fnd := TRUE
|
||||
fnd := TRUE;
|
||||
RETURN d;
|
||||
ELSE
|
||||
d := d.next
|
||||
END
|
||||
END;
|
||||
INC(i);
|
||||
UNTIL fnd OR (i >= l.Count);
|
||||
RETURN d;
|
||||
(* UNTIL fnd OR (i >= l.Count );*)
|
||||
UNTIL fnd OR (d = NIL);
|
||||
RETURN NIL; (* in case of this UNTIL it seems safe to RETURN d *)
|
||||
END GetByName;
|
||||
|
||||
PROCEDURE Create* () : TdepTree;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue