📄 gf2n_8cpp-source.html
字号:
<a name="l00408"></a>00408 }<a name="l00409"></a>00409 <a name="l00410"></a>00410 <span class="keywordflow">if</span> (shiftWords)<a name="l00411"></a>00411 {<a name="l00412"></a>00412 <span class="keywordflow">for</span> (i=0; i<reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()-shiftWords; i++)<a name="l00413"></a>00413 reg[i] = reg[i+shiftWords];<a name="l00414"></a>00414 <span class="keywordflow">for</span> (; i<reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(); i++)<a name="l00415"></a>00415 reg[i] = 0;<a name="l00416"></a>00416 }<a name="l00417"></a>00417 <a name="l00418"></a>00418 <span class="keywordflow">return</span> *<span class="keyword">this</span>;<a name="l00419"></a>00419 }<a name="l00420"></a>00420 <a name="l00421"></a><a class="code" href="class_polynomial_mod2.html#a5058e89a823851c08fb11ab7f6449d0">00421</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#a5058e89a823851c08fb11ab7f6449d0">PolynomialMod2::operator<<</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n)<span class="keyword"> const</span><a name="l00422"></a>00422 <span class="keyword"></span>{<a name="l00423"></a>00423 <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result(*<span class="keyword">this</span>);<a name="l00424"></a>00424 <span class="keywordflow">return</span> result<<=n;<a name="l00425"></a>00425 }<a name="l00426"></a>00426 <a name="l00427"></a><a class="code" href="class_polynomial_mod2.html#a752ba55ff8ac4050c1391d1dacfbc81">00427</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#a752ba55ff8ac4050c1391d1dacfbc81">PolynomialMod2::operator>></a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n)<span class="keyword"> const</span><a name="l00428"></a>00428 <span class="keyword"></span>{<a name="l00429"></a>00429 <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result(*<span class="keyword">this</span>);<a name="l00430"></a>00430 <span class="keywordflow">return</span> result>>=n;<a name="l00431"></a>00431 }<a name="l00432"></a>00432 <a name="l00433"></a><a class="code" href="class_polynomial_mod2.html#c444b1db16f62393ba63ec16096664b2">00433</a> <span class="keywordtype">bool</span> <a class="code" href="class_polynomial_mod2.html#c444b1db16f62393ba63ec16096664b2">PolynomialMod2::operator!</a>()<span class="keyword"> const</span><a name="l00434"></a>00434 <span class="keyword"></span>{<a name="l00435"></a>00435 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i=0; i<reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(); i++)<a name="l00436"></a>00436 <span class="keywordflow">if</span> (reg[i]) <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00437"></a>00437 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00438"></a>00438 }<a name="l00439"></a>00439 <a name="l00440"></a><a class="code" href="class_polynomial_mod2.html#5a798b2c21aa6d39ec33ff8b490e5078">00440</a> <span class="keywordtype">bool</span> <a class="code" href="class_polynomial_mod2.html#5a798b2c21aa6d39ec33ff8b490e5078">PolynomialMod2::Equals</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &rhs)<span class="keyword"> const</span><a name="l00441"></a>00441 <span class="keyword"></span>{<a name="l00442"></a>00442 <span class="keywordtype">size_t</span> i, smallerSize = STDMIN(reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), rhs.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00443"></a>00443 <a name="l00444"></a>00444 <span class="keywordflow">for</span> (i=0; i<smallerSize; i++)<a name="l00445"></a>00445 <span class="keywordflow">if</span> (reg[i] != rhs.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>[i]) <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00446"></a>00446 <a name="l00447"></a>00447 for (i=smallerSize; i<reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(); i++)<a name="l00448"></a>00448 <span class="keywordflow">if</span> (reg[i] != 0) <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00449"></a>00449 <a name="l00450"></a>00450 <span class="keywordflow">for</span> (i=smallerSize; i<rhs.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(); i++)<a name="l00451"></a>00451 <span class="keywordflow">if</span> (rhs.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>[i] != 0) <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00452"></a>00452 <a name="l00453"></a>00453 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00454"></a>00454 }<a name="l00455"></a>00455 <a name="l00456"></a><a class="code" href="class_polynomial_mod2.html#e2b80f2028ca16b9a75a434e1fb24424">00456</a> std::ostream& <a class="code" href="class_polynomial_mod2.html#a5058e89a823851c08fb11ab7f6449d0">operator<<</a>(std::ostream& out, <span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &a)<a name="l00457"></a>00457 {<a name="l00458"></a>00458 <span class="comment">// Get relevant conversion specifications from ostream.</span><a name="l00459"></a>00459 <span class="keywordtype">long</span> f = out.flags() & std::ios::basefield; <span class="comment">// Get base digits.</span><a name="l00460"></a>00460 <span class="keywordtype">int</span> bits, block;<a name="l00461"></a>00461 <span class="keywordtype">char</span> suffix;<a name="l00462"></a>00462 <span class="keywordflow">switch</span>(f)<a name="l00463"></a>00463 {<a name="l00464"></a>00464 <span class="keywordflow">case</span> std::ios::oct :<a name="l00465"></a>00465 bits = 3;<a name="l00466"></a>00466 block = 4;<a name="l00467"></a>00467 suffix = <span class="charliteral">'o'</span>;<a name="l00468"></a>00468 <span class="keywordflow">break</span>;<a name="l00469"></a>00469 <span class="keywordflow">case</span> std::ios::hex :<a name="l00470"></a>00470 bits = 4;<a name="l00471"></a>00471 block = 2;<a name="l00472"></a>00472 suffix = <span class="charliteral">'h'</span>;<a name="l00473"></a>00473 <span class="keywordflow">break</span>;<a name="l00474"></a>00474 <span class="keywordflow">default</span> :<a name="l00475"></a>00475 bits = 1;<a name="l00476"></a>00476 block = 8;<a name="l00477"></a>00477 suffix = <span class="charliteral">'b'</span>;<a name="l00478"></a>00478 }<a name="l00479"></a>00479 <a name="l00480"></a>00480 <span class="keywordflow">if</span> (!a)<a name="l00481"></a>00481 <span class="keywordflow">return</span> out << <span class="charliteral">'0'</span> << suffix;<a name="l00482"></a>00482 <a name="l00483"></a>00483 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecBlock<char></a> s(a.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>()/bits+1);<a name="l00484"></a>00484 <span class="keywordtype">unsigned</span> i;<a name="l00485"></a>00485 <span class="keyword">const</span> <span class="keywordtype">char</span> vec[]=<span class="stringliteral">"0123456789ABCDEF"</span>;<a name="l00486"></a>00486 <a name="l00487"></a>00487 <span class="keywordflow">for</span> (i=0; i*bits < a.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>(); i++)<a name="l00488"></a>00488 {<a name="l00489"></a>00489 <span class="keywordtype">int</span> digit=0;<a name="l00490"></a>00490 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0; j<bits; j++)<a name="l00491"></a>00491 digit |= a[i*bits+j] << j;<a name="l00492"></a>00492 s[i]=vec[digit];<a name="l00493"></a>00493 }<a name="l00494"></a>00494 <a name="l00495"></a>00495 <span class="keywordflow">while</span> (i--)<a name="l00496"></a>00496 {<a name="l00497"></a>00497 out << s[i];<a name="l00498"></a>00498 <span class="keywordflow">if</span> (i && (i%block)==0)<a name="l00499"></a>00499 out << <span class="charliteral">','</span>;<a name="l00500"></a>00500 }<a name="l00501"></a>00501 <a name="l00502"></a>00502 <span class="keywordflow">return</span> out << suffix;<a name="l00503"></a>00503 }<a name="l00504"></a>00504 <a name="l00505"></a><a class="code" href="class_polynomial_mod2.html#3940dec2ab787489ad4ce67013fe4611">00505</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#3940dec2ab787489ad4ce67013fe4611" title="greatest common divisor">PolynomialMod2::Gcd</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &a, <span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &b)<a name="l00506"></a>00506 {<a name="l00507"></a>00507 <span class="keywordflow">return</span> <a class="code" href="class_euclidean_domain_of.html" title="EuclideanDomainOf.">EuclideanDomainOf<PolynomialMod2></a>().<a class="code" href="class_polynomial_mod2.html#3940dec2ab787489ad4ce67013fe4611" title="greatest common divisor">Gcd</a>(a, b);<a name="l00508"></a>00508 }<a name="l00509"></a>00509 <a name="l00510"></a><a class="code" href="class_polynomial_mod2.html#e8005d38604e28556889ea89412fe33f">00510</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#e8005d38604e28556889ea89412fe33f" title="calculate multiplicative inverse of *this mod n">Polynomi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -