История изменений
Исправление 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);
}
Мне кажется так будет понятней, чем если бы убрать первое сравнение, чем если бы заводить отдельную переменную под разницу значений.
Так логика очень хорошо видна и она позволяет добавлять доп. случаи если потребуется, не нарушая структуру кода: вначале проверка особых случаев, потом тупая проверка на совпадение размеров, потом трудоемкая проверка.