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

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Polynomials/graded_lexicographic_order.adb, Revision 1.1.1.1

1.1       maekawa     1: with Standard_Natural_Vectors;
                      2: with Standard_Integer_Vectors;
                      3:
                      4: package body Graded_Lexicographic_Order is
                      5:
                      6: -- FOR STANDARD NATURAL VECTORS :
                      7:
                      8:   function "<" ( v1,v2 : Standard_Natural_Vectors.Vector ) return boolean is
                      9:
                     10:     use Standard_Natural_Vectors;
                     11:     s1,s2 : natural;
                     12:
                     13:   begin
                     14:     s1 := Sum(v1);
                     15:     s2 := Sum(v2);
                     16:     if s1 < s2
                     17:      then return true;
                     18:      elsif s1 > s2
                     19:          then return false;
                     20:          else if v1'first /= v2'first or else v1'last /= v2'last
                     21:                then raise CONSTRAINT_ERROR;
                     22:                else for i in v1'range loop
                     23:                       if v1(i) < v2(i)
                     24:                        then return true;
                     25:                        elsif v1(i) > v2(i)
                     26:                            then return false;
                     27:                       end if;
                     28:                     end loop;
                     29:                     return false;  -- v1 = v2
                     30:               end if;
                     31:     end if;
                     32:   end "<";
                     33:
                     34:   function "<" ( v1,v2 : Standard_Natural_Vectors.Link_to_Vector )
                     35:                return boolean is
                     36:
                     37:     use Standard_Natural_Vectors;
                     38:
                     39:   begin
                     40:     if v2 = null
                     41:      then return false;
                     42:      elsif v1 = null
                     43:          then if Sum(v2) > 0
                     44:                then return true;
                     45:                else return false;
                     46:               end if;
                     47:          else return v1.all < v2.all;
                     48:     end if;
                     49:   end "<";
                     50:
                     51:   function ">" ( v1,v2 : Standard_Natural_Vectors.Vector ) return boolean is
                     52:
                     53:     use Standard_Natural_Vectors;
                     54:
                     55:     s1,s2 : natural;
                     56:
                     57:   begin
                     58:     s1 := Sum(v1);
                     59:     s2 := Sum(v2);
                     60:     if s1 < s2
                     61:      then return false;
                     62:      elsif s1 > s2
                     63:          then return true;
                     64:          else if v1'first /= v2'first or else v1'last /= v2'last
                     65:                then raise CONSTRAINT_ERROR;
                     66:                else for i in v1'range loop
                     67:                       if v1(i) < v2(i)
                     68:                        then return false;
                     69:                        elsif v1(i) > v2(i)
                     70:                            then return true;
                     71:                       end if;
                     72:                     end loop;
                     73:                     return false;  -- v1 = v2
                     74:               end if;
                     75:     end if;
                     76:   end ">";
                     77:
                     78:   function ">" ( v1,v2 : Standard_Natural_Vectors.Link_to_Vector )
                     79:                return boolean is
                     80:
                     81:     use Standard_Natural_Vectors;
                     82:
                     83:   begin
                     84:     if v1 = null
                     85:      then return false;
                     86:      elsif v2 = null
                     87:          then if Sum(v1) > 0
                     88:                then return true;
                     89:                else return false;
                     90:               end if;
                     91:          else return v1.all > v2.all;
                     92:     end if;
                     93:   end ">";
                     94:
                     95: -- FOR STANDARD INTEGER VECTORS :
                     96:
                     97:   function "<" ( v1,v2 : Standard_Integer_Vectors.Vector ) return boolean is
                     98:
                     99:     use Standard_Integer_Vectors;
                    100:
                    101:     s1,s2 : integer;
                    102:
                    103:   begin
                    104:     s1 := Sum(v1);
                    105:     s2 := Sum(v2);
                    106:     if s1 < s2
                    107:      then return true;
                    108:      elsif s1 > s2
                    109:          then return false;
                    110:          else if v1'first /= v2'first or else v1'last /= v2'last
                    111:                then raise CONSTRAINT_ERROR;
                    112:                else for i in v1'range loop
                    113:                       if v1(i) < v2(i)
                    114:                        then return true;
                    115:                        elsif v1(i) > v2(i)
                    116:                            then return false;
                    117:                       end if;
                    118:                     end loop;
                    119:                     return false;  -- v1 = v2
                    120:               end if;
                    121:     end if;
                    122:   end "<";
                    123:
                    124:   function "<" ( v1,v2 : Standard_Integer_Vectors.Link_to_Vector )
                    125:                return boolean is
                    126:
                    127:     use Standard_Integer_Vectors;
                    128:
                    129:   begin
                    130:     if v2 = null
                    131:      then return false;
                    132:      elsif v1 = null
                    133:          then if Sum(v2) > 0
                    134:                then return true;
                    135:                else return false;
                    136:               end if;
                    137:          else return v1.all < v2.all;
                    138:     end if;
                    139:   end "<";
                    140:
                    141:   function ">" ( v1,v2 : Standard_Integer_Vectors.Vector ) return boolean is
                    142:
                    143:     use Standard_Integer_Vectors;
                    144:
                    145:     s1,s2 : integer;
                    146:
                    147:   begin
                    148:     s1 := Sum(v1);
                    149:     s2 := Sum(v2);
                    150:     if s1 < s2
                    151:      then return false;
                    152:      elsif s1 > s2
                    153:          then return true;
                    154:          else if v1'first /= v2'first or else v1'last /= v2'last
                    155:                then raise CONSTRAINT_ERROR;
                    156:                else for i in v1'range loop
                    157:                       if v1(i) < v2(i)
                    158:                        then return false;
                    159:                        elsif v1(i) > v2(i)
                    160:                            then return true;
                    161:                       end if;
                    162:                     end loop;
                    163:                     return false;  -- v1 = v2
                    164:               end if;
                    165:     end if;
                    166:   end ">";
                    167:
                    168:   function ">" ( v1,v2 : Standard_Integer_Vectors.Link_to_Vector )
                    169:                return boolean is
                    170:
                    171:     use Standard_Integer_Vectors;
                    172:
                    173:   begin
                    174:     if v1 = null
                    175:      then return false;
                    176:      elsif v2 = null
                    177:          then if Sum(v1) > 0
                    178:                then return true;
                    179:                else return false;
                    180:               end if;
                    181:          else return v1.all > v2.all;
                    182:     end if;
                    183:   end ">";
                    184:
                    185: end Graded_Lexicographic_Order;

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