MPQC  2.3.1
messaget.h
1 //
2 // messaget.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifndef _util_group_messaget_h
29 #define _util_group_messaget_h
30 
31 #ifdef __GNUC__
32 #pragma implementation
33 #endif
34 
35 #include <util/group/message.h>
36 
37 namespace sc {
38 
39 template <class T>
40 void
41 GrpSumReduce<T>::reduce(T*target, T*data, int nelement)
42 {
43  for (int i=0; i<nelement; i++) {
44  target[i] += data[i];
45  }
46 }
47 
48 template <class T>
49 void
50 GrpMinReduce<T>::reduce(T*target, T*data, int nelement)
51 {
52  for (int i=0; i<nelement; i++) {
53  if (target[i] > data[i]) target[i] = data[i];
54  }
55 }
56 
57 template <class T>
58 void
59 GrpMaxReduce<T>::reduce(T*target, T*data, int nelement)
60 {
61  for (int i=0; i<nelement; i++) {
62  if (target[i] < data[i]) target[i] = data[i];
63  }
64 }
65 
66 template <class T>
67 void
68 GrpArithmeticAndReduce<T>::reduce(T*target, T*data, int nelement)
69 {
70  for (int i=0; i<nelement; i++) {
71  target[i] = target[i] & data[i];
72  }
73 }
74 
75 template <class T>
76 void
77 GrpArithmeticOrReduce<T>::reduce(T*target, T*data, int nelement)
78 {
79  for (int i=0; i<nelement; i++) {
80  target[i] = target[i] | data[i];
81  }
82 }
83 
84 template <class T>
85 void
86 GrpArithmeticXOrReduce<T>::reduce(T*target, T*data, int nelement)
87 {
88  for (int i=0; i<nelement; i++) {
89  target[i] = target[i] ^ data[i];
90  }
91 }
92 
93 template <class T>
94 void
95 GrpProductReduce<T>::reduce(T*target, T*data, int nelement)
96 {
97  for (int i=0; i<nelement; i++) {
98  target[i] *= data[i];
99  }
100 }
101 
102 template <class T>
103 void
104 GrpFunctionReduce<T>::reduce(T*target, T*data, int nelement)
105 {
106  (*func_)(target,data,nelement);
107 }
108 
109 }
110 
111 #endif
112 
114 
115 // Local Variables:
116 // mode: c++
117 // c-file-style: "CLJ"
118 // End:

Generated at Sun Jan 26 2020 23:33:04 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.