[BACK]Return to integer_support_functions.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Supports

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Supports/integer_support_functions.adb, Revision 1.1.1.1

1.1       maekawa     1: with Graded_Lexicographic_Order;         use Graded_Lexicographic_Order;
                      2:
                      3: package body Integer_Support_Functions is
                      4:
                      5:   function Maximal_Support ( l : List; v : Vector ) return integer is
                      6:
                      7:     sp,max : integer;
                      8:     tmp : List;
                      9:
                     10:   begin
                     11:     if not Is_Null(l)
                     12:      then max := Head_Of(l).all*v;
                     13:           tmp := Tail_Of(l);
                     14:           while not Is_Null(tmp) loop
                     15:             sp := Head_Of(tmp).all*v;
                     16:             if sp > max
                     17:              then max := sp;
                     18:             end if;
                     19:             tmp := Tail_Of(tmp);
                     20:           end loop;
                     21:           return max;
                     22:      else return 0;
                     23:     end if;
                     24:   end Maximal_Support;
                     25:
                     26:   function Minimal_Support ( l : List; v : Vector ) return integer is
                     27:
                     28:     sp,min : integer;
                     29:     tmp : List;
                     30:
                     31:   begin
                     32:     if not Is_Null(l)
                     33:      then min := Head_Of(l).all*v;
                     34:           tmp := Tail_Of(l);
                     35:           while not Is_Null(tmp) loop
                     36:             sp := Head_Of(tmp).all*v;
                     37:             if sp < min
                     38:              then min := sp;
                     39:             end if;
                     40:             tmp := Tail_Of(tmp);
                     41:           end loop;
                     42:           return min;
                     43:      else return 0;
                     44:     end if;
                     45:   end Minimal_Support;
                     46:
                     47:   procedure Min_Max ( l : in List; k : in integer;
                     48:                       min,max : in out integer ) is
                     49:
                     50:     tmp : List;
                     51:     v : Link_to_Vector;
                     52:
                     53:   begin
                     54:     if not Is_Null(l)
                     55:      then tmp := l;
                     56:           v := Head_Of(tmp);
                     57:           min := v(k);  max := min;
                     58:           tmp := Tail_Of(tmp);
                     59:           while not Is_Null(tmp) loop
                     60:             v := Head_Of(tmp);
                     61:             if v(k) < min
                     62:              then min := v(k);
                     63:              elsif v(k) > max
                     64:                  then max := v(k);
                     65:             end if;
                     66:             tmp := Tail_Of(tmp);
                     67:           end loop;
                     68:     end if;
                     69:   end Min_Max;
                     70:
                     71:   function Graded_Max ( l : List ) return Link_to_Vector is
                     72:
                     73:     res : Link_to_Vector := new Vector'(Head_Of(l).all);
                     74:     tmp : List := Tail_Of(l);
                     75:     ele : Link_to_Vector;
                     76:
                     77:   begin
                     78:     while not Is_Null(tmp) loop
                     79:       ele := Head_Of(tmp);
                     80:       if ele > res
                     81:        then res.all := ele.all;
                     82:       end if;
                     83:       tmp := Tail_Of(tmp);
                     84:     end loop;
                     85:     return res;
                     86:   end Graded_Max;
                     87:
                     88:   function Face ( l : List; v : Vector; m : integer ) return List is
                     89:
                     90:     res,tmp,res_last : List;
                     91:     d : Vector(v'range);
                     92:
                     93:   begin
                     94:     tmp := l;
                     95:     while not Is_Null(tmp) loop
                     96:       d := Head_Of(tmp).all;
                     97:       if d*v = m
                     98:        then Append(res,res_last,d);
                     99:       end if;
                    100:       tmp := Tail_Of(tmp);
                    101:     end loop;
                    102:     return res;
                    103:   end Face;
                    104:
                    105:   function Inner_Face ( l : List; v : Vector ) return List is
                    106:   begin
                    107:     return Face(l,v,Minimal_Support(l,v));
                    108:   end Inner_Face;
                    109:
                    110:   function Outer_Face ( l : List; v : Vector ) return List is
                    111:   begin
                    112:     return Face(l,v,Maximal_Support(l,v));
                    113:   end Outer_Face;
                    114:
                    115: end Integer_Support_Functions;

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