root/doc/html/factory_8h-source.html @ 354

Revision 353, 19.8 kB (checked in by smidl, 16 years ago)

doc

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3<title>mixpp: factory.h Source File</title>
4<link href="tabs.css" rel="stylesheet" type="text/css">
5<link href="doxygen.css" rel="stylesheet" type="text/css">
6</head><body>
7<!-- Generated by Doxygen 1.5.8 -->
8<script type="text/javascript">
9<!--
10function changeDisplayState (e){
11  var num=this.id.replace(/[^[0-9]/g,'');
12  var button=this.firstChild;
13  var sectionDiv=document.getElementById('dynsection'+num);
14  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
15    sectionDiv.style.display='block';
16    button.src='open.gif';
17  }else{
18    sectionDiv.style.display='none';
19    button.src='closed.gif';
20  }
21}
22function initDynSections(){
23  var divs=document.getElementsByTagName('div');
24  var sectionCounter=1;
25  for(var i=0;i<divs.length-1;i++){
26    if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
27      var header=divs[i];
28      var section=divs[i+1];
29      var button=header.firstChild;
30      if (button!='IMG'){
31        divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
32        button=document.createElement('img');
33        divs[i].insertBefore(button,divs[i].firstChild);
34      }
35      header.style.cursor='pointer';
36      header.onclick=changeDisplayState;
37      header.id='dynheader'+sectionCounter;
38      button.src='closed.gif';
39      section.id='dynsection'+sectionCounter;
40      section.style.display='none';
41      section.style.marginLeft='14px';
42      sectionCounter++;
43    }
44  }
45}
46window.onload = initDynSections;
47-->
48</script>
49<div class="navigation" id="top">
50  <div class="tabs">
51    <ul>
52      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
53      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
54      <li><a href="modules.html"><span>Modules</span></a></li>
55      <li><a href="annotated.html"><span>Classes</span></a></li>
56      <li class="current"><a href="files.html"><span>Files</span></a></li>
57    </ul>
58  </div>
59  <div class="tabs">
60    <ul>
61      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
62      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
63    </ul>
64  </div>
65<h1>factory.h</h1><a href="factory_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
66<a name="l00029"></a>00029 <span class="preprocessor">#ifndef FACTORY_H</span>
67<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define FACTORY_H</span>
68<a name="l00031"></a>00031 <span class="preprocessor"></span>
69<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;complex&gt;</span>
70<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="binary_8h.html" title="Binary class definition.">itpp/base/binary.h</a>&gt;</span>
71<a name="l00034"></a>00034
72<a name="l00035"></a>00035 <span class="keyword">namespace </span>itpp
73<a name="l00036"></a>00036 {
74<a name="l00037"></a>00037
75<a name="l00038"></a>00038 <span class="comment">// Forward declarations</span>
76<a name="l00039"></a>00039 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Array;
77<a name="l00040"></a>00040 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt; <span class="keyword">class </span>Mat;
78<a name="l00041"></a>00041 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt; <span class="keyword">class </span>Vec;
79<a name="l00042"></a>00042
80<a name="l00128"></a><a class="code" href="classitpp_1_1Factory.html">00128</a> <span class="keyword">class </span><a class="code" href="classitpp_1_1Factory.html" title="Base class for class factories.">Factory</a>
81<a name="l00129"></a>00129 {
82<a name="l00130"></a>00130 <span class="keyword">public</span>:
83<a name="l00132"></a><a class="code" href="classitpp_1_1Factory.html#34778681d273c6851ed2aca466aefbeb">00132</a>   <a class="code" href="classitpp_1_1Factory.html#34778681d273c6851ed2aca466aefbeb" title="Default constructor.">Factory</a>() {}
84<a name="l00134"></a><a class="code" href="classitpp_1_1Factory.html#4dbd8f1c6bb8845b9e62cea6387c345c">00134</a>   <span class="keyword">virtual</span> <a class="code" href="classitpp_1_1Factory.html#4dbd8f1c6bb8845b9e62cea6387c345c" title="Destructor.">~Factory</a>() {}
85<a name="l00135"></a>00135 };
86<a name="l00136"></a>00136
87<a name="l00138"></a>00138 <span class="keyword">const</span> Factory DEFAULT_FACTORY;
88<a name="l00139"></a>00139
89<a name="l00140"></a>00140
90<a name="l00142"></a>00142 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span>
91<a name="l00143"></a>00143 <span class="keywordtype">void</span> create_elements(T* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;)
92<a name="l00144"></a>00144 {
93<a name="l00145"></a>00145   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(T) * n);
94<a name="l00146"></a>00146   ptr = <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(p);
95<a name="l00147"></a>00147   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; i++) {
96<a name="l00148"></a>00148     <span class="keyword">new</span>(ptr + i) T();
97<a name="l00149"></a>00149   }
98<a name="l00150"></a>00150 }
99<a name="l00151"></a>00151
100<a name="l00152"></a>00152
101<a name="l00154"></a>00154 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
102<a name="l00155"></a>00155 <span class="keywordtype">void</span> create_elements&lt;unsigned char&gt;(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* &amp;ptr, <span class="keywordtype">int</span> n,
103<a name="l00156"></a>00156                                     <span class="keyword">const</span> Factory &amp;)
104<a name="l00157"></a>00157 {
105<a name="l00158"></a>00158   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) * n);
106<a name="l00159"></a>00159   ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(p);
107<a name="l00160"></a>00160 }
108<a name="l00161"></a>00161
109<a name="l00163"></a>00163 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
110<a name="l00164"></a>00164 <span class="keywordtype">void</span> create_elements&lt;bin&gt;(bin* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;)
111<a name="l00165"></a>00165 {
112<a name="l00166"></a>00166   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(bin) * n);
113<a name="l00167"></a>00167   ptr = <span class="keyword">reinterpret_cast&lt;</span>bin*<span class="keyword">&gt;</span>(p);
114<a name="l00168"></a>00168 }
115<a name="l00169"></a>00169
116<a name="l00171"></a>00171 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
117<a name="l00172"></a>00172 <span class="keywordtype">void</span> create_elements&lt;short int&gt;(<span class="keywordtype">short</span> <span class="keywordtype">int</span>* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;)
118<a name="l00173"></a>00173 {
119<a name="l00174"></a>00174   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(<span class="keywordtype">short</span> <span class="keywordtype">int</span>) * n);
120<a name="l00175"></a>00175   ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">short</span> <span class="keywordtype">int</span>*<span class="keyword">&gt;</span>(p);
121<a name="l00176"></a>00176 }
122<a name="l00177"></a>00177
123<a name="l00179"></a>00179 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
124<a name="l00180"></a>00180 <span class="keywordtype">void</span> create_elements&lt;int&gt;(<span class="keywordtype">int</span>* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;)
125<a name="l00181"></a>00181 {
126<a name="l00182"></a>00182   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) * n);
127<a name="l00183"></a>00183   ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">int</span>*<span class="keyword">&gt;</span>(p);
128<a name="l00184"></a>00184 }
129<a name="l00185"></a>00185
130<a name="l00187"></a>00187 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
131<a name="l00188"></a>00188 <span class="keywordtype">void</span> create_elements&lt;double&gt;(<span class="keywordtype">double</span>* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;)
132<a name="l00189"></a>00189 {
133<a name="l00190"></a>00190   <span class="keywordtype">void</span> *p0 = operator new(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * n + 16);
134<a name="l00191"></a>00191   <span class="keywordtype">void</span> *p1 = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span>std::size_t<span class="keyword">&gt;</span>(p0) + 16)
135<a name="l00192"></a>00192                                      &amp; (~(std::size_t(15))));
136<a name="l00193"></a>00193   *(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>**<span class="keyword">&gt;</span>(p1) - 1) = p0;
137<a name="l00194"></a>00194   ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">double</span>*<span class="keyword">&gt;</span>(p1);
138<a name="l00195"></a>00195 }
139<a name="l00196"></a>00196
140<a name="l00198"></a>00198 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
141<a name="l00199"></a>00199 <span class="keywordtype">void</span> create_elements&lt;std::complex&lt;double&gt; &gt;(std::complex&lt;double&gt;* &amp;ptr,
142<a name="l00200"></a>00200     <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;)
143<a name="l00201"></a>00201 {
144<a name="l00202"></a>00202   <span class="keywordtype">void</span> *p0 = operator new(<span class="keyword">sizeof</span>(std::complex&lt;double&gt;) * n + 16);
145<a name="l00203"></a>00203   <span class="keywordtype">void</span> *p1 = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span>std::size_t<span class="keyword">&gt;</span>(p0) + 16)
146<a name="l00204"></a>00204                                      &amp; (~(std::size_t(15))));
147<a name="l00205"></a>00205   *(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>**<span class="keyword">&gt;</span>(p1) - 1) = p0;
148<a name="l00206"></a>00206   ptr = <span class="keyword">reinterpret_cast&lt;</span>std::complex&lt;double&gt;*<span class="keyword">&gt;</span>(p1);
149<a name="l00207"></a>00207 }
150<a name="l00208"></a>00208
151<a name="l00209"></a>00209
152<a name="l00210"></a>00210
153<a name="l00212"></a>00212 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span>
154<a name="l00213"></a>00213 <span class="keywordtype">void</span> destroy_elements(T* &amp;ptr, <span class="keywordtype">int</span> n)
155<a name="l00214"></a>00214 {
156<a name="l00215"></a>00215   <span class="keywordflow">if</span> (ptr) {
157<a name="l00216"></a>00216     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; ++i) {
158<a name="l00217"></a>00217       ptr[i].~T();
159<a name="l00218"></a>00218     }
160<a name="l00219"></a>00219     <span class="keywordtype">void</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(ptr);
161<a name="l00220"></a>00220     operator delete(p);
162<a name="l00221"></a>00221     ptr = 0;
163<a name="l00222"></a>00222   }
164<a name="l00223"></a>00223 }
165<a name="l00224"></a>00224
166<a name="l00226"></a>00226 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
167<a name="l00227"></a>00227 <span class="keywordtype">void</span> destroy_elements&lt;unsigned char&gt;(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* &amp;ptr, int)
168<a name="l00228"></a>00228 {
169<a name="l00229"></a>00229   <span class="keywordflow">if</span> (ptr) {
170<a name="l00230"></a>00230     <span class="keywordtype">void</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(ptr);
171<a name="l00231"></a>00231     operator delete(p);
172<a name="l00232"></a>00232         ptr = 0;
173<a name="l00233"></a>00233   }
174<a name="l00234"></a>00234 }
175<a name="l00235"></a>00235
176<a name="l00237"></a>00237 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
177<a name="l00238"></a>00238 <span class="keywordtype">void</span> destroy_elements&lt;bin&gt;(bin* &amp;ptr, int)
178<a name="l00239"></a>00239 {
179<a name="l00240"></a>00240   <span class="keywordflow">if</span> (ptr) {
180<a name="l00241"></a>00241     <span class="keywordtype">void</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(ptr);
181<a name="l00242"></a>00242     operator delete(p);
182<a name="l00243"></a>00243     ptr = 0;
183<a name="l00244"></a>00244   }
184<a name="l00245"></a>00245 }
185<a name="l00247"></a>00247 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
186<a name="l00248"></a>00248 <span class="keywordtype">void</span> destroy_elements&lt;short int&gt;(<span class="keywordtype">short</span> <span class="keywordtype">int</span>* &amp;ptr, int)
187<a name="l00249"></a>00249 {
188<a name="l00250"></a>00250   <span class="keywordflow">if</span> (ptr) {
189<a name="l00251"></a>00251     <span class="keywordtype">void</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(ptr);
190<a name="l00252"></a>00252     operator delete(p);
191<a name="l00253"></a>00253     ptr = 0;
192<a name="l00254"></a>00254   }
193<a name="l00255"></a>00255 }
194<a name="l00256"></a>00256
195<a name="l00258"></a>00258 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
196<a name="l00259"></a>00259 <span class="keywordtype">void</span> destroy_elements&lt;int&gt;(<span class="keywordtype">int</span>* &amp;ptr, int)
197<a name="l00260"></a>00260 {
198<a name="l00261"></a>00261   <span class="keywordflow">if</span> (ptr) {
199<a name="l00262"></a>00262     <span class="keywordtype">void</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(ptr);
200<a name="l00263"></a>00263     operator delete(p);
201<a name="l00264"></a>00264     ptr = 0;
202<a name="l00265"></a>00265   }
203<a name="l00266"></a>00266 }
204<a name="l00267"></a>00267
205<a name="l00269"></a>00269 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
206<a name="l00270"></a>00270 <span class="keywordtype">void</span> destroy_elements&lt;double&gt;(<span class="keywordtype">double</span>* &amp;ptr, int)
207<a name="l00271"></a>00271 {
208<a name="l00272"></a>00272   <span class="keywordflow">if</span> (ptr) {
209<a name="l00273"></a>00273     <span class="keywordtype">void</span> *p = *(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>**<span class="keyword">&gt;</span>(ptr) - 1);
210<a name="l00274"></a>00274     operator delete(p);
211<a name="l00275"></a>00275     ptr = 0;
212<a name="l00276"></a>00276   }
213<a name="l00277"></a>00277 }
214<a name="l00278"></a>00278
215<a name="l00280"></a>00280 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span>
216<a name="l00281"></a>00281 <span class="keywordtype">void</span> destroy_elements&lt;std::complex&lt;double&gt; &gt;(std::complex&lt;double&gt;* &amp;ptr, int)
217<a name="l00282"></a>00282 {
218<a name="l00283"></a>00283   <span class="keywordflow">if</span> (ptr) {
219<a name="l00284"></a>00284     <span class="keywordtype">void</span> *p = *(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>**<span class="keyword">&gt;</span>(ptr) - 1);
220<a name="l00285"></a>00285     operator delete(p);
221<a name="l00286"></a>00286     ptr = 0;
222<a name="l00287"></a>00287   }
223<a name="l00288"></a>00288 }
224<a name="l00289"></a>00289
225<a name="l00290"></a>00290
226<a name="l00292"></a>00292 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
227<a name="l00293"></a>00293 <span class="keywordtype">void</span> create_elements(Array&lt;T&gt;* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;f)
228<a name="l00294"></a>00294 {
229<a name="l00295"></a>00295   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(Array&lt;T&gt;) * n);
230<a name="l00296"></a>00296   ptr = <span class="keyword">reinterpret_cast&lt;</span>Array&lt;T&gt;*<span class="keyword">&gt;</span>(p);
231<a name="l00297"></a>00297   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; ++i) {
232<a name="l00298"></a>00298     <span class="keyword">new</span>(ptr + i) Array&lt;T&gt;(f);
233<a name="l00299"></a>00299   }
234<a name="l00300"></a>00300 }
235<a name="l00301"></a>00301
236<a name="l00303"></a>00303 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
237<a name="l00304"></a>00304 <span class="keywordtype">void</span> create_elements(Mat&lt;T&gt;* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;f)
238<a name="l00305"></a>00305 {
239<a name="l00306"></a>00306   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(Mat&lt;T&gt;) * n);
240<a name="l00307"></a>00307   ptr = <span class="keyword">reinterpret_cast&lt;</span>Mat&lt;T&gt;*<span class="keyword">&gt;</span>(p);
241<a name="l00308"></a>00308   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; ++i) {
242<a name="l00309"></a>00309     <span class="keyword">new</span>(ptr + i) Mat&lt;T&gt;(f);
243<a name="l00310"></a>00310   }
244<a name="l00311"></a>00311 }
245<a name="l00312"></a>00312
246<a name="l00314"></a>00314 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
247<a name="l00315"></a>00315 <span class="keywordtype">void</span> create_elements(Vec&lt;T&gt;* &amp;ptr, <span class="keywordtype">int</span> n, <span class="keyword">const</span> Factory &amp;f)
248<a name="l00316"></a>00316 {
249<a name="l00317"></a>00317   <span class="keywordtype">void</span> *p = operator new(<span class="keyword">sizeof</span>(Vec&lt;T&gt;) * n);
250<a name="l00318"></a>00318   ptr = <span class="keyword">reinterpret_cast&lt;</span>Vec&lt;T&gt;*<span class="keyword">&gt;</span>(p);
251<a name="l00319"></a>00319   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; ++i) {
252<a name="l00320"></a>00320     <span class="keyword">new</span>(ptr + i) Vec&lt;T&gt;(f);
253<a name="l00321"></a>00321   }
254<a name="l00322"></a>00322 }
255<a name="l00323"></a>00323
256<a name="l00324"></a>00324 } <span class="comment">// namespace itpp</span>
257<a name="l00325"></a>00325
258<a name="l00326"></a>00326 <span class="preprocessor">#endif // #ifndef FACTORY_H</span>
259</pre></div></div>
260<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:11 2009 for mixpp by&nbsp;
261<a href="http://www.doxygen.org/index.html">
262<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
263</body>
264</html>
Note: See TracBrowser for help on using the browser.