Program Listing for File LBPointArray.hpp
↰ Return to documentation for file (include/lvr2/geometry/LBPointArray.hpp)
#ifndef __LBPOINTARRAY_HPP
#define __LBPOINTARRAY_HPP
#include <stdlib.h>
#include <iostream>
#include <limits>
#include <list>
#include <unordered_set>
#include <stdlib.h>
namespace lvr2
{
template<typename T>
struct LBPointArray {
unsigned int width = 0;
unsigned int dim = 1;
T* elements = NULL;
};
// static helper methods
template<typename T>
static void mallocPointArray(LBPointArray<T>& m);
template<typename T>
static void freePointArray(LBPointArray<T>& m);
template<typename T>
struct LBPointArrayDeleter
{
void operator()(LBPointArray<T>* m)
{
freePointArray(*m);
delete m;
}
};
template<typename T>
static void generatePointArray(LBPointArray<T>& m, int width, int dim);
template<typename T>
static void generatePointArray(int id, LBPointArray<T>& m, int width, int dim);
template<typename T>
static void fillPointArrayWithSequence( LBPointArray<T>& m);
// Pool function
template<typename T>
static void fillPointArrayWithSequence(int id, LBPointArray<T>& m);
template<typename T>
static void copyVectorInterval(LBPointArray<T>& in, int start, int end, LBPointArray<T>& out);
template<typename T>
static void copyDimensionToPointArray(LBPointArray<T>& in, int dim, LBPointArray<T>& out);
template<typename T>
static void splitPointArray(LBPointArray<T>& I, LBPointArray<T>& I_L, LBPointArray<T>& I_R);
template<typename T, typename U>
static bool checkSortedIndices(const LBPointArray<T>& V,
const LBPointArray<U>& sorted_indices,
unsigned int dim,
int n=0);
template<typename T, typename U>
static void splitPointArrayWithValue(const LBPointArray<T>& V,
const LBPointArray<U>& I, LBPointArray<U>& I_L, LBPointArray<U>& I_R,
int current_dim, T value,
T& deviation_left, T& deviation_right, const unsigned int& orig_dim,
const std::list<U>& critical_indices_left, const std::list<U>& critical_indices_right);
template<typename T, typename U>
static void splitPointArrayWithValueSet(const LBPointArray<T>& V,
const LBPointArray<U>& I, LBPointArray<U>& I_L, LBPointArray<U>& I_R,
int current_dim, T value,
T& deviation_left, T& deviation_right, const unsigned int& orig_dim,
const std::unordered_set<U>& critical_indices_left,
const std::unordered_set<U>& critical_indices_right);
template<typename T>
static unsigned int checkNumberOfBiggerValues(LBPointArray<T>& V, unsigned int dim, T split);
static unsigned int checkNumberOfSmallerEqualValues(LBPointArray<float>& V, unsigned int dim, float split);
// SORT FUNCTIONS THREADED
template<typename T, typename U>
static void mergeHostWithIndices(T* a, U* b, unsigned int i1, unsigned int j1,
unsigned int i2, unsigned int j2, int limit);
template<typename T, typename U>
static void naturalMergeSort(LBPointArray<T>& in, int dim, LBPointArray<U>& indices, LBPointArray<T>& m, int limit=-1);
template<typename T, typename U>
static void sortByDim(LBPointArray<T>& V, int dim, LBPointArray<U>& indices, LBPointArray<T>& values);
template<typename T, typename U>
static void generateAndSort(int id, LBPointArray<T>& vertices, LBPointArray<U>* indices_sorted,
LBPointArray<T>* values_sorted, int dim);
} /* namespace lvr2 */
#include "LBPointArray.tcc"
#endif // !__POINTARRAY_HPP