[BACK]Return to bracket_monomials.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Schubert

Annotation of OpenXM_contrib/PHC/Ada/Schubert/bracket_monomials.adb, Revision 1.1

1.1     ! maekawa     1: package body Bracket_Monomials is
        !             2:
        !             3: -- INTERNAL SORTING ROUTINE TO MAINTAIN ORDER :
        !             4:
        !             5:   procedure Swap_Heads ( bm1,bm2 : in out Bracket_Monomial;
        !             6:                          lb1,lb2 : in out Link_to_Bracket ) is
        !             7:
        !             8:     b1 : Bracket(lb1'range) := lb1.all;
        !             9:     b2 : Bracket(lb2'range) := lb2.all;
        !            10:
        !            11:   begin
        !            12:     Clear(lb2); lb2 := new Bracket'(b1);
        !            13:     Clear(lb1); lb1 := new Bracket'(b2);
        !            14:     Set_Head(bm1,lb1);
        !            15:     Set_Head(bm2,lb2);
        !            16:   end Swap_Heads;
        !            17:
        !            18:   procedure Sort ( bm : in out Bracket_Monomial ) is
        !            19:
        !            20:     tmp1 : Bracket_Monomial := bm;
        !            21:
        !            22:   begin
        !            23:     while not Is_Null(tmp1) loop
        !            24:       declare
        !            25:         lb1 : Link_to_Bracket := Head_Of(tmp1);
        !            26:         min : Link_to_Bracket := lb1;
        !            27:         mintmp : Bracket_Monomial := tmp1;
        !            28:         tmp2 : Bracket_Monomial := Tail_Of(tmp1);
        !            29:       begin
        !            30:         while not Is_Null(tmp2) loop
        !            31:           if Head_Of(tmp2).all < min.all
        !            32:            then min := Head_Of(tmp2);
        !            33:                 mintmp := tmp2;
        !            34:           end if;
        !            35:           tmp2 := Tail_Of(tmp2);
        !            36:         end loop;
        !            37:         if not Is_Equal(lb1.all,min.all)
        !            38:          then Swap_Heads(tmp1,mintmp,lb1,min);
        !            39:         end if;
        !            40:       end;
        !            41:       tmp1 := Tail_Of(tmp1);
        !            42:     end loop;
        !            43:   end Sort;
        !            44:
        !            45: -- CONSTRUCTORS :
        !            46:
        !            47:   function Create ( b : Bracket ) return Bracket_Monomial is
        !            48:
        !            49:     bm : Bracket_Monomial;
        !            50:     lb : Link_to_Bracket := new Bracket'(b);
        !            51:
        !            52:   begin
        !            53:     Construct(lb,bm);
        !            54:     return bm;
        !            55:   end Create;
        !            56:
        !            57:   procedure Multiply ( bm : in out Bracket_Monomial; b : in Bracket ) is
        !            58:   begin
        !            59:     if Is_Null(bm)
        !            60:      then bm := Create(b);
        !            61:      else declare
        !            62:             lb : Link_to_Bracket := new Bracket'(b);
        !            63:           begin
        !            64:             Construct(lb,bm);
        !            65:             Sort(bm);
        !            66:           end;
        !            67:     end if;
        !            68:   end Multiply;
        !            69:
        !            70:   procedure Copy ( bm1 : in Bracket_Monomial;
        !            71:                    bm2 : in out Bracket_Monomial ) is
        !            72:
        !            73:     tmp : Bracket_Monomial := bm1;
        !            74:
        !            75:   begin
        !            76:     Clear(bm2);
        !            77:     while not Is_Null(tmp) loop
        !            78:       declare
        !            79:         b : constant Bracket := Head_Of(tmp).all;
        !            80:       begin
        !            81:         Multiply(bm2,b);
        !            82:       end;
        !            83:       tmp := Tail_Of(tmp);
        !            84:     end loop;
        !            85:   end Copy;
        !            86:
        !            87: -- OPERATIONS :
        !            88:
        !            89:   function "*" ( b1,b2 : Bracket ) return Bracket_Monomial is
        !            90:
        !            91:     bm : Bracket_Monomial := Create(b1);
        !            92:
        !            93:   begin
        !            94:     Multiply(bm,b2);
        !            95:     return bm;
        !            96:   end "*";
        !            97:
        !            98:   function "*" ( bm : Bracket_Monomial; b : Bracket )
        !            99:                return Bracket_Monomial is
        !           100:
        !           101:     res : Bracket_Monomial;
        !           102:
        !           103:   begin
        !           104:     Copy(bm,res);
        !           105:     Multiply(res,b);
        !           106:     return res;
        !           107:   end "*";
        !           108:
        !           109:   function "*" ( b : Bracket; bm : Bracket_Monomial )
        !           110:                return Bracket_Monomial is
        !           111:
        !           112:     res : Bracket_Monomial;
        !           113:
        !           114:   begin
        !           115:     Copy(bm,res);
        !           116:     Multiply(res,b);
        !           117:     return res;
        !           118:   end "*";
        !           119:
        !           120:   function "*" ( bm1,bm2 : Bracket_Monomial ) return Bracket_Monomial is
        !           121:
        !           122:     res : Bracket_Monomial;
        !           123:
        !           124:   begin
        !           125:     Copy(bm1,res);
        !           126:     Multiply(res,bm2);
        !           127:     return res;
        !           128:   end "*";
        !           129:
        !           130:   procedure Multiply ( bm1 : in out Bracket_Monomial;
        !           131:                        bm2 : in Bracket_Monomial ) is
        !           132:
        !           133:     tmp : Bracket_Monomial := bm2;
        !           134:
        !           135:   begin
        !           136:     while not Is_Null(tmp) loop
        !           137:       declare
        !           138:         b : constant Bracket := Head_Of(tmp).all;
        !           139:       begin
        !           140:         Multiply(bm1,b);
        !           141:       end;
        !           142:       tmp := Tail_Of(tmp);
        !           143:     end loop;
        !           144:   end Multiply;
        !           145:
        !           146:   function Is_Equal ( bm1,bm2 : Bracket_Monomial ) return boolean is
        !           147:
        !           148:     tmp1 : Bracket_Monomial := bm1;
        !           149:     tmp2 : Bracket_Monomial := bm2;
        !           150:
        !           151:   begin
        !           152:     if Length_Of(tmp1) /= Length_Of(tmp2)
        !           153:      then return false;
        !           154:      else while not Is_Null(tmp1) loop
        !           155:             if not Is_Equal(Head_Of(tmp1).all,Head_Of(tmp2).all)
        !           156:              then return false;
        !           157:              else tmp1 := Tail_Of(tmp1);
        !           158:                   tmp2 := Tail_Of(tmp2);
        !           159:             end if;
        !           160:           end loop;
        !           161:           return true;
        !           162:     end if;
        !           163:   end Is_Equal;
        !           164:
        !           165:   function "<" ( bm1,bm2 : Bracket_Monomial ) return boolean is
        !           166:
        !           167:     tmp1 : Bracket_Monomial := bm1;
        !           168:     tmp2 : Bracket_Monomial := bm2;
        !           169:     lb1,lb2 : Link_to_Bracket;
        !           170:
        !           171:   begin
        !           172:     while not Is_Null(tmp1) and not Is_Null(tmp2) loop
        !           173:       lb1 := Head_Of(tmp1); lb2 := Head_Of(tmp2);
        !           174:       if lb1.all < lb2.all
        !           175:        then return true;
        !           176:        elsif lb1.all > lb2.all
        !           177:            then return false;
        !           178:            else tmp1 := Tail_Of(tmp1); tmp2 := Tail_Of(tmp2);
        !           179:       end if;
        !           180:     end loop;
        !           181:     if Is_Null(tmp1) and not Is_Null(tmp2)
        !           182:      then return true;
        !           183:      else return false;
        !           184:     end if;
        !           185:   end "<";
        !           186:
        !           187:   function ">" ( bm1,bm2 : Bracket_Monomial ) return boolean is
        !           188:
        !           189:     tmp1 : Bracket_Monomial := bm1;
        !           190:     tmp2 : Bracket_Monomial := bm2;
        !           191:     lb1,lb2 : Link_to_Bracket;
        !           192:
        !           193:   begin
        !           194:     while not Is_Null(tmp1) and not Is_Null(tmp2) loop
        !           195:       lb1 := Head_Of(tmp1); lb2 := Head_Of(tmp2);
        !           196:       if lb1.all > lb2.all
        !           197:        then return true;
        !           198:        elsif lb1.all < lb2.all
        !           199:            then return false;
        !           200:            else tmp1 := Tail_Of(tmp1); tmp2 := Tail_Of(tmp2);
        !           201:       end if;
        !           202:     end loop;
        !           203:     if Is_Null(tmp2) and not Is_Null(tmp1)
        !           204:      then return true;
        !           205:      else return false;
        !           206:     end if;
        !           207:   end ">";
        !           208:
        !           209:   function Divisible ( bm : Bracket_Monomial; b : Bracket ) return boolean is
        !           210:
        !           211:     tmp : Bracket_Monomial := bm;
        !           212:
        !           213:   begin
        !           214:     while not Is_Null(tmp) loop
        !           215:       if Is_Equal(Head_Of(tmp).all,b)
        !           216:        then return true;
        !           217:        else tmp := Tail_Of(tmp);
        !           218:       end if;
        !           219:     end loop;
        !           220:     return false;
        !           221:   end Divisible;
        !           222:
        !           223: -- ITERATORS OVER THE BRACKETS :
        !           224:
        !           225:   function Number_of_Brackets ( bm : Bracket_Monomial ) return natural is
        !           226:   begin
        !           227:     return Length_Of(bm);
        !           228:   end Number_of_Brackets;
        !           229:
        !           230:   procedure Enumerate_Brackets ( bm : in Bracket_Monomial ) is
        !           231:
        !           232:     tmp : Bracket_Monomial := bm;
        !           233:     continue : boolean := true;
        !           234:
        !           235:   begin
        !           236:     while not Is_Null(tmp) loop
        !           237:       Process(Head_Of(tmp).all,continue);
        !           238:       exit when not continue;
        !           239:       tmp := Tail_Of(tmp);
        !           240:     end loop;
        !           241:   end Enumerate_Brackets;
        !           242:
        !           243: -- DESTRUCTOR :
        !           244:
        !           245:   procedure Clear ( bm : in out Bracket_Monomial ) is
        !           246:
        !           247:     tmp : Bracket_Monomial := bm;
        !           248:     lb : Link_to_Bracket;
        !           249:
        !           250:   begin
        !           251:     while not Is_Null(tmp) loop
        !           252:       lb := Head_Of(tmp);
        !           253:       Clear(lb);
        !           254:       tmp := Tail_Of(tmp);
        !           255:     end loop;
        !           256:     Lists_of_Brackets.Clear(Lists_of_Brackets.List(bm));
        !           257:   end Clear;
        !           258:
        !           259: end Bracket_Monomials;

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