[fpc-pascal] Variant record consistency
Gerhard Scholz
gs at g--s.de
Sun Aug 7 20:00:06 CEST 2016
if same size is necessary, I would do it like this:
const
topDataQword= 29;
topNameChar= 231;
type
Tfnord1 = array[0..topDataQword] of qword ;
Tfnord2 = record
name: array[0..topNameChar] of char;
inode: qword
end ;
Tfnord= record
case boolean of
false: (data: Tfnord1);
true: (ni : Tfnord2)
end;
and, in the code:
if sizeof(tfnord1) <> sizeof(tfnord2) then halt(4711);
or, in the data
type xxxxxxtest = array [ 1..ord(sizeof(tfnord1) = sizeof(tfnord2)) ] of
boolean ;
----- Original Message -----
From: "Mark Morgan Lloyd" <markMLl.fpc-pascal at telemetry.co.uk>
To: <fpc-pascal at lists.freepascal.org>
Sent: Sunday, August 07, 2016 6:11 PM
Subject: [fpc-pascal] Variant record consistency
> Given a declaration
>
> const
> topDataQword= 29;
> topNameChar= 231;
>
> type
> Tfnord= record
> case boolean of
> false: (data: array[0..topDataQword] of qword);
> true: (name: array[0..topNameChar] of char;
> inode: qword) (* For recovery if name is changed
> *)
> end;
>
> is it possible to enforce a rule that the two record variants must be the
> same size?
>
> --
> Mark Morgan Lloyd
> markMLl .AT. telemetry.co .DOT. uk
>
> [Opinions above are the author's, not those of his employers or
> colleagues]
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list