Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Implift/transforming_integer_vector_lists.adb, Revision 1.1
1.1 ! maekawa 1: with Integer_Vectors_Utilities; use Integer_Vectors_Utilities;
! 2:
! 3: package body Transforming_Integer_Vector_Lists is
! 4:
! 5: procedure Shift ( l : in out List; v : in Vector ) is
! 6:
! 7: tmp : List := l;
! 8:
! 9: begin
! 10: while not Is_Null(tmp) loop
! 11: declare
! 12: lv : Link_to_Vector := Head_Of(tmp);
! 13: begin
! 14: lv.all := lv.all - v;
! 15: Set_Head(tmp,lv);
! 16: end;
! 17: tmp := Tail_Of(tmp);
! 18: end loop;
! 19: end Shift;
! 20:
! 21: procedure Shift ( l : in out List; v : in Link_to_Vector ) is
! 22: begin
! 23: if v /= null
! 24: then Shift(l,v.all);
! 25: end if;
! 26: end Shift;
! 27:
! 28: function Shift ( l : List; v : Vector ) return List is
! 29:
! 30: tmp,res,res_last : List;
! 31: v1 : Vector(v'range);
! 32:
! 33: begin
! 34: tmp := l;
! 35: while not Is_Null(tmp) loop
! 36: v1 := Head_Of(tmp).all;
! 37: declare
! 38: v2 : Vector(v1'range) := v1 - v;
! 39: begin
! 40: Append(res,res_last,v2);
! 41: end;
! 42: tmp := Tail_Of(tmp);
! 43: end loop;
! 44: return res;
! 45: end Shift;
! 46:
! 47: function Shift ( l : List; v : Link_to_Vector ) return List is
! 48: begin
! 49: if v = null
! 50: then declare
! 51: res : List;
! 52: begin
! 53: Copy(l,res);
! 54: return res;
! 55: end;
! 56: else return Shift(l,v.all);
! 57: end if;
! 58: end Shift;
! 59:
! 60: function "*"( l : List; t : Transfo ) return List is
! 61: begin
! 62: return t*l;
! 63: end "*";
! 64:
! 65: function "*"( t : Transfo; l : List ) return List is
! 66:
! 67: tmp,res,res_last : List;
! 68: d,td : Link_to_Vector;
! 69:
! 70: begin
! 71: tmp := l;
! 72: while not Is_Null(tmp) loop
! 73: d := Head_Of(tmp);
! 74: td := t*d;
! 75: Append(res,res_last,td);
! 76: tmp := Tail_Of(tmp);
! 77: end loop;
! 78: return res;
! 79: end "*";
! 80:
! 81: procedure Apply ( l : in out List; t : in Transfo ) is
! 82:
! 83: res : List := t*l;
! 84:
! 85: begin
! 86: Copy(res,l);
! 87: end Apply;
! 88:
! 89: function Reduce ( l : List; i : integer ) return List is
! 90:
! 91: tmp,res,res_last : List;
! 92:
! 93: begin
! 94: tmp := l;
! 95: while not Is_Null(tmp) loop
! 96: declare
! 97: d1 : Link_to_Vector := Head_Of(tmp);
! 98: d2 : Link_to_Vector := Reduce(d1,i);
! 99: begin
! 100: -- Append_Diff(res,res_last,d2); -- be aware of duplicates !
! 101: Append(res,res_last,d2); -- be aware of duplicates !
! 102: end;
! 103: tmp := Tail_Of(tmp);
! 104: end loop;
! 105: return res;
! 106: end Reduce;
! 107:
! 108: procedure Reduce ( l : in out List; i : in integer ) is
! 109:
! 110: res : List := Reduce(l,i);
! 111:
! 112: begin
! 113: Copy(res,l);
! 114: end Reduce;
! 115:
! 116: function Insert ( l : List; i,a : integer ) return List is
! 117:
! 118: tmp,res,res_last : List;
! 119:
! 120: begin
! 121: tmp := l;
! 122: while not Is_Null(tmp) loop
! 123: declare
! 124: d1 : Link_to_Vector := Head_Of(tmp);
! 125: d2 : Link_to_Vector := Insert(d1,i,a);
! 126: begin
! 127: Append(res,res_last,d2);
! 128: end;
! 129: tmp := Tail_Of(tmp);
! 130: end loop;
! 131: return res;
! 132: end Insert;
! 133:
! 134: procedure Insert ( l : in out List; i,a : in integer ) is
! 135:
! 136: res : List := Insert(l,i,a);
! 137:
! 138: begin
! 139: Deep_Clear(l);
! 140: l := res;
! 141: end Insert;
! 142:
! 143: function Transform_and_Reduce ( t : Transfo; i : integer; l : List )
! 144: return List is
! 145: tmp,res,res_last : List;
! 146:
! 147: begin
! 148: tmp := l;
! 149: while not Is_Null(tmp) loop
! 150: declare
! 151: d : Link_to_Vector := Head_Of(tmp);
! 152: td : Vector(d'range) := t*d.all;
! 153: dr : Link_to_Vector := new Vector'(Reduce(td,i));
! 154: begin
! 155: Append(res,res_last,dr);
! 156: end;
! 157: tmp := Tail_Of(tmp);
! 158: end loop;
! 159: return res;
! 160: end Transform_and_Reduce;
! 161:
! 162: procedure Transform_and_Reduce ( t : in Transfo; i : in integer;
! 163: l : in out List ) is
! 164:
! 165: res : List := Transform_and_Reduce(t,i,l);
! 166:
! 167: begin
! 168: Deep_Clear(l);
! 169: l := res;
! 170: end Transform_and_Reduce;
! 171:
! 172: function Insert_and_Transform ( l : List; i,a : integer; t : Transfo )
! 173: return List is
! 174:
! 175: tmp,res,res_last : List;
! 176:
! 177: begin
! 178: tmp := l;
! 179: while not Is_Null(tmp) loop
! 180: declare
! 181: d : Link_to_Vector := Insert_and_Transform(Head_Of(tmp),i,a,t);
! 182: begin
! 183: Append(res,res_last,d);
! 184: end;
! 185: tmp := Tail_Of(tmp);
! 186: end loop;
! 187: return res;
! 188: end Insert_and_Transform;
! 189:
! 190: procedure Insert_and_Transform
! 191: ( l : in out List; i,a : in integer; t : in Transfo ) is
! 192:
! 193: res : List := Insert_and_Transform(l,i,a,t);
! 194:
! 195: begin
! 196: Deep_Clear(l);
! 197: l := res;
! 198: end Insert_and_Transform;
! 199:
! 200: end Transforming_Integer_Vector_Lists;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>