Exemple #1
0
int __cdecl SortSymbolsByNameAndOperatorAndLocation
(
    const void *arg1,
    const void *arg2
)
{
    // 


    BCSYM_NamedRoot *Member1 = *(BCSYM_NamedRoot **)arg1;
    BCSYM_NamedRoot *Member2 = *(BCSYM_NamedRoot **)arg2;

    VSASSERT(Member1 && Member2, "How can the symbols to be compared be NULL?");

    // First sort by name.
    int i = SortSymbolsByName(arg1, arg2);

    // Now sort by operator kind.
    if (i == 0)
    {
        bool Member1IsOperator = IsUserDefinedOperator(Member1);
        bool Member2IsOperator = IsUserDefinedOperator(Member2);

        if (Member1IsOperator)
        {
            if (Member2IsOperator)
            {
                UserDefinedOperators Operator1 = Member1->PUserDefinedOperator()->GetOperator();
                UserDefinedOperators Operator2 = Member2->PUserDefinedOperator()->GetOperator();

                i = (Operator1 == Operator2) ? 0 : (Operator1 > Operator2) ? 1 : -1;
            }
            else
            {
                i = 1;
            }
        }
        else if (Member2IsOperator)
        {
            i = -1;
        }
    }

    if (i == 0)
    {
        i = SortSymbolsByLocation(arg1, arg2);
    }

    return i;
}
Exemple #2
0
int _cdecl SortEmitableTypesByLocationAndNestingLevels(const void *arg1, const void *arg2)
{
    typedef AllEmitableTypesInFileInOrderIterator::EmitableTypeWrapper EmitableTypeWrapper;

    EmitableTypeWrapper *TypeWrapper1, *TypeWrapper2;

    TypeWrapper1 = (EmitableTypeWrapper *)arg1;
    TypeWrapper2 = (EmitableTypeWrapper *)arg2;

    if (int NestingLevelCmp = (TypeWrapper1->m_NestingLevel - TypeWrapper2->m_NestingLevel))
    {
        return NestingLevelCmp;
    }

    // if types are at the same nested level, then continue sorting by location
    //
    return SortSymbolsByLocation(&TypeWrapper1->m_pEmitableType, &TypeWrapper2->m_pEmitableType);
}