Return to tree2polymake.c CVS log | Up to [local] / OpenXM / src / kan96xx / trans |
File: [local] / OpenXM / src / kan96xx / trans / tree2polymake.c (download)
Revision 1.1, Mon Nov 24 08:16:13 2003 UTC (20 years, 7 months ago) by takayama
The first version of the data translater between OpenXM CMO and polymake. Example: $polymake.data(polymake.POINTS([[1,0,0],[1,1,0],[1,0,1],[1,1,1],[1,2,0]]),polymake.FACETS([[1,0,-1],[0,1,0],[2,-1,-1],[0,0,1]]),polymake.AFFINE_HULL(),polymake.N_FACETS([[4]]),polymake.VERTICES([[1,0,0],[1,0,1],[1,1,1],[1,2,0]]),polymake.VERTICES_IN_FACETS([[1,2],[0,1],[2,3],[0,3]]),polymake.AMBIENT_DIM([[2]]),polymake.BOUNDED(),polymake.GRAPH([[1,3],[0,2],[1,3],[0,2]]),polymake.DUAL_GRAPH([[1,2],[0,3],[0,3],[1,2]]));$ /pstr set [(parse) (ox.sm1) pushfile] extension k0connectr oxk0.ccc ( polymake=Object; ) oxexecutestring oxk0.ccc ( QuoteMode(1); ) oxexecutestring oxk0.ccc pstr oxexecutestring oxk0.ccc oxpopcmo /ptree set oxk0.ccc ( QuoteMode(0); ) oxexecutestring [(treeToPolymake) ptree] extension /ss set ss message |
/* $OpenXM: OpenXM/src/kan96xx/trans/tree2polymake.c,v 1.1 2003/11/24 08:16:13 takayama Exp $ */ #include <stdio.h> #include "../Kan/datatype.h" #include "../Kan/stackm.h" #include "../Kan/extern.h" #include "../Kan/gradedset.h" #include "../Kan/extern2.h" #include "../Kan/kclass.h" #include "../plugin/file2.h" #include "trans.h" int rationalToPolymakeS(struct object ob,FILE2 *fp) { struct object ob1; struct object ob2; int r; r = 0; if (ob.tag == SrationalFunction) { ob1 = *(Knumerator(ob)); ob2 = *(Kdenominator(ob)); r=integerToPolymakeS(ob1,fp); r=(fp2fputs("/",fp)<0?-1:r); r=(integerToPolymakeS(ob2,fp)<0?-1:r); }else if ((ob.tag == Sinteger) || (ob.tag == SuniversalNumber)) { r=integerToPolymakeS(ob,fp); }else{ return(-1); } return(r); } int integerToPolymakeS(struct object ob,FILE2 *fp) { int r; char *s; char s2[254]; r = 0; if (ob.tag == Sinteger) { sprintf(s2,"%d",ob.lc.ival); r=(fp2fputs(s2,fp)<0?-1:r); }else if (ob.tag == SuniversalNumber) { s=coeffToString(ob.lc.universalNumber); r=(fp2fputs(s,fp)<0?-1:r); }else{ return(-1); } return(r); } int arrayToPolymakeS(struct object ob,FILE2 *fp,int format) { int r; int n,i; struct object ob1; r = 0; if (ob.tag != Sarray) { return(-1); } if (format == 0) { n = getoaSize(ob); for (i=0; i<n; i++) { ob1 = getoa(ob,i); if (ob1.tag == Sarray) { r=(arrayToPolymakeS(ob1,fp,format)<0?-1:r); }else{ r=(integerToPolymakeS(ob1,fp)<0?-1:r); if (i != n-1) fp2fputc(' ',fp); } } fp2fputc('\n',fp); }else{ n = getoaSize(ob); for (i=0; i<n; i++) { ob1 = getoa(ob,i); if (ob1.tag == Sarray) { if (i==0) fp2fputc('{',fp); r=(arrayToPolymakeS(ob1,fp,format)<0?-1:r); if (i==n-1) fp2fputc('}',fp); }else{ r=(integerToPolymakeS(ob1,fp)<0?-1:r); if (i != n-1) fp2fputc(' ',fp); } } fp2fputc('\n',fp); } return(0); } int treeToPolymakeS(struct object ob,FILE2 *fp) { struct object obe; struct object obc; int r; int i,n; char *key; r = 0; if (ob.tag != Sclass) return(-1); if (ectag(ob) != CLASSNAME_tree) return(-1); obe = KtreeGetDocumentElement(ob); obc = KtreeGetChildNodes(ob); if (obe.tag != Sdollar) return(-1); if (obc.tag != Sarray) return(-1); key = KopString(obe); /* printf("key=%s\n",key); */ if (strcmp(key,"data")==0) { /* Top node */ n = getoaSize(obc); for (i=0; i<n; i++) { r=(treeToPolymakeS(getoa(obc,i),fp)<0?-1:r); } } else if (strcmp(key,"POINTS")==0) { /* array of array is expected. */ fp2fputs("POINTS\n",fp); r=(arrayToPolymakeS(obc,fp,0)<0?-1:r); fp2fputc('\n',fp); } else if (strcmp(key,"FACETS") == 0) { fp2fputs("FACETS\n",fp); r=(arrayToPolymakeS(obc,fp,0)<0?-1:r); } /* Add more */ else { /* Generic */ fp2fputs(key,fp); fp2fputc('\n',fp); if (getoaSize(obc) > 0) { r=(arrayToPolymakeS(obc,fp,0)<0?-1:r); } fp2fputc('\n',fp); } fp2fputc('\n',fp); return(r); } struct object KtreeToPolymakeS(struct object ob) { FILE2 *fp; int r; int size; char *s,*s2; if (ob.tag != Sclass) errorKan1("%s\n","KtreeToPolymakeS: argument is not a tree."); if (ectag(ob) != CLASSNAME_tree) errorKan1("%s\n","KtreeToPolymakeS: argument is not a tree."); fp = fp2open(-1); if (fp == NULL) errorKan1("%s\n","KtreeToPolymakeS: fails to open a stream."); r = treeToPolymakeS(ob,fp); if (r < 0) errorKan1("%s\n","KtreeToPolymakeS: the tree may contain an object which cannot be translated.\n"); s = fp2fcloseInString(fp,&size); if (s == NULL) errorKan1("%s\n","KtreeToPolymakeS:"); s2 = (char *)sGC_malloc(size+2); if (s2 == NULL) errorKan1("%s\n","No more memory."); strcpy(s2,s); return KpoString(s2); }