예제 #1
0
파일: jsobj.cpp 프로젝트: erickt/mongo
 /* wo = "well ordered" */
 int BSONElement::woCompare( const BSONElement &e,
                             bool considerFieldName ) const {
     int lt = (int) canonicalType();
     int rt = (int) e.canonicalType();
     int x = lt - rt;
     if( x != 0 && (!isNumber() || !e.isNumber()) )
         return x;
     if ( considerFieldName ) {
         x = strcmp(fieldName(), e.fieldName());
         if ( x != 0 )
             return x;
     }
     x = compareElementValues(*this, e);
     return x;
 }
int BSONElement::woCompare(const BSONElement& elem,
                           ComparisonRulesSet rules,
                           const StringData::ComparatorInterface* comparator) const {
    if (type() != elem.type()) {
        int lt = (int)canonicalType();
        int rt = (int)elem.canonicalType();
        if (int diff = lt - rt)
            return diff;
    }
    if (rules & ComparisonRules::kConsiderFieldName) {
        if (int diff = fieldNameStringData().compare(elem.fieldNameStringData()))
            return diff;
    }
    return compareElements(*this, elem, rules, comparator);
}