00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _util_group_messaget_h
00029 #define _util_group_messaget_h
00030
00031 #ifdef __GNUC__
00032 #pragma implementation
00033 #endif
00034
00035 #include <util/group/message.h>
00036
00037 template <class T>
00038 void
00039 GrpSumReduce<T>::reduce(T*target, T*data, int nelement)
00040 {
00041 for (int i=0; i<nelement; i++) {
00042 target[i] += data[i];
00043 }
00044 }
00045
00046 template <class T>
00047 void
00048 GrpMinReduce<T>::reduce(T*target, T*data, int nelement)
00049 {
00050 for (int i=0; i<nelement; i++) {
00051 if (target[i] > data[i]) target[i] = data[i];
00052 }
00053 }
00054
00055 template <class T>
00056 void
00057 GrpMaxReduce<T>::reduce(T*target, T*data, int nelement)
00058 {
00059 for (int i=0; i<nelement; i++) {
00060 if (target[i] < data[i]) target[i] = data[i];
00061 }
00062 }
00063
00064 template <class T>
00065 void
00066 GrpArithmeticAndReduce<T>::reduce(T*target, T*data, int nelement)
00067 {
00068 for (int i=0; i<nelement; i++) {
00069 target[i] = target[i] & data[i];
00070 }
00071 }
00072
00073 template <class T>
00074 void
00075 GrpArithmeticOrReduce<T>::reduce(T*target, T*data, int nelement)
00076 {
00077 for (int i=0; i<nelement; i++) {
00078 target[i] = target[i] | data[i];
00079 }
00080 }
00081
00082 template <class T>
00083 void
00084 GrpArithmeticXOrReduce<T>::reduce(T*target, T*data, int nelement)
00085 {
00086 for (int i=0; i<nelement; i++) {
00087 target[i] = target[i] ^ data[i];
00088 }
00089 }
00090
00091 template <class T>
00092 void
00093 GrpProductReduce<T>::reduce(T*target, T*data, int nelement)
00094 {
00095 for (int i=0; i<nelement; i++) {
00096 target[i] *= data[i];
00097 }
00098 }
00099
00100 template <class T>
00101 void
00102 GrpFunctionReduce<T>::reduce(T*target, T*data, int nelement)
00103 {
00104 (*func_)(target,data,nelement);
00105 }
00106
00107 #endif
00108
00110
00111
00112
00113
00114