<!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>message.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:37 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>message.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// message.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">#ifdef __GNUC__</font> 00029 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00030 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00031 <font class="preprocessor"></font> 00032 <font class="preprocessor">#ifndef _util_group_message_h</font> 00033 <font class="preprocessor"></font><font class="preprocessor">#define _util_group_message_h</font> 00034 <font class="preprocessor"></font> 00035 <font class="preprocessor">#include <math.h></font> 00036 <font class="preprocessor">#include <util/class/class.h></font> 00037 <font class="preprocessor">#include <util/state/state.h></font> 00038 <font class="preprocessor">#include <util/keyval/keyval.h></font> 00039 <font class="preprocessor">#include <util/group/topology.h></font> 00040 <font class="preprocessor">#include <util/container/avlmap.h></font> 00041 00042 <font class="keyword">namespace </font>sc { 00043 00044 template <class T> 00045 <font class="keyword">class </font>GrpReduce { 00046 <font class="keyword">public</font>: 00047 <font class="keyword">virtual</font> ~GrpReduce()<font class="keyword"> </font>{}; 00048 <font class="keyword">virtual</font> <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> n) = 0; 00049 }; 00050 00051 template <class T> 00052 <font class="keyword">class </font>GrpSumReduce: <font class="keyword">public</font> GrpReduce<T> { 00053 <font class="keyword">public</font>: 00054 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00055 }; 00056 00057 template <class T> 00058 <font class="keyword">class </font>GrpMinReduce: <font class="keyword">public</font> GrpReduce<T> { 00059 <font class="keyword">public</font>: 00060 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00061 }; 00062 00063 template <class T> 00064 <font class="keyword">class </font>GrpMaxReduce: <font class="keyword">public</font> GrpReduce<T> { 00065 <font class="keyword">public</font>: 00066 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00067 }; 00068 00069 template <class T> 00070 <font class="keyword">class </font>GrpArithmeticAndReduce: <font class="keyword">public</font> GrpReduce<T> { 00071 <font class="keyword">public</font>: 00072 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00073 }; 00074 00075 template <class T> 00076 <font class="keyword">class </font>GrpArithmeticOrReduce: <font class="keyword">public</font> GrpReduce<T> { 00077 <font class="keyword">public</font>: 00078 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00079 }; 00080 00081 template <class T> 00082 <font class="keyword">class </font>GrpArithmeticXOrReduce: <font class="keyword">public</font> GrpReduce<T> { 00083 <font class="keyword">public</font>: 00084 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00085 }; 00086 00087 template <class T> 00088 <font class="keyword">class </font>GrpProductReduce: <font class="keyword">public</font> GrpReduce<T> { 00089 <font class="keyword">public</font>: 00090 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00091 }; 00092 00093 template <class T> 00094 <font class="keyword">class </font>GrpFunctionReduce: <font class="keyword">public</font> GrpReduce<T> { 00095 <font class="keyword">private</font>: 00096 void (*func_)(T*target,T*data,<font class="keywordtype">int</font> nelement); 00097 <font class="keyword">public</font>: 00098 GrpFunctionReduce(<font class="keywordtype">void</font>(*func)(T*,T*,<font class="keywordtype">int</font>)):func_(func)<font class="keyword"> </font>{} 00099 <font class="keywordtype">void</font> reduce(T*target, T*data, <font class="keywordtype">int</font> nelement); 00100 }; 00101 <a name="l00105"></a><a class="code" href="class_sc__MessageGrp.html">00105</a> <font class="keyword">class </font>MessageGrp: <font class="keyword">public</font> DescribedClass { 00106 <font class="keyword">private</font>: 00107 <font class="comment">// These are initialized by the initialize() member (see below).</font> 00108 <font class="keywordtype">int</font> me_; 00109 <font class="keywordtype">int</font> n_; 00110 <font class="keywordtype">int</font> nclass_; 00111 <font class="keywordtype">int</font> gop_max_; 00112 AVLMap<ClassDescP,int> classdesc_to_index_; 00113 ClassDescP *index_to_classdesc_; 00114 <font class="keyword">protected</font>: 00121 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#b0">initialize</a>(<font class="keywordtype">int</font> me, <font class="keywordtype">int</font> n); 00122 00123 Ref<MachineTopology> topology_; 00124 00125 <font class="keywordtype">int</font> debug_; 00126 <font class="keyword">public</font>: 00127 MessageGrp(); 00128 MessageGrp(<font class="keyword">const</font> Ref<KeyVal>&); 00129 <font class="keyword">virtual</font> ~MessageGrp(); 00130 <a name="l00132"></a><a class="code" href="class_sc__MessageGrp.html#a3">00132</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__MessageGrp.html#a3">n</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> n_; } <a name="l00134"></a><a class="code" href="class_sc__MessageGrp.html#a4">00134</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__MessageGrp.html#a4">me</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> me_; } 00135 00138 <font class="keyword">virtual</font> Ref<MessageGrp> <a class="code" href="class_sc__MessageGrp.html#a5">clone</a>(<font class="keywordtype">void</font>)=0; 00139 00142 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#d0">set_default_messagegrp</a>(<font class="keyword">const</font> Ref<MessageGrp>&); 00144 <font class="keyword">static</font> MessageGrp* <a class="code" href="class_sc__MessageGrp.html#d1">get_default_messagegrp</a>(); 00145 00152 <font class="keyword">static</font> MessageGrp* <a class="code" href="class_sc__MessageGrp.html#d2">initial_messagegrp</a>(<font class="keywordtype">int</font> &argc, <font class="keywordtype">char</font>** &argv); 00153 00156 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> ndata); 00157 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00158 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00159 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00160 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00161 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00162 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">short</font>* data, <font class="keywordtype">int</font> ndata); 00163 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">long</font>* data, <font class="keywordtype">int</font> ndata); 00164 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">float</font>* data, <font class="keywordtype">int</font> ndata); 00165 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">double</font> data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(target,&data,1); } 00166 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a6">send</a>(target,&data,1); } 00167 <font class="keyword">virtual</font> <font class="keywordtype">void</font> raw_send(<font class="keywordtype">int</font> target, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte) = 0; 00168 00171 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> ndata); 00172 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00173 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00174 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00175 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00176 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00177 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">short</font>* data, <font class="keywordtype">int</font> ndata); 00178 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">long</font>* data, <font class="keywordtype">int</font> ndata); 00179 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">float</font>* data, <font class="keywordtype">int</font> ndata); 00180 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">double</font> data)<font class="keyword"> </font>{<a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(target,type,&data,1);} 00181 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">int</font> data)<font class="keyword"> </font>{<a class="code" href="class_sc__MessageGrp.html#a18">sendt</a>(target,type,&data,1);} 00182 <font class="keyword">virtual</font> <font class="keywordtype">void</font> raw_sendt(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte) = 0; 00183 00186 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> ndata); 00187 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00188 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00189 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00190 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00191 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00192 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">short</font>* data, <font class="keywordtype">int</font> ndata); 00193 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">long</font>* data, <font class="keywordtype">int</font> ndata); 00194 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">float</font>* data, <font class="keywordtype">int</font> ndata); 00195 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">double</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(sender,&data,1); } 00196 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(<font class="keywordtype">int</font> sender, <font class="keywordtype">int</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a30">recv</a>(sender,&data,1); } 00197 <font class="keyword">virtual</font> <font class="keywordtype">void</font> raw_recv(<font class="keywordtype">int</font> sender, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte) = 0; 00198 00201 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> ndata); 00202 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00203 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata); 00204 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00205 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00206 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte); 00207 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">short</font>* data, <font class="keywordtype">int</font> ndata); 00208 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">long</font>* data, <font class="keywordtype">int</font> ndata); 00209 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">float</font>* data, <font class="keywordtype">int</font> ndata); 00210 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">double</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(type,&data,1); } 00211 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">int</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a42">recvt</a>(type,&data,1); } 00212 <font class="keyword">virtual</font> <font class="keywordtype">void</font> raw_recvt(<font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte) = 0; 00213 00215 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__MessageGrp.html#a54">probet</a>(<font class="keywordtype">int</font> type) = 0; 00216 00219 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> ndata, <font class="keywordtype">int</font> from = 0); 00220 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata, <font class="keywordtype">int</font> from = 0); 00221 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> ndata, <font class="keywordtype">int</font> from = 0); 00222 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte, <font class="keywordtype">int</font> from = 0); 00223 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte, <font class="keywordtype">int</font> from = 0); 00224 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> nbyte, <font class="keywordtype">int</font> from = 0); 00225 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">short</font>* data, <font class="keywordtype">int</font> ndata, <font class="keywordtype">int</font> from = 0); 00226 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">long</font>* data, <font class="keywordtype">int</font> ndata, <font class="keywordtype">int</font> from = 0); 00227 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">float</font>* data, <font class="keywordtype">int</font> ndata, <font class="keywordtype">int</font> from = 0); 00228 <font class="keyword">virtual</font> <font class="keywordtype">void</font> raw_bcast(<font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte, <font class="keywordtype">int</font> from = 0); 00229 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">double</font>& data, <font class="keywordtype">int</font> from = 0)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(&data, 1, from); } 00230 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(<font class="keywordtype">int</font>& data, <font class="keywordtype">int</font> from = 0)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a55">bcast</a>(&data, 1, from); } 00231 00234 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a67">raw_collect</a>(<font class="keyword">const</font> <font class="keywordtype">void</font> *part, <font class="keyword">const</font> <font class="keywordtype">int</font> *lengths, 00235 <font class="keywordtype">void</font> *whole, <font class="keywordtype">int</font> bytes_per_datum=1); 00236 <font class="keywordtype">void</font> collect(<font class="keyword">const</font> <font class="keywordtype">double</font> *part, <font class="keyword">const</font> <font class="keywordtype">int</font> *lengths, <font class="keywordtype">double</font> *whole); 00237 00240 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">double</font>* = 0, <font class="keywordtype">int</font> target = -1); 00241 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* = 0, <font class="keywordtype">int</font> target = -1); 00242 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">int</font>* = 0, <font class="keywordtype">int</font> target = -1); 00243 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00244 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, 00245 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00246 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, 00247 <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00248 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">double</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(&data, 1); } 00249 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(<font class="keywordtype">int</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a69">sum</a>(&data, 1); } 00252 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">double</font>* = 0, <font class="keywordtype">int</font> target = -1); 00253 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">int</font>* = 0, <font class="keywordtype">int</font> target = -1); 00254 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* = 0, <font class="keywordtype">int</font> target = -1); 00255 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00256 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, 00257 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00258 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, 00259 <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00260 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">double</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(&data, 1); } 00261 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(<font class="keywordtype">int</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a77">max</a>(&data, 1); } 00264 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">double</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">double</font>* = 0, <font class="keywordtype">int</font> target = -1); 00265 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">int</font>* = 0, <font class="keywordtype">int</font> target = -1); 00266 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>* = 0, <font class="keywordtype">int</font> target = -1); 00267 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00268 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, 00269 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00270 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">signed</font> <font class="keywordtype">char</font>* data, <font class="keywordtype">int</font> n, 00271 <font class="keywordtype">signed</font> <font class="keywordtype">char</font>* = 0, <font class="keywordtype">int</font> target = -1); 00272 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">double</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(&data, 1); } 00273 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(<font class="keywordtype">int</font>& data)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a85">min</a>(&data, 1); } 00276 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">double</font>*, <font class="keywordtype">int</font> n, GrpReduce<double>&, 00277 <font class="keywordtype">double</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00278 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">int</font>*, <font class="keywordtype">int</font> n, GrpReduce<int>&, 00279 <font class="keywordtype">int</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00280 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>*, <font class="keywordtype">int</font> n, GrpReduce<unsigned int>&, 00281 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00282 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">char</font>*, <font class="keywordtype">int</font> n, GrpReduce<char>&, 00283 <font class="keywordtype">char</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00284 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>*, <font class="keywordtype">int</font> n, GrpReduce<unsigned char>&, 00285 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00286 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">signed</font> <font class="keywordtype">char</font>*, <font class="keywordtype">int</font> n, GrpReduce<signed char>&, 00287 <font class="keywordtype">signed</font> <font class="keywordtype">char</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00288 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">short</font>*, <font class="keywordtype">int</font> n, GrpReduce<short>&, 00289 <font class="keywordtype">short</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00290 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">float</font>*, <font class="keywordtype">int</font> n, GrpReduce<float>&, 00291 <font class="keywordtype">float</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00292 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">long</font>*, <font class="keywordtype">int</font> n, GrpReduce<long>&, 00293 <font class="keywordtype">long</font>*scratch = 0, <font class="keywordtype">int</font> target = -1); 00294 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">double</font>& data, GrpReduce<double>& r)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(&data, 1, r); } 00295 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(<font class="keywordtype">int</font>& data, GrpReduce<int>& r)<font class="keyword"> </font>{ <a class="code" href="class_sc__MessageGrp.html#a93">reduce</a>(&data, 1, r); } 00296 00298 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#a104">sync</a>(); 00299 00305 <font class="keywordtype">int</font> <a class="code" href="class_sc__MessageGrp.html#a105">classdesc_to_index</a>(<font class="keyword">const</font> ClassDesc*); 00306 <font class="keyword">const</font> ClassDesc* index_to_classdesc(<font class="keywordtype">int</font>); 00307 <font class="keywordtype">int</font> nclass()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> nclass_; } 00308 }; 00309 00310 <font class="keyword">struct </font>message_struct { 00311 <font class="keywordtype">void</font> *buf; 00312 <font class="keywordtype">int</font> size; 00313 <font class="keywordtype">int</font> type; 00314 <font class="keyword">struct </font>message_struct *p; 00315 }; 00316 <font class="keyword">typedef</font> <font class="keyword">struct </font>message_struct message_t; 00317 00318 <a name="l00321"></a><a class="code" href="class_sc__ProcMessageGrp.html">00321</a> <font class="keyword">class </font>ProcMessageGrp: <font class="keyword">public</font> MessageGrp { 00322 <font class="keyword">private</font>: 00323 <font class="comment">// Messages are stored in these linked lists</font> 00324 message_t *sync_messages; 00325 message_t *type_messages; 00326 00327 <font class="keywordtype">void</font> sendit(message_t *& messages, <font class="keywordtype">int</font> dest, <font class="keywordtype">int</font> msgtype, <font class="keywordtype">void</font>* buf, <font class="keywordtype">int</font> bytes); 00328 <font class="keywordtype">void</font> recvit(message_t *& messages, <font class="keywordtype">int</font> source, <font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* buf, <font class="keywordtype">int</font> bytes, 00329 <font class="keywordtype">int</font>& last_size, <font class="keywordtype">int</font>& last_type); 00330 00331 <font class="keyword">public</font>: 00332 ProcMessageGrp(); 00333 ProcMessageGrp(<font class="keyword">const</font> Ref<KeyVal>&); 00334 ~ProcMessageGrp(); 00335 00336 Ref<MessageGrp> <a class="code" href="class_sc__ProcMessageGrp.html#a3">clone</a>(<font class="keywordtype">void</font>); 00337 00338 <font class="keywordtype">void</font> raw_send(<font class="keywordtype">int</font> target, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00339 <font class="keywordtype">void</font> raw_sendt(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00340 <font class="keywordtype">void</font> raw_recv(<font class="keywordtype">int</font> sender, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00341 <font class="keywordtype">void</font> raw_recvt(<font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00342 <font class="keywordtype">void</font> raw_bcast(<font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte, <font class="keywordtype">int</font> from); 00343 <font class="keywordtype">int</font> <a class="code" href="class_sc__ProcMessageGrp.html#a9">probet</a>(<font class="keywordtype">int</font> type); 00344 <font class="keywordtype">void</font> <a class="code" href="class_sc__ProcMessageGrp.html#a10">sync</a>(); 00345 }; 00346 <a name="l00351"></a><a class="code" href="class_sc__intMessageGrp.html">00351</a> <font class="keyword">class </font>intMessageGrp: <font class="keyword">public</font> MessageGrp { 00352 <font class="keyword">protected</font>: 00353 <font class="keywordtype">int</font> msgtype_nbit; <font class="comment">// the total number of bits available</font> 00354 <font class="keywordtype">int</font> ctl_nbit; <font class="comment">// control information bits</font> 00355 <font class="keywordtype">int</font> seq_nbit; <font class="comment">// sequence information bits</font> 00356 <font class="keywordtype">int</font> typ_nbit; <font class="comment">// type information bits</font> 00357 <font class="keywordtype">int</font> src_nbit; <font class="comment">// source information bits</font> 00358 00359 <font class="comment">// Masks for the fields in the type.</font> 00360 <font class="keywordtype">int</font> ctl_mask; 00361 <font class="keywordtype">int</font> seq_mask; 00362 <font class="keywordtype">int</font> typ_mask; 00363 <font class="keywordtype">int</font> src_mask; 00364 00365 <font class="comment">// Shifts to construct a message type.</font> 00366 <font class="keywordtype">int</font> ctl_shift; 00367 <font class="keywordtype">int</font> seq_shift; 00368 <font class="keywordtype">int</font> typ_shift; 00369 <font class="keywordtype">int</font> src_shift; 00370 00371 <font class="keywordtype">int</font> msgtype_typ(<font class="keywordtype">int</font> msgtype); 00372 <font class="keywordtype">int</font> typ_msgtype(<font class="keywordtype">int</font> usrtype); 00373 <font class="keywordtype">int</font> seq_msgtype(<font class="keywordtype">int</font> source, <font class="keywordtype">int</font> seq); 00374 00375 <font class="comment">// The next sequence number for each node is stored in these.</font> 00376 <font class="keywordtype">int</font> *source_seq; 00377 <font class="keywordtype">int</font> *target_seq; 00378 00380 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__intMessageGrp.html#b3">basic_send</a>(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte) = 0; 00382 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__intMessageGrp.html#b4">basic_recv</a>(<font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte) = 0; 00384 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__intMessageGrp.html#b5">basic_probe</a>(<font class="keywordtype">int</font> type) = 0; 00385 00386 intMessageGrp(); 00387 intMessageGrp(<font class="keyword">const</font> Ref<KeyVal>&); 00388 00389 <font class="keywordtype">void</font> <a class="code" href="class_sc__MessageGrp.html#b0">initialize</a>(<font class="keywordtype">int</font> me, <font class="keywordtype">int</font> n, <font class="keywordtype">int</font> nbits); 00390 <font class="keyword">public</font>: 00391 ~intMessageGrp(); 00392 00393 <font class="keywordtype">void</font> raw_send(<font class="keywordtype">int</font> target, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00394 <font class="keywordtype">void</font> raw_recv(<font class="keywordtype">int</font> sender, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00395 <font class="keywordtype">void</font> raw_sendt(<font class="keywordtype">int</font> target, <font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00396 <font class="keywordtype">void</font> raw_recvt(<font class="keywordtype">int</font> type, <font class="keywordtype">void</font>* data, <font class="keywordtype">int</font> nbyte); 00397 00398 <font class="keywordtype">int</font> <a class="code" href="class_sc__intMessageGrp.html#a5">probet</a>(<font class="keywordtype">int</font>); 00399 00400 <font class="keywordtype">int</font> leftover_ctl_bits(); 00401 }; 00402 00403 } 00404 00405 <font class="preprocessor">#include <util/group/messaget.h></font> 00406 00407 <font class="preprocessor">#endif</font> 00408 <font class="preprocessor"></font> 00409 00410 <font class="comment">// Local Variables:</font> 00411 <font class="comment">// mode: c++</font> 00412 <font class="comment">// c-file-style: "CLJ"</font> 00413 <font class="comment">// End:</font> </div></pre><hr> <address> <small> Generated at Mon Oct 14 14:16:37 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>