[fpc-devel] RussianlocaleinformationnotcompatiblewithFPClocalevariables
Ales Katona
almindor at gmail.com
Thu Jul 31 18:47:22 CEST 2008
Boian Mitov wrote / napĂsal(a):
> Sort for example:
>
> It can work with C type array:
>
> int a[7] = {23, 1, 33, -20, 6, 6, 9};
> sort(a, a+7);
>
> or it can work with a container such as linked list:
>
> list<Something> v1;
>
> sort(v1.begin(), v1.end());
>
>
> With best regards,
> Boian Mitov
>
> --------------------------------------------------------------------
> Mitov Software
> http://www.mitov.com
> --------------------------------------------------------------------
This you mean?
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
You can do this with generics. Just use sizeof() to get to next element
and overloaded comparator functions for base types. I don't really see
much new here, it's a bit non-typical generics usage.
Here's a pascal example (OOP, true but that's a current limitation,
afaik "generic function" should be possible):
program Project1;
{$mode objfpc}{$H+}
type
{ TSorter }
generic TSorter<T> = class
public
procedure Sort(var First, Last: T);
end;
{ TSorter }
procedure TSorter.Sort(var First, Last: T);
var
x, y: ^T;
z: T;
begin
x := @First;
y := @First;
while x^ <> Last do begin
while y^ <> Last do begin
Inc(y);
if x^ > y^ then begin
z := x^;
x^ := y^;
y^ := z;
end;
end;
Inc(x);
y := x;
end;
end;
type
TIntSorter = specialize TSorter<Integer>;
var
s: TIntSorter;
a: array[1..5] of Integer = (5, 4, 3, 2, 1);
i: Integer;
begin
s := TIntSorter.Create;
s.Sort(a[1], a[5]);
for i := 1 to 5 do
Writeln(a[i]);
s.Free;
end.
Ales
More information about the fpc-devel
mailing list