1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>polylib: compress_parms.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>File Members</span></a></li>
</ul>
</div>
<h1>compress_parms.h</h1><a href="compress__parms_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> This file is part of PolyLib.</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment"> PolyLib is free software: you can redistribute it and/or modify</span>
<a name="l00005"></a>00005 <span class="comment"> it under the terms of the GNU General Public License as published by</span>
<a name="l00006"></a>00006 <span class="comment"> the Free Software Foundation, either version 3 of the License, or</span>
<a name="l00007"></a>00007 <span class="comment"> (at your option) any later version.</span>
<a name="l00008"></a>00008 <span class="comment"></span>
<a name="l00009"></a>00009 <span class="comment"> PolyLib is distributed in the hope that it will be useful,</span>
<a name="l00010"></a>00010 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00011"></a>00011 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00012"></a>00012 <span class="comment"> GNU General Public License for more details.</span>
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment"> You should have received a copy of the GNU General Public License</span>
<a name="l00015"></a>00015 <span class="comment"> along with PolyLib. If not, see <http://www.gnu.org/licenses/>.</span>
<a name="l00016"></a>00016 <span class="comment">*/</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">/**</span>
<a name="l00019"></a>00019 <span class="comment"> * @author B. Meister 12/2003-2006</span>
<a name="l00020"></a>00020 <span class="comment"> * LSIIT -ICPS </span>
<a name="l00021"></a>00021 <span class="comment"> * UMR 7005 CNRS</span>
<a name="l00022"></a>00022 <span class="comment"> * Louis Pasteur University (ULP), Strasbourg, France</span>
<a name="l00023"></a>00023 <span class="comment"> */</span>
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __BM_COMPRESS_PARMS_H__</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __BM_COMPRESS_PARMS_H__</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="matrix__addon_8h.html">matrix_addon.h</a>"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="matrix__permutations_8h.html">matrix_permutations.h</a>"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="assert_8h.html">assert.h</a>></span>
<a name="l00030"></a>00030
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="comment">/* ----- functions applying on equalities ----- */</span>
<a name="l00033"></a>00033 <span class="comment"></span>
<a name="l00034"></a>00034 <span class="comment">/** </span>
<a name="l00035"></a>00035 <span class="comment"> * Given a system of non-redundant equalities, looks if it has an integer</span>
<a name="l00036"></a>00036 <span class="comment"> * solution in the combined space, and if yes, returns one solution.</span>
<a name="l00037"></a>00037 <span class="comment"> */</span>
<a name="l00038"></a>00038 <span class="keywordtype">void</span> <a class="code" href="compress__parms_8c.html#a0395c4623907612a51219536d4d258e6" title="Given a system of equalities, looks if it has an integer solution in the combined...">Equalities_integerSolution</a>(<a class="code" href="structmatrix.html">Matrix</a> * Eqs, <a class="code" href="structmatrix.html">Matrix</a> ** sol);
<a name="l00039"></a>00039 <span class="comment"></span>
<a name="l00040"></a>00040 <span class="comment">/** </span>
<a name="l00041"></a>00041 <span class="comment"> * Computes the validity lattice of a set of equalities. I.e., the lattice</span>
<a name="l00042"></a>00042 <span class="comment"> * induced on the last <tt>b</tt> variables by the equalities involving the</span>
<a name="l00043"></a>00043 <span class="comment"> * first <tt>a</tt> integer existential variables.</span>
<a name="l00044"></a>00044 <span class="comment"> */</span>
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="compress__parms_8c.html#ae018fc28835ce2d99a74dba09055acc0" title="Computes the validity lattice of a set of equalities.">Equalities_validityLattice</a>(<a class="code" href="structmatrix.html">Matrix</a> * Eqs, <span class="keywordtype">int</span> a, <a class="code" href="structmatrix.html">Matrix</a>** vl);
<a name="l00046"></a>00046 <span class="comment"></span>
<a name="l00047"></a>00047 <span class="comment">/** </span>
<a name="l00048"></a>00048 <span class="comment"> * Given an integer matrix B with m rows and integer m-vectors C and d,</span>
<a name="l00049"></a>00049 <span class="comment"> * computes the basis of the integer solutions to (BN+C) mod d = 0 (1).</span>
<a name="l00050"></a>00050 <span class="comment"> * This is an affine lattice (G): (N 1)^T= G(N' 1)^T, forall N' in Z^b.</span>
<a name="l00051"></a>00051 <span class="comment"> * If there is no solution, returns NULL.</span>
<a name="l00052"></a>00052 <span class="comment">*/</span>
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="compress__parms_8c.html#a12b7b863af43c3d85682b9df2385938c" title="Given an integer matrix B with m rows and integer m-vectors C and d, computes the...">Equalities_intModBasis</a>(<a class="code" href="structmatrix.html">Matrix</a> * B, <a class="code" href="structmatrix.html">Matrix</a> * C, <a class="code" href="structmatrix.html">Matrix</a> * d, <a class="code" href="structmatrix.html">Matrix</a> ** imb);
<a name="l00054"></a>00054
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="comment">/* ----- functions applying on constraints ----- */</span>
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <span class="comment"></span>
<a name="l00059"></a>00059 <span class="comment">/**</span>
<a name="l00060"></a>00060 <span class="comment"> * Eliminates all the equalities in a set of constraints and returns the set of</span>
<a name="l00061"></a>00061 <span class="comment"> * constraints defining a full-dimensional polyhedron, such that there is a</span>
<a name="l00062"></a>00062 <span class="comment"> * bijection between integer points of the original polyhedron and these of the</span>
<a name="l00063"></a>00063 <span class="comment"> * resulting (projected) polyhedron).</span>
<a name="l00064"></a>00064 <span class="comment"> */</span>
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="compress__parms_8c.html#a1a9cd66aec30116cfd3b07c2e38c73c8" title="Eliminates all the equalities in a set of constraints and returns the set of constraints...">Constraints_fullDimensionize</a>(<a class="code" href="structmatrix.html">Matrix</a> ** M, <a class="code" href="structmatrix.html">Matrix</a> ** C, <a class="code" href="structmatrix.html">Matrix</a> ** VL,
<a name="l00066"></a>00066 <a class="code" href="structmatrix.html">Matrix</a> ** Eqs, <a class="code" href="structmatrix.html">Matrix</a> ** ParmEqs,
<a name="l00067"></a>00067 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ** elimVars,
<a name="l00068"></a>00068 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ** elimParms,
<a name="l00069"></a>00069 <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <span class="comment">/* extracts equalities involving only parameters */</span>
<a name="l00072"></a><a class="code" href="compress__parms_8h.html#a374fb10257b4bbe7a650cff3945e338f">00072</a> <span class="preprocessor">#define Constraints_removeParmEqs(a,b,c,d) Constraints_Remove_parm_eqs(a,b,c,d)</span>
<a name="l00073"></a>00073 <span class="preprocessor"></span><a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="compress__parms_8c.html#aca0035f9313236fd8046ab042180f544" title="Removes the equalities that involve only parameters, by eliminating some parameters...">Constraints_Remove_parm_eqs</a>(<a class="code" href="structmatrix.html">Matrix</a> ** M, <a class="code" href="structmatrix.html">Matrix</a> ** Ctxt,
<a name="l00074"></a>00074 <span class="keywordtype">int</span> renderSpace,
<a name="l00075"></a>00075 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ** elimParms);
<a name="l00076"></a>00076 <span class="comment"></span>
<a name="l00077"></a>00077 <span class="comment">/**</span>
<a name="l00078"></a>00078 <span class="comment"> * Eliminates the columns corresponding to a list of eliminated parameters.</span>
<a name="l00079"></a>00079 <span class="comment"> */</span>
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="compress__parms_8c.html#a3efbee2cc61c1cfb2e0b05f3320a2e83" title="Eliminate the columns corresponding to a list of eliminated parameters.">Constraints_removeElimCols</a>(<a class="code" href="structmatrix.html">Matrix</a> * M, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbVars,
<a name="l00081"></a>00081 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *elimParms, <a class="code" href="structmatrix.html">Matrix</a> ** newM);
<a name="l00082"></a>00082
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="comment">/* ----- function applying on a lattice ----- */</span>
<a name="l00085"></a>00085 <span class="comment"></span>
<a name="l00086"></a>00086 <span class="comment">/**</span>
<a name="l00087"></a>00087 <span class="comment"> * Given a matrix that defines a full-dimensional affine lattice, returns the </span>
<a name="l00088"></a>00088 <span class="comment"> * affine sub-lattice spanned in the k first dimensions.</span>
<a name="l00089"></a>00089 <span class="comment"> * Useful for instance when you only look for the parameters' validity lattice.</span>
<a name="l00090"></a>00090 <span class="comment"> */</span>
<a name="l00091"></a>00091 <span class="keywordtype">void</span> <a class="code" href="compress__parms_8c.html#a9a39676ea22cef575c08911c95badba2" title="Given a matrix that defines a full-dimensional affine lattice, returns the affine...">Lattice_extractSubLattice</a>(<a class="code" href="structmatrix.html">Matrix</a> * lat, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k, <a class="code" href="structmatrix.html">Matrix</a> ** subLat);
<a name="l00092"></a>00092
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="comment">/* ----- functions applying on a polyhedron ----- */</span>
<a name="l00095"></a>00095
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <a class="code" href="structpolyhedron.html">Polyhedron</a> * <a class="code" href="compress__parms_8c.html#a86df15994f14c73d49980bbf61f6f7e5" title="Removes equalities involving only parameters, but starting from a Polyhedron and...">Polyhedron_Remove_parm_eqs</a>(<a class="code" href="structpolyhedron.html">Polyhedron</a> ** P, <a class="code" href="structpolyhedron.html">Polyhedron</a> ** C,
<a name="l00098"></a>00098 <span class="keywordtype">int</span> renderSpace,
<a name="l00099"></a>00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ** elimParms,
<a name="l00100"></a>00100 <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00101"></a><a class="code" href="compress__parms_8h.html#ac13a685844ce6cf46d6a5cfac856c551">00101</a> <span class="preprocessor">#define Polyhedron_removeParmEqs(a,b,c,d,e) Polyhedron_Remove_parm_eqs(a,b,c,d,e)</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="comment">/* ----- functions kept for backwards compatibility ----- */</span>
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="comment"></span>
<a name="l00107"></a>00107 <span class="comment">/** </span>
<a name="l00108"></a>00108 <span class="comment"> * given a full-row-rank nxm matrix M(made of row-vectors), </span>
<a name="l00109"></a>00109 <span class="comment"> * computes the basis K (made of n-m column-vectors) of the integer kernel of M</span>
<a name="l00110"></a>00110 <span class="comment"> * so we have: M.K = 0</span>
<a name="l00111"></a>00111 <span class="comment">*/</span>
<a name="l00112"></a>00112 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="compress__parms_8c.html#ad66769b920ca4596c9fe5b76d38d0b3b" title="Given a full-row-rank nxm matrix M made of m row-vectors), computes the basis K (made...">int_ker</a>(<a class="code" href="structmatrix.html">Matrix</a> * M);
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <span class="comment">/* given a matrix of m parameterized equations, compress the parameters and</span>
<a name="l00115"></a>00115 <span class="comment"> transform the variable space into a n-m space. */</span>
<a name="l00116"></a>00116 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="compress__parms_8c.html#ab67657b853a34d82fdc72a3f771bc72c" title="Given a matrix with m parameterized equations, compress the nb_parms parameters and...">full_dimensionize</a>(<a class="code" href="structmatrix.html">Matrix</a> <span class="keyword">const</span> * M, <span class="keywordtype">int</span> nb_parms,
<a name="l00117"></a>00117 <a class="code" href="structmatrix.html">Matrix</a> ** Validity_Lattice);
<a name="l00118"></a>00118
<a name="l00119"></a>00119 <span class="comment">/* Compute the overall period of the variables I for (MI) mod |d|,</span>
<a name="l00120"></a>00120 <span class="comment"> where M is a matrix and |d| a vector</span>
<a name="l00121"></a>00121 <span class="comment"> Produce a diagonal matrix S = (s_k) where s_k is the overall period of i_k */</span>
<a name="l00122"></a>00122 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="compress__parms_8c.html#abfe5775031fc1fc8b783ef3a248a18b0" title="Computes the overall period of the variables I for (MI) mod |d|, where M is a matrix...">affine_periods</a>(<a class="code" href="structmatrix.html">Matrix</a> * M, <a class="code" href="structmatrix.html">Matrix</a> * d);
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="comment">/* given a matrix B' with m rows and m-vectors C' and d, computes the </span>
<a name="l00125"></a>00125 <span class="comment"> basis of the integer solutions to (B'N+C') mod d = 0.</span>
<a name="l00126"></a>00126 <span class="comment">returns NULL if there is no integer solution */</span>
<a name="l00127"></a>00127 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="compress__parms_8c.html#a091ae8062b33511134d13b0035a56777" title="kept here for backwards compatiblity.">int_mod_basis</a>(<a class="code" href="structmatrix.html">Matrix</a> * Bp, <a class="code" href="structmatrix.html">Matrix</a> * Cp, <a class="code" href="structmatrix.html">Matrix</a> * d);
<a name="l00128"></a>00128
<a name="l00129"></a>00129 <span class="comment">/* given a parameterized constraints matrix with m equalities, computes the</span>
<a name="l00130"></a>00130 <span class="comment"> compression matrix C such that there is an integer solution in the variables</span>
<a name="l00131"></a>00131 <span class="comment"> space for each value of N', with N = Cmp N' (N are the original parameters) */</span>
<a name="l00132"></a>00132 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="compress__parms_8c.html#a4877b02bfffc51db4d9ac702475c3765" title="Given a parameterized constraints matrix with m equalities, computes the compression...">compress_parms</a>(<a class="code" href="structmatrix.html">Matrix</a> * E, <span class="keywordtype">int</span> nb_parms);
<a name="l00133"></a>00133
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="preprocessor">#endif </span><span class="comment">/* __BM_COMPRESS_PARMS_H__ */</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated on Wed Nov 25 17:45:25 2009 for polylib by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>
|