TQBits 是用于方便设置标志位的一个实现,它实现对特定位的存取,以节省存贮空间。
TQBits = record private FBits: TBytes; function GetSize: Integer; procedure SetSize(const Value: Integer); function GetIsSet(AIndex: Integer): Boolean; procedure SetIsSet(AIndex: Integer; const Value: Boolean); public property Size: Integer read GetSize write SetSize; property IsSet[AIndex: Integer]: Boolean read GetIsSet write SetIsSet; default; property Bytes: TBytes read FBits; end;
通过 Size 属性可以调用 TQBits 的存贮空间大小,该尺寸始终是 8 的整数倍 ( 1 个字节 8 位),IsSet可以用来设置或移除某位,而 Bytes 属性则用于外部直接访问 FBits 实例的内容。
由于使用 record,所以不需要用户手动释放。
QDB 的 TQBinaryConverter 就使用该类型,来每位对应记录的某一个字段是否为空及是否发生变更等内容,具体代码可以参考 qconverter_stds.pas 中 TQBinaryConverter 的 ReadRecord 和 WriteRecord 实现。