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>