FastReport_2022_VCL/LibD28/TTFHelpers.pas
2024-01-01 16:13:08 +01:00

60 lines
1.7 KiB
ObjectPascal

unit TTFHelpers;
interface
{$I frx.inc}
type
TTF_Helpers = class
// Methods
protected constructor Create;
public class function Increment(ptr: Pointer; cbSize: Integer): Pointer;
public class function SwapInt16(v: Smallint): Smallint;
public class function SwapInt32(v: LongInt): LongInt;
public class function SwapUInt16(v: Word): Word;
public class function SwapUInt32(v: LongWord): LongWord;
public class function SwapUInt64(v: UInt64): UInt64;
end;
implementation
// Methods
constructor TTF_Helpers.Create;
begin
end;
class function TTF_Helpers.Increment(ptr: Pointer; cbSize: Integer): Pointer;
begin
// Result := Pointer(Integer(ptr) + cbSize)
Result := Pointer(NativeInt(ptr) + cbSize)
end;
class function TTF_Helpers.SwapInt16(v: Smallint): Smallint;
begin
Result := Smallint((((v and $ff) shl 8) or ((v shr 8) and $ff)))
end;
class function TTF_Helpers.SwapInt32(v: LongInt): LongInt;
begin
Result := ((TTF_Helpers.SwapInt16(Smallint(v)) and $ffff) shl $10) or (TTF_Helpers.SwapInt16(Smallint(v shr $10)) and $ffff)
end;
class function TTF_Helpers.SwapUInt16(v: Word): Word;
begin
Result := Word((((v and $ff) shl 8) or ((v shr 8) and $ff)))
end;
class function TTF_Helpers.SwapUInt32(v: LongWord): LongWord;
begin
Result := LongWord((((TTF_Helpers.SwapUInt16(Word(v)) and $ffff) shl $10) or (TTF_Helpers.SwapUInt16(Word(v shr $10)) and $ffff)))
end;
class function TTF_Helpers.SwapUInt64(v: UInt64): UInt64;
begin
Result := (((TTF_Helpers.SwapUInt32(LongWord(v)) and $ffffffff) shl $20) or (TTF_Helpers.SwapUInt32((LongWord(v shr $20))) and $ffffffff))
end;
end.