Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > media > contrib > by-pkgid > 263386785cefb9ae5d63b926d214d809 > files > 1268

mpqc-2.1.2-4mdk.ppc.rpm

<!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>memory.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> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>memory.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font>
00002 <font class="comment">// memory.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 &lt;cljanss@limitpt.com&gt;</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_memory_h</font>
00033 <font class="preprocessor"></font><font class="preprocessor">#define _util_group_memory_h</font>
00034 <font class="preprocessor"></font>
00035 <font class="preprocessor">#include &lt;iostream&gt;</font>
00036 
00037 <font class="preprocessor">#include &lt;scconfig.h&gt;</font>
00038 <font class="preprocessor">#include &lt;util/class/class.h&gt;</font>
00039 <font class="preprocessor">#include &lt;util/group/thread.h&gt;</font>
00040 
00041 <font class="keyword">namespace </font>sc {
00042 
00043 <font class="preprocessor">#if 0 // this can be used to catch accidental conversions to int</font>
00044 <font class="preprocessor"></font><font class="keyword">class </font>distsize_t {
00045     <font class="keyword">friend</font> size_t distsize_to_size(<font class="keyword">const</font> distsize_t &amp;a);
00046     <font class="keyword">friend</font> distsize_t operator *(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b);
00047     <font class="keyword">friend</font> distsize_t operator +(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b);
00048     <font class="keyword">friend</font> distsize_t operator -(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b);
00049     <font class="keyword">friend</font> distsize_t operator /(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b);
00050     <font class="keyword">friend</font> distsize_t operator %(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b);
00051     <font class="keyword">friend</font> ostream&amp; operator &lt;&lt;(ostream&amp; o, <font class="keyword">const</font> distsize_t &amp;s);
00052   <font class="keyword">private</font>:
00053     <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> <font class="keywordtype">long</font> s;
00054   <font class="keyword">public</font>:
00055     distsize_t(): s(999999999999999LL) {}
00056     distsize_t(<font class="keywordtype">int</font> a): s(a) {}
00057     distsize_t(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> a): s(a) {}
00058     distsize_t(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> <font class="keywordtype">long</font> a): s(a) {}
00059     distsize_t &amp;operator =(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"></font>
00060 <font class="keyword">        </font>{ s=a.s; <font class="keywordflow">return</font> *<font class="keyword">this</font>; }
00061     distsize_t &amp;operator +=(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"></font>
00062 <font class="keyword">        </font>{ s+=a.s; <font class="keywordflow">return</font> *<font class="keyword">this</font>; }
00063     distsize_t operator *(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00064 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s*a.s; }
00065     distsize_t operator +(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00066 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s+a.s; }
00067     distsize_t operator -(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00068 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s-a.s; }
00069     distsize_t operator /(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00070 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s/a.s; }
00071     distsize_t operator %(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00072 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s%a.s; }
00073     <font class="keywordtype">bool</font> operator &lt;(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00074 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s&lt;a.s; }
00075     <font class="keywordtype">bool</font> operator &lt;=(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00076 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s&lt;=a.s; }
00077     <font class="keywordtype">bool</font> operator &gt;(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00078 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s&gt;a.s; }
00079     <font class="keywordtype">bool</font> operator &gt;=(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00080 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s&gt;=a.s; }
00081     <font class="keywordtype">bool</font> operator ==(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> const</font>
00082 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s==a.s; }
00083     distsize_t operator *(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a)<font class="keyword"> const</font>
00084 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s*a; }
00085     distsize_t operator +(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a)<font class="keyword"> const</font>
00086 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s+a; }
00087     distsize_t operator -(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a)<font class="keyword"> const</font>
00088 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s-a; }
00089     distsize_t operator /(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a)<font class="keyword"> const</font>
00090 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s/a; }
00091     distsize_t operator %(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a)<font class="keyword"> const</font>
00092 <font class="keyword">        </font>{ <font class="keywordflow">return</font> s%a; }
00093 };
00094 <font class="keyword">inline</font> distsize_t operator *(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b)<font class="keyword"></font>
00095 <font class="keyword"></font>{ <font class="keywordflow">return</font> a*b.s; }
00096 <font class="keyword">inline</font> distsize_t operator +(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b)<font class="keyword"></font>
00097 <font class="keyword"></font>{ <font class="keywordflow">return</font> a+b.s; }
00098 <font class="keyword">inline</font> distsize_t operator -(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b)<font class="keyword"></font>
00099 <font class="keyword"></font>{ <font class="keywordflow">return</font> a-b.s; }
00100 <font class="keyword">inline</font> distsize_t operator /(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b)<font class="keyword"></font>
00101 <font class="keyword"></font>{ <font class="keywordflow">return</font> a/b.s; }
00102 <font class="keyword">inline</font> distsize_t operator %(<font class="keyword">const</font> <font class="keywordtype">int</font> &amp;a,<font class="keyword">const</font> distsize_t &amp;b)<font class="keyword"></font>
00103 <font class="keyword"></font>{ <font class="keywordflow">return</font> a%b.s; }
00104 <font class="keyword">inline</font> ostream&amp; operator &lt;&lt;(ostream&amp; o, <font class="keyword">const</font> distsize_t &amp;s)<font class="keyword"> </font>{ <font class="keywordflow">return</font> o&lt;&lt;s.s; }
00105 <font class="keyword">inline</font> size_t distsize_to_size(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> </font>{<font class="keywordflow">return</font> a.s;}
00106 <font class="preprocessor">#elif defined(HAVE_LONG_LONG)</font>
00107 <font class="preprocessor"></font><font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> <font class="keywordtype">long</font> distsize_t;
00108 <font class="keyword">typedef</font> <font class="keywordtype">long</font> <font class="keywordtype">long</font> distssize_t;
00109 <font class="keyword">inline</font> size_t distsize_to_size(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> </font>{<font class="keywordflow">return</font> a;}
00110 <font class="preprocessor">#else</font>
00111 <font class="preprocessor"></font><font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> distsize_t;
00112 <font class="keyword">typedef</font> <font class="keywordtype">long</font> distssize_t;
00113 <font class="keyword">inline</font> size_t distsize_to_size(<font class="keyword">const</font> distsize_t &amp;a)<font class="keyword"> </font>{<font class="keywordflow">return</font> a;}
00114 <font class="preprocessor">#endif</font>
00115 <font class="preprocessor"></font>
<a name="l00155"></a><a class="code" href="class_sc__MemoryGrp.html">00155</a> <font class="keyword">class </font>MemoryGrp: <font class="keyword">public</font> DescribedClass {
00156   <font class="keyword">private</font>:
00157     Ref&lt;ThreadLock&gt; *locks_;
00158     <font class="keywordtype">int</font> nlock_;
00159  
00160     <font class="keywordtype">void</font> init_locks();
00161 
00162 
00163   <font class="keyword">protected</font>:
00164     <font class="comment">// derived classes must fill in all these</font>
00165     <font class="comment">// ~MemoryGrp deletes the arrays</font>
00166     <font class="keywordtype">int</font> me_;
00167     <font class="keywordtype">int</font> n_;
00168     distsize_t *offsets_; <font class="comment">// offsets_[n_] is the fence for all data</font>
00169 
00170     <font class="comment">// set to nonzero for debugging information</font>
00171     <font class="keywordtype">int</font> debug_;
00172 
00173     <font class="keywordtype">void</font> obtain_local_lock(size_t start, size_t fence);
00174     <font class="keywordtype">void</font> release_local_lock(size_t start, size_t fence);
00175   <font class="keyword">public</font>:
00176     MemoryGrp();
00177     MemoryGrp(<font class="keyword">const</font> Ref&lt;KeyVal&gt;&amp;);
00178     <font class="keyword">virtual</font> ~MemoryGrp();
00179     
<a name="l00181"></a><a class="code" href="class_sc__MemoryGrp.html#a3">00181</a>     <font class="keywordtype">int</font> <a class="code" href="class_sc__MemoryGrp.html#a3">me</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> me_; }
<a name="l00183"></a><a class="code" href="class_sc__MemoryGrp.html#a4">00183</a>     <font class="keywordtype">int</font> <a class="code" href="class_sc__MemoryGrp.html#a4">n</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> n_; }
00184 
00188     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a5">set_localsize</a>(size_t) = 0;
<a name="l00190"></a><a class="code" href="class_sc__MemoryGrp.html#a6">00190</a>     size_t <a class="code" href="class_sc__MemoryGrp.html#a6">localsize</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> distsize_to_size(offsets_[me_+1]-offsets_[me_]); }
00192     <font class="keyword">virtual</font> <font class="keywordtype">void</font> *<a class="code" href="class_sc__MemoryGrp.html#a7">localdata</a>() = 0;
<a name="l00194"></a><a class="code" href="class_sc__MemoryGrp.html#a8">00194</a>     distsize_t <a class="code" href="class_sc__MemoryGrp.html#a8">localoffset</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> offsets_[me_]; }
<a name="l00196"></a><a class="code" href="class_sc__MemoryGrp.html#a9">00196</a>     <font class="keywordtype">int</font> <a class="code" href="class_sc__MemoryGrp.html#a9">size</a>(<font class="keywordtype">int</font> node)<font class="keyword"></font>
00197 <font class="keyword">        </font>{ <font class="keywordflow">return</font> distsize_to_size(offsets_[node+1] - offsets_[node]); }
<a name="l00199"></a><a class="code" href="class_sc__MemoryGrp.html#a10">00199</a>     distsize_t <a class="code" href="class_sc__MemoryGrp.html#a10">offset</a>(<font class="keywordtype">int</font> node)<font class="keyword"> </font>{ <font class="keywordflow">return</font> offsets_[node]; }
<a name="l00201"></a><a class="code" href="class_sc__MemoryGrp.html#a11">00201</a>     distsize_t <a class="code" href="class_sc__MemoryGrp.html#a11">totalsize</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> offsets_[n_]; }
00202 
00204     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a12">activate</a>();
00206     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a13">deactivate</a>();
00207 
00209     <font class="keyword">virtual</font> <font class="keywordtype">void</font> *<a class="code" href="class_sc__MemoryGrp.html#a14">obtain_writeonly</a>(distsize_t offset, <font class="keywordtype">int</font> size) = 0;
00215     <font class="keyword">virtual</font> <font class="keywordtype">void</font> *<a class="code" href="class_sc__MemoryGrp.html#a15">obtain_readwrite</a>(distsize_t offset, <font class="keywordtype">int</font> size) = 0;
00217     <font class="keyword">virtual</font> <font class="keywordtype">void</font> *<a class="code" href="class_sc__MemoryGrp.html#a16">obtain_readonly</a>(distsize_t offset, <font class="keywordtype">int</font> size) = 0;
00219     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a17">release_readonly</a>(<font class="keywordtype">void</font> *data, distsize_t offset, <font class="keywordtype">int</font> size) = 0;
00221     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a18">release_writeonly</a>(<font class="keywordtype">void</font> *data, distsize_t offset, <font class="keywordtype">int</font> size)=0;
00224     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a19">release_readwrite</a>(<font class="keywordtype">void</font> *data, distsize_t offset, <font class="keywordtype">int</font> size)=0;
00225 
00226     <font class="keyword">virtual</font> <font class="keywordtype">void</font> sum_reduction(<font class="keywordtype">double</font> *data, distsize_t doffset, <font class="keywordtype">int</font> dsize);
00227     <font class="keyword">virtual</font> <font class="keywordtype">void</font> sum_reduction_on_node(<font class="keywordtype">double</font> *data, size_t doffset, <font class="keywordtype">int</font> dsize,
00228                                        <font class="keywordtype">int</font> node = -1);
00229 
00232     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a22">sync</a>() = 0;
00233 
00240     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a23">catchup</a>();
00241 
00243     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#a24">print</a>(std::ostream &amp;o = ExEnv::out0()) <font class="keyword">const</font>;
00244 
00252     <font class="keyword">static</font> MemoryGrp* <a class="code" href="class_sc__MemoryGrp.html#d0">initial_memorygrp</a>(<font class="keywordtype">int</font> &amp;argc, <font class="keywordtype">char</font>** argv);
00253     <font class="keyword">static</font> MemoryGrp* <a class="code" href="class_sc__MemoryGrp.html#d0">initial_memorygrp</a>();
00256     <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrp.html#d2">set_default_memorygrp</a>(<font class="keyword">const</font> Ref&lt;MemoryGrp&gt;&amp;);
00258     <font class="keyword">static</font> MemoryGrp* <a class="code" href="class_sc__MemoryGrp.html#d3">get_default_memorygrp</a>();
00259 };
00260 
00261 
00267 template &lt;class data_t&gt;
<a name="l00268"></a><a class="code" href="class_sc__MemoryGrpBuf.html">00268</a> <font class="keyword">class </font>MemoryGrpBuf {
00269     Ref&lt;MemoryGrp&gt; grp_;
00270     <font class="keyword">enum</font> AccessType { None, Read, Write, ReadWrite };
00271     AccessType accesstype_;
00272     data_t *data_;
00273     distsize_t offset_;
00274     <font class="keywordtype">int</font> length_;
00275   <font class="keyword">public</font>:
00279     <a class="code" href="class_sc__MemoryGrpBuf.html#a0">MemoryGrpBuf</a>(<font class="keyword">const</font> Ref&lt;MemoryGrp&gt; &amp;);
00284     data_t *<a class="code" href="class_sc__MemoryGrpBuf.html#a1">writeonly</a>(distsize_t offset, <font class="keywordtype">int</font> length);
00289     data_t *<a class="code" href="class_sc__MemoryGrpBuf.html#a2">readwrite</a>(distsize_t offset, <font class="keywordtype">int</font> length);
00294     <font class="keyword">const</font> data_t *<a class="code" href="class_sc__MemoryGrpBuf.html#a3">readonly</a>(distsize_t offset, <font class="keywordtype">int</font> length);
00298     data_t *<a class="code" href="class_sc__MemoryGrpBuf.html#a4">writeonly_on_node</a>(size_t offset, <font class="keywordtype">int</font> length, <font class="keywordtype">int</font> node = -1);
00299     data_t *readwrite_on_node(size_t offset, <font class="keywordtype">int</font> length, <font class="keywordtype">int</font> node = -1);
00300     <font class="keyword">const</font> data_t *readonly_on_node(size_t offset, <font class="keywordtype">int</font> length, <font class="keywordtype">int</font> node = -1);
00304     <font class="keywordtype">void</font> <a class="code" href="class_sc__MemoryGrpBuf.html#a7">release</a>();
<a name="l00306"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a8">00306</a>     <font class="keywordtype">int</font> <a class="code" href="class_sc__MemoryGrpBuf.html#a8">length</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> length_; }
00307 };
00308 
00310 <font class="comment">// MemoryGrpBuf members</font>
00311 
00312 template &lt;class data_t&gt;
<a name="l00313"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a0">00313</a> MemoryGrpBuf&lt;data_t&gt;::MemoryGrpBuf(<font class="keyword">const</font> Ref&lt;MemoryGrp&gt; &amp; grp)<font class="keyword"></font>
00314 <font class="keyword"></font>{
00315   grp_ = grp;
00316   accesstype_ = None;
00317 }
00318 
00319 template &lt;class data_t&gt;
00320 data_t *
<a name="l00321"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a1">00321</a> MemoryGrpBuf&lt;data_t&gt;::writeonly(distsize_t offset, <font class="keywordtype">int</font> length)<font class="keyword"></font>
00322 <font class="keyword"></font>{
00323   <font class="keywordflow">if</font> (accesstype_ != None) <a class="code" href="class_sc__MemoryGrpBuf.html#a7">release</a>();
00324   data_ = (data_t *) grp_-&gt;obtain_writeonly(<font class="keyword">sizeof</font>(data_t)*offset,
00325                                             <font class="keyword">sizeof</font>(data_t)*length);
00326   offset_ = offset;
00327   length_ = length;
00328   accesstype_ = Write;
00329   <font class="keywordflow">return</font> data_;
00330 }
00331 
00332 template &lt;class data_t&gt;
00333 data_t *
<a name="l00334"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a2">00334</a> MemoryGrpBuf&lt;data_t&gt;::readwrite(distsize_t offset, <font class="keywordtype">int</font> length)<font class="keyword"></font>
00335 <font class="keyword"></font>{
00336   <font class="keywordflow">if</font> (accesstype_ != None) <a class="code" href="class_sc__MemoryGrpBuf.html#a7">release</a>();
00337   data_ = (data_t *) grp_-&gt;obtain_readwrite(<font class="keyword">sizeof</font>(data_t)*offset,
00338                                             <font class="keyword">sizeof</font>(data_t)*length);
00339   offset_ = offset;
00340   length_ = length;
00341   accesstype_ = ReadWrite;
00342   <font class="keywordflow">return</font> data_;
00343 }
00344 
00345 template &lt;class data_t&gt;
00346 <font class="keyword">const</font> data_t *
<a name="l00347"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a3">00347</a> MemoryGrpBuf&lt;data_t&gt;::readonly(distsize_t offset, <font class="keywordtype">int</font> length)<font class="keyword"></font>
00348 <font class="keyword"></font>{
00349   <font class="keywordflow">if</font> (accesstype_ != None) <a class="code" href="class_sc__MemoryGrpBuf.html#a7">release</a>();
00350   data_ = (data_t *) grp_-&gt;obtain_readonly(<font class="keyword">sizeof</font>(data_t)*offset,
00351                                            <font class="keyword">sizeof</font>(data_t)*length);
00352   offset_ = offset;
00353   length_ = length;
00354   accesstype_ = Read;
00355   <font class="keywordflow">return</font> data_;
00356 }
00357 
00358 template &lt;class data_t&gt;
00359 data_t *
<a name="l00360"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a4">00360</a> MemoryGrpBuf&lt;data_t&gt;::writeonly_on_node(size_t offset, <font class="keywordtype">int</font> length, <font class="keywordtype">int</font> node)<font class="keyword"></font>
00361 <font class="keyword"></font>{
00362   <font class="keywordflow">if</font> (node == -1) node = grp_-&gt;me();
00363   <font class="keywordflow">return</font> <a class="code" href="class_sc__MemoryGrpBuf.html#a1">writeonly</a>(offset + grp_-&gt;offset(node)/<font class="keyword">sizeof</font>(data_t), length);
00364 }
00365 
00366 template &lt;class data_t&gt;
00367 data_t *
00368 MemoryGrpBuf&lt;data_t&gt;::readwrite_on_node(size_t offset, <font class="keywordtype">int</font> length, <font class="keywordtype">int</font> node)<font class="keyword"></font>
00369 <font class="keyword"></font>{
00370   <font class="keywordflow">if</font> (node == -1) node = grp_-&gt;me();
00371   <font class="keywordflow">return</font> <a class="code" href="class_sc__MemoryGrpBuf.html#a2">readwrite</a>(offset + grp_-&gt;offset(node)/<font class="keyword">sizeof</font>(data_t), length);
00372 }
00373 
00374 template &lt;class data_t&gt;
00375 <font class="keyword">const</font> data_t *
00376 MemoryGrpBuf&lt;data_t&gt;::readonly_on_node(size_t offset, <font class="keywordtype">int</font> length, <font class="keywordtype">int</font> node)<font class="keyword"></font>
00377 <font class="keyword"></font>{
00378   <font class="keywordflow">if</font> (node == -1) node = grp_-&gt;me();
00379   <font class="keywordflow">return</font> <a class="code" href="class_sc__MemoryGrpBuf.html#a3">readonly</a>(offset + grp_-&gt;offset(node)/<font class="keyword">sizeof</font>(data_t), length);
00380 }
00381 
00382 template &lt;class data_t&gt;
00383 <font class="keywordtype">void</font>
<a name="l00384"></a><a class="code" href="class_sc__MemoryGrpBuf.html#a7">00384</a> MemoryGrpBuf&lt;data_t&gt;::release()<font class="keyword"></font>
00385 <font class="keyword"></font>{
00386   <font class="keywordflow">if</font> (accesstype_ == Write)
00387       grp_-&gt;release_writeonly((data_t *)data_,
00388                               <font class="keyword">sizeof</font>(data_t)*offset_, <font class="keyword">sizeof</font>(data_t)*length_);
00389   <font class="keywordflow">if</font> (accesstype_ == Read)
00390       grp_-&gt;release_readonly(data_, <font class="keyword">sizeof</font>(data_t)*offset_,
00391                              <font class="keyword">sizeof</font>(data_t)*length_);
00392   <font class="keywordflow">if</font> (accesstype_ == ReadWrite)
00393       grp_-&gt;release_readwrite(data_, <font class="keyword">sizeof</font>(data_t)*offset_,
00394                               <font class="keyword">sizeof</font>(data_t)*length_);
00395 
00396   accesstype_ = None;
00397 }
00398 
00399 }
00400 
00401 <font class="preprocessor">#endif</font>
00402 <font class="preprocessor"></font>
00403 <font class="comment">// Local Variables:</font>
00404 <font class="comment">// mode: c++</font>
00405 <font class="comment">// c-file-style: "CLJ"</font>
00406 <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>