MPQC 2.3.1

- Main Page
- Related Pages
- Classes
- Files

- File List

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: