src/mdd/mdd_func2cmod.c File Reference

#include "mdd.h"
Include dependency graph for mdd_func2cmod.c:

Go to the source code of this file.

Functions

mdd_tmdd_func2c_mod (mdd_manager *mgr, int mvar1, int mvar2, int constant, boolean(*func4)(int, int, int, int))
boolean eq_plus3mod (int x, int y, int z, int range)
boolean geq_plus3mod (int x, int y, int z, int range)
boolean gt_plus3mod (int x, int y, int z, int range)
boolean leq_plus3mod (int x, int y, int z, int range)
boolean lt_plus3mod (int x, int y, int z, int range)
boolean neq_plus3mod (int x, int y, int z, int range)
boolean eq_minus3mod (int x, int y, int z, int range)
boolean geq_minus3mod (int x, int y, int z, int range)
boolean gt_minus3mod (int x, int y, int z, int range)
boolean leq_minus3mod (int x, int y, int z, int range)
boolean lt_minus3mod (int x, int y, int z, int range)
boolean neq_minus3mod (int x, int y, int z, int range)

Function Documentation

boolean eq_minus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 120 of file mdd_func2cmod.c.

00121 {
00122     return (x == (y - z) % range);
00123 }

boolean eq_plus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 84 of file mdd_func2cmod.c.

00085 {
00086     return (x == (y + z) % range);
00087 }

boolean geq_minus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 126 of file mdd_func2cmod.c.

00127 {
00128     return (x >= (y - z) % range);
00129 }

boolean geq_plus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 90 of file mdd_func2cmod.c.

00091 {
00092     return (x >= (y + z) % range);
00093 }

boolean gt_minus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 132 of file mdd_func2cmod.c.

00133 {
00134     return (x > (y - z) % range);
00135 }

boolean gt_plus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 96 of file mdd_func2cmod.c.

00097 {
00098     return (x > (y + z) % range);
00099 }

boolean leq_minus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 138 of file mdd_func2cmod.c.

00139 {
00140     return (x <= (y - z) % range);
00141 }

boolean leq_plus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 102 of file mdd_func2cmod.c.

00103 {
00104     return (x <= (y + z) % range);
00105 }

boolean lt_minus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 144 of file mdd_func2cmod.c.

00145 {
00146     return (x < (y - z) % range);
00147 }

boolean lt_plus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 108 of file mdd_func2cmod.c.

00109 {
00110     return (x < (y + z) % range);
00111 }

mdd_t* mdd_func2c_mod ( mdd_manager mgr,
int  mvar1,
int  mvar2,
int  constant,
boolean(*)(int, int, int, int)  func4 
)

Definition at line 19 of file mdd_func2cmod.c.

00025 {
00026     mvar_type x, y;
00027     array_t *child_list_x, *child_list_y;
00028     int i, j;
00029     mdd_t *tx, *ty;
00030     array_t *mvar_list = mdd_ret_mvar_list(mgr);
00031     mdd_t *one, *zero;
00032 
00033     x = array_fetch(mvar_type, mvar_list, mvar1);
00034     y = array_fetch(mvar_type, mvar_list, mvar2);
00035 
00036     if (x.status == MDD_BUNDLED) {
00037         (void) fprintf(stderr, 
00038                 "\nWarning: mdd_func2c, bundled variable %s is used\n", x.name);
00039         fail("");
00040     }
00041 
00042     if (y.status == MDD_BUNDLED) {
00043         (void) fprintf(stderr,
00044                 "\nWarning: mdd_func2c, bundled variable %s is used\n", y.name);
00045         fail("");
00046     }
00047 
00048     if((x.values   != y.values)  || ( constant < 0) || ( constant >= x.values) ) {
00049       (void) fprintf(stderr, "\n mdd_func2c_mod: Cannot operate with two different ranges\n");
00050       exit(1);
00051     }
00052     
00053 
00054     one = mdd_one(mgr);
00055     zero = mdd_zero(mgr);
00056 
00057     child_list_x = array_alloc(mdd_t *, 0);
00058     for (i=0; i<x.values; i++) {
00059         child_list_y = array_alloc(mdd_t *, 0);
00060         for (j=0; j<y.values; j++) {
00061             if (func4(i,j,constant,x.values))
00062                 array_insert_last(mdd_t *, child_list_y, one);
00063             else
00064                 array_insert_last(mdd_t *, child_list_y, zero);
00065         }
00066         ty = mdd_case(mgr, mvar2, child_list_y);
00067         array_insert_last(mdd_t *, child_list_x, ty);
00068         array_free(child_list_y);
00069     }
00070     tx = mdd_case(mgr, mvar1, child_list_x);
00071     array_free(child_list_x);
00072 
00073     mdd_free(zero);
00074     mdd_free(one);
00075 
00076     return tx;
00077 }

boolean neq_minus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 150 of file mdd_func2cmod.c.

00151 {
00152     return (x != (y - z) % range);
00153 }

boolean neq_plus3mod ( int  x,
int  y,
int  z,
int  range 
)

Definition at line 114 of file mdd_func2cmod.c.

00115 {
00116     return (x != (y + z) % range);
00117 }


Generated on Tue Jan 12 13:57:26 2010 for glu-2.2 by  doxygen 1.6.1