From f1b478f4ac353e3a8d28a7df0ad46a0695c301ad Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Wed, 10 Jun 2020 21:49:51 +0400 Subject: [PATCH] comparing pointers instead of strings. --- src/vpkResolver.Mod | 23 ++++++++--------------- src/vpkdepTree.Mod | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/vpkResolver.Mod b/src/vpkResolver.Mod index c8ba4e3..de883df 100644 --- a/src/vpkResolver.Mod +++ b/src/vpkResolver.Mod @@ -13,20 +13,17 @@ VAR i: INTEGER; d2: Tdep; BEGIN - Out.String("entered treeContains, tree count is "); Out.Int(depTree.Count, 0); Out.Ln; res := FALSE; i := 0; REPEAT Out.Int(i, 0); Out.Ln; d2 := depTree.Get(depTree, i); IF d2 # NIL THEN - Out.String("comparing, "); Out.String(d.name^); Out.String(" & "); Out.String(d2.name^); Out.Ln; - IF d = d2 THEN (*res := TRUE*) Out.String("TR") ELSE Out.String("FL") END;Out.Ln;(* TODO: understand why this doesnt work *) - IF d.name^ = d2.name^ THEN res := TRUE; Out.String("TR") ELSE Out.String("FL") END; Out.Ln; + IF d = d2 THEN res := TRUE END; + (*IF d.name^ = d2.name^ THEN res := TRUE END *) END; INC(i) UNTIL res OR (i >= depTree.Count); - IF res THEN Out.String("yes!") ELSE Out.String("no!"); Out.Ln END; RETURN res; END treeContains; @@ -38,25 +35,23 @@ VAR e: StringList.Node; i: INTEGER; BEGIN - Out.String("processing dep: "); Out.String(d.name^); Out.Ln; met.Add(met, d); depStrs := vpkRetriever.getDeps(d.name^); IF depStrs # NIL THEN - Out.String("it has "); Out.Int(depStrs.Count, 0); Out.String(" deps"); Out.Ln; NEW (deps, depStrs.Count); d.deps := deps; i := 0; REPEAT e := depStrs.Get(depStrs, i); IF e # NIL THEN - (*Out.String (e.obj(StringList.TString).str^); Out.Ln;*) - NEW(t); NEW(t.name, Strings.Length(e.obj(StringList.TString).str^)+1); - COPY (e.obj(StringList.TString).str^, t.name^); + 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^); + END; deps[i] := t; - Out.String("checking if "); Out.String(t.name^); Out.String(" resolved"); Out.Ln; IF ~treeContains(t, depTree) THEN - Out.String("checking if "); Out.String(t.name^); Out.String(" met"); Out.Ln; IF treeContains(t, met) THEN Out.String("curcular dependency!"); Out.Ln; Out.String(d.name^); Out.String(" requires "); Out.String(t.name^); Out.Ln; @@ -68,10 +63,8 @@ BEGIN END; INC(i) UNTIL i = depStrs.Count - 1; - ELSE - Out.String("has no deps"); Out.Ln; END; - depTree.Add(depTree, d); + depTree.Add(depTree, d); END mkDepTree; PROCEDURE resolve*(first: ARRAY OF CHAR): TdepTree; diff --git a/src/vpkdepTree.Mod b/src/vpkdepTree.Mod index 1886ebd..8b1064a 100644 --- a/src/vpkdepTree.Mod +++ b/src/vpkdepTree.Mod @@ -18,6 +18,7 @@ TYPE Clear* : PROCEDURE (VAR l : TdepTree); Add* : PROCEDURE (VAR l : TdepTree; VAR s : Tdep); Get* : PROCEDURE (VAR l : TdepTree; i : LONGINT): Tdep; + GetByName* : PROCEDURE (VAR l : TdepTree; VAR name : ARRAY OF CHAR): Tdep; Empty* : PROCEDURE (VAR l : TdepTree) : BOOLEAN; Count* : LONGINT; END; @@ -87,6 +88,28 @@ BEGIN RETURN d; END Get; +PROCEDURE GetByName*(VAR l: TdepTree; VAR name: ARRAY OF CHAR): Tdep; +VAR + i: LONGINT; + d: Tdep; + fnd: BOOLEAN; +BEGIN + fnd := FALSE; + i := 0; + d := l.First; + REPEAT + IF d # NIL THEN + IF d.name^ = name THEN + fnd := TRUE + ELSE + d := d.next + END + END; + INC(i); + UNTIL fnd OR (i >= l.Count); + RETURN d; +END GetByName; + PROCEDURE Create* () : TdepTree; VAR l : TdepTree; BEGIN @@ -96,6 +119,7 @@ PROCEDURE Create* () : TdepTree; l.Count := 0; l.Add := Add; l.Get := Get; + l.GetByName := GetByName; l.Clear := Clear; l.Free := Free; l.Empty := Empty;