Changeset 668 for XIOS/trunk/src/distribution_server.cpp
- Timestamp:
- 08/24/15 14:53:36 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/distribution_server.cpp
r653 r668 8 8 */ 9 9 #include "distribution_server.hpp" 10 #include "utils.hpp" 10 11 11 12 namespace xios { … … 91 92 CArray<size_t,1> CDistributionServer::computeLocalIndex(const CArray<size_t,1>& globalIndex) 92 93 { 93 CArray<size_t,1>::const_iterator itBegin = this->globalIndex_.begin(),94 itEnd = this->globalIndex_.end(), it;94 int ssize = globalIndex.numElements(); 95 int nbGlobalIndex = this->globalIndex_.numElements(); 95 96 96 int ssize = globalIndex.numElements(), idx = 0; 97 std::vector<int>::iterator it; 98 std::vector<int> permutIndex(nbGlobalIndex); 99 XIOSAlgorithms::fillInIndex(nbGlobalIndex, permutIndex); 100 XIOSAlgorithms::sortWithIndex<size_t, CArrayStorage>(this->globalIndex_, permutIndex); 101 typedef XIOSBinarySearchWithIndex<size_t, CArrayStorage> BinarySearch; 102 BinarySearch binarySearch(this->globalIndex_); 103 97 104 CArray<size_t,1> localIndex(ssize); 98 i t = itBegin;105 int idx = 0; 99 106 for (int i = 0; i < ssize; ++i) 100 107 { 101 it = std::find(itBegin, itEnd, globalIndex(i)); 102 // it = std::lower_bound(it, itEnd, globalIndex(i)); 103 if (itEnd != it) 108 if (binarySearch.search(permutIndex.begin(), permutIndex.end(), globalIndex(i), it)) 104 109 { 105 localIndex(idx) = std::distance(itBegin, it);110 localIndex(idx) = *it; 106 111 ++idx; 107 112 } … … 117 122 void CDistributionServer::computeLocalIndex(CArray<size_t,1>& globalIndex) 118 123 { 119 CArray<size_t,1>::const_iterator itBegin = this->globalIndex_.begin(),120 itEnd = this->globalIndex_.end(), it;124 int ssize = globalIndex.numElements(); 125 int nbGlobalIndex = this->globalIndex_.numElements(); 121 126 122 int ssize = globalIndex.numElements(), idx = 0; 127 std::vector<int>::iterator it; 128 std::vector<int> permutIndex(nbGlobalIndex); 129 XIOSAlgorithms::fillInIndex(nbGlobalIndex, permutIndex); 130 XIOSAlgorithms::sortWithIndex<size_t, CArrayStorage>(this->globalIndex_, permutIndex); 131 typedef XIOSBinarySearchWithIndex<size_t, CArrayStorage> BinarySearch; 132 BinarySearch binarySearch(this->globalIndex_); 133 123 134 CArray<size_t,1> localIndex(ssize); 124 i t = itBegin;135 int idx = 0; 125 136 for (int i = 0; i < ssize; ++i) 126 137 { 127 it = std::find(itBegin, itEnd, globalIndex(i)); 128 // it = std::lower_bound(it, itEnd, globalIndex(i)); 129 if (itEnd != it) 138 if (binarySearch.search(permutIndex.begin(), permutIndex.end(), globalIndex(i), it)) 130 139 { 131 localIndex(idx) = std::distance(itBegin, it);140 localIndex(idx) = *it; 132 141 ++idx; 133 142 }
Note: See TracChangeset
for help on using the changeset viewer.