[Lazarus] Can't compile trunk with fpc 2.4.5 under ubuntu

Sven Barth pascaldragon at googlemail.com
Tue Feb 28 10:24:56 CET 2012


Am 28.02.2012 08:22, schrieb Michael Schnell:
> On 02/27/2012 09:51 PM, Martin Schreiber wrote:
>> A side mark: I don't think using the old ansistring as combined binary
>> and character buffer is such a bad thing.
>
> + 1/2
>
>
> It would be better to have a type that 1:1 allows for all the well known
> string operations, replacing "Character" by "Byte":
>
> MyByte := MyByteString[n]
>
> MyByteString := MyByteString + MyByte;
>
> MyByteString2 := copy(MyByteString, 10, 100);
>
> p:= pos(MyByteString2, MyByteString)
>
> MyByteString := MyByteString + MyByteString2;
>
> ...
>
>
> In my projects I usually do something like "Type ByteString =
> AnsiString" for a future migration :) .

You know that this is already possible in FPC?

=== source begin ===

program bytearraytest;

{$mode objfpc}

type
   TByteArray = array of Byte;

operator + (aLeft, aRight: TByteArray): TByteArray;
begin
   SetLength(Result, Length(aLeft) + Length(aRight));
   if Length(aLeft) > 0 then
     Move(aLeft[0], Result[0], Length(aLeft) * SizeOf(Byte));
   if Length(aRight) > 0 then
     Move(aRight[0], Result[Length(aLeft)], Length(aRight) * SizeOf(Byte));
end;

var
   arr1, arr2, arr3: TByteArray;
   b: Byte;
   i: LongInt;
begin
   SetLength(arr1, 5);
   for i := 0 to 4 do
     arr1[i] := i + 1;
   SetLength(arr2, 5);
   for i := 0 to 4 do
     arr2[i] := i + 6;
   arr3 := arr1 + arr2;
   for b in arr3 do
     Write(b, ' ');
   Writeln;
   arr3 := Copy(arr2, 2, 2);
   for b in arr3 do
     Write(b, ' ');
   Writeln;
end.

=== source end ===

=== output begin ===
PS P:\tests\oneshots> .\bytearraytest.exe
1 2 3 4 5 6 7 8 9 10
8 9
=== output end ===

I only didn't implement Pos, but as this does not use any compiler magic 
you can do that yourself ;)

Regards,
Sven




More information about the Lazarus mailing list