#ifndef CT_ATTRIBUTESSCALART_HPP #define CT_ATTRIBUTESSCALART_HPP #include "ct_attributes/ct_attributesscalart.h" #include "ct_math/ct_math.h" #include template CT_AttributesScalarT::CT_AttributesScalarT(const size_t &size) { m_collection = new CT_StandardCloudStdVectorT(size); initMinMax(); } template CT_AttributesScalarT::CT_AttributesScalarT(CT_StandardCloudStdVectorT *collection) { m_collection = collection; std::pair< typename std::vector::iterator, typename std::vector::iterator > res = CT_Math::minmax_element(m_collection->begin(), m_collection->end(), CT_AttributesScalarT::staticCompareScalar); m_min = *res.first; m_max = *res.second; } template CT_AttributesScalarT::CT_AttributesScalarT(CT_StandardCloudStdVectorT *collection, const SCALAR &min, const SCALAR &max) { m_collection = collection; m_min = min; m_max = max; } template CT_AttributesScalarT::~CT_AttributesScalarT() { delete m_collection; } template double CT_AttributesScalarT::dMin() const { return min(); } template double CT_AttributesScalarT::dMax() const { return max(); } template double CT_AttributesScalarT::dValueAt(const size_t &index) const { return valueAt(index); } template SCALAR CT_AttributesScalarT::min() const { return m_min; } template SCALAR CT_AttributesScalarT::max() const { return m_max; } template void CT_AttributesScalarT::setMin(const SCALAR &min) { m_min = min; } template void CT_AttributesScalarT::setMax(const SCALAR &max) { m_max = max; } template const SCALAR &CT_AttributesScalarT::valueAt(const size_t &index) const { return (*m_collection)[index]; } template void CT_AttributesScalarT::setValueAt(const size_t &index, const SCALAR &value) { (*m_collection)[index] = value; if(value < m_min) m_min = value; if(value > m_max) m_max = value; } template size_t CT_AttributesScalarT::attributesSize() const { return m_collection->size(); } template void CT_AttributesScalarT::initMinMax() { m_min = std::numeric_limits::max(); if(std::numeric_limits::is_signed) m_max = -std::numeric_limits::max(); else m_max = std::numeric_limits::min(); } template bool CT_AttributesScalarT::staticCompareScalar(const SCALAR &a, const SCALAR &b) { return a < b; } #endif // CT_ATTRIBUTESSCALART_HPP