bool WModelIndex::UnorderedLess::operator() (const WModelIndex& i1, const WModelIndex& i2) const { if (!i1.isValid()) return i2.isValid(); else if (!i2.isValid()) return false; else if (i1 == i2) return false; else if (i1.model() != i2.model()) { LOG_ERROR("comparing indexes from different models are you?"); return false; } else if (i1.row() < i2.row()) return true; else if (i1.row() > i2.row()) return false; else if (i1.column() < i2.column()) return true; else if (i1.column() > i2.column()) return false; else return i1.internalId_ < i2.internalId_; }
bool WModelIndex::operator< (const WModelIndex& i2) const { const WModelIndex& i1 = *this; if (!i1.isValid()) return i2.isValid(); else if (!i2.isValid()) return false; else if (i1 == i2) return false; else if (i1.model() != i2.model()) { LOG_ERROR("comparing indexes from different models are you?"); return false; } int i1Depth = i1.depth(); int i2Depth = i2.depth(); unsigned e = std::min(i1Depth, i2Depth); WModelIndex a1 = i1.ancestor(i1Depth - e); WModelIndex a2 = i2.ancestor(i2Depth - e); if (a1 == a2) return i1Depth < i2Depth; for (unsigned i = e; i > 0; --i) { WModelIndex p1 = a1.parent(); WModelIndex p2 = a2.parent(); if (p1 == p2) { if (a1.row() < a2.row()) return true; else if (a1.row() > a2.row()) return false; else if (a1.column() < a2.column()) return true; else return false; } a1 = p1; a2 = p2; } return false; // unreachable code }