bool CEvaluationNode::operator==(const CEvaluationNode& right) const { CNodeIterator< const CEvaluationNode > itLeft(this); CNodeIterator< const CEvaluationNode > itRight(&right); while (itLeft.next() != itLeft.end() && itRight.next() != itRight.end()) { if (*itLeft == NULL && *itRight == NULL) { continue; } if (*itLeft == NULL || *itRight == NULL) { return false; } if (itLeft->getType() != itRight->getType() || itLeft->getData() != itRight->getData()) { return false; } } return true; }
void combsort ( ForwardIterator first, ForwardIterator last ) { static const double shrink_factor = 1.247330950103979; typedef typename std::iterator_traits<ForwardIterator>::difference_type difference_type; difference_type gap = std::distance(first, last); bool swaps = true; while ( (gap > 1) || (swaps == true) ){ if (gap > 1) gap = static_cast<difference_type>(gap/shrink_factor); swaps = false; ForwardIterator itLeft(first); ForwardIterator itRight(first); std::advance(itRight, gap); for ( ; itRight!=last; ++itLeft, ++itRight ){ if ( (*itRight) < (*itLeft) ){ std::iter_swap(itLeft, itRight); swaps = true; } } } }