[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