Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > a24e1a39141f9b4ca49bd1e2e23a54ba > files > 802

polybori-doc-0.5rc.p9-6mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>PolyBoRi: pairs.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.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</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&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
<h1>pairs.h</h1><a href="pairs_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"> *  pairs.h</span>
<a name="l00003"></a>00003 <span class="comment"> *  PolyBoRi</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> *  Created by Michael Brickenstein on 19.04.06.</span>
<a name="l00006"></a>00006 <span class="comment"> *  Copyright 2006 The PolyBoRi Team. See LICENSE file.</span>
<a name="l00007"></a>00007 <span class="comment"> *</span>
<a name="l00008"></a>00008 <span class="comment"> */</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;functional&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "<a class="code" href="groebner__defs_8h.html">groebner_defs.h</a>"</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include "<a class="code" href="literal__factorization_8h.html">literal_factorization.h</a>"</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;boost/shared_ptr.hpp&gt;</span>
<a name="l00013"></a>00013 <span class="preprocessor">#include &lt;queue&gt;</span>
<a name="l00014"></a>00014 <span class="preprocessor">#include &lt;algorithm&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include &lt;utility&gt;</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;set&gt;</span>
<a name="l00017"></a>00017 
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef PB_PAIR_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define PB_PAIR_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021  <a class="code" href="groebner__defs_8h.html#379ca4efe65763012d75de1c107932b3">BEGIN_NAMESPACE_PBORIGB</a>
<a name="l00022"></a>00022 
<a name="l00023"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html">00023</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html">PolyEntry</a>{
<a name="l00024"></a>00024 <span class="keyword">public</span>:
<a name="l00025"></a>00025   <a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html">PolyEntry</a>(<span class="keyword">const</span> <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> &amp;p);
<a name="l00026"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#a71333e30036d00210f98f628315e146">00026</a>   <a class="code" href="classpolybori_1_1groebner_1_1LiteralFactorization.html">LiteralFactorization</a> literal_factors;
<a name="l00027"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#b8bbb8b86e4917a3c2caa32499dab0e1">00027</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> p;
<a name="l00028"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#be1e24cc89a384f728fef45043cdbd6d">00028</a>   <a class="code" href="classpolybori_1_1BooleMonomial.html" title="This class is just a wrapper for using variables from cudd&amp;#39;s decicion diagram...">Monomial</a> lm;
<a name="l00029"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#a66dbbc0057545046985124e552d4c90">00029</a>   <a class="code" href="namespacepolybori_1_1groebner.html#e25f70bddf01da02dc21f171c8062b51">wlen_type</a> weightedLength;
<a name="l00030"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#072028064c7cdfd181bc7c25c2984668">00030</a>   <a class="code" href="namespacepolybori_1_1groebner.html#550cd8764635a0bb270fd60f5777f16b">len_type</a> length;
<a name="l00031"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#b32b0299aa7cff67356c13b9aa214d5a">00031</a>   <a class="code" href="namespacepolybori_1_1groebner.html#517679ce2706e218038a1e99aac5551b">deg_type</a> deg;
<a name="l00032"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#c44bad7a87c7e1c43b4158fa34a182cc">00032</a>   <a class="code" href="namespacepolybori_1_1groebner.html#517679ce2706e218038a1e99aac5551b">deg_type</a> lmDeg;
<a name="l00033"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#e180a8aa2e10a3d4754bb1d6dc51adac">00033</a>   <a class="code" href="classpolybori_1_1BooleExponent.html" title="This class is just a wrapper for using variables for storing indices as interim data...">Exponent</a> lmExp;
<a name="l00034"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#b8ec3a20b08cc3bcdcbbbaadb7764bbf">00034</a>   <a class="code" href="classpolybori_1_1BooleMonomial.html" title="This class is just a wrapper for using variables from cudd&amp;#39;s decicion diagram...">Monomial</a> gcdOfTerms;
<a name="l00035"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#05a38f3fee0d129c1fdadfbffce61645">00035</a>   <a class="code" href="classpolybori_1_1BooleExponent.html" title="This class is just a wrapper for using variables for storing indices as interim data...">Exponent</a> usedVariables;
<a name="l00036"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#53c0d047eed1545a9d8a95c8aaf01436">00036</a>   <a class="code" href="classpolybori_1_1BooleExponent.html" title="This class is just a wrapper for using variables for storing indices as interim data...">Exponent</a> tailVariables;
<a name="l00037"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#76837c4e325c19e0629d1be097dacf5e">00037</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> tail;
<a name="l00039"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#0674e278cfea1564fab36485d1e9d398">00039</a>   std::set&lt;idx_type&gt; vPairCalculated; 
<a name="l00040"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#b2ebdc5747d3253e8768e317229c0756">00040</a>   <a class="code" href="namespacepolybori_1_1groebner.html#517679ce2706e218038a1e99aac5551b">deg_type</a> <a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#b2ebdc5747d3253e8768e317229c0756">ecart</a>()<span class="keyword"> const</span>{
<a name="l00041"></a>00041     <span class="keywordflow">return</span> deg-lmDeg;
<a name="l00042"></a>00042   }
<a name="l00043"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyEntry.html#f54dc4d9165b69f2591fa3615de4c54c">00043</a>   <span class="keywordtype">bool</span> minimal;
<a name="l00044"></a>00044   <span class="keywordtype">void</span> recomputeInformation();
<a name="l00045"></a>00045 };
<a name="l00046"></a>00046 <span class="comment">//using std::less;</span>
<a name="l00047"></a><a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">00047</a> <span class="keyword">typedef</span> std::vector&lt;PolyEntry&gt; <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>;
<a name="l00048"></a>00048 
<a name="l00049"></a><a class="code" href="classpolybori_1_1groebner_1_1PairData.html">00049</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PairData.html">PairData</a>{
<a name="l00050"></a>00050 <span class="keyword">public</span>:
<a name="l00051"></a>00051   <span class="comment">//gives back encoded</span>
<a name="l00052"></a>00052   <span class="keyword">virtual</span> ~<a class="code" href="classpolybori_1_1groebner_1_1PairData.html">PairData</a>()=0;
<a name="l00053"></a>00053   <span class="comment">//we don't demand that the pair is in a consistent state later</span>
<a name="l00054"></a>00054   <span class="keyword">virtual</span> <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> extract(<span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>&amp; v)=0;
<a name="l00055"></a>00055 };
<a name="l00056"></a><a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html">00056</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html">IJPairData</a>: <span class="keyword">public</span> <a class="code" href="classpolybori_1_1groebner_1_1PairData.html">PairData</a>{
<a name="l00057"></a>00057 <span class="keyword">public</span>:
<a name="l00058"></a><a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html#c0ee52d50793f81feb726f79862267e4">00058</a>   <span class="keywordtype">int</span> i;
<a name="l00059"></a><a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html#e92f43b2522f9612e36f7060b21c5314">00059</a>   <span class="keywordtype">int</span> j;
<a name="l00060"></a><a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html#3cc8376fced82cd286ce8334dc648be1">00060</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> <a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html#3cc8376fced82cd286ce8334dc648be1">extract</a>(<span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>&amp; v){
<a name="l00061"></a>00061     <span class="keywordflow">return</span> <a class="code" href="namespacepolybori.html#0f3c5fbaad0a5e31501bbb9260650d4b">spoly</a>(v[i].p,v[j].p);
<a name="l00062"></a>00062   }
<a name="l00063"></a><a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html#d2ba58aafbc9152514984edcbcb88302">00063</a>   <a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html#d2ba58aafbc9152514984edcbcb88302">IJPairData</a>(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j){
<a name="l00064"></a>00064     this-&gt;i=i;
<a name="l00065"></a>00065     this-&gt;j=j;
<a name="l00066"></a>00066   }
<a name="l00067"></a>00067 };
<a name="l00068"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html">00068</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html">PolyPairData</a>: <span class="keyword">public</span> <a class="code" href="classpolybori_1_1groebner_1_1PairData.html">PairData</a>{
<a name="l00069"></a>00069 <span class="keyword">public</span>:
<a name="l00070"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html#0fd68caa61bbc63527b778421fda7a51">00070</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> p;
<a name="l00071"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html#4be160d2966f86fa4fe113024a8599af">00071</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> <a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html#4be160d2966f86fa4fe113024a8599af">extract</a>(<span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>&amp; v){
<a name="l00072"></a>00072     <span class="keywordflow">return</span> p;
<a name="l00073"></a>00073   }
<a name="l00074"></a><a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html#05efc1c0d54174adfb7412e5a5bfd94c">00074</a>   <a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html#05efc1c0d54174adfb7412e5a5bfd94c">PolyPairData</a>(<span class="keyword">const</span> <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">BoolePolynomial</a>&amp; p){
<a name="l00075"></a>00075     this-&gt;p=p;
<a name="l00076"></a>00076   }
<a name="l00077"></a>00077 };
<a name="l00078"></a>00078 
<a name="l00079"></a><a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html">00079</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html">VariablePairData</a>: <span class="keyword">public</span> <a class="code" href="classpolybori_1_1groebner_1_1PairData.html">PairData</a>{
<a name="l00080"></a>00080 <span class="keyword">public</span>:
<a name="l00081"></a><a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html#f08b941b235262ccd4d84daa79ea04b1">00081</a>   <span class="keywordtype">int</span> i;
<a name="l00082"></a><a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html#3a936f85298be6b2a25e309d7ee51e70">00082</a>   <a class="code" href="namespacepolybori_1_1groebner.html#ef37a95e97afbd561cc4c5f84d660765">idx_type</a> v;
<a name="l00083"></a><a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html#1099d310f0f5ae817b19595a6a762f43">00083</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> <a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html#1099d310f0f5ae817b19595a6a762f43">extract</a>(<span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>&amp; gen){
<a name="l00084"></a>00084     <span class="keywordflow">return</span> <a class="code" href="namespacepolybori_1_1groebner.html#d7fe96ee02dc21d490f026af4b69c8e2">Monomial</a>(<a class="code" href="namespacepolybori_1_1groebner.html#f0fab3fcc3755337daa5f7428c436b6b">Variable</a>(v, gen[i].p.ring()))*gen[i].p;
<a name="l00085"></a>00085   }
<a name="l00086"></a><a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html#18480e703df3987aa497af993487265b">00086</a>   <a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html#18480e703df3987aa497af993487265b">VariablePairData</a>(<span class="keywordtype">int</span> i, <a class="code" href="namespacepolybori_1_1groebner.html#ef37a95e97afbd561cc4c5f84d660765">idx_type</a> v){
<a name="l00087"></a>00087     this-&gt;v=v;
<a name="l00088"></a>00088     this-&gt;i=i;
<a name="l00089"></a>00089   }
<a name="l00090"></a>00090 };
<a name="l00091"></a><a class="code" href="namespacepolybori_1_1groebner.html#382439ec10d4808eb64060304a412c68">00091</a> <span class="keyword">typedef</span> boost::shared_ptr&lt;PairData&gt; <a class="code" href="namespacepolybori_1_1groebner.html#382439ec10d4808eb64060304a412c68">pair_data_ptr</a>;
<a name="l00092"></a>00092 <span class="keyword">enum</span> {
<a name="l00093"></a><a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad81944365de1bc11a787c8b292a0668648c4">00093</a>   <a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad81944365de1bc11a787c8b292a0668648c4">VARIABLE_PAIR</a>,
<a name="l00094"></a><a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad819e87cd52369a02a1fe2a63e2dfbe82d48">00094</a>   <a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad819e87cd52369a02a1fe2a63e2dfbe82d48">IJ_PAIR</a>,
<a name="l00095"></a><a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad8195a7aaf5dbe26ed48e2b5d28598ae5ee0">00095</a>   <a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad8195a7aaf5dbe26ed48e2b5d28598ae5ee0">DELAYED_PAIR</a>
<a name="l00096"></a>00096 };
<a name="l00097"></a>00097 
<a name="l00098"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">00098</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">PairLS</a>{
<a name="l00099"></a>00099 <span class="keyword">private</span>:
<a name="l00100"></a>00100   <span class="keywordtype">int</span> type;
<a name="l00101"></a>00101 <span class="keyword">public</span>:
<a name="l00102"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#a0cf0a9109c9d2f6f4dcc9cdf10fe102">00102</a>   <span class="keywordtype">int</span> <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#a0cf0a9109c9d2f6f4dcc9cdf10fe102">getType</a>()<span class="keyword"> const</span>{
<a name="l00103"></a>00103     <span class="keywordflow">return</span> type;
<a name="l00104"></a>00104   }
<a name="l00105"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#879082c7afbe133aca40da827318ebbb">00105</a>   <a class="code" href="namespacepolybori_1_1groebner.html#e25f70bddf01da02dc21f171c8062b51">wlen_type</a> wlen;
<a name="l00106"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#f6f713cebc6ea40668d2cbedc6a0c249">00106</a>   <a class="code" href="namespacepolybori_1_1groebner.html#517679ce2706e218038a1e99aac5551b">deg_type</a> sugar;
<a name="l00107"></a>00107   <span class="comment">//three sorts of pairs</span>
<a name="l00108"></a>00108   <span class="comment">//x*poly, poly, i,j</span>
<a name="l00109"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#cd9cdc0734e5c41d92cee5929b6a6184">00109</a>   <a class="code" href="namespacepolybori_1_1groebner.html#382439ec10d4808eb64060304a412c68">pair_data_ptr</a> data;
<a name="l00110"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#9a752b42e4e29bccebbb35e29a4d943b">00110</a>   <a class="code" href="classpolybori_1_1BooleMonomial.html" title="This class is just a wrapper for using variables from cudd&amp;#39;s decicion diagram...">Monomial</a> lm; <span class="comment">//must not be the real lm, can be lm of syzygy or something else</span>
<a name="l00111"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#aba570e0ff5b68e0332a4cafc7db7bf9">00111</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#aba570e0ff5b68e0332a4cafc7db7bf9">extract</a>(<span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>&amp; v){
<a name="l00112"></a>00112     <span class="keywordflow">return</span> data-&gt;extract(v);
<a name="l00113"></a>00113   }
<a name="l00114"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#94dc68c6ec7c0b01395b35ef212f4ca1">00114</a>   <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">PairLS</a>(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j, <span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a> &amp;v):
<a name="l00115"></a>00115     data(new <a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html">IJPairData</a>(i,j)),
<a name="l00116"></a>00116     lm(v[i].lm*v[j].lm),
<a name="l00117"></a>00117     wlen(v[i].weightedLength+v[j].weightedLength-2)
<a name="l00118"></a>00118   {
<a name="l00119"></a>00119     type=<a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad819e87cd52369a02a1fe2a63e2dfbe82d48">IJ_PAIR</a>;
<a name="l00120"></a>00120     sugar=lm.deg()+std::max(v[i].ecart(),v[j].ecart());
<a name="l00121"></a>00121   }
<a name="l00122"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#7441539d78ff44e23b6d03511b3bc119">00122</a>   <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">PairLS</a>(<span class="keywordtype">int</span> i, <a class="code" href="namespacepolybori_1_1groebner.html#ef37a95e97afbd561cc4c5f84d660765">idx_type</a> v, <span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a> &amp;gen,<span class="keywordtype">int</span> type):
<a name="l00123"></a>00123     data(new <a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html">VariablePairData</a>(i,v)),
<a name="l00124"></a>00124     sugar(gen[i].deg+1),
<a name="l00125"></a>00125    <span class="comment">// sugar(gen[i].lmDeg+1),///@only do that because of bad criteria impl</span>
<a name="l00126"></a>00126     wlen(gen[i].weightedLength+gen[i].length),
<a name="l00127"></a>00127   lm(gen[i].lm)
<a name="l00128"></a>00128   
<a name="l00129"></a>00129   {
<a name="l00130"></a>00130     assert(type==<a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad81944365de1bc11a787c8b292a0668648c4">VARIABLE_PAIR</a>);
<a name="l00131"></a>00131     this-&gt;type=type;
<a name="l00132"></a>00132   }
<a name="l00133"></a>00133   
<a name="l00134"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#b1acc6df014db19d340c59907aec4e34">00134</a>   <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">PairLS</a>(<span class="keyword">const</span> <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a>&amp; delayed):
<a name="l00135"></a>00135     data(new <a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html">PolyPairData</a>(delayed)),
<a name="l00136"></a>00136     lm(delayed.lead()), 
<a name="l00137"></a>00137     sugar(delayed.deg()), wlen(delayed.eliminationLength()){
<a name="l00138"></a>00138       this-&gt;type=<a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad8195a7aaf5dbe26ed48e2b5d28598ae5ee0">DELAYED_PAIR</a>;
<a name="l00139"></a>00139   }
<a name="l00140"></a>00140   
<a name="l00141"></a>00141 };
<a name="l00142"></a>00142 
<a name="l00143"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html">00143</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a>{
<a name="l00144"></a>00144 <span class="keyword">private</span>:
<a name="l00145"></a>00145   <span class="keywordtype">int</span> type;
<a name="l00146"></a>00146 <span class="keyword">public</span>:
<a name="l00147"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#330d0fcd350e0dc4a128b38a8ed882f7">00147</a>   <span class="keywordtype">int</span> <a class="code" href="classpolybori_1_1groebner_1_1PairE.html#330d0fcd350e0dc4a128b38a8ed882f7">getType</a>()<span class="keyword"> const</span>{
<a name="l00148"></a>00148     <span class="keywordflow">return</span> type;
<a name="l00149"></a>00149   }
<a name="l00150"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#a9e3e75284b1432e48227837cc6951d4">00150</a>   <a class="code" href="namespacepolybori_1_1groebner.html#e25f70bddf01da02dc21f171c8062b51">wlen_type</a> wlen;
<a name="l00151"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#1eb55ccc19312da1abef1703d92d602e">00151</a>   <a class="code" href="namespacepolybori_1_1groebner.html#517679ce2706e218038a1e99aac5551b">deg_type</a> sugar;
<a name="l00152"></a>00152   <span class="comment">//three sorts of pairs</span>
<a name="l00153"></a>00153   <span class="comment">//x*poly, poly, i,j</span>
<a name="l00154"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#e88f65a8ced69173c281119bdb24c895">00154</a>   <a class="code" href="namespacepolybori_1_1groebner.html#382439ec10d4808eb64060304a412c68">pair_data_ptr</a> data;
<a name="l00155"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#f4b9e66cfb0dfd948a8b31ea6e5ccd6c">00155</a>   <a class="code" href="classpolybori_1_1BooleExponent.html" title="This class is just a wrapper for using variables for storing indices as interim data...">Exponent</a> lm; <span class="comment">//must not be the real lm, can be lm of syzygy or something else</span>
<a name="l00156"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#5d2a3bfe526a70864a23cca4424a711d">00156</a>   <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a> <a class="code" href="classpolybori_1_1groebner_1_1PairE.html#5d2a3bfe526a70864a23cca4424a711d">extract</a>(<span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a>&amp; v){
<a name="l00157"></a>00157     <span class="keywordflow">return</span> data-&gt;extract(v);
<a name="l00158"></a>00158   }
<a name="l00159"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#4f0de7699be24c34c82840d3dc9719cc">00159</a>   <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a>(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> j, <span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a> &amp;v):
<a name="l00160"></a>00160     data(new <a class="code" href="classpolybori_1_1groebner_1_1IJPairData.html">IJPairData</a>(i,j)),
<a name="l00161"></a>00161     lm(v[i].lmExp+v[j].lmExp),
<a name="l00162"></a>00162     wlen(v[i].weightedLength+v[j].weightedLength-2)
<a name="l00163"></a>00163   {
<a name="l00164"></a>00164     type=<a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad819e87cd52369a02a1fe2a63e2dfbe82d48">IJ_PAIR</a>;
<a name="l00165"></a>00165     sugar=lm.deg()+std::max(v[i].ecart(),v[j].ecart());
<a name="l00166"></a>00166   }
<a name="l00167"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#9c4044cb0ab654028a5de9c1b84c3541">00167</a>   <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a>(<span class="keywordtype">int</span> i, <a class="code" href="namespacepolybori_1_1groebner.html#ef37a95e97afbd561cc4c5f84d660765">idx_type</a> v, <span class="keyword">const</span> <a class="code" href="namespacepolybori_1_1groebner.html#a7fdf11fbb41081db9e8f24b850ab24b">PolyEntryVector</a> &amp;gen,<span class="keywordtype">int</span> type):
<a name="l00168"></a>00168     data(new <a class="code" href="classpolybori_1_1groebner_1_1VariablePairData.html">VariablePairData</a>(i,v)),
<a name="l00169"></a>00169     sugar(gen[i].deg+1),
<a name="l00170"></a>00170    <span class="comment">// sugar(gen[i].lmDeg+1),///@only do that because of bad criteria impl</span>
<a name="l00171"></a>00171     wlen(gen[i].weightedLength+gen[i].length),
<a name="l00172"></a>00172   lm(gen[i].lmExp)
<a name="l00173"></a>00173   
<a name="l00174"></a>00174   {
<a name="l00175"></a>00175     assert(type==<a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad81944365de1bc11a787c8b292a0668648c4">VARIABLE_PAIR</a>);
<a name="l00176"></a>00176     this-&gt;type=type;
<a name="l00177"></a>00177     <span class="keywordflow">if</span> (gen[i].lmExp==gen[i].usedVariables)
<a name="l00178"></a>00178         sugar=gen[i].deg;
<a name="l00179"></a>00179     <span class="keywordflow">if</span> (gen[i].tailVariables.deg()&lt;gen[i].deg)
<a name="l00180"></a>00180         sugar=gen[i].deg;
<a name="l00181"></a>00181   }
<a name="l00182"></a>00182   
<a name="l00183"></a><a class="code" href="classpolybori_1_1groebner_1_1PairE.html#552385e00f050fcbd06a68f22d794907">00183</a>   <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a>(<span class="keyword">const</span> <a class="code" href="classpolybori_1_1BoolePolynomial.html" title="This class wraps the underlying decicion diagram type and defines the necessary operations...">Polynomial</a>&amp; delayed):
<a name="l00184"></a>00184     data(new <a class="code" href="classpolybori_1_1groebner_1_1PolyPairData.html">PolyPairData</a>(delayed)),
<a name="l00185"></a>00185     <span class="comment">//lm(delayed.lead()),</span>
<a name="l00186"></a>00186     lm(delayed.leadExp()),
<a name="l00187"></a>00187     sugar(delayed.deg()), wlen(delayed.eliminationLength()){
<a name="l00188"></a>00188       this-&gt;type=<a class="code" href="namespacepolybori_1_1groebner.html#aa18c1fe4f702b922dbf6a02744ad8195a7aaf5dbe26ed48e2b5d28598ae5ee0">DELAYED_PAIR</a>;
<a name="l00189"></a>00189   }
<a name="l00190"></a>00190   
<a name="l00191"></a>00191 };
<a name="l00192"></a>00192 
<a name="l00193"></a>00193 
<a name="l00194"></a>00194 
<a name="l00195"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLSCompare.html">00195</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PairLSCompare.html">PairLSCompare</a>{
<a name="l00196"></a>00196 <span class="keyword">public</span>:
<a name="l00198"></a><a class="code" href="classpolybori_1_1groebner_1_1PairLSCompare.html#76d72f7d5cc9bf1d27cb9aaa690e6475">00198</a>   <span class="keywordtype">bool</span> operator() (<span class="keyword">const</span> <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">PairLS</a>&amp; l, <span class="keyword">const</span> <a class="code" href="classpolybori_1_1groebner_1_1PairLS.html">PairLS</a>&amp; r){
<a name="l00199"></a>00199     <span class="keywordflow">if</span> (l.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#f6f713cebc6ea40668d2cbedc6a0c249">sugar</a>!=r.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#f6f713cebc6ea40668d2cbedc6a0c249">sugar</a>) <span class="keywordflow">return</span> l.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#f6f713cebc6ea40668d2cbedc6a0c249">sugar</a>&gt;r.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#f6f713cebc6ea40668d2cbedc6a0c249">sugar</a>; <span class="comment">//greater sugar, less importance</span>
<a name="l00200"></a>00200     <span class="keywordflow">if</span> (l.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#879082c7afbe133aca40da827318ebbb">wlen</a>!=r.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#879082c7afbe133aca40da827318ebbb">wlen</a>) <span class="keywordflow">return</span> l.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#879082c7afbe133aca40da827318ebbb">wlen</a>&gt;r.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#879082c7afbe133aca40da827318ebbb">wlen</a>;
<a name="l00201"></a>00201     <span class="keywordflow">if</span> (l.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#9a752b42e4e29bccebbb35e29a4d943b">lm</a>!=r.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#9a752b42e4e29bccebbb35e29a4d943b">lm</a>) <span class="keywordflow">return</span> l.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#9a752b42e4e29bccebbb35e29a4d943b">lm</a>&gt;r.<a class="code" href="classpolybori_1_1groebner_1_1PairLS.html#9a752b42e4e29bccebbb35e29a4d943b">lm</a>;
<a name="l00202"></a>00202     
<a name="l00204"></a>00204     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00205"></a>00205   }
<a name="l00206"></a>00206 };
<a name="l00207"></a>00207 
<a name="l00208"></a><a class="code" href="classpolybori_1_1groebner_1_1PairECompare.html">00208</a> <span class="keyword">class </span><a class="code" href="classpolybori_1_1groebner_1_1PairECompare.html">PairECompare</a>{
<a name="l00209"></a>00209 <span class="keyword">public</span>:
<a name="l00211"></a><a class="code" href="classpolybori_1_1groebner_1_1PairECompare.html#7f00113cb4f2b6c82350a747aac6aaef">00211</a>   <span class="keywordtype">bool</span> operator() (<span class="keyword">const</span> <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a>&amp; l, <span class="keyword">const</span> <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a>&amp; r){
<a name="l00212"></a>00212     <span class="keywordflow">if</span> (l.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#1eb55ccc19312da1abef1703d92d602e">sugar</a>!=r.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#1eb55ccc19312da1abef1703d92d602e">sugar</a>) <span class="keywordflow">return</span> l.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#1eb55ccc19312da1abef1703d92d602e">sugar</a>&gt;r.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#1eb55ccc19312da1abef1703d92d602e">sugar</a>; <span class="comment">//greater sugar, less importance</span>
<a name="l00213"></a>00213     <span class="keywordflow">if</span> (l.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#a9e3e75284b1432e48227837cc6951d4">wlen</a>!=r.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#a9e3e75284b1432e48227837cc6951d4">wlen</a>) <span class="keywordflow">return</span> l.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#a9e3e75284b1432e48227837cc6951d4">wlen</a>&gt;r.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#a9e3e75284b1432e48227837cc6951d4">wlen</a>;
<a name="l00214"></a>00214     <span class="keywordflow">if</span> (l.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#f4b9e66cfb0dfd948a8b31ea6e5ccd6c">lm</a>!=r.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#f4b9e66cfb0dfd948a8b31ea6e5ccd6c">lm</a>) <span class="keywordflow">return</span> l.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#f4b9e66cfb0dfd948a8b31ea6e5ccd6c">lm</a>&gt;r.<a class="code" href="classpolybori_1_1groebner_1_1PairE.html#f4b9e66cfb0dfd948a8b31ea6e5ccd6c">lm</a>;
<a name="l00215"></a>00215     
<a name="l00217"></a>00217     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00218"></a>00218   }
<a name="l00219"></a>00219 };
<a name="l00220"></a><a class="code" href="namespacepolybori_1_1groebner.html#9d4372a1f2ccda20e749e8034ab060d6">00220</a> <span class="keyword">typedef</span> <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">PairE</a> <a class="code" href="classpolybori_1_1groebner_1_1PairE.html">Pair</a>;
<a name="l00221"></a>00221 
<a name="l00222"></a>00222  <a class="code" href="groebner__defs_8h.html#81b45485049b7eaa5057379309e0210e">END_NAMESPACE_PBORIGB</a>
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Wed Sep 9 14:30:59 2009 for PolyBoRi by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>