Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > ff8e7344076b5fbaa54d805766a057bd > files > 42

libscs-devel-1.4.1-4.fc15.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>wrapper_scs.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.15 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
<hr><h1>wrapper_scs.h</h1><div class="fragment"><pre>00001 <font class="keyword">extern</font> <font class="stringliteral">"C"</font>
00002 {
00003 <font class="preprocessor">#include "<a class="code" href="scs_8h.html">scs.h</a>"</font>
00004 }
00005 <font class="preprocessor">#include &lt;stdlib.h&gt;</font>
00006 <font class="preprocessor">#include &lt;stdio.h&gt;</font>
00007 <font class="preprocessor">#include &lt;math.h&gt;</font>
00008 <font class="preprocessor">#include &lt;iostream.h&gt;</font>
00009 
00010 <font class="preprocessor">#ifndef SCS_WRAPPER_CPP</font>
00011 <font class="preprocessor"></font><font class="preprocessor">#define SCS_WRAPPER_CPP 1</font>
00012 <font class="preprocessor"></font>
00013 <font class="keyword">extern</font> <font class="stringliteral">"C"</font> <font class="keywordtype">int</font> scs_cmp_mant(<a class="code" href="structscs.html">scs_ptr</a> , <a class="code" href="structscs.html">scs_ptr</a>);
00014 
00015 <font class="keyword">class </font>Scs{
00016  <font class="keyword">private</font>:
00017     <a class="code" href="structscs.html">scs</a> scsnb; 
00018 
00019  <font class="keyword">public</font>:
00020     <font class="comment">/* Constructors */</font>
00021     Scs(){}
00022     Scs(<font class="keywordtype">double</font> &amp;d){<a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;scsnb, d);}
00023     Scs(<font class="keywordtype">int</font> &amp;i){<a class="code" href="double2scs_8c.html#a1">scs_set_si</a>(&amp;scsnb, i);}
00024     Scs(<font class="keyword">const</font> Scs&amp; nb);
00025     ~Scs(){}; 
00026 
00027     <font class="comment">/* Mutators */</font>
00028     <font class="keywordtype">void</font> scs_set_sign (<font class="keywordtype">int</font> i)     {this-&gt;scsnb.<a class="code" href="structscs.html#m3">sign</a> = i;}
00029     <font class="keywordtype">void</font> scs_set_index(<font class="keywordtype">int</font> i)     {this-&gt;scsnb.<a class="code" href="structscs.html#m2">index</a> = i;}
00030     <font class="keywordtype">void</font> scs_set_excep(<font class="keywordtype">double</font> d)  {this-&gt;scsnb.<a class="code" href="structscs.html#m1">exception</a>.d = d;}
00031     <font class="keywordtype">void</font> scs_set_words(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> word[SCS_NB_WORDS]){<font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i&lt;SCS_NB_WORDS; i++) this-&gt;scsnb.<a class="code" href="structscs.html#m0">h_word</a>[i] = word[i];}
00032 
00033     <font class="comment">/* Cast */</font>
00034     operator double();
00035     operator int();
00036 
00037 
00038     <font class="comment">/* Negation */</font>
00039     Scs operator-() <font class="keyword">const</font>;
00040     <font class="keyword">friend</font> Scs fabs(<font class="keyword">const</font> Scs &amp;a);
00041 
00042     <font class="comment">/* Assignment */</font>
00043     Scs &amp;operator=(<font class="keyword">const</font> Scs &amp;nb1);
00044     Scs &amp;operator=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb1);
00045     Scs &amp;operator=(<font class="keyword">const</font> <font class="keywordtype">int</font> i){<a class="code" href="double2scs_8c.html#a1">scs_set_si</a>(&amp;scsnb, i);}
00046 
00047     <font class="comment">/* Addition */</font>
00048     <font class="keyword">friend</font> Scs operator+(Scs &amp;nb1,Scs &amp;nb2);
00049     <font class="keyword">friend</font> Scs operator+(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2);
00050     <font class="keyword">friend</font> Scs operator+(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1,Scs &amp;nb2);
00051     <font class="keywordtype">void</font> operator+=(Scs &amp;nb);
00052     <font class="keywordtype">void</font> operator+=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb);
00053 
00054     <font class="comment">/* Subtraction */</font>
00055     <font class="keyword">friend</font> Scs operator-(Scs &amp;nb1,Scs &amp;nb2);
00056     <font class="keyword">friend</font> Scs operator-(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2);
00057     <font class="keyword">friend</font> Scs operator-(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1,Scs &amp;nb2);
00058     <font class="keywordtype">void</font> operator-=(Scs &amp;nb);
00059     <font class="keywordtype">void</font> operator-=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb);
00060 
00061     <font class="comment">/* Multiplication */</font>
00062     <font class="keyword">friend</font> Scs operator*(Scs &amp;nb1,Scs &amp;nb2);
00063     <font class="keyword">friend</font> Scs operator*(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2);
00064     <font class="keyword">friend</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1,Scs &amp;nb2);
00065     <font class="keyword">friend</font> Scs operator*(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">int</font> &amp;nb2);
00066     <font class="keyword">friend</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;nb1,Scs &amp;nb2);
00067     <font class="keywordtype">void</font> operator*=(Scs &amp;nb);
00068     <font class="keywordtype">void</font> operator*=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb);
00069     <font class="keywordtype">void</font> operator*=(<font class="keyword">const</font> <font class="keywordtype">int</font> nb);
00070 
00071     <font class="comment">/* Multiplication */</font>
00072     <font class="keyword">friend</font> Scs operator/(Scs &amp;nb1,Scs &amp;nb2);
00073     <font class="keyword">friend</font> Scs operator/(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2);
00074     <font class="keyword">friend</font> Scs operator/(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1,Scs &amp;nb2);
00075     <font class="keywordtype">void</font> operator/=(Scs &amp;nb);
00076     <font class="keywordtype">void</font> operator/=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb);
00077 
00078     <font class="comment">/* Comparisons */</font>
00079     <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator==(Scs &amp;nb1,Scs &amp;nb2);
00080     <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator!=(Scs &amp;nb1,Scs &amp;nb2);
00081     <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator&lt;=(Scs &amp;nb1,Scs &amp;nb2);
00082     <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator&gt;=(Scs &amp;nb1,Scs &amp;nb2);
00083     <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator&lt;(Scs &amp;nb1,Scs &amp;nb2);
00084     <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator&gt;(Scs &amp;nb1,Scs &amp;nb2);
00085 
00086     <font class="comment">/* Random Number */</font>
00087     Scs rand(<font class="keywordtype">void</font>);
00088 
00089     <font class="comment">/* Input/Output */</font>
00090     <font class="keyword">friend</font> ostream&amp; operator&lt;&lt;(ostream &amp;s, <font class="keyword">const</font> Scs &amp;a);
00091     <font class="keyword">friend</font> istream&amp; operator&gt;&gt;(istream &amp;s, Scs &amp;a);
00092 
00093 };
00094 
00095 
00096 
00097 
00098 <font class="comment">/**************</font>
00099 <font class="comment"> * CONSTRUCTOR</font>
00100 <font class="comment"> **************/</font>
00101 Scs::Scs(<font class="keyword">const</font> Scs&amp; nb){
00102   <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i;
00103   
00104   <font class="keywordflow">for</font>(i=0; i&lt;SCS_NB_WORDS; i++)
00105     this-&gt;scsnb.h_word[i] = nb.scsnb.h_word[i];
00106 
00107   this-&gt;scsnb.exception.d = nb.scsnb.exception.d;
00108   this-&gt;scsnb.index = nb.scsnb.index;
00109   this-&gt;scsnb.sign = nb.scsnb.sign;
00110 }
00111 
00112 <font class="comment">/**************</font>
00113 <font class="comment"> * CAST</font>
00114 <font class="comment"> **************/</font>
00115 <font class="keyword">inline</font> Scs::operator double() {
00116     <font class="keywordtype">double</font> d;
00117     <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&amp;d, &amp;(this-&gt;scsnb));
00118     <font class="keywordflow">return</font> d;
00119 }
00120 <font class="keyword">inline</font> Scs::operator int() {
00121     <font class="keywordtype">double</font> d;
00122     <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&amp;d, &amp;(this-&gt;scsnb));
00123     <font class="keywordflow">return</font> ((int)d);
00124 }
00125 
00126  
00127 
00128 <font class="comment">/**************    </font>
00129 <font class="comment"> * ASSIGNATION</font>
00130 <font class="comment"> **************/</font>
00131 <font class="keyword">inline</font> Scs &amp;Scs::operator=(<font class="keyword">const</font> Scs&amp; nb){
00132   <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i;
00133   
00134   <font class="keywordflow">for</font>(i=0; i&lt;SCS_NB_WORDS; i++)
00135     scsnb.h_word[i] = nb.scsnb.h_word[i];
00136 
00137   scsnb.exception.d = nb.scsnb.exception.d;
00138   scsnb.index = nb.scsnb.index;
00139   scsnb.sign = nb.scsnb.sign;
00140   
00141   <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00142 }
00143 <font class="keyword">inline</font> Scs &amp;Scs::operator=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb){
00144     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(this-&gt;scsnb), nb);
00145     <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00146 }
00147 <font class="keyword">inline</font> Scs fabs(<font class="keyword">const</font> Scs &amp;a){
00148     Scs res(a);
00149     res.scsnb.sign = 1;
00150     <font class="keywordflow">return</font> res;
00151 }
00152 
00153 
00154 <font class="comment">/************</font>
00155 <font class="comment"> * ADDITION</font>
00156 <font class="comment"> ************/</font>
00157 <font class="keyword">inline</font> Scs operator+(Scs &amp;nb1,Scs &amp;nb2){
00158     Scs res;    <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(nb2.scsnb));
00159     <font class="keywordflow">return</font> res;
00160 }
00161 <font class="keyword">inline</font> Scs operator+(Scs &amp;nb1,<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2){
00162     Scs res, op;
00163     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb2);
00164     <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(op.scsnb));
00165     <font class="keywordflow">return</font> res;
00166 }
00167 <font class="keyword">inline</font> Scs operator+(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1, Scs &amp;nb2){
00168     Scs res, op;
00169     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb1);
00170     <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&amp;(res.scsnb), &amp;(nb2.scsnb), &amp;(op.scsnb));
00171     <font class="keywordflow">return</font> res;
00172 }
00173 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator+=(Scs &amp;nb) {
00174     <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(nb.scsnb));
00175 }
00176 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator+=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) {
00177     Scs op;
00178     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb);
00179     <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(op.scsnb));
00180 }
00181 
00182 
00183 
00184 
00185 <font class="comment">/**************</font>
00186 <font class="comment"> * SUBTRACTION</font>
00187 <font class="comment"> **************/</font>
00188 <font class="keyword">inline</font> Scs operator-(Scs &amp;nb1,Scs &amp;nb2){
00189     Scs res;    <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(nb2.scsnb));
00190     <font class="keywordflow">return</font> res;
00191 }
00192 <font class="keyword">inline</font> Scs operator-(Scs &amp;nb1,<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2){
00193     Scs res, op;
00194     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb2);
00195     <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(op.scsnb));
00196     <font class="keywordflow">return</font> res;
00197 }
00198 <font class="keyword">inline</font> Scs operator-(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1, Scs &amp;nb2){
00199     Scs res, op;
00200     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb1);
00201     <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&amp;(res.scsnb), &amp;(nb2.scsnb), &amp;(op.scsnb));
00202     <font class="keywordflow">return</font> res;
00203 }
00204 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator-=(Scs &amp;nb) {
00205     <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(nb.scsnb));
00206 }
00207 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator-=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) {
00208     Scs op;
00209     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb);
00210     <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(op.scsnb));
00211 }
00212 
00213 
00214 
00215 <font class="comment">/*****************</font>
00216 <font class="comment"> * MULTIPLICATION</font>
00217 <font class="comment"> *****************/</font>
00218 <font class="keyword">inline</font> Scs operator*(Scs &amp;nb1,Scs &amp;nb2){
00219     Scs res;    <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(nb2.scsnb));
00220     <font class="keywordflow">return</font> res;
00221 }
00222 <font class="keyword">inline</font> Scs operator*(Scs &amp;nb1,<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2){
00223     Scs res, op;
00224     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb2);
00225     <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(op.scsnb));
00226     <font class="keywordflow">return</font> res;
00227 }
00228 <font class="keyword">inline</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1, Scs &amp;nb2){
00229     Scs res, op;
00230     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb1);
00231     <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&amp;(res.scsnb), &amp;(nb2.scsnb), &amp;(op.scsnb));
00232     <font class="keywordflow">return</font> res;
00233 }
00234 <font class="keyword">inline</font> Scs operator*(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">int</font> &amp;nb2){
00235     Scs res;
00236     <a class="code" href="addition__scs_8c.html#a0">scs_set</a>(&amp;(res.scsnb), &amp;(nb1.scsnb));
00237     <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(&amp;(res.scsnb), nb2);
00238     <font class="keywordflow">return</font> res;
00239 }
00240 <font class="keyword">inline</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;nb1, Scs &amp;nb2){
00241     Scs res;
00242     <a class="code" href="addition__scs_8c.html#a0">scs_set</a>(&amp;(res.scsnb), &amp;(nb2.scsnb));
00243     <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(&amp;(res.scsnb), nb1);
00244     <font class="keywordflow">return</font> res;
00245 }
00246 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator*=(Scs &amp;nb) {
00247     <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(nb.scsnb));
00248 }
00249 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator*=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) {
00250     Scs op;
00251     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb);
00252     <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(op.scsnb));
00253 }
00254 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator*=(<font class="keyword">const</font> <font class="keywordtype">int</font> nb) {
00255     <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(&amp;(this-&gt;scsnb), nb);
00256 }
00257 
00258 
00259 
00260 <font class="comment">/*****************</font>
00261 <font class="comment"> * DIVISION</font>
00262 <font class="comment"> *****************/</font>
00263 <font class="keyword">inline</font> Scs operator/(Scs &amp;nb1,Scs &amp;nb2){
00264     Scs res;    <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(nb2.scsnb));
00265     <font class="keywordflow">return</font> res;
00266 }
00267 <font class="keyword">inline</font> Scs operator/(Scs &amp;nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb2){
00268     Scs res, op;
00269     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb2);
00270     <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&amp;(res.scsnb), &amp;(nb1.scsnb), &amp;(op.scsnb));
00271     <font class="keywordflow">return</font> res;
00272 }
00273 <font class="keyword">inline</font> Scs operator/(<font class="keyword">const</font> <font class="keywordtype">double</font> &amp;nb1, Scs &amp;nb2){
00274     Scs res, op;
00275     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb1);
00276     <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&amp;(res.scsnb), &amp;(nb2.scsnb), &amp;(op.scsnb));
00277     <font class="keywordflow">return</font> res;
00278 }
00279 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator/=(Scs &amp;nb) {
00280     <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(nb.scsnb));
00281 }
00282 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator/=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) {
00283     Scs op;
00284     <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&amp;(op.scsnb), nb);
00285     <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&amp;(this-&gt;scsnb), &amp;(this-&gt;scsnb), &amp;(op.scsnb));
00286 }
00287 
00288 
00289 
00290 <font class="comment">/*************</font>
00291 <font class="comment"> * COMPARISON</font>
00292 <font class="comment"> *************/</font>
00293 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator==(Scs &amp;nb1, Scs &amp;nb2){
00294   <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i;
00295   <font class="keywordtype">bool</font> b=1;
00296   
00297   <font class="keywordflow">for</font>(i=0; i&lt;SCS_NB_WORDS; i++) 
00298       <font class="keywordflow">if</font> (nb1.scsnb.h_word[i] == nb2.scsnb.h_word[i]) b=0;
00299   
00300   <font class="keywordflow">return</font> ((nb1.scsnb.exception.d == nb2.scsnb.exception.d)&amp;&amp;
00301           (nb1.scsnb.index == nb2.scsnb.index)&amp;&amp;
00302           (nb1.scsnb.sign  == nb2.scsnb.sign)&amp;&amp; b);
00303 }
00304 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator!=(Scs &amp;nb1, Scs &amp;nb2){
00305     <font class="keywordflow">return</font> !(nb1==nb2);
00306 }
00307 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator&lt;=(Scs &amp;nb1, Scs &amp;nb2){
00308     <font class="keywordflow">return</font> ((nb1.scsnb.exception.d &lt;= nb2.scsnb.exception.d)&amp;&amp;
00309             (nb1.scsnb.sign  &lt;= nb2.scsnb.sign)&amp;&amp;
00310             ((nb1.scsnb.index &lt; nb2.scsnb.index)||
00311              ((nb1.scsnb.index == nb2.scsnb.index)&amp;&amp;
00312               (scs_cmp_mant(&amp;(nb1.scsnb), &amp;(nb2.scsnb))&lt;=0))));
00313 }
00314 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator&gt;=(Scs &amp;nb1, Scs &amp;nb2){
00315     <font class="keywordflow">return</font> ((nb1.scsnb.exception.d &gt;= nb2.scsnb.exception.d)&amp;&amp;
00316             (nb1.scsnb.sign  &gt;= nb2.scsnb.sign)&amp;&amp;
00317             ((nb1.scsnb.index &gt; nb2.scsnb.index)||
00318              ((nb1.scsnb.index == nb2.scsnb.index)&amp;&amp;
00319               (scs_cmp_mant(&amp;(nb1.scsnb), &amp;(nb2.scsnb))&gt;=0))));
00320 }
00321 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator&lt;(Scs &amp;nb1, Scs &amp;nb2){
00322     <font class="keywordflow">return</font> ((nb1.scsnb.exception.d &lt;= nb2.scsnb.exception.d)&amp;&amp;
00323             (nb1.scsnb.sign  &lt;= nb2.scsnb.sign)&amp;&amp;
00324             ((nb1.scsnb.index &lt; nb2.scsnb.index)||
00325              ((nb1.scsnb.index == nb2.scsnb.index)&amp;&amp;
00326               (scs_cmp_mant(&amp;(nb1.scsnb), &amp;(nb2.scsnb))&lt;0))));
00327 }
00328 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator&gt;(Scs &amp;nb1, Scs &amp;nb2){
00329     <font class="keywordflow">return</font> ((nb1.scsnb.exception.d &gt;= nb2.scsnb.exception.d)&amp;&amp;
00330             (nb1.scsnb.sign  &gt;= nb2.scsnb.sign)&amp;&amp;
00331             ((nb1.scsnb.index &gt; nb2.scsnb.index)||
00332              ((nb1.scsnb.index == nb2.scsnb.index)&amp;&amp;
00333               (scs_cmp_mant(&amp;(nb1.scsnb), &amp;(nb2.scsnb))&gt;0))));
00334 }
00335 
00336 
00337 
00338 
00339 <font class="comment">/****************</font>
00340 <font class="comment"> * RANDOM NUMBER</font>
00341 <font class="comment"> ****************/</font>
00342 <font class="keyword">inline</font> Scs Scs::rand(<font class="keywordtype">void</font>){
00343     scs_rand(&amp;(this-&gt;scsnb), 200); 
00344     <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00345 }
00346 
00347 
00348 
00349 
00350 <font class="comment">/*************** </font>
00351 <font class="comment"> * OUTPUT (in hexadecimal)</font>
00352 <font class="comment"> ***************/</font> 
00353 ostream &amp;operator&lt;&lt;(ostream &amp;os, <font class="keyword">const</font> Scs &amp;a){
00354     Scs aa, p, zer;
00355     <font class="keywordtype">double</font> d;
00356     <font class="keywordtype">char</font> buffer[10];
00357     <font class="keywordtype">int</font> e, exposant;
00358     <font class="keywordtype">bool</font> bb;
00359 
00360     <font class="keywordflow">if</font> (a.scsnb.exception.d != 1.){
00361         os &lt;&lt; (double)a.scsnb.exception.d;
00362     }<font class="keywordflow">else</font> {
00363         <font class="keywordflow">if</font> (a.scsnb.sign == -1)
00364             os &lt;&lt; <font class="charliteral">'-'</font>;
00365         
00366         aa = fabs(a);
00367 
00368         <font class="comment">/* Compute the exposant in radix 16 */</font>
00369         d = ((a.scsnb.index)*SCS_NB_BITS)/4;
00370         e = 4*(int)floor(d);
00371 
00372         p = 1;
00373         p.scsnb.index = (int)floor(((<font class="keywordtype">double</font>)e)/SCS_NB_BITS);
00374         p.scsnb.h_word[0] = 1 &lt;&lt; e - p.scsnb.index*SCS_NB_BITS;
00375         exposant = (int)floor(d);
00376         p /= 16;
00377         exposant--;
00378         <font class="keywordflow">while</font>(p &lt;= aa){
00379             p *= 16;
00380             exposant++;
00381         }
00382         p /= 16;
00383         exposant--;
00384         
00385         <font class="comment">/* Extract digits */</font>
00386         aa = aa / p;
00387         sprintf(buffer,<font class="stringliteral">"%x"</font>, aa.scsnb.h_word[0]);
00388         os &lt;&lt; buffer &lt;&lt; <font class="stringliteral">"."</font>;
00389         aa.scsnb.h_word[0] = 0;
00390         aa *= 16;
00391         
00392         bb = 1;
00393         <font class="keywordflow">while</font>(bb){
00394             sprintf(buffer,<font class="stringliteral">"%x"</font>, aa.scsnb.h_word[0]);
00395             os &lt;&lt; buffer;
00396             aa.scsnb.h_word[0] = 0;
00397             aa *= 16;
00398 
00399             bb = 0;
00400             <font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i&lt;SCS_NB_WORDS; i++)
00401                 <font class="keywordflow">if</font> (aa.scsnb.h_word[i] != 0) bb=1;
00402         }
00403 
00404         <font class="comment">/* Write the exponent */</font>
00405         os &lt;&lt; <font class="stringliteral">" x16^("</font> &lt;&lt; exposant &lt;&lt;<font class="stringliteral">")"</font>;
00406     } 
00407     
00408     <font class="keywordflow">return</font> os;
00409 }
00410 
00411 
00412 <font class="comment">/*************** </font>
00413 <font class="comment"> * INPUT (in decimal)</font>
00414 <font class="comment"> ***************/</font> 
00415 istream&amp; operator&gt;&gt;(istream &amp;is, Scs &amp;a){
00416     <font class="keywordtype">char</font> c;
00417     <font class="keywordtype">int</font> nd = 0;
00418     <font class="keywordtype">int</font> point = -1;
00419     <font class="keywordtype">int</font> ex;
00420     <font class="keywordtype">bool</font> done = <font class="keyword">false</font>;
00421     Scs r;
00422 
00423     r = 0;
00424 
00425     <font class="comment">/* Skip any leading spaces */</font>
00426     <font class="keywordflow">do</font>{
00427         is&gt;&gt;c;
00428     }<font class="keywordflow">while</font> (c == <font class="charliteral">' '</font>);
00429 
00430     <font class="comment">/* Read sign, digits, and exponent */</font>
00431     <font class="keywordflow">while</font> (!done &amp;&amp; (c != <font class="charliteral">'\0'</font>)) {
00432         <font class="keywordflow">if</font> (c &gt;= <font class="charliteral">'0'</font> &amp;&amp; c &lt;= <font class="charliteral">'9'</font>) {
00433             <font class="keywordtype">int</font> d = c - <font class="charliteral">'0'</font>;
00434             r *= 10.0;
00435             r += d;
00436             nd++;
00437         } <font class="keywordflow">else</font> {
00438             <font class="keywordflow">switch</font> (c) {
00439             <font class="keywordflow">case</font> <font class="charliteral">'.'</font>:
00440                 point = nd;
00441                 <font class="keywordflow">break</font>;
00442             <font class="keywordflow">case</font> <font class="charliteral">'-'</font>:
00443             <font class="keywordflow">case</font> <font class="charliteral">'+'</font>:
00444                 <font class="keywordflow">if</font> (nd &gt; 0){
00445                     a = 0;
00446                     done = <font class="keyword">true</font>;
00447                     point = -1;
00448                     ex = 0;
00449                 }
00450                 a.scsnb.sign = (c == <font class="charliteral">'-'</font>) ? -1 : 1;
00451                 <font class="keywordflow">break</font>;
00452             <font class="keywordflow">case</font> <font class="charliteral">'E'</font>:
00453             <font class="keywordflow">case</font> <font class="charliteral">'e'</font>:
00454                 is &gt;&gt; ex;
00455                 done = <font class="keyword">true</font>;
00456                 <font class="keywordflow">break</font>;
00457             <font class="keywordflow">default</font>:
00458                 a = 0;
00459                 done = <font class="keyword">true</font>;
00460                 point = -1;
00461                 ex = 0;
00462             }
00463         }
00464         is&gt;&gt;c;
00465     }
00466 
00467     <font class="keywordflow">if</font> (point &gt;= 0) 
00468         ex -= (nd - point);
00469     
00470     
00471     <font class="keywordflow">if</font> (ex != 0) {
00472         <font class="keywordflow">if</font> (ex &gt; 0)
00473             <font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i&lt;ex; i++)
00474                 r *= 10;
00475         <font class="keywordflow">if</font> (ex &lt; 0){
00476             Scs inv_ten, ten;
00477             ten = 10;
00478             <a class="code" href="division__scs_8c.html#a0">scs_inv</a>(&amp;(inv_ten.scsnb), &amp;(ten.scsnb) );
00479             <font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i&gt;ex; i--)
00480                 r *= inv_ten;
00481         }
00482     }
00483 }
00484 <font class="preprocessor">#endif</font>
00485 <font class="preprocessor"></font>
00486 
</pre></div><hr><address align="right"><small>Generated on Tue Jun 17 10:15:51 2003 for SCSLib by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.15 </small></address>
</body>
</html>