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; i: INTEGER;
d2: Tdep; d2: Tdep;
BEGIN BEGIN
Out.String("entered treeContains, tree count is "); Out.Int(depTree.Count, 0); Out.Ln;
res := FALSE; res := FALSE;
i := 0; i := 0;
REPEAT REPEAT
Out.Int(i, 0); Out.Ln; Out.Int(i, 0); Out.Ln;
d2 := depTree.Get(depTree, i); d2 := depTree.Get(depTree, i);
IF d2 # NIL THEN 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 END;
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 END *)
IF d.name^ = d2.name^ THEN res := TRUE; Out.String("TR") ELSE Out.String("FL") END; Out.Ln;
END; END;
INC(i) INC(i)
UNTIL res OR (i >= depTree.Count); UNTIL res OR (i >= depTree.Count);
IF res THEN Out.String("yes!") ELSE Out.String("no!"); Out.Ln END;
RETURN res; RETURN res;
END treeContains; END treeContains;
@ -38,25 +35,23 @@ VAR
e: StringList.Node; e: StringList.Node;
i: INTEGER; i: INTEGER;
BEGIN BEGIN
Out.String("processing dep: "); Out.String(d.name^); Out.Ln;
met.Add(met, d); met.Add(met, d);
depStrs := vpkRetriever.getDeps(d.name^); depStrs := vpkRetriever.getDeps(d.name^);
IF depStrs # NIL THEN IF depStrs # NIL THEN
Out.String("it has "); Out.Int(depStrs.Count, 0); Out.String(" deps"); Out.Ln;
NEW (deps, depStrs.Count); NEW (deps, depStrs.Count);
d.deps := deps; 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
(*Out.String (e.obj(StringList.TString).str^); Out.Ln;*) t := met.GetByName(met, e.obj(StringList.TString).str^);
NEW(t); NEW(t.name, Strings.Length(e.obj(StringList.TString).str^)+1); IF t = NIL THEN
COPY (e.obj(StringList.TString).str^, t.name^); 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; deps[i] := t;
Out.String("checking if "); Out.String(t.name^); Out.String(" resolved"); Out.Ln;
IF ~treeContains(t, depTree) THEN IF ~treeContains(t, depTree) THEN
Out.String("checking if "); Out.String(t.name^); Out.String(" met"); Out.Ln;
IF treeContains(t, met) THEN IF treeContains(t, met) THEN
Out.String("curcular dependency!"); Out.Ln; Out.String("curcular dependency!"); Out.Ln;
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;
@ -68,10 +63,8 @@ BEGIN
END; END;
INC(i) INC(i)
UNTIL i = depStrs.Count - 1; UNTIL i = depStrs.Count - 1;
ELSE
Out.String("has no deps"); Out.Ln;
END; END;
depTree.Add(depTree, d); depTree.Add(depTree, d);
END mkDepTree; END mkDepTree;
PROCEDURE resolve*(first: ARRAY OF CHAR): TdepTree; PROCEDURE resolve*(first: ARRAY OF CHAR): TdepTree;

View file

@ -18,6 +18,7 @@ TYPE
Clear* : PROCEDURE (VAR l : TdepTree); Clear* : PROCEDURE (VAR l : TdepTree);
Add* : PROCEDURE (VAR l : TdepTree; VAR s : Tdep); Add* : PROCEDURE (VAR l : TdepTree; VAR s : Tdep);
Get* : PROCEDURE (VAR l : TdepTree; i : LONGINT): 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; Empty* : PROCEDURE (VAR l : TdepTree) : BOOLEAN;
Count* : LONGINT; Count* : LONGINT;
END; END;
@ -87,6 +88,28 @@ BEGIN
RETURN d; RETURN d;
END Get; 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; PROCEDURE Create* () : TdepTree;
VAR l : TdepTree; VAR l : TdepTree;
BEGIN BEGIN
@ -96,6 +119,7 @@ PROCEDURE Create* () : TdepTree;
l.Count := 0; l.Count := 0;
l.Add := Add; l.Add := Add;
l.Get := Get; l.Get := Get;
l.GetByName := GetByName;
l.Clear := Clear; l.Clear := Clear;
l.Free := Free; l.Free := Free;
l.Empty := Empty; l.Empty := Empty;