
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
53 lines
1.6 KiB
C++
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
|