std::vector<double> ContinuousVariable_Impl::incrementalValues() const { DoubleVector result; if (m_minimum && m_maximum && (m_increment || m_nSteps)) { // empty range if (*m_minimum > *m_maximum) { return result; } // degenerate range (single point) if (equal(*m_minimum,*m_maximum)) { result.push_back((*m_minimum + *m_maximum)/2.0); return result; } // otherwise get incremental values if (m_increment) { for (double value = *m_minimum; lessThanOrEqual(value,*m_maximum); value += *m_increment) { result.push_back(value); } } else { // m_nSteps double inc = (*m_maximum - *m_minimum)/static_cast<double>(*m_nSteps); for (double value = *m_minimum; lessThanOrEqual(value,*m_maximum); value += inc) { result.push_back(value); } } } return result; }
/*! @brief Return the relative ordering of two Values. @param[in] other The Value to be compared with. @returns The relative ordering of the two Values. */ inline bool operator <= (const Value & other) { bool valid = false; bool result = lessThanOrEqual(other, valid); return (valid && result); } // operator <=
bool ContinuousVariable_Impl::isFeasible(double value) const { bool result = true; if (m_minimum) { result = result && greaterThanOrEqual(value,*m_minimum); } if (m_maximum) { result = result && lessThanOrEqual(value,*m_maximum); } return result; }