/** * Compares name to passed in one. Sort is alphabetical ascending. * * @param Other Name to compare this against * @return < 0 is this < Other, 0 if this == Other, > 0 if this > Other */ int32 FName::Compare( const FName& Other ) const { // Names match, check whether numbers match. if( GetComparisonIndexFast() == Other.GetComparisonIndexFast() ) { return GetNumber() - Other.GetNumber(); } // Names don't match. This means we don't even need to check numbers. else { TNameEntryArray& Names = GetNames(); const FNameEntry* const ThisEntry = GetComparisonNameEntry(); const FNameEntry* const OtherEntry = Other.GetComparisonNameEntry(); // Ansi/Wide mismatch, convert to wide if( ThisEntry->IsWide() != OtherEntry->IsWide() ) { return FCStringWide::Stricmp( ThisEntry->IsWide() ? ThisEntry->GetWideName() : StringCast<WIDECHAR>(ThisEntry->GetAnsiName()).Get(), OtherEntry->IsWide() ? OtherEntry->GetWideName() : StringCast<WIDECHAR>(OtherEntry->GetAnsiName()).Get() ); } // Both are wide. else if( ThisEntry->IsWide() ) { return FCStringWide::Stricmp( ThisEntry->GetWideName(), OtherEntry->GetWideName() ); } // Both are ansi. else { return FCStringAnsi::Stricmp( ThisEntry->GetAnsiName(), OtherEntry->GetAnsiName() ); } } }