[BACK]Return to integer_vectors_utilities.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Implift

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Implift/integer_vectors_utilities.adb, Revision 1.1

1.1     ! maekawa     1: package body Integer_Vectors_Utilities is
        !             2:
        !             3:   function Pivot ( v : Vector ) return integer is
        !             4:   begin
        !             5:     for i in v'range loop
        !             6:       if v(i) /= 0
        !             7:        then return i;
        !             8:       end if;
        !             9:     end loop;
        !            10:     return (v'last + 1);
        !            11:   end Pivot;
        !            12:
        !            13:   function Pivot ( v : Link_to_Vector ) return integer is
        !            14:   begin
        !            15:     if v = null
        !            16:      then return 0;
        !            17:      else return Pivot(v.all);
        !            18:     end if;
        !            19:   end Pivot;
        !            20:
        !            21:   function Reduce ( v : Vector; i : integer ) return Vector is
        !            22:
        !            23:     res : Vector(v'first..(v'last-1));
        !            24:
        !            25:   begin
        !            26:     for j in res'range loop
        !            27:       if j < i
        !            28:        then res(j) := v(j);
        !            29:        else res(j) := v(j+1);
        !            30:       end if;
        !            31:     end loop;
        !            32:     return res;
        !            33:   end Reduce;
        !            34:
        !            35:   function Reduce ( v : Link_to_Vector; i : integer ) return Link_to_Vector is
        !            36:   begin
        !            37:     if v = null
        !            38:      then return v;
        !            39:      else declare
        !            40:             res : Link_to_Vector := new Vector'(Reduce(v.all,i));
        !            41:           begin
        !            42:             return res;
        !            43:           end;
        !            44:     end if;
        !            45:   end Reduce;
        !            46:
        !            47:   procedure Reduce ( v : in out Link_to_Vector; i : in integer ) is
        !            48:   begin
        !            49:     if v /= null
        !            50:      then declare
        !            51:             res : constant Vector := Reduce(v.all,i);
        !            52:           begin
        !            53:             Clear(v);
        !            54:             v := new Vector'(res);
        !            55:           end;
        !            56:     end if;
        !            57:   end Reduce;
        !            58:
        !            59:   function Insert ( v : Vector; i,a : integer ) return Vector is
        !            60:
        !            61:     res : Vector(v'first..(v'last+1));
        !            62:
        !            63:   begin
        !            64:     for j in res'first..(i-1) loop
        !            65:       res(j) := v(j);
        !            66:     end loop;
        !            67:     res(i) := a;
        !            68:     for j in (i+1)..res'last loop
        !            69:       res(j) := v(j-1);
        !            70:     end loop;
        !            71:     return res;
        !            72:   end Insert;
        !            73:
        !            74:   function Insert ( v : Link_to_Vector; i,a : integer )
        !            75:                   return Link_to_Vector is
        !            76:
        !            77:     res : Link_to_Vector;
        !            78:
        !            79:   begin
        !            80:     if v = null
        !            81:      then res := new Vector'(i..i => a);
        !            82:      else res := new Vector'(Insert(v.all,i,a));
        !            83:     end if;
        !            84:     return res;
        !            85:   end Insert;
        !            86:
        !            87:   procedure Insert ( v : in out Link_to_Vector; i,a : in integer ) is
        !            88:   begin
        !            89:     if v /= null
        !            90:      then declare
        !            91:             res : constant Vector := Insert(v.all,i,a);
        !            92:           begin
        !            93:             Clear(v);
        !            94:             v := new Vector'(res);
        !            95:           end;
        !            96:     end if;
        !            97:   end Insert;
        !            98:
        !            99:   function  Insert_and_Transform
        !           100:              ( v : Vector; i,a : integer; t : Transfo ) return Vector is
        !           101:
        !           102:     res : Vector(v'first..v'last+1) := Insert(v,i,a);
        !           103:
        !           104:   begin
        !           105:     Apply(t,res);
        !           106:     return res;
        !           107:   end Insert_and_Transform;
        !           108:
        !           109:   procedure Insert_and_Transform
        !           110:              ( v : in out Link_to_Vector; i,a : in integer; t : in Transfo ) is
        !           111:     res : Link_to_Vector;
        !           112:   begin
        !           113:     res := Insert_and_Transform(v,i,a,t);
        !           114:     Clear(v);
        !           115:     v := res;
        !           116:   end Insert_and_Transform;
        !           117:
        !           118:   function  Insert_and_Transform
        !           119:              ( v : Link_to_Vector; i,a : integer; t : Transfo )
        !           120:              return Link_to_Vector is
        !           121:
        !           122:     res : Link_to_Vector;
        !           123:
        !           124:   begin
        !           125:     if v = null
        !           126:      then res := Insert(v,i,a);
        !           127:           Apply(t,res.all);
        !           128:      else res := new Vector'(Insert_and_Transform(v.all,i,a,t));
        !           129:     end if;
        !           130:     return res;
        !           131:   end Insert_and_Transform;
        !           132:
        !           133: end Integer_Vectors_Utilities;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>