//////////////////////////////////////////////////////////// {$ifndef NumericList} {$define NumericList} // interface //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// {$include RecordList.inc.pas} //////////////////////////////////////////////////////////// TSortOrder = (soUp, soDown); TNumericList = class(TRecordList) public procedure Sort(SortOrder: TSortOrder); end; //////////////////////////////////////////////////////////// {$else} // implementation //////////////////////////////////////////////////////////// function RecordEqual(const Value1, Value2: TRecord): Boolean; forward; //////////////////////////////////////////////////////////// {$include RecordList.inc.pas} //////////////////////////////////////////////////////////// function RecordEqual(const Value1, Value2: TRecord): Boolean; begin Result := (Value1 = Value2); end; {数値のソート処理} {昇順 1.2.3....} function SortAscend(Item1, Item2: Pointer): Integer; begin if (TRecord(Item1^) - TRecord(Item2^)) < 0 then Result := -1 else if 0 < (TRecord(Item1^) - TRecord(Item2^)) then Result := 1 else Result := 0; end; {降順 10.9.8....} function SortDescend(Item1, Item2: Pointer): Integer; begin if (TRecord(Item2^) - TRecord(Item1^)) < 0 then Result := -1 else if 0 < (TRecord(Item2^) - TRecord(Item1^)) then Result := 1 else Result := 0; end; procedure TNumericList.Sort(SortOrder: TSortOrder); begin case SortOrder of soUp: FList.Sort(SortAscend); soDown: FList.Sort(SortDescend); else raise Exception.Create('SortOrderが指定範囲内ではありません'); end; end; //////////////////////////////////////////////////////////// {$endif} ////////////////////////////////////////////////////////////