<!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"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.14"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Crypto++: AbstractGroup< T > Class Template Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">Crypto++  <span id="projectnumber">7.0</span> </div> <div id="projectbrief">Free C++ class library of cryptographic schemes</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#pub-types">Public Types</a> | <a href="#pub-methods">Public Member Functions</a> | <a href="class_abstract_group-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">AbstractGroup< T > Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div> </div><!--header--> <div class="contents"> <p>Abstract group. <a href="class_abstract_group.html#details">More...</a></p> <div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"> <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for AbstractGroup< T >:</div> <div id="dynsection-0-summary" class="dynsummary" style="display:block;"> </div> <div id="dynsection-0-content" class="dyncontent" style="display:none;"> <div class="center"> <img src="class_abstract_group.png" usemap="#AbstractGroup_3C_20T_20_3E_map" alt=""/> <map id="AbstractGroup_3C_20T_20_3E_map" name="AbstractGroup_3C_20T_20_3E_map"> <area href="class_abstract_ring.html" title="Abstract ring. " alt="AbstractRing< T >" shape="rect" coords="0,56,188,80"/> <area href="class_abstract_ring.html" alt="AbstractRing< T::Element >" shape="rect" coords="198,56,386,80"/> <area href="class_abstract_euclidean_domain.html" title="Abstract Euclidean domain. " alt="AbstractEuclideanDomain< T >" shape="rect" coords="0,112,188,136"/> <area href="class_quotient_ring.html" title="Quotient ring. " alt="QuotientRing< T >" shape="rect" coords="198,112,386,136"/> <area href="class_euclidean_domain_of.html" title="Euclidean domain. " alt="EuclideanDomainOf< T >" shape="rect" coords="0,168,188,192"/> </map> </div></div> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a> Public Types</h2></td></tr> <tr class="memitem:a4a2b3308fb5c13f70fcc5746be52ba7b"><td class="memItemLeft" align="right" valign="top"><a id="a4a2b3308fb5c13f70fcc5746be52ba7b"></a> typedef T </td><td class="memItemRight" valign="bottom"><b>Element</b></td></tr> <tr class="separator:a4a2b3308fb5c13f70fcc5746be52ba7b"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:a0d72cb663566b7c056f846a561547bec"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a0d72cb663566b7c056f846a561547bec">Equal</a> (const Element &a, const Element &b) const =0</td></tr> <tr class="memdesc:a0d72cb663566b7c056f846a561547bec"><td class="mdescLeft"> </td><td class="mdescRight">Compare two elements for equality. <a href="#a0d72cb663566b7c056f846a561547bec">More...</a><br /></td></tr> <tr class="separator:a0d72cb663566b7c056f846a561547bec"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a929ba4e6a7d7d80344946efad0456d5b"><td class="memItemLeft" align="right" valign="top">virtual const Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a929ba4e6a7d7d80344946efad0456d5b">Identity</a> () const =0</td></tr> <tr class="memdesc:a929ba4e6a7d7d80344946efad0456d5b"><td class="mdescLeft"> </td><td class="mdescRight">Provides the Identity element. <a href="#a929ba4e6a7d7d80344946efad0456d5b">More...</a><br /></td></tr> <tr class="separator:a929ba4e6a7d7d80344946efad0456d5b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa813430d9e4244de24c487d090eb5797"><td class="memItemLeft" align="right" valign="top">virtual const Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#aa813430d9e4244de24c487d090eb5797">Add</a> (const Element &a, const Element &b) const =0</td></tr> <tr class="memdesc:aa813430d9e4244de24c487d090eb5797"><td class="mdescLeft"> </td><td class="mdescRight">Adds elements in the group. <a href="#aa813430d9e4244de24c487d090eb5797">More...</a><br /></td></tr> <tr class="separator:aa813430d9e4244de24c487d090eb5797"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab22563bc0dcb544399d7e22b3589e165"><td class="memItemLeft" align="right" valign="top">virtual const Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#ab22563bc0dcb544399d7e22b3589e165">Inverse</a> (const Element &a) const =0</td></tr> <tr class="memdesc:ab22563bc0dcb544399d7e22b3589e165"><td class="mdescLeft"> </td><td class="mdescRight">Inverts the element in the group. <a href="#ab22563bc0dcb544399d7e22b3589e165">More...</a><br /></td></tr> <tr class="separator:ab22563bc0dcb544399d7e22b3589e165"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a257836994abefe25b80293f4c6b10f60"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a257836994abefe25b80293f4c6b10f60">InversionIsFast</a> () const</td></tr> <tr class="memdesc:a257836994abefe25b80293f4c6b10f60"><td class="mdescLeft"> </td><td class="mdescRight">Determine if inversion is fast. <a href="#a257836994abefe25b80293f4c6b10f60">More...</a><br /></td></tr> <tr class="separator:a257836994abefe25b80293f4c6b10f60"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afaceaf9c9c24606efc38d30fd8aff5ee"><td class="memItemLeft" align="right" valign="top">virtual const Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#afaceaf9c9c24606efc38d30fd8aff5ee">Double</a> (const Element &a) const</td></tr> <tr class="memdesc:afaceaf9c9c24606efc38d30fd8aff5ee"><td class="mdescLeft"> </td><td class="mdescRight">Doubles an element in the group. <a href="#afaceaf9c9c24606efc38d30fd8aff5ee">More...</a><br /></td></tr> <tr class="separator:afaceaf9c9c24606efc38d30fd8aff5ee"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa19e1bef00198fb30eb01df3f7076717"><td class="memItemLeft" align="right" valign="top">virtual const Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#aa19e1bef00198fb30eb01df3f7076717">Subtract</a> (const Element &a, const Element &b) const</td></tr> <tr class="memdesc:aa19e1bef00198fb30eb01df3f7076717"><td class="mdescLeft"> </td><td class="mdescRight">Subtracts elements in the group. <a href="#aa19e1bef00198fb30eb01df3f7076717">More...</a><br /></td></tr> <tr class="separator:aa19e1bef00198fb30eb01df3f7076717"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab03cc0a23f23c6aa1c003e11f9abb8c5"><td class="memItemLeft" align="right" valign="top">virtual Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#ab03cc0a23f23c6aa1c003e11f9abb8c5">Accumulate</a> (Element &a, const Element &b) const</td></tr> <tr class="memdesc:ab03cc0a23f23c6aa1c003e11f9abb8c5"><td class="mdescLeft"> </td><td class="mdescRight">TODO. <a href="#ab03cc0a23f23c6aa1c003e11f9abb8c5">More...</a><br /></td></tr> <tr class="separator:ab03cc0a23f23c6aa1c003e11f9abb8c5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a40f7de55eddc193e07a7c3b5acad781a"><td class="memItemLeft" align="right" valign="top">virtual Element & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a40f7de55eddc193e07a7c3b5acad781a">Reduce</a> (Element &a, const Element &b) const</td></tr> <tr class="memdesc:a40f7de55eddc193e07a7c3b5acad781a"><td class="mdescLeft"> </td><td class="mdescRight">Reduces an element in the congruence class. <a href="#a40f7de55eddc193e07a7c3b5acad781a">More...</a><br /></td></tr> <tr class="separator:a40f7de55eddc193e07a7c3b5acad781a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac01536b91c4fa3d0e0f929917143595b"><td class="memItemLeft" align="right" valign="top">virtual Element </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#ac01536b91c4fa3d0e0f929917143595b">ScalarMultiply</a> (const Element &a, const <a class="el" href="class_integer.html">Integer</a> &e) const</td></tr> <tr class="memdesc:ac01536b91c4fa3d0e0f929917143595b"><td class="mdescLeft"> </td><td class="mdescRight">Performs a scalar multiplication. <a href="#ac01536b91c4fa3d0e0f929917143595b">More...</a><br /></td></tr> <tr class="separator:ac01536b91c4fa3d0e0f929917143595b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a89bd24f1a83e62ac8cc5ad014cb5883e"><td class="memItemLeft" align="right" valign="top">virtual Element </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a89bd24f1a83e62ac8cc5ad014cb5883e">CascadeScalarMultiply</a> (const Element &x, const <a class="el" href="class_integer.html">Integer</a> &e1, const Element &y, const <a class="el" href="class_integer.html">Integer</a> &e2) const</td></tr> <tr class="memdesc:a89bd24f1a83e62ac8cc5ad014cb5883e"><td class="mdescLeft"> </td><td class="mdescRight">TODO. <a href="#a89bd24f1a83e62ac8cc5ad014cb5883e">More...</a><br /></td></tr> <tr class="separator:a89bd24f1a83e62ac8cc5ad014cb5883e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9c73ab688612e76786f43e311376eb8d"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a9c73ab688612e76786f43e311376eb8d">SimultaneousMultiply</a> (Element *results, const Element &base, const <a class="el" href="class_integer.html">Integer</a> *exponents, unsigned int exponentsCount) const</td></tr> <tr class="memdesc:a9c73ab688612e76786f43e311376eb8d"><td class="mdescLeft"> </td><td class="mdescRight">Multiplies a base to multiple exponents in a group. <a href="#a9c73ab688612e76786f43e311376eb8d">More...</a><br /></td></tr> <tr class="separator:a9c73ab688612e76786f43e311376eb8d"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><h3>template<class T><br /> class AbstractGroup< T ></h3> <p>Abstract group. </p> <dl class="tparams"><dt>Template Parameters</dt><dd> <table class="tparams"> <tr><td class="paramname">T</td><td>element class or type</td></tr> </table> </dd> </dl> <p><code>const Element&</code> returned by member functions are references to internal data members. Since each object may have only one such data member for holding results, the following code will produce incorrect results: </p><pre> abcd = group.Add(group.Add(a,b), group.Add(c,d));</pre><p> But this should be fine: </p><pre> abcd = group.Add(a, group.Add(b, group.Add(c,d));</pre> <p class="definition">Definition at line <a class="el" href="algebra_8h_source.html#l00026">26</a> of file <a class="el" href="algebra_8h_source.html">algebra.h</a>.</p> </div><h2 class="groupheader">Member Function Documentation</h2> <a id="a0d72cb663566b7c056f846a561547bec"></a> <h2 class="memtitle"><span class="permalink"><a href="#a0d72cb663566b7c056f846a561547bec">◆ </a></span>Equal()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">virtual bool <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Equal </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">pure virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Compare two elements for equality. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> <tr><td class="paramname">b</td><td>second element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>true if the elements are equal, false otherwise</dd></dl> <p><a class="el" href="class_abstract_group.html#a0d72cb663566b7c056f846a561547bec" title="Compare two elements for equality. ">Equal()</a> tests the elements for equality using <code>a==b</code> </p> <p>Implemented in <a class="el" href="class_quotient_ring.html#a95a675aaca290e8cc05a56361c7d56f3">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#a95a675aaca290e8cc05a56361c7d56f3">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#a9874b8b2aaee21b9c4f75a9372151489">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a59813252a0e0a490ea5a0420af5e9cc2">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a59813252a0e0a490ea5a0420af5e9cc2">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_g_f2_n_p.html#a6e1d77aefacee1a620dee8f1299cee9b">GF2NP</a>, <a class="el" href="class_modular_arithmetic.html#a89c5edea6e87341761c35ab03a46bcc0">ModularArithmetic</a>, <a class="el" href="class_g_f_p2___o_n_b.html#aab4d8f8eec60122c1f3e3ba2c9ad2673">GFP2_ONB< F ></a>, <a class="el" href="class_e_c_p.html#a60fbeaa2294171f914f1e7c6ecda776e">ECP</a>, and <a class="el" href="class_e_c2_n.html#a7488f2612e1fea76b6e74a2be66e9ec3">EC2N</a>.</p> </div> </div> <a id="a929ba4e6a7d7d80344946efad0456d5b"></a> <h2 class="memtitle"><span class="permalink"><a href="#a929ba4e6a7d7d80344946efad0456d5b">◆ </a></span>Identity()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">virtual const Element& <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Identity </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">pure virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Provides the Identity element. </p> <dl class="section return"><dt>Returns</dt><dd>the Identity element </dd></dl> <p>Implemented in <a class="el" href="class_quotient_ring.html#a80815f5757c80106ae7dc2db2799b835">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#a80815f5757c80106ae7dc2db2799b835">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#a458ef6812fccb23fa063d9a15d27a67b">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a6d35c27f3e48c24c4cb6f93275f5ed01">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a6d35c27f3e48c24c4cb6f93275f5ed01">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#abd2425e1caf5af1a290b424cadb1517c">ModularArithmetic</a>, <a class="el" href="class_g_f_p2___o_n_b.html#a386495ffc3d413f461a9001fe6f30642">GFP2_ONB< F ></a>, <a class="el" href="class_e_c_p.html#a8a6ea0e6a710a7ff118ce5c9fa48c55e">ECP</a>, and <a class="el" href="class_e_c2_n.html#a57b7b1ad3cc32c727d1d132ca2f2210f">EC2N</a>.</p> </div> </div> <a id="aa813430d9e4244de24c487d090eb5797"></a> <h2 class="memtitle"><span class="permalink"><a href="#aa813430d9e4244de24c487d090eb5797">◆ </a></span>Add()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">virtual const Element& <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Add </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">pure virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Adds elements in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> <tr><td class="paramname">b</td><td>second element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the sum of <code>a</code> and <code>b</code> </dd></dl> <p>Implemented in <a class="el" href="class_quotient_ring.html#ae373c31fe91c497e9eabd2c33b70ed98">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#ae373c31fe91c497e9eabd2c33b70ed98">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#a3ff8fa662fa5f4f6b850e9dc16958822">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a7112d4646dfb57a7437f0b04e605e653">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a7112d4646dfb57a7437f0b04e605e653">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#af840f9421d210579fb9b526a90e857fe">ModularArithmetic</a>, <a class="el" href="class_g_f_p2___o_n_b.html#abd707cb221dd44914e8cde2839ad90c7">GFP2_ONB< F ></a>, <a class="el" href="class_e_c_p.html#ae02a3946666ba03470a346270d6f8820">ECP</a>, and <a class="el" href="class_e_c2_n.html#a84c0a46b7540a13a0c1ba0d78c50265f">EC2N</a>.</p> </div> </div> <a id="ab22563bc0dcb544399d7e22b3589e165"></a> <h2 class="memtitle"><span class="permalink"><a href="#ab22563bc0dcb544399d7e22b3589e165">◆ </a></span>Inverse()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">virtual const Element& <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Inverse </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>a</em></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">pure virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Inverts the element in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the inverse of the element </dd></dl> <p>Implemented in <a class="el" href="class_quotient_ring.html#aa94188206e0504c0a5afae6a7af8e827">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#aa94188206e0504c0a5afae6a7af8e827">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#aa807d70d825213c7296b639dac60123b">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a277f3f0795e9a050c81d47a499971052">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a277f3f0795e9a050c81d47a499971052">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#a355c52bd9e20a22037f17d0461b4575a">ModularArithmetic</a>, <a class="el" href="class_g_f_p2___o_n_b.html#ac9fa7ce33239b3d7f88c9cac9c2d74d3">GFP2_ONB< F ></a>, <a class="el" href="class_e_c_p.html#a235a3931b7f4611fa7a1a3d5a95036ce">ECP</a>, and <a class="el" href="class_e_c2_n.html#a0d0d8011f94bbc74800afd638d1986b1">EC2N</a>.</p> </div> </div> <a id="a257836994abefe25b80293f4c6b10f60"></a> <h2 class="memtitle"><span class="permalink"><a href="#a257836994abefe25b80293f4c6b10f60">◆ </a></span>InversionIsFast()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">virtual bool <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::InversionIsFast </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Determine if inversion is fast. </p> <dl class="section return"><dt>Returns</dt><dd>true if inversion is fast, false otherwise </dd></dl> <p>Reimplemented in <a class="el" href="class_e_c_p.html#a0031a4a3a18999fda3942713da554697">ECP</a>, and <a class="el" href="class_e_c2_n.html#a882b847bebd50e11af7c9240c349c380">EC2N</a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8h_source.html#l00057">57</a> of file <a class="el" href="algebra_8h_source.html">algebra.h</a>.</p> </div> </div> <a id="afaceaf9c9c24606efc38d30fd8aff5ee"></a> <h2 class="memtitle"><span class="permalink"><a href="#afaceaf9c9c24606efc38d30fd8aff5ee">◆ </a></span>Double()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const T & <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Double </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>a</em></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Doubles an element in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>the element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the element doubled </dd></dl> <p>Reimplemented in <a class="el" href="class_quotient_ring.html#a2eb5b91a5e873fb022a3bb479bb81801">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#a2eb5b91a5e873fb022a3bb479bb81801">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#a8671a526a886b19474e5f47889bc404f">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#af2ce6444adcefb7009b2e253db19af25">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#af2ce6444adcefb7009b2e253db19af25">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#a042dc36ae961ede73694e4c5dcf7cbbc">ModularArithmetic</a>, <a class="el" href="class_g_f_p2___o_n_b.html#a39cef4f74a7bd5588a7293b1d364334e">GFP2_ONB< F ></a>, <a class="el" href="class_e_c_p.html#a9528bc2c3075fff6c03e257846958497">ECP</a>, and <a class="el" href="class_e_c2_n.html#a88f8a86a94bdf8c1c11104becdd0af82">EC2N</a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00015">15</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <a id="aa19e1bef00198fb30eb01df3f7076717"></a> <h2 class="memtitle"><span class="permalink"><a href="#aa19e1bef00198fb30eb01df3f7076717">◆ </a></span>Subtract()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const T & <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Subtract </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Subtracts elements in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> <tr><td class="paramname">b</td><td>second element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the difference of <code>a</code> and <code>b</code>. The element <code>a</code> must provide a Subtract member function. </dd></dl> <p>Reimplemented in <a class="el" href="class_quotient_ring.html#a08834bbb0829ab02b7f33fd1fd6ef65a">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#a08834bbb0829ab02b7f33fd1fd6ef65a">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#acf0bf71815e9b6d1a9caac9654a5c227">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#ac44bd3c9af42467bfdd822ef7046bc26">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#ac44bd3c9af42467bfdd822ef7046bc26">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#ae4705633e8ca4308894f9a26c6f2881c">ModularArithmetic</a>, and <a class="el" href="class_g_f_p2___o_n_b.html#aedbcc151eca01f823b6d8c34f792fad9">GFP2_ONB< F ></a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00020">20</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <a id="ab03cc0a23f23c6aa1c003e11f9abb8c5"></a> <h2 class="memtitle"><span class="permalink"><a href="#ab03cc0a23f23c6aa1c003e11f9abb8c5">◆ </a></span>Accumulate()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">T & <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Accumulate </td> <td>(</td> <td class="paramtype">Element & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>TODO. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> <tr><td class="paramname">b</td><td>second element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TODO </dd></dl> <p>Reimplemented in <a class="el" href="class_quotient_ring.html#a6bc3a34f0a3f04741005d6d5722b480b">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#a6bc3a34f0a3f04741005d6d5722b480b">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#a6f6d9905144ff7e38b0f68401207d652">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a59f13cb1ceab7359f62dcaa2ca6ad9a5">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#a59f13cb1ceab7359f62dcaa2ca6ad9a5">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#acf6e8cc8fcabe8eed4c7ebc4361d28fc">ModularArithmetic</a>, and <a class="el" href="class_g_f_p2___o_n_b.html#a9ea72a20954c87db4467e14fdaa67037">GFP2_ONB< F ></a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00027">27</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <a id="a40f7de55eddc193e07a7c3b5acad781a"></a> <h2 class="memtitle"><span class="permalink"><a href="#a40f7de55eddc193e07a7c3b5acad781a">◆ </a></span>Reduce()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">T & <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::Reduce </td> <td>(</td> <td class="paramtype">Element & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Reduces an element in the congruence class. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>element to reduce </td></tr> <tr><td class="paramname">b</td><td>the congruence class </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the reduced element </dd></dl> <p>Reimplemented in <a class="el" href="class_quotient_ring.html#aaa33bb2ffbdf18997c825d5fdfb68ed4">QuotientRing< T ></a>, <a class="el" href="class_quotient_ring.html#aaa33bb2ffbdf18997c825d5fdfb68ed4">QuotientRing< EuclideanDomainOf< PolynomialMod2 > ></a>, <a class="el" href="class_ring_of_polynomials_over.html#a3b71ffe9c999063225fa9baae5bbccda">RingOfPolynomialsOver< T ></a>, <a class="el" href="class_euclidean_domain_of.html#ab7fa9e94f9583efdb69df0f8c6401e1e">EuclideanDomainOf< T ></a>, <a class="el" href="class_euclidean_domain_of.html#ab7fa9e94f9583efdb69df0f8c6401e1e">EuclideanDomainOf< PolynomialMod2 ></a>, <a class="el" href="class_modular_arithmetic.html#a131ab327c94c1967a936c144769d098c">ModularArithmetic</a>, and <a class="el" href="class_g_f_p2___o_n_b.html#ac6d39d886f9ddc047fcc4c5adcc23db9">GFP2_ONB< F ></a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00032">32</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <a id="ac01536b91c4fa3d0e0f929917143595b"></a> <h2 class="memtitle"><span class="permalink"><a href="#ac01536b91c4fa3d0e0f929917143595b">◆ </a></span>ScalarMultiply()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">T <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::ScalarMultiply </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>e</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Performs a scalar multiplication. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>multiplicand </td></tr> <tr><td class="paramname">e</td><td>multiplier </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the product </dd></dl> <p>Reimplemented in <a class="el" href="class_e_c_p.html#a3a2b80bdd5e9c39229962c8b87e7023a">ECP</a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00090">90</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <a id="a89bd24f1a83e62ac8cc5ad014cb5883e"></a> <h2 class="memtitle"><span class="permalink"><a href="#a89bd24f1a83e62ac8cc5ad014cb5883e">◆ </a></span>CascadeScalarMultiply()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">T <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::CascadeScalarMultiply </td> <td>(</td> <td class="paramtype">const Element & </td> <td class="paramname"><em>x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>e1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>e2</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>TODO. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">x</td><td>first multiplicand </td></tr> <tr><td class="paramname">e1</td><td>the first multiplier </td></tr> <tr><td class="paramname">y</td><td>second multiplicand </td></tr> <tr><td class="paramname">e2</td><td>the second multiplier </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TODO </dd></dl> <p>Reimplemented in <a class="el" href="class_e_c_p.html#a905ca5e76a69b26efba70c46be3576fb">ECP</a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00097">97</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <a id="a9c73ab688612e76786f43e311376eb8d"></a> <h2 class="memtitle"><span class="permalink"><a href="#a9c73ab688612e76786f43e311376eb8d">◆ </a></span>SimultaneousMultiply()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class T > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_abstract_group.html">AbstractGroup</a>< T >::SimultaneousMultiply </td> <td>(</td> <td class="paramtype">Element * </td> <td class="paramname"><em>results</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const Element & </td> <td class="paramname"><em>base</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> * </td> <td class="paramname"><em>exponents</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"><em>exponentsCount</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Multiplies a base to multiple exponents in a group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">results</td><td>an array of Elements </td></tr> <tr><td class="paramname">base</td><td>the base to raise to the exponents </td></tr> <tr><td class="paramname">exponents</td><td>an array of exponents </td></tr> <tr><td class="paramname">exponentsCount</td><td>the number of exponents in the array</td></tr> </table> </dd> </dl> <p><a class="el" href="class_abstract_group.html#a9c73ab688612e76786f43e311376eb8d" title="Multiplies a base to multiple exponents in a group. ">SimultaneousMultiply()</a> multiplies the base to each exponent in the exponents array and stores the result at the respective position in the results array.</p> <p><a class="el" href="class_abstract_group.html#a9c73ab688612e76786f43e311376eb8d" title="Multiplies a base to multiple exponents in a group. ">SimultaneousMultiply()</a> must be implemented in a derived class. </p><dl class="section pre"><dt>Precondition</dt><dd><code><a class="el" href="misc_8h.html#a2d7e4464ea73d6393ebe78f952253426" title="Counts elements in an array. ">COUNTOF(results)</a> == exponentsCount</code> </dd> <dd> <code><a class="el" href="misc_8h.html#a2d7e4464ea73d6393ebe78f952253426" title="Counts elements in an array. ">COUNTOF(exponents)</a> == exponentsCount</code> </dd></dl> <p>Reimplemented in <a class="el" href="class_e_c_p.html#af6f7bcfb3ff89c7d6ba1265640f95d03">ECP</a>.</p> <p class="definition">Definition at line <a class="el" href="algebra_8cpp_source.html#l00256">256</a> of file <a class="el" href="algebra_8cpp_source.html">algebra.cpp</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following files:<ul> <li><a class="el" href="algebra_8h_source.html">algebra.h</a></li> <li><a class="el" href="algebra_8cpp_source.html">algebra.cpp</a></li> </ul> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Sun Sep 16 2018 07:58:11 for Crypto++ by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.14 </small></address> </body> </html>