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 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 <boost/operators.hpp></span>
<a name="l00012"></a>00012 <span class="preprocessor">#include <iostream></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<CDatN>
<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>& 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 << width) - 1) & 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 < 2 || width > 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 &lt;">operator<</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>& 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> < 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>& 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> &<a class="code" href="classCDatN.html#60e4e84725cfdaa5b422f86b20d54516" title="implementation of operator =">operator=</a>(<span class="keyword">const</span> <span class="keywordtype">int</span>& newval)
<a name="l00153"></a>00153 {
<a name="l00154"></a>00154 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & 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>& <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>& x)
<a name="l00169"></a>00169 {
<a name="l00170"></a>00170 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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>& x)
<a name="l00185"></a>00185 {
<a name="l00186"></a>00186 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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>& x)
<a name="l00201"></a>00201 {
<a name="l00202"></a>00202 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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>& x)
<a name="l00217"></a>00217 {
<a name="l00218"></a>00218 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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>& x)
<a name="l00233"></a>00233 {
<a name="l00234"></a>00234 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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>& x)
<a name="l00249"></a>00249 {
<a name="l00250"></a>00250 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <a class="code" href="classCDatN.html#e70b0cf11032a618ac5c67ad8a772c92" title="implementation of operator &amp;=">operator&=</a>(<span class="keyword">const</span> <a class="code" href="classCDatN.html">CDatN</a>& x)
<a name="l00265"></a>00265 {
<a name="l00266"></a>00266 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> & 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>& <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>& x)
<a name="l00281"></a>00281 {
<a name="l00282"></a>00282 <a class="code" href="classCDatN.html#7c7d0fdd8ce752ba34d19d5d13fb5ab3">m_value</a> = ((1 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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 << <a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & (<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>& <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& <a class="code" href="classCDatN.html#c3073fab08c216687f15530ec7b24a1a" title="Shift/output operator for outputstream.">operator<<</a>(std::ostream& stream, <a class="code" href="classCDatN.html">CDatN</a> cdat)
<a name="l00330"></a>00330 {
<a name="l00331"></a>00331 stream << 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& <a class="code" href="classCDatN.html#406e69ecbaad4df5bb36f109b017348d" title="Shift/read operator for inputstream.">operator>></a>(std::istream & stream, <a class="code" href="classCDatN.html">CDatN</a>& cdat)
<a name="l00347"></a>00347 {
<a name="l00348"></a>00348 stream >> 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 << cdat.<a class="code" href="classCDatN.html#49d5855358bfefe9c8fb6235980dac5e">m_width</a>) - 1) & 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
<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>
|