Go to the documentation of this file.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 namespace Foam
00029 {
00030
00031
00032
00033 template <class AccessType, class T, class AccessOp>
00034 AccessType ListListOps::combine(const List<T>& lst, AccessOp aop)
00035 {
00036 label sum = 0;
00037
00038 forAll(lst, lstI)
00039 {
00040 sum += aop(lst[lstI]).size();
00041 }
00042
00043 AccessType result(sum);
00044
00045 label globalElemI = 0;
00046
00047 forAll(lst, lstI)
00048 {
00049 const T& sub = lst[lstI];
00050
00051 forAll(aop(sub), elemI)
00052 {
00053 result[globalElemI++] = aop(sub)[elemI];
00054 }
00055 }
00056 return result;
00057 }
00058
00059
00060 template <class T, class AccessOp>
00061 labelList ListListOps::subSizes(const List<T>& lst, AccessOp aop)
00062 {
00063 labelList sizes(lst.size());
00064
00065 forAll(lst, lstI)
00066 {
00067 sizes[lstI] = aop(lst[lstI]).size();
00068 }
00069 return sizes;
00070 }
00071
00072
00073 template <class AccessType, class T, class AccessOp, class OffsetOp>
00074 AccessType ListListOps::combineOffset
00075 (
00076 const List<T>& lst,
00077 const labelList& sizes,
00078 AccessOp aop,
00079 OffsetOp oop
00080 )
00081 {
00082 label sum = 0;
00083
00084 forAll(lst, lstI)
00085 {
00086 sum += aop(lst[lstI]).size();
00087 }
00088
00089 AccessType result(sum);
00090
00091 label globalElemI = 0;
00092
00093 label offset = 0;
00094
00095 forAll(lst, lstI)
00096 {
00097 const T& sub = lst[lstI];
00098
00099 forAll(aop(sub), elemI)
00100 {
00101 result[globalElemI++] = oop(aop(sub)[elemI], offset);
00102 }
00103
00104 offset += sizes[lstI];
00105 }
00106 return result;
00107 }
00108
00109
00110
00111 }
00112
00113
00114