triskele/include/ArrayTree/triskeleSort.tpp
Git Merciol f687310939 modifié : CMakeLists.txt
modifié :         CMakeListsOTB.txt
	modifié :         LICENSE
	modifié :         MakefileNoOTB
	modifié :         Readme.html
	modifié :         Readme.txt
	modifié :         include/Appli/Option.hpp
	modifié :         include/Appli/Selected.hpp
	modifié :         include/Appli/Selected.tpp
	modifié :         include/ArrayTree/ArrayTreeBuilder.hpp
	modifié :         include/ArrayTree/ArrayTreeBuilder.tpp
	modifié :         include/ArrayTree/Border.hpp
	modifié :         include/ArrayTree/Border.tpp
	modifié :         include/ArrayTree/GraphWalker.hpp
	modifié :         include/ArrayTree/GraphWalker.tpp
	modifié :         include/ArrayTree/Leader.hpp
	modifié :         include/ArrayTree/Leader.tpp
	modifié :         include/ArrayTree/Weight.hpp
	modifié :         include/ArrayTree/Weight.tpp
	modifié :         include/ArrayTree/triskeleArrayTreeBase.hpp
	modifié :         include/ArrayTree/triskeleArrayTreeBase.tpp
	modifié :         include/ArrayTree/triskeleSort.hpp
	modifié :         include/ArrayTree/triskeleSort.tpp
	modifié :         include/AttributeProfiles.hpp
	modifié :         include/AttributeProfiles.tpp
	modifié :         include/Attributes/AreaAttributes.hpp
	modifié :         include/Attributes/AreaAttributes.tpp
	modifié :         include/Attributes/AverageAttributes.hpp
	modifié :         include/Attributes/AverageAttributes.tpp
	modifié :         include/Attributes/MoIAttributes.hpp
	modifié :         include/Attributes/MoIAttributes.tpp
	modifié :         include/Attributes/SDAttributes.hpp
	modifié :         include/Attributes/SDAttributes.tpp
	modifié :         include/Attributes/WeightAttributes.hpp
	modifié :         include/Attributes/WeightAttributes.tpp
	modifié :         include/Attributes/XYAttributes.hpp
	modifié :         include/Attributes/XYAttributes.tpp
	modifié :         include/CompAttribute.hpp
	modifié :         include/CompAttribute.tpp
	modifié :         include/IImage.hpp
	modifié :         include/IImage.tpp
	modifié :         include/QuadTree/QuadTreeBuilder.hpp
	modifié :         include/Tree.hpp
	modifié :         include/Tree.tpp
	modifié :         include/TreeBuilder.hpp
	modifié :         include/TreeBuilder.tpp
	modifié :         include/TreeStats.hpp
	modifié :         include/TreeStats.tpp
	modifié :         include/XMLTree/XMLTreeBuilder.hpp
	modifié :         include/triskeleBase.hpp
	modifié :         include/triskeleBase.tpp
	modifié :         include/triskeleDealThreads.hpp
	modifié :         include/triskeleDealThreads.tpp
	modifié :         include/triskeleDebug.hpp
	modifié :         include/triskeleGdalGetType.hpp
	modifié :         otb-module.cmake
	modifié :         src/Appli/Option.cpp
	modifié :         src/Appli/Selected.cpp
	modifié :         src/ArrayTree/triskeleArrayTreeBase.cpp
	modifié :         src/CMakeLists.txt
	modifié :         src/IImage.cpp
	modifié :         src/PerfArrayTreeBuilder.cpp
	modifié :         src/QuadTree/QuadTreeBuilder.cpp
	modifié :         src/TestArrayTreeBuilder.cpp
	modifié :         src/Tree.cpp
	modifié :         src/TreeStats.cpp
	modifié :         src/XMLTree/XMLTreeBuilder.cpp
	modifié :         src/apGenerator.cpp
	modifié :         src/triskeleBase.cpp
	modifié :         src/triskeleDebug.cpp
2018-04-02 19:25:37 +02:00

53 lines
1.6 KiB
C++

#ifndef _OTB_TRISKELE_ARRAY_TREE_SORT_TPP
#define _OTB_TRISKELE_ARRAY_TREE_SORT_TPP
// ========================================
template <typename T>
inline vector<T> getRandReduce (vector<T> index, T reduceCount);
template <typename E, typename WeightT, typename DimImg, typename WeightFunct>
inline DimImg mergeSort (E *dst, const vector<E *> &tab, const vector<DimImg> &tabSize, const WeightFunct &weightFunct);
// ========================================
template <typename T>
inline vector<T> getRandReduce (vector<T> index, T reduceCount) {
T size = index.size ();
if (reduceCount >= size)
return index;
for (T i = 0; i < size; ++i) {
T j = rand () % size;
T tmp = index [i];
index [i] = index [j];
index [j] = tmp;
}
vector<T> result (&index [0], &index[reduceCount]);
return result;
}
template <typename E, typename WeightT, typename DimImg, typename WeightFunct>
inline DimImg mergeSort (E *dst, const vector<E *> &tab, const vector<DimImg> &tabSize, const WeightFunct &weightFunct) {
DimImg count = 0;
vector<DimImg> curIdx (tab.size (), 0);
for (;;) {
int minIdx = -1;
WeightT minLevel = 0;
for (DimImg i = 0; i < curIdx.size (); ++i) {
if (curIdx[i] >= tabSize[i])
continue;
if (minIdx >= 0 &&
!weightFunct.isWeightInf (tab[i][curIdx[i]], minLevel))
continue;
minIdx = i;
minLevel = tab[i][curIdx[i]];
// LOG ("set minIdx:" << minIdx << " minLevel:" << minLevel);
}
if (minIdx < 0)
break;
*dst++ = tab[minIdx][curIdx[minIdx]++];
++count;
}
return count;
}
#endif // _OTB_TRISKELE_ARRAY_TREE_SORT_TPP