[fpc-pascal] How can I implement "thrice" in Free Pascal?
Sven Barth
pascaldragon at googlemail.com
Tue Oct 18 21:55:50 CEST 2011
On 18.10.2011 21:30, Jonas Maebe wrote:
>
> On 18 Oct 2011, at 20:03, Andrew Pennebaker wrote:
>
>> In particular, if anyone knows a way to implement a general concatenation
>> function Concat(Arr1, Arr2), let me know.
>
> I'm under the impression that you are trying to program in a statically typed language the same way as you'd use a dynamically typed language. Even with generic functions (which, as mentioned before, are not yet supported by FPC) you'd have to explicitly instantiate such a function for every type you'd want to do this for.
At least in theory it should work with generic functions (and using the
Delphi compatible generic syntax):
=== source begin ===
type
TGenArray<T> = array of T; // this should work in trunk already
function Concat<T>(Arr1, Arr2: TGenArray<T>): TGenArray<T>;
begin
SetLength(Result, Length(aArray1) + Length(aArray2));
if Length(aArray1) > 0 then
Move(aArray1[0], Result[0], Length(aArray1) * SizeOf(T));
if Length(aArray2) > 0 then
Move(aArray2[0], Result[Length(aArray1)], Length(aArray2) * SizeOf(T));
end;
var
arr1, arr2, res: array of Integer;
begin
// init arr1
...
// init arr2
...
res := Concat<Integer>(arr1, arr2);
...
end.
=== source end ===
(tested using a non generic integer version)
Regards,
Sven
More information about the fpc-pascal
mailing list