And the same code will work both with normal array and with object implementing iterators ?
I am not sure it will.
How I can call your sort for a linked list container instead on array?
Am I missing something or your code works with arrays only.
The STL sort will work with arrays or with STL containers or with any class that implements the concept (I.E. defines iretator and reference types, and has iterator generating function etc.)
As the best of my knowledge this is not doable with generics.
C++ is doing it, but there is no validation mechanism aside from just plain old testing all possible combinations ;-) .

 With best regards,
   Boian Mitov

--------------------------------------------------------------------
Mitov Software
http://www.mitov.com
--------------------------------------------------------------------


----- Original Message ----- From: "Ales Katona" <[EMAIL PROTECTED]>
To: "FPC developers' list" <fpc-devel@lists.freepascal.org>
Sent: Thursday, July 31, 2008 9:47 AM
Subject: Re: [fpc-devel] RussianlocaleinformationnotcompatiblewithFPClocalevariables


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
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to