program ideone;
uses SysUtils;
//const YSize=1080;
//const XSize=1920;
const YSize=3;
const XSize=4;
type TTestRecord=record Y,X,Idx:Integer; end;
type RGBTriple=record R,G,B:Byte; end;
type TTestTable=array[0..3] of TTestRecord;
type TBitMask=array[0..YSize-1,0..XSize-1] of RGBTriple;
type PBitMask=^TBitMask;
type TBits=array[0..YSize*XSize-1] of RGBTriple;
type PBits=^TBits;
function XY2Idx(X,Y:Integer):Integer; begin XY2Idx:=Y*XSize+X; end;
procedure test(const Bits:TBits;const BitMask:TBitMask);
var R:TTestRecord;
var Y,X,Idx:Integer;
begin
for Y:=0 to YSize-1 do
begin
for X:=0 to XSize-1 do
begin
Idx:=XY2Idx(X,Y);
WriteLn('Y:=',Y,'; X:=',X,'; Idx:=',Idx,' ',Int64(@Bits[Idx]),' - ',Int64(@BitMask[Y,X]));
end;
end;
end;
procedure go1;
var Bits:PBits;
var BitMask:TBitMask;
begin
Bits:=@BitMask[0,0];
test(Bits^,BitMask);
end;
procedure go2;
var Bits:TBits;
var BitMask:PBitMask;
begin
BitMask:=@Bits[0];
test(Bits,BitMask^);
end;
procedure go0;
var Bits:TBits;
var BitMask:TBitMask;
begin
WriteLn(SizeOf(Bits),' => ',SizeOf(BitMask));
end;
begin
go0;
WriteLn;
go1;
WriteLn;
go2;
end.
cHJvZ3JhbSBpZGVvbmU7Cgp1c2VzIFN5c1V0aWxzOwoKLy9jb25zdCBZU2l6ZT0xMDgwOwovL2NvbnN0IFhTaXplPTE5MjA7CmNvbnN0IFlTaXplPTM7CmNvbnN0IFhTaXplPTQ7CnR5cGUgVFRlc3RSZWNvcmQ9cmVjb3JkIFksWCxJZHg6SW50ZWdlcjsgZW5kOwp0eXBlIFJHQlRyaXBsZT1yZWNvcmQgUixHLEI6Qnl0ZTsgZW5kOwp0eXBlIFRUZXN0VGFibGU9YXJyYXlbMC4uM10gb2YgVFRlc3RSZWNvcmQ7CnR5cGUgVEJpdE1hc2s9YXJyYXlbMC4uWVNpemUtMSwwLi5YU2l6ZS0xXSBvZiBSR0JUcmlwbGU7CnR5cGUgUEJpdE1hc2s9XlRCaXRNYXNrOwp0eXBlIFRCaXRzPWFycmF5WzAuLllTaXplKlhTaXplLTFdIG9mIFJHQlRyaXBsZTsKdHlwZSBQQml0cz1eVEJpdHM7CmZ1bmN0aW9uIFhZMklkeChYLFk6SW50ZWdlcik6SW50ZWdlcjsgYmVnaW4gWFkySWR4Oj1ZKlhTaXplK1g7IGVuZDsKCnByb2NlZHVyZSB0ZXN0KGNvbnN0IEJpdHM6VEJpdHM7Y29uc3QgQml0TWFzazpUQml0TWFzayk7CnZhciBSOlRUZXN0UmVjb3JkOwp2YXIgWSxYLElkeDpJbnRlZ2VyOwpiZWdpbgogIGZvciBZOj0wIHRvIFlTaXplLTEgZG8KICBiZWdpbgogICAgZm9yIFg6PTAgdG8gWFNpemUtMSBkbwogICAgYmVnaW4KICAgICAgSWR4Oj1YWTJJZHgoWCxZKTsKICAgICAgV3JpdGVMbignWTo9JyxZLCc7IFg6PScsWCwnOyBJZHg6PScsSWR4LCcgJyxJbnQ2NChAQml0c1tJZHhdKSwnIC0gJyxJbnQ2NChAQml0TWFza1tZLFhdKSk7CiAgICBlbmQ7CiAgZW5kOwplbmQ7Cgpwcm9jZWR1cmUgZ28xOwp2YXIgQml0czpQQml0czsKdmFyIEJpdE1hc2s6VEJpdE1hc2s7CmJlZ2luCiAgQml0czo9QEJpdE1hc2tbMCwwXTsKICB0ZXN0KEJpdHNeLEJpdE1hc2spOwplbmQ7Cgpwcm9jZWR1cmUgZ28yOwp2YXIgQml0czpUQml0czsKdmFyIEJpdE1hc2s6UEJpdE1hc2s7CmJlZ2luCiAgQml0TWFzazo9QEJpdHNbMF07CiAgdGVzdChCaXRzLEJpdE1hc2teKTsKZW5kOwoKcHJvY2VkdXJlIGdvMDsKdmFyIEJpdHM6VEJpdHM7CnZhciBCaXRNYXNrOlRCaXRNYXNrOwpiZWdpbgogIFdyaXRlTG4oU2l6ZU9mKEJpdHMpLCcgPT4gJyxTaXplT2YoQml0TWFzaykpOwplbmQ7CgpiZWdpbgogIGdvMDsKICBXcml0ZUxuOwogIGdvMTsKICBXcml0ZUxuOwogIGdvMjsKZW5kLg==