LINUX.ORG.RU

История изменений

Исправление soomrack, (текущая версия) :

Я бы написал так:

int fm_symbol_compare_fast(FmSymbol *first, FmSymbol *second)
{
    if (first == second) return 0;
    if (first == NULL) return -1;
    if (second == NULL) return 1;

    if (first->value_size != second->value_size)
        return (first->value_size - second->value_size);

    return memcmp(first->value, second->value, first->value_size);
}

Мне кажется так будет понятней, чем если бы заводить отдельную переменную под разницу значений.

Так логика очень хорошо видна и она позволяет добавлять доп. случаи если потребуется, не нарушая структуру кода: вначале проверка особых случаев, потом тупая проверка на совпадение размеров, потом трудоемкая проверка.

PS: в if я заменил на !=, т.к. предположил, что это целые числа, и соотв. false будет только когда результат не 0.

Исправление soomrack, :

Я бы написал так:

int fm_symbol_compare_fast(FmSymbol *first, FmSymbol *second)
{
    if (first == second) return 0;
    if (first == NULL) return -1;
    if (second == NULL) return 1;

    if (first->value_size - second->value_size)
        return (first->value_size - second->value_size);

    return memcmp(first->value, second->value, first->value_size);
}

Мне кажется так будет понятней, чем если бы заводить отдельную переменную под разницу значений.

Так логика очень хорошо видна и она позволяет добавлять доп. случаи если потребуется, не нарушая структуру кода: вначале проверка особых случаев, потом тупая проверка на совпадение размеров, потом трудоемкая проверка.

Исходная версия soomrack, :

Я бы написал так:

int fm_symbol_compare_fast(FmSymbol *first, FmSymbol *second)
{
    if (first == second) return 0;
    if (first == NULL) return -1;
    if (second == NULL) return 1;

    if (first->value_size - second->value_size)
        return (first->value_size - second->value_size);

    return memcmp(first->value, second->value, first->value_size);
}

Мне кажется так будет понятней, чем если бы убрать первое сравнение, чем если бы заводить отдельную переменную под разницу значений.

Так логика очень хорошо видна и она позволяет добавлять доп. случаи если потребуется, не нарушая структуру кода: вначале проверка особых случаев, потом тупая проверка на совпадение размеров, потом трудоемкая проверка.