=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/kanExport0.c,v retrieving revision 1.24 retrieving revision 1.28 diff -u -p -r1.24 -r1.28 --- OpenXM/src/kan96xx/Kan/kanExport0.c 2004/08/22 02:00:24 1.24 +++ OpenXM/src/kan96xx/Kan/kanExport0.c 2004/08/31 04:45:42 1.28 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/kanExport0.c,v 1.23 2004/07/30 11:21:55 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/kanExport0.c,v 1.27 2004/08/28 07:28:54 takayama Exp $ */ #include #include "datatype.h" #include "stackm.h" @@ -797,6 +797,21 @@ struct object KooGreater(obj1,obj2) if ( KopDouble(obj1) > KopDouble(obj2) ) return(KpoInteger(1)); else return(KpoInteger(0)); break; + case Sarray: + { + int i,m1,m2; + struct object rr; + m1 = getoaSize(obj1); m2 = getoaSize(obj2); + for (i=0; i< (m1>m2?m2:m1); i++) { + rr=KooGreater(getoa(obj1,i),getoa(obj2,i)); + if (KopInteger(rr) == 1) return rr; + rr=KooGreater(getoa(obj2,i),getoa(obj1,i)); + if (KopInteger(rr) == 1) return KpoInteger(0); + } + if (m1 > m2) return KpoInteger(1); + else return KpoInteger(0); + } + break; default: errorKan1("%s\n","KooGreater() has not supported these objects yet."); break; @@ -838,6 +853,21 @@ struct object KooLess(obj1,obj2) if ( KopDouble(obj1) < KopDouble(obj2) ) return(KpoInteger(1)); else return(KpoInteger(0)); break; + case Sarray: + { + int i,m1,m2; + struct object rr; + m1 = getoaSize(obj1); m2 = getoaSize(obj2); + for (i=0; i< (m1>m2?m2:m1); i++) { + rr=KooLess(getoa(obj1,i),getoa(obj2,i)); + if (KopInteger(rr) == 1) return rr; + rr=KooLess(getoa(obj2,i),getoa(obj1,i)); + if (KopInteger(rr) == 1) return KpoInteger(0); + } + if (m1 < m2) return KpoInteger(1); + else return KpoInteger(0); + } + break; default: errorKan1("%s\n","KooLess() has not supported these objects yet."); break; @@ -914,8 +944,7 @@ struct object KdataConversion(obj,key) strcpy(rob.lc.str,intstr); return(rob); }else if (strcmp(key,"universalNumber")==0) { - rob.tag = SuniversalNumber; - rob.lc.universalNumber = intToCoeff(obj.lc.ival,&SmallRing); + rob = KintToUniversalNumber(obj.lc.ival); return(rob); }else if (strcmp(key,"double") == 0) { rob = KpoDouble((double) (obj.lc.ival)); @@ -1085,6 +1114,7 @@ struct object KdataConversion(obj,key) break; case SuniversalNumber: if ((strcmp(key,"universalNumber")==0) || (strcmp(key,"numerator")==0)) { + rob = obj; return(rob); }else if (strcmp(key,"integer")==0) { rob = KpoInteger(coeffToInt(obj.lc.universalNumber)); @@ -1102,6 +1132,9 @@ struct object KdataConversion(obj,key) }else if (strcmp(key,"double") == 0) { rob = KpoDouble( toDouble0(obj) ); return(rob); + }else if (strcmp(key,"denominator") == 0) { + rob = KintToUniversalNumber(1); + return(rob); }else{ warningKan("Sorry. This type of data conversion of universalNumber has not supported yet.\n"); } @@ -1178,7 +1211,24 @@ struct object KdataConversion(obj,key) } return(NullObject); } - + +/* cf. macro to_int */ +struct object Kto_int(struct object ob) { + int n,i; + struct object otmp; + struct object rob; + if (ob.tag == SuniversalNumber) return KdataConversion(ob,"integer"); + if (ob.tag == Sarray) { + n = getoaSize(ob); + rob = newObjectArray(n); + for (i=0; i