📄 rcc8op.c
字号:
/***************************************************************************//*** ***//*** rcc8op.c (Version 1.0) ***//*** ***//*** Ronny Fehling, Bernhard Nebel, Jochen Renz - March 1998 ***//*** ***//*** fehling, nebel, renz@informatik.uni-freiburg.de ***//*** ***//*** http://www.informatik.uni-freiburg.de/~sppraum ***//*** ***//*** Institut fuer Informatik ***//*** Albert-Ludwigs-Universitaet ***//*** Am Flughafen 17 ***//*** 79110 Freiburg, Germany ***//*** ***//***************************************************************************/#include "rcc8.h"#include "rcc8op.h"#include <stdio.h>#include <stdlib.h>RELTYPE fcomp[MAXSET][MAXSET];RELTYPE invtab[MAXSET];/* Value table */int vtab[MAXSET]={0, 6, 7, 10, 11, 14, 14, 15, 6, 12, 12, 14, 14, 15, 15, 16, 4, 12, 12, 14, 14, 16, 15, 16, 9, 14, 14, 14, 15, 16, 16, 16, 3, 14, 14, 15, 13, 15, 14, 16, 14, 16, 15, 16, 14, 16, 15, 16, 14, 16, 15, 16, 15, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 2, 14, 14, 15, 14, 16, 15, 16, 14, 16, 15, 16, 15, 16, 15, 16, 14, 16, 16, 16, 15, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 5, 15, 14, 16, 14, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 11, 11, 13, 13, 15, 14, 16, 8, 14, 13, 14, 14, 16, 15, 16, 9, 14, 14, 14, 15, 16, 16, 16, 10, 14, 14, 15, 16, 16, 16, 16, 5, 15, 14, 16, 14, 16, 15, 16, 14, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 5, 15, 14, 16, 14, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, 16, 15, 16, 14, 16, 15, 16, 15, 16, 16, 16, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 };/* Compute the inverse of a relation */RELTYPE inverse(RELTYPE r){ return(((r&DC) ? DC : 0) | ((r&EC) ? EC : 0) | ((r&PO) ? PO : 0) | ((r&TPP) ? TPPI : 0) | ((r&NTPP) ? NTPPI : 0) | ((r&TPPI) ? TPP : 0) | ((r&NTPPI) ? NTPP : 0) | ((r&EQ) ? EQ : 0));}/* Compute the relation value */int relvalue(RELTYPE r){ register int bytecnt; register int tempval; bytecnt = 0; tempval = 0; if (r & DC) { bytecnt++; tempval += 6; } if (r & EC) { bytecnt++; tempval += 3; } if (r & PO) { bytecnt++; tempval += 5; } if (r & TPP) { bytecnt++; tempval += 4; } if (r & NTPP) { bytecnt++; tempval += 2; } if (r & TPPI) { bytecnt++; tempval += 4; } if (r & NTPPI) { bytecnt++; tempval += 2; } if (r & EQ) { bytecnt++; tempval += 1; } return(tempval);}/* Computation of the complete composition table of all possible disjunctions of the base relations. Table is stored in fcomp.*/void compute_comp_tab(RELTYPE fcomp[MAXSET][MAXSET]){ register RELTYPE hibit=2,i,j; for(j=3;j<MAXSET;j++) if (j % hibit) for(i=1;i<MAXSET;i*=2) fcomp[i][j] = (fcomp[i][hibit])|(fcomp[i][j^hibit]); else hibit*=2; hibit=2; for(i=3;i<MAXSET;i++) if (i % hibit) for(j=1;j<MAXSET;j++) fcomp[i][j] = (fcomp[hibit][j])|(fcomp[i^hibit][j]); else hibit*=2; }void initfop(){ void compute_comp_tab(RELTYPE fcomp[MAXSET][MAXSET]); register RELTYPE r1; /* Basic composition table */ /*DC*/ fcomp[DC][DC] = DALL; fcomp[DC][EC] = (DC|EC|PO|TPP|NTPP); fcomp[DC][PO] = (DC|EC|PO|TPP|NTPP); fcomp[DC][TPP] = (DC|EC|PO|TPP|NTPP); fcomp[DC][NTPP] = (DC|EC|PO|TPP|NTPP); fcomp[DC][TPPI] = DC; fcomp[DC][NTPPI] = DC; fcomp[DC][EQ] = DC; /*EC*/ fcomp[EC][DC] = (DC|EC|PO|TPPI|NTPPI); fcomp[EC][EC] = (DC|EC|PO|TPP|TPPI|EQ); fcomp[EC][PO] = (DC|EC|PO|TPP|NTPP); fcomp[EC][TPP] = (EC|PO|TPP|NTPP); fcomp[EC][NTPP] = (PO|TPP|NTPP); fcomp[EC][TPPI] = (DC|EC); fcomp[EC][NTPPI] = DC; fcomp[EC][EQ] = EC; /*PO*/ fcomp[PO][DC] = (DC|EC|PO|TPPI|NTPPI); fcomp[PO][EC] = (DC|EC|PO|TPPI|NTPPI); fcomp[PO][PO] = DALL; fcomp[PO][TPP] = (PO|TPP|NTPP); fcomp[PO][NTPP] = (PO|TPP|NTPP); fcomp[PO][TPPI] = (DC|EC|PO|TPPI|NTPPI); fcomp[PO][NTPPI] = (DC|EC|PO|TPPI|NTPPI); fcomp[PO][EQ] = PO; /*TPP*/ fcomp[TPP][DC] = DC; fcomp[TPP][EC] = (DC|EC); fcomp[TPP][PO] = (DC|EC|PO|TPP|NTPP); fcomp[TPP][TPP] = (TPP|NTPP); fcomp[TPP][NTPP] = NTPP; fcomp[TPP][TPPI] = (DC|EC|PO|TPP|TPPI|EQ); fcomp[TPP][NTPPI] = (DC|EC|PO|TPPI|NTPPI); fcomp[TPP][EQ] = TPP; /*NTPP*/ fcomp[NTPP][DC] = DC; fcomp[NTPP][EC] = DC; fcomp[NTPP][PO] = (DC|EC|PO|TPP|NTPP); fcomp[NTPP][TPP] = NTPP; fcomp[NTPP][NTPP] = NTPP; fcomp[NTPP][TPPI] = (DC|EC|PO|TPP|NTPP); fcomp[NTPP][NTPPI] = DALL; fcomp[NTPP][EQ] = NTPP; /*TPPI*/ fcomp[TPPI][DC] = (DC|EC|PO|TPPI|NTPPI); fcomp[TPPI][EC] = (EC|PO|TPPI|NTPPI); fcomp[TPPI][PO] = (PO|TPPI|NTPPI); fcomp[TPPI][TPP] = (PO|TPP|TPPI|EQ); fcomp[TPPI][NTPP] = (PO|TPP|NTPP); fcomp[TPPI][TPPI] = (TPPI|NTPPI); fcomp[TPPI][NTPPI] = NTPPI; fcomp[TPPI][EQ] = TPPI; /*NTPPI*/ fcomp[NTPPI][DC] = (DC|EC|PO|TPPI|NTPPI); fcomp[NTPPI][EC] = (PO|TPPI|NTPPI); fcomp[NTPPI][PO] = (PO|TPPI|NTPPI); fcomp[NTPPI][TPP] = (PO|TPPI|NTPPI); fcomp[NTPPI][NTPP] = (PO|TPP|TPPI|NTPP|NTPPI|EQ); fcomp[NTPPI][TPPI] = NTPPI; fcomp[NTPPI][NTPPI] = NTPPI; fcomp[NTPPI][EQ] = NTPPI; /*EQ*/ fcomp[EQ][DC] = DC; fcomp[EQ][EC] = EC; fcomp[EQ][PO] = PO; fcomp[EQ][TPP] = TPP; fcomp[EQ][NTPP] = NTPP; fcomp[EQ][TPPI] = TPPI; fcomp[EQ][NTPPI] = NTPPI; fcomp[EQ][EQ] = EQ; compute_comp_tab(fcomp); for (r1=0;r1 < MAXSET; r1++) { invtab[r1] = inverse(r1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -