#ifndef CT_CLOUDINDEXLESSMEMORYT_HPP #define CT_CLOUDINDEXLESSMEMORYT_HPP #include "ct_cloudindex/ct_cloudindexlessmemoryt.h" template CT_CloudIndexLessMemoryT::CT_CloudIndexLessMemoryT(const size_t &begin, const size_t &size) : CT_AbstractCloudIndexT() { internalClear(); this->internalSetSortType(CT_AbstractCloudIndex::SortedInAscendingOrder); m_begin = begin; m_size = size; } template size_t CT_CloudIndexLessMemoryT::size() const { return m_size; } template size_t CT_CloudIndexLessMemoryT::memoryUsed() const { return 2*sizeof(size_t); } template size_t CT_CloudIndexLessMemoryT::indexAt(const size_t &i) const { return i+m_begin; } template const ct_index_type& CT_CloudIndexLessMemoryT::constIndexAt(const size_t &i) const { m_temporary = i+m_begin; return m_temporary; } template size_t CT_CloudIndexLessMemoryT::operator[](const size_t &i) const { return i+m_begin; } template void CT_CloudIndexLessMemoryT::indexAt(const size_t &i, size_t &index) const { index = i+m_begin; } template size_t CT_CloudIndexLessMemoryT::first() const { return m_begin; } template size_t CT_CloudIndexLessMemoryT::last() const { return m_begin + (m_size-1); } template bool CT_CloudIndexLessMemoryT::contains(const size_t &index) const { if(size() == 0) return false; return ((index >= m_begin) && (index <= last())); } template size_t CT_CloudIndexLessMemoryT::indexOf(const size_t &index) const { if((index >= m_begin) && (index <= last())) return index-m_begin; return size(); } template size_t CT_CloudIndexLessMemoryT::lowerBound(const size_t &value) const { if((value >= m_begin) && (value <= last())) return value-m_begin; return -1; } template size_t CT_CloudIndexLessMemoryT::upperBound(const size_t &value) const { if((value >= m_begin) && (value <= last())) return (value-m_begin)+1; return -1; } template void CT_CloudIndexLessMemoryT::shiftAll(const size_t &offset, const bool &negativeOffset) { internalShiftAll(offset, negativeOffset); } template bool CT_CloudIndexLessMemoryT::cut(const size_t &begin, const size_t &end) { if((begin >= first()) && (end <= last())) { m_size = m_size - ((end - begin)+1); return true; } return false; } template void CT_CloudIndexLessMemoryT::clear() { internalClear(); } template CT_SharedPointer< std::vector > CT_CloudIndexLessMemoryT::toStdVectorInt() const { CT_SharedPointer< std::vector > indices(new std::vector(m_size)); size_t a = m_begin; for(size_t i=0; i CT_AbstractCloud* CT_CloudIndexLessMemoryT::copy() const { return new CT_CloudIndexLessMemoryT(m_begin, m_size); } template void CT_CloudIndexLessMemoryT::erase(const size_t &beginIndex, const size_t &sizes) { Q_UNUSED(beginIndex) Q_UNUSED(sizes) qFatal("CT_CloudIndexLessMemoryT::erase can not be used"); } template void CT_CloudIndexLessMemoryT::resize(const size_t &newSize) { m_size = newSize; } template void CT_CloudIndexLessMemoryT::internalShiftAll(const size_t &offset, const bool &negativeOffset) { if(negativeOffset) m_begin -= offset; else m_begin += offset; } template void CT_CloudIndexLessMemoryT::internalClear() { m_begin = 0; m_size = 0; } #endif // CT_CLOUDINDEXLESSMEMORYT_HPP