static inline bool operator<(const OptTable::Info &A, const OptTable::Info &B) { if (&A == &B) return false; if (int N = StrCmpOptionName(A.Name, B.Name)) return N < 0; for (const char * const *APre = A.Prefixes, * const *BPre = B.Prefixes; *APre != nullptr && *BPre != nullptr; ++APre, ++BPre){ if (int N = StrCmpOptionName(*APre, *BPre)) return N < 0; } // Names are the same, check that classes are in order; exactly one // should be joined, and it should succeed the other. assert(((A.Kind == Option::JoinedClass) ^ (B.Kind == Option::JoinedClass)) && "Unexpected classes for options with same name."); return B.Kind == Option::JoinedClass; }
static inline bool operator<(const OptTable::Info &A, const OptTable::Info &B) { if (&A == &B) return false; if (int N = StrCmpOptionName(A.Name, B.Name)) return N == -1; // Names are the same, check that classes are in order; exactly one // should be joined, and it should succeed the other. assert(((A.Kind == Option::JoinedClass) ^ (B.Kind == Option::JoinedClass)) && "Unexpected classes for options with same name."); return B.Kind == Option::JoinedClass; }
static inline bool operator<(const char *Name, const OptTable::Info &I) { return StrCmpOptionName(Name, I.Name) == -1; }