summaryrefslogtreecommitdiffstats
path: root/ue4/doxygen/cdatn_8h-source.html
blob: af04fe7bdad562990e0fb34eb5f8f78336bacebb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>mycpu: mycpu/cdatn.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.3 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Classes</span></a></li>
    <li class="current"><a href="files.html"><span>Files</span></a></li>
  </ul>
</div>
<h1>mycpu/cdatn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00008"></a>00008 <span class="preprocessor">#ifndef CDATN_H</span>
<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define CDATN_H 1</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span>
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;boost/operators.hpp&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00013"></a>00013 
<a name="l00019"></a><a class="code" href="classCDatN.html">00019</a> <span class="keyword">class </span><a class="code" href="classCDatN.html">CDatN</a>
<a name="l00020"></a>00020   : <span class="keyword">public</span> boost::operators&lt;CDatN&gt;
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022   <span class="keyword">private</span>:
<a name="l00033"></a>00033     <a class="code" href="classCDatN.html">CDatN</a>()
<a name="l00034"></a>00034     {}
<a name="l00035"></a>00035 
<a name="l00036"></a>00036   <span class="keyword">public</span>:
<a name="l00047"></a><a class="code" href="classCDatN.html#af51895edcdc0e5659c4c6271b86bc24">00047</a>     <span class="keyword">virtual</span> <a class="code" href="classCDatN.html#af51895edcdc0e5659c4c6271b86bc24" title="Default dtor.">~CDatN</a>()
<a name="l00048"></a>00048     {}
<a name="l00049"></a>00049 
<a name="l00060"></a><a class="code" href="classCDatN.html#5b762408847941e4b6796f3aebe13b9c">00060</a>     <a class="code" href="classCDatN.html">CDatN</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; other)
<a name="l00061"></a>00061       : <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>(other.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>), <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>(other.<a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>)
<a name="l00062"></a>00062     {}
<a name="l00063"></a>00063 
<a name="l00075"></a><a class="code" href="classCDatN.html#e618584efc9843f03cf6d0db30d43a60">00075</a>     <a class="code" href="classCDatN.html">CDatN</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> newval, <span class="keywordtype">unsigned</span> width = 31)
<a name="l00076"></a>00076       : <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>(((1 &lt;&lt; width) - 1) &amp; newval), <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>(width)
<a name="l00077"></a>00077     {
<a name="l00078"></a>00078       <span class="keywordflow">if</span> (width &lt; 2 || width &gt; 32)
<a name="l00079"></a>00079         <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"width must be between 2 and 32"</span>);
<a name="l00080"></a>00080     }
<a name="l00081"></a>00081 
<a name="l00092"></a><a class="code" href="classCDatN.html#5fd8b7a83b3b30fba10684d89859dfab">00092</a>     <span class="keywordtype">int</span> <a class="code" href="classCDatN.html#5fd8b7a83b3b30fba10684d89859dfab" title="returns value of CDatN">getValue</a>()<span class="keyword"> const</span>
<a name="l00093"></a>00093 <span class="keyword">    </span>{
<a name="l00094"></a>00094       <span class="keywordflow">return</span> <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00095"></a>00095     }
<a name="l00096"></a>00096 
<a name="l00107"></a><a class="code" href="classCDatN.html#a3bff96dd9d2749c5addf24266a00994">00107</a>     <a class="code" href="classCDatN.html#a3bff96dd9d2749c5addf24266a00994" title="convert to int">operator int</a>()
<a name="l00108"></a>00108     {
<a name="l00109"></a>00109       <span class="keywordflow">return</span> <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00110"></a>00110     }
<a name="l00111"></a>00111 
<a name="l00122"></a><a class="code" href="classCDatN.html#3dcc62e6cadf769b2fb3ac85540afe31">00122</a>     <span class="keywordtype">bool</span> <a class="code" href="classCDatN.html#3dcc62e6cadf769b2fb3ac85540afe31" title="implementation of operator &amp;lt;">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)<span class="keyword"> const</span>
<a name="l00123"></a>00123 <span class="keyword">    </span>{
<a name="l00124"></a>00124       <span class="keywordflow">return</span> <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> &lt; x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00125"></a>00125     }
<a name="l00126"></a>00126 
<a name="l00137"></a><a class="code" href="classCDatN.html#f87aafb776ef788fae257d77cab11cfd">00137</a>     <span class="keywordtype">bool</span> <a class="code" href="classCDatN.html#f87aafb776ef788fae257d77cab11cfd" title="implementation of operator ==">operator==</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)<span class="keyword"> const</span>
<a name="l00138"></a>00138 <span class="keyword">    </span>{
<a name="l00139"></a>00139       <span class="keywordflow">return</span> <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> == x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00140"></a>00140     }
<a name="l00141"></a>00141 
<a name="l00152"></a><a class="code" href="classCDatN.html#60e4e84725cfdaa5b422f86b20d54516">00152</a>     <a class="code" href="classCDatN.html">CDatN</a> &amp;<a class="code" href="classCDatN.html#60e4e84725cfdaa5b422f86b20d54516" title="implementation of operator =">operator=</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>&amp; newval)
<a name="l00153"></a>00153     {
<a name="l00154"></a>00154       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; newval;
<a name="l00155"></a>00155       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00156"></a>00156     }
<a name="l00157"></a>00157 
<a name="l00168"></a><a class="code" href="classCDatN.html#ffca44120fdc0114615ff2c5f7be0e18">00168</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#ffca44120fdc0114615ff2c5f7be0e18" title="implementation of operator +=">operator+=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00169"></a>00169     {
<a name="l00170"></a>00170       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> + x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00171"></a>00171       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00172"></a>00172     }
<a name="l00173"></a>00173 
<a name="l00184"></a><a class="code" href="classCDatN.html#229edcddcadcd8504c9fa87b78a72ca4">00184</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#229edcddcadcd8504c9fa87b78a72ca4" title="implementation of operator -=">operator-=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00185"></a>00185     {
<a name="l00186"></a>00186       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> - x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00187"></a>00187       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00188"></a>00188     }
<a name="l00189"></a>00189 
<a name="l00200"></a><a class="code" href="classCDatN.html#ab7b50c5bc078b0a3d95c9a6479bdc0a">00200</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#ab7b50c5bc078b0a3d95c9a6479bdc0a" title="implementation of operator *=">operator*=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00201"></a>00201     {
<a name="l00202"></a>00202       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> * x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00203"></a>00203       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00204"></a>00204     }
<a name="l00205"></a>00205 
<a name="l00216"></a><a class="code" href="classCDatN.html#c2b90d3e230f722bbb24334812e624a2">00216</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#c2b90d3e230f722bbb24334812e624a2" title="implementation of operator /=">operator/=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00217"></a>00217     {
<a name="l00218"></a>00218       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> / x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00219"></a>00219       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00220"></a>00220     }
<a name="l00221"></a>00221 
<a name="l00232"></a><a class="code" href="classCDatN.html#7f26fea2cec6e709a78956f8baea45de">00232</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#7f26fea2cec6e709a78956f8baea45de" title="implementation of operator %=">operator%=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00233"></a>00233     {
<a name="l00234"></a>00234       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> % x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00235"></a>00235       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00236"></a>00236     }
<a name="l00237"></a>00237 
<a name="l00248"></a><a class="code" href="classCDatN.html#d3bac75a759508a12fa43e9592585779">00248</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#d3bac75a759508a12fa43e9592585779" title="implementation of operator |=">operator|=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00249"></a>00249     {
<a name="l00250"></a>00250       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> | x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00251"></a>00251       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00252"></a>00252     }
<a name="l00253"></a>00253 
<a name="l00264"></a><a class="code" href="classCDatN.html#e70b0cf11032a618ac5c67ad8a772c92">00264</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#e70b0cf11032a618ac5c67ad8a772c92" title="implementation of operator &amp;amp;=">operator&amp;=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00265"></a>00265     {
<a name="l00266"></a>00266       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> &amp; x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00267"></a>00267       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00268"></a>00268     }
<a name="l00269"></a>00269 
<a name="l00280"></a><a class="code" href="classCDatN.html#1b47b84696dea74a917f33fd8ac1289b">00280</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#1b47b84696dea74a917f33fd8ac1289b" title="implementation of operator ^=">operator^=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>&amp; x)
<a name="l00281"></a>00281     {
<a name="l00282"></a>00282       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> ^ x.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>);
<a name="l00283"></a>00283       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00284"></a>00284     }
<a name="l00285"></a>00285 
<a name="l00296"></a><a class="code" href="classCDatN.html#f10feb6624968fa77052e86279be7c69">00296</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#f10feb6624968fa77052e86279be7c69" title="implementation of operator ++">operator++</a>()
<a name="l00297"></a>00297     {
<a name="l00298"></a>00298       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> + 1);
<a name="l00299"></a>00299       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00300"></a>00300     }
<a name="l00301"></a>00301 
<a name="l00312"></a><a class="code" href="classCDatN.html#c6a6f0d094866ab90cf31003889eb9a0">00312</a>     <a class="code" href="classCDatN.html">CDatN</a>&amp; <a class="code" href="classCDatN.html#c6a6f0d094866ab90cf31003889eb9a0" title="implementation of operator --">operator--</a>()
<a name="l00313"></a>00313     {
<a name="l00314"></a>00314       <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>--;
<a name="l00315"></a>00315       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00316"></a>00316     }
<a name="l00317"></a>00317 
<a name="l00329"></a><a class="code" href="classCDatN.html#c3073fab08c216687f15530ec7b24a1a">00329</a>     <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classCDatN.html#c3073fab08c216687f15530ec7b24a1a" title="Shift/output operator for outputstream.">operator&lt;&lt;</a>(std::ostream&amp; stream, <a class="code" href="classCDatN.html">CDatN</a> cdat)
<a name="l00330"></a>00330     {
<a name="l00331"></a>00331       stream &lt;&lt; cdat.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00332"></a>00332       <span class="keywordflow">return</span> stream;
<a name="l00333"></a>00333     }
<a name="l00334"></a>00334 
<a name="l00346"></a><a class="code" href="classCDatN.html#406e69ecbaad4df5bb36f109b017348d">00346</a>     <span class="keyword">friend</span> std::istream&amp; <a class="code" href="classCDatN.html#406e69ecbaad4df5bb36f109b017348d" title="Shift/read operator for inputstream.">operator&gt;&gt;</a>(std::istream &amp; stream, <a class="code" href="classCDatN.html">CDatN</a>&amp; cdat)
<a name="l00347"></a>00347     {
<a name="l00348"></a>00348       stream &gt;&gt; cdat.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00349"></a>00349       cdat.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 &lt;&lt; cdat.<a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) &amp; cdat.<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00350"></a>00350       <span class="keywordflow">return</span> stream;
<a name="l00351"></a>00351     }
<a name="l00352"></a>00352 
<a name="l00353"></a>00353   <span class="keyword">protected</span>:
<a name="l00354"></a>00354     <span class="comment">/* members */</span>
<a name="l00356"></a><a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">00356</a>     <span class="keywordtype">int</span> <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a>;
<a name="l00358"></a><a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">00358</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>;
<a name="l00359"></a>00359 };
<a name="l00360"></a>00360 
<a name="l00361"></a>00361 <span class="preprocessor">#endif</span>
<a name="l00362"></a>00362 <span class="preprocessor"></span>
<a name="l00363"></a>00363 <span class="comment">/* vim: set et sw=2 ts=2: */</span>
</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sat May 30 16:32:35 2009 for mycpu by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
</body>
</html>