comparing pointers instead of strings.

This commit is contained in:
Norayr Chilingarian 2020-06-10 21:49:51 +04:00
parent 42f574ad95
commit f1b478f4ac
2 changed files with 32 additions and 15 deletions

View file

@ -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;

View file

@ -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;