<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta name="robots" content="noindex"> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>elemop.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.5 on Mon Oct 14 14:16:36 2002 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>elemop.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// elemop.h</font> 00003 <font class="comment">//</font> 00004 <font class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</font> 00005 <font class="comment">//</font> 00006 <font class="comment">// Author: Curtis Janssen <cljanss@limitpt.com></font> 00007 <font class="comment">// Maintainer: LPS</font> 00008 <font class="comment">//</font> 00009 <font class="comment">// This file is part of the SC Toolkit.</font> 00010 <font class="comment">//</font> 00011 <font class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</font> 00012 <font class="comment">// it under the terms of the GNU Library General Public License as published by</font> 00013 <font class="comment">// the Free Software Foundation; either version 2, or (at your option)</font> 00014 <font class="comment">// any later version.</font> 00015 <font class="comment">//</font> 00016 <font class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</font> 00017 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00018 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</font> 00019 <font class="comment">// GNU Library General Public License for more details.</font> 00020 <font class="comment">//</font> 00021 <font class="comment">// You should have received a copy of the GNU Library General Public License</font> 00022 <font class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</font> 00023 <font class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</font> 00024 <font class="comment">//</font> 00025 <font class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</font> 00026 <font class="comment">//</font> 00027 00028 <font class="preprocessor">#ifndef _math_scmat_elemop_h</font> 00029 <font class="preprocessor"></font><font class="preprocessor">#define _math_scmat_elemop_h</font> 00030 <font class="preprocessor"></font> 00031 <font class="preprocessor">#ifdef __GNUC__</font> 00032 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00033 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00034 <font class="preprocessor"></font> 00035 <font class="preprocessor">#include <util/state/state.h></font> 00036 <font class="preprocessor">#include <util/group/message.h></font> 00037 00038 <font class="keyword">namespace </font>sc { 00039 00040 <font class="keyword">class </font>SCMatrixBlock; 00041 <font class="keyword">class </font>SCMatrixBlockIter; 00042 <font class="keyword">class </font>SCMatrixRectBlock; 00043 <font class="keyword">class </font>SCMatrixLTriBlock; 00044 <font class="keyword">class </font>SCMatrixDiagBlock; 00045 <font class="keyword">class </font>SCVectorSimpleBlock; 00046 <font class="keyword">class </font>SCMatrixRectSubBlock; 00047 <font class="keyword">class </font>SCMatrixLTriSubBlock; 00048 <font class="keyword">class </font>SCMatrixDiagSubBlock; 00049 <font class="keyword">class </font>SCVectorSimpleSubBlock; 00050 00051 <font class="keyword">class </font>SCMatrix; 00052 <font class="keyword">class </font>SymmSCMatrix; 00053 <font class="keyword">class </font>DiagSCMatrix; 00054 <font class="keyword">class </font>SCVector; 00055 <a name="l00060"></a><a class="code" href="class_sc__SCElementOp.html">00060</a> <font class="keyword">class </font>SCElementOp: <font class="keyword">public</font> SavableState { 00061 <font class="keyword">public</font>: 00062 SCElementOp(); 00063 SCElementOp(StateIn&s): <a class="code" href="class_sc__SavableState.html#b2">SavableState</a>(s)<font class="keyword"> </font>{} 00064 <font class="keyword">virtual</font> ~SCElementOp(); 00072 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__SCElementOp.html#a3">has_collect</a>(); 00073 <font class="keyword">virtual</font> <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00074 <font class="keyword">virtual</font> <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00078 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__SCElementOp.html#a6">has_side_effects</a>(); 00079 00082 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__SCElementOp.html#a7">process</a>(SCMatrixBlockIter&) = 0; 00083 00088 <font class="keywordtype">void</font> <a class="code" href="class_sc__SCElementOp.html#a8">process_base</a>(SCMatrixBlock*block); 00089 00094 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__SCElementOp.html#a9">process_spec_rect</a>(SCMatrixRectBlock*); 00095 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_ltri(SCMatrixLTriBlock*); 00096 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_diag(SCMatrixDiagBlock*); 00097 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_vsimp(SCVectorSimpleBlock*); 00098 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_rectsub(SCMatrixRectSubBlock*); 00099 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_ltrisub(SCMatrixLTriSubBlock*); 00100 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_diagsub(SCMatrixDiagSubBlock*); 00101 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_vsimpsub(SCVectorSimpleSubBlock*); 00102 }; 00103 <a name="l00108"></a><a class="code" href="class_sc__SCElementOp2.html">00108</a> <font class="keyword">class </font>SCElementOp2: <font class="keyword">public</font> SavableState { 00109 <font class="keyword">public</font>: 00110 SCElementOp2(); 00111 SCElementOp2(StateIn&s): <a class="code" href="class_sc__SavableState.html#b2">SavableState</a>(s)<font class="keyword"> </font>{} 00112 <font class="keyword">virtual</font> ~SCElementOp2(); 00113 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_collect(); 00114 <font class="keyword">virtual</font> <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00115 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_side_effects(); 00116 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_side_effects_in_arg(); 00117 <font class="keyword">virtual</font> <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00118 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process(SCMatrixBlockIter&,SCMatrixBlockIter&) = 0; 00119 <font class="keywordtype">void</font> process_base(SCMatrixBlock*,SCMatrixBlock*); 00120 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_rect(SCMatrixRectBlock*,SCMatrixRectBlock*); 00121 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_ltri(SCMatrixLTriBlock*,SCMatrixLTriBlock*); 00122 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_diag(SCMatrixDiagBlock*,SCMatrixDiagBlock*); 00123 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_vsimp(SCVectorSimpleBlock*,SCVectorSimpleBlock*); 00124 }; 00125 <a name="l00130"></a><a class="code" href="class_sc__SCElementOp3.html">00130</a> <font class="keyword">class </font>SCElementOp3: <font class="keyword">public</font> SavableState { 00131 <font class="keyword">public</font>: 00132 SCElementOp3(); 00133 SCElementOp3(StateIn&s): <a class="code" href="class_sc__SavableState.html#b2">SavableState</a>(s)<font class="keyword"> </font>{} 00134 <font class="keyword">virtual</font> ~SCElementOp3(); 00135 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_collect(); 00136 <font class="keyword">virtual</font> <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00137 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_side_effects(); 00138 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_side_effects_in_arg1(); 00139 <font class="keyword">virtual</font> <font class="keywordtype">int</font> has_side_effects_in_arg2(); 00140 <font class="keyword">virtual</font> <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00141 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process(SCMatrixBlockIter&, 00142 SCMatrixBlockIter&, 00143 SCMatrixBlockIter&) = 0; 00144 <font class="keywordtype">void</font> process_base(SCMatrixBlock*,SCMatrixBlock*,SCMatrixBlock*); 00145 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_rect(SCMatrixRectBlock*, 00146 SCMatrixRectBlock*, 00147 SCMatrixRectBlock*); 00148 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_ltri(SCMatrixLTriBlock*, 00149 SCMatrixLTriBlock*, 00150 SCMatrixLTriBlock*); 00151 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_diag(SCMatrixDiagBlock*, 00152 SCMatrixDiagBlock*, 00153 SCMatrixDiagBlock*); 00154 <font class="keyword">virtual</font> <font class="keywordtype">void</font> process_spec_vsimp(SCVectorSimpleBlock*, 00155 SCVectorSimpleBlock*, 00156 SCVectorSimpleBlock*); 00157 }; 00158 00159 <font class="keyword">class </font>SCElementScalarProduct: <font class="keyword">public</font> SCElementOp2 { 00160 <font class="keyword">private</font>: 00161 <font class="keywordtype">int</font> deferred_; 00162 <font class="keywordtype">double</font> product; 00163 <font class="keyword">public</font>: 00164 SCElementScalarProduct(); 00165 SCElementScalarProduct(StateIn&); 00166 ~SCElementScalarProduct(); 00167 <font class="keywordtype">void</font> save_data_state(StateOut&); 00168 <font class="keywordtype">void</font> process(SCMatrixBlockIter&,SCMatrixBlockIter&); 00169 <font class="keywordtype">int</font> has_collect(); 00170 <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00171 <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00172 <font class="keywordtype">double</font> result(); 00173 <font class="keywordtype">void</font> init()<font class="keyword"> </font>{ product = 0.0; } 00174 }; 00175 00176 00177 <font class="keyword">class </font>SCDestructiveElementProduct: <font class="keyword">public</font> SCElementOp2 { 00178 <font class="keyword">public</font>: 00179 SCDestructiveElementProduct(); 00180 SCDestructiveElementProduct(StateIn&); 00181 ~SCDestructiveElementProduct(); 00182 <font class="keywordtype">int</font> has_side_effects(); 00183 <font class="keywordtype">void</font> save_data_state(StateOut&); 00184 <font class="keywordtype">void</font> process(SCMatrixBlockIter&,SCMatrixBlockIter&); 00185 }; 00186 00187 <font class="keyword">class </font>SCElementScale: <font class="keyword">public</font> SCElementOp { 00188 <font class="keyword">private</font>: 00189 <font class="keywordtype">double</font> scale; 00190 <font class="keyword">public</font>: 00191 SCElementScale(<font class="keywordtype">double</font> a); 00192 SCElementScale(StateIn&); 00193 ~SCElementScale(); 00194 <font class="keywordtype">int</font> has_side_effects(); 00195 <font class="keywordtype">void</font> save_data_state(StateOut&); 00196 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00197 }; 00198 00199 <font class="keyword">class </font>SCElementRandomize: <font class="keyword">public</font> SCElementOp { 00200 <font class="keyword">private</font>: 00201 <font class="keywordtype">double</font> assign; 00202 <font class="keyword">public</font>: 00203 SCElementRandomize(); 00204 SCElementRandomize(StateIn&); 00205 ~SCElementRandomize(); 00206 <font class="keywordtype">int</font> has_side_effects(); 00207 <font class="keywordtype">void</font> save_data_state(StateOut&); 00208 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00209 }; 00210 00211 <font class="keyword">class </font>SCElementAssign: <font class="keyword">public</font> SCElementOp { 00212 <font class="keyword">private</font>: 00213 <font class="keywordtype">double</font> assign; 00214 <font class="keyword">public</font>: 00215 SCElementAssign(<font class="keywordtype">double</font> a); 00216 SCElementAssign(StateIn&); 00217 ~SCElementAssign(); 00218 <font class="keywordtype">int</font> has_side_effects(); 00219 <font class="keywordtype">void</font> save_data_state(StateOut&); 00220 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00221 }; 00222 00223 <font class="keyword">class </font>SCElementSquareRoot: <font class="keyword">public</font> SCElementOp { 00224 <font class="keyword">public</font>: 00225 SCElementSquareRoot(); 00226 SCElementSquareRoot(<font class="keywordtype">double</font> a); 00227 SCElementSquareRoot(StateIn&); 00228 ~SCElementSquareRoot(); 00229 <font class="keywordtype">int</font> has_side_effects(); 00230 <font class="keywordtype">void</font> save_data_state(StateOut&); 00231 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00232 }; 00233 00234 <font class="keyword">class </font>SCElementInvert: <font class="keyword">public</font> SCElementOp { 00235 <font class="keyword">private</font>: 00236 <font class="keywordtype">double</font> threshold_; 00237 <font class="keywordtype">int</font> nbelowthreshold_; 00238 <font class="keywordtype">int</font> deferred_; 00239 <font class="keyword">public</font>: 00240 SCElementInvert(<font class="keywordtype">double</font> threshold = 0.0); 00241 SCElementInvert(StateIn&); 00242 ~SCElementInvert(); 00243 <font class="keywordtype">int</font> has_side_effects(); 00244 <font class="keywordtype">void</font> save_data_state(StateOut&); 00245 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00246 <font class="keywordtype">int</font> has_collect(); 00247 <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00248 <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00249 <font class="keywordtype">int</font> result()<font class="keyword"> </font>{ <font class="keywordflow">return</font> nbelowthreshold_; } 00250 }; 00251 00252 00253 <font class="keyword">class </font>SCElementScaleDiagonal: <font class="keyword">public</font> SCElementOp { 00254 <font class="keyword">private</font>: 00255 <font class="keywordtype">double</font> scale_diagonal; 00256 <font class="keyword">public</font>: 00257 SCElementScaleDiagonal(<font class="keywordtype">double</font> a); 00258 SCElementScaleDiagonal(StateIn&); 00259 ~SCElementScaleDiagonal(); 00260 <font class="keywordtype">int</font> has_side_effects(); 00261 <font class="keywordtype">void</font> save_data_state(StateOut&); 00262 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00263 }; 00264 00265 <font class="keyword">class </font>SCElementShiftDiagonal: <font class="keyword">public</font> SCElementOp { 00266 <font class="keyword">private</font>: 00267 <font class="keywordtype">double</font> shift_diagonal; 00268 <font class="keyword">public</font>: 00269 SCElementShiftDiagonal(<font class="keywordtype">double</font> a); 00270 SCElementShiftDiagonal(StateIn&); 00271 ~SCElementShiftDiagonal(); 00272 <font class="keywordtype">int</font> has_side_effects(); 00273 <font class="keywordtype">void</font> save_data_state(StateOut&); 00274 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00275 }; 00276 00277 <font class="keyword">class </font>SCElementMaxAbs: <font class="keyword">public</font> SCElementOp { 00278 <font class="keyword">private</font>: 00279 <font class="keywordtype">int</font> deferred_; 00280 <font class="keywordtype">double</font> r; 00281 <font class="keyword">public</font>: 00282 SCElementMaxAbs(); 00283 SCElementMaxAbs(StateIn&); 00284 ~SCElementMaxAbs(); 00285 <font class="keywordtype">void</font> save_data_state(StateOut&); 00286 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00287 <font class="keywordtype">int</font> has_collect(); 00288 <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00289 <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00290 <font class="keywordtype">double</font> result(); 00291 }; 00292 00293 00294 <font class="keyword">class </font>SCElementMinAbs: <font class="keyword">public</font> SCElementOp { 00295 <font class="keyword">private</font>: 00296 <font class="keywordtype">int</font> deferred_; 00297 <font class="keywordtype">double</font> r; 00298 <font class="keyword">public</font>: 00299 <font class="comment">// rinit must be greater than the magnitude of the smallest element</font> 00300 SCElementMinAbs(<font class="keywordtype">double</font> rinit); 00301 SCElementMinAbs(StateIn&); 00302 ~SCElementMinAbs(); 00303 <font class="keywordtype">void</font> save_data_state(StateOut&); 00304 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00305 <font class="keywordtype">int</font> has_collect(); 00306 <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00307 <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00308 <font class="keywordtype">double</font> result(); 00309 }; 00310 00311 00312 <font class="keyword">class </font>SCElementSumAbs: <font class="keyword">public</font> SCElementOp { 00313 <font class="keyword">private</font>: 00314 <font class="keywordtype">int</font> deferred_; 00315 <font class="keywordtype">double</font> r; 00316 <font class="keyword">public</font>: 00317 SCElementSumAbs(); 00318 SCElementSumAbs(StateIn&); 00319 ~SCElementSumAbs(); 00320 <font class="keywordtype">void</font> save_data_state(StateOut&); 00321 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00322 <font class="keywordtype">int</font> has_collect(); 00323 <font class="keywordtype">void</font> defer_collect(<font class="keywordtype">int</font>); 00324 <font class="keywordtype">void</font> collect(<font class="keyword">const</font> Ref<MessageGrp>&); 00325 <font class="keywordtype">double</font> result(); 00326 <font class="keywordtype">void</font> init()<font class="keyword"> </font>{ r = 0.0; } 00327 }; 00328 00329 00330 <font class="keyword">class </font>SCElementDot: <font class="keyword">public</font> SCElementOp { 00331 <font class="keyword">private</font>: 00332 <font class="keywordtype">double</font>** avects; 00333 <font class="keywordtype">double</font>** bvects; 00334 <font class="keywordtype">int</font> length; 00335 <font class="keyword">public</font>: 00336 SCElementDot(StateIn&); 00337 <font class="keywordtype">void</font> save_data_state(StateOut&); 00338 SCElementDot(<font class="keywordtype">double</font>**a, <font class="keywordtype">double</font>**b, <font class="keywordtype">int</font> length); 00339 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00340 <font class="keywordtype">int</font> has_side_effects(); 00341 }; 00342 00343 <font class="keyword">class </font>SCElementAccumulateSCMatrix: <font class="keyword">public</font> SCElementOp { 00344 <font class="keyword">private</font>: 00345 SCMatrix *m; 00346 <font class="keyword">public</font>: 00347 SCElementAccumulateSCMatrix(SCMatrix *); 00348 <font class="keywordtype">int</font> has_side_effects(); 00349 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00350 }; 00351 00352 <font class="keyword">class </font>SCElementAccumulateSymmSCMatrix: <font class="keyword">public</font> SCElementOp { 00353 <font class="keyword">private</font>: 00354 SymmSCMatrix *m; 00355 <font class="keyword">public</font>: 00356 SCElementAccumulateSymmSCMatrix(SymmSCMatrix *); 00357 <font class="keywordtype">int</font> has_side_effects(); 00358 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00359 }; 00360 00361 <font class="keyword">class </font>SCElementAccumulateDiagSCMatrix: <font class="keyword">public</font> SCElementOp { 00362 <font class="keyword">private</font>: 00363 DiagSCMatrix *m; 00364 <font class="keyword">public</font>: 00365 SCElementAccumulateDiagSCMatrix(DiagSCMatrix *); 00366 <font class="keywordtype">int</font> has_side_effects(); 00367 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00368 }; 00369 00370 <font class="keyword">class </font>SCElementAccumulateSCVector: <font class="keyword">public</font> SCElementOp { 00371 <font class="keyword">private</font>: 00372 SCVector *m; 00373 <font class="keyword">public</font>: 00374 SCElementAccumulateSCVector(SCVector *); 00375 <font class="keywordtype">int</font> has_side_effects(); 00376 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00377 }; 00378 00379 } 00380 00381 <font class="preprocessor">#endif</font> 00382 <font class="preprocessor"></font> 00383 <font class="comment">// Local Variables:</font> 00384 <font class="comment">// mode: c++</font> 00385 <font class="comment">// c-file-style: "CLJ"</font> 00386 <font class="comment">// End:</font> </div></pre><hr> <address> <small> Generated at Mon Oct 14 14:16:36 2002 for <a href="http://aros.ca.sandia.gov/~cljanss/mpqc">MPQC</a> 2.1.2 using the documentation package <a href="http://www.stack.nl/~dimitri/doxygen/index.html">Doxygen</a> 1.2.5. </small> </address> </body> </html>