Class FSTOrdTermsWriter
FST-based term dict, using ord as FST output.
The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts:- term statistics: docFreq, totalTermFreq;
- monotonic long[], e.g. the pointer to the postings list for that term;
- generic byte[], e.g. other information customized by postings base.
- single-level skip list to speed up metadata decoding by ord.
Files:
.tix
: Term Index.tbk
: Term Block
Term Index
The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field.
- TermIndex(.tix) --> Header, TermFSTNumFields, Footer
- TermFST --> Lucene.Net.Util.Fst.FST<T>
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- Since terms are already sorted before writing to Term Block, their ords can directly used to seek term metadata from term block.
Term Block
The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks:
- statistics bytes block: contains term statistics;
- metadata longs block: delta-encodes monotonic part of metadata;
- metadata bytes block: encodes other parts of metadata;
- skip block: contains skip data, to speed up metadata seeking and decoding
File Format:
- TermBlock(.tbk) --> Header, PostingsHeader, FieldSummary, DirOffset
- FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields, Footer
- DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock
- SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDeltaLongsSize >NumTerms
- StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms
- MetaLongsBlock --> < LongDeltaLongsSize, BytesSize > NumTerms
- MetaBytesBlock --> Byte MetaBytesBlockLength
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- DirOffset --> Uint64 (WriteInt64(long))
- NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt (WriteVInt32(int))
- NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong (WriteVInt64(long))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data).
- During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term.
- DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted.
Note
This API is experimental and might change in incompatible ways in the next release.
Implements
Inherited Members
Namespace: Lucene.Net.Codecs.Memory
Assembly: Lucene.Net.Codecs.dll
Syntax
public class FSTOrdTermsWriter : FieldsConsumer, IDisposable
Constructors
FSTOrdTermsWriter(SegmentWriteState, PostingsWriterBase)
FST-based term dict, using ord as FST output.
The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts:- term statistics: docFreq, totalTermFreq;
- monotonic long[], e.g. the pointer to the postings list for that term;
- generic byte[], e.g. other information customized by postings base.
- single-level skip list to speed up metadata decoding by ord.
Files:
.tix
: Term Index.tbk
: Term Block
Term Index
The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field.
- TermIndex(.tix) --> Header, TermFSTNumFields, Footer
- TermFST --> Lucene.Net.Util.Fst.FST<T>
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- Since terms are already sorted before writing to Term Block, their ords can directly used to seek term metadata from term block.
Term Block
The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks:
- statistics bytes block: contains term statistics;
- metadata longs block: delta-encodes monotonic part of metadata;
- metadata bytes block: encodes other parts of metadata;
- skip block: contains skip data, to speed up metadata seeking and decoding
File Format:
- TermBlock(.tbk) --> Header, PostingsHeader, FieldSummary, DirOffset
- FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields, Footer
- DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock
- SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDeltaLongsSize >NumTerms
- StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms
- MetaLongsBlock --> < LongDeltaLongsSize, BytesSize > NumTerms
- MetaBytesBlock --> Byte MetaBytesBlockLength
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- DirOffset --> Uint64 (WriteInt64(long))
- NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt (WriteVInt32(int))
- NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong (WriteVInt64(long))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data).
- During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term.
- DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted.
Note
This API is experimental and might change in incompatible ways in the next release.
Declaration
public FSTOrdTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter)
Parameters
Type | Name | Description |
---|---|---|
SegmentWriteState | state | |
PostingsWriterBase | postingsWriter |
Fields
SKIP_INTERVAL
FST-based term dict, using ord as FST output.
The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts:- term statistics: docFreq, totalTermFreq;
- monotonic long[], e.g. the pointer to the postings list for that term;
- generic byte[], e.g. other information customized by postings base.
- single-level skip list to speed up metadata decoding by ord.
Files:
.tix
: Term Index.tbk
: Term Block
Term Index
The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field.
- TermIndex(.tix) --> Header, TermFSTNumFields, Footer
- TermFST --> Lucene.Net.Util.Fst.FST<T>
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- Since terms are already sorted before writing to Term Block, their ords can directly used to seek term metadata from term block.
Term Block
The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks:
- statistics bytes block: contains term statistics;
- metadata longs block: delta-encodes monotonic part of metadata;
- metadata bytes block: encodes other parts of metadata;
- skip block: contains skip data, to speed up metadata seeking and decoding
File Format:
- TermBlock(.tbk) --> Header, PostingsHeader, FieldSummary, DirOffset
- FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields, Footer
- DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock
- SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDeltaLongsSize >NumTerms
- StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms
- MetaLongsBlock --> < LongDeltaLongsSize, BytesSize > NumTerms
- MetaBytesBlock --> Byte MetaBytesBlockLength
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- DirOffset --> Uint64 (WriteInt64(long))
- NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt (WriteVInt32(int))
- NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong (WriteVInt64(long))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data).
- During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term.
- DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted.
Note
This API is experimental and might change in incompatible ways in the next release.
Declaration
public const int SKIP_INTERVAL = 8
Field Value
Type | Description |
---|---|
int |
TERMS_VERSION_CHECKSUM
FST-based term dict, using ord as FST output.
The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts:- term statistics: docFreq, totalTermFreq;
- monotonic long[], e.g. the pointer to the postings list for that term;
- generic byte[], e.g. other information customized by postings base.
- single-level skip list to speed up metadata decoding by ord.
Files:
.tix
: Term Index.tbk
: Term Block
Term Index
The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field.
- TermIndex(.tix) --> Header, TermFSTNumFields, Footer
- TermFST --> Lucene.Net.Util.Fst.FST<T>
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- Since terms are already sorted before writing to Term Block, their ords can directly used to seek term metadata from term block.
Term Block
The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks:
- statistics bytes block: contains term statistics;
- metadata longs block: delta-encodes monotonic part of metadata;
- metadata bytes block: encodes other parts of metadata;
- skip block: contains skip data, to speed up metadata seeking and decoding
File Format:
- TermBlock(.tbk) --> Header, PostingsHeader, FieldSummary, DirOffset
- FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields, Footer
- DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock
- SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDeltaLongsSize >NumTerms
- StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms
- MetaLongsBlock --> < LongDeltaLongsSize, BytesSize > NumTerms
- MetaBytesBlock --> Byte MetaBytesBlockLength
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- DirOffset --> Uint64 (WriteInt64(long))
- NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt (WriteVInt32(int))
- NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong (WriteVInt64(long))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data).
- During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term.
- DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted.
Note
This API is experimental and might change in incompatible ways in the next release.
Declaration
public const int TERMS_VERSION_CHECKSUM = 1
Field Value
Type | Description |
---|---|
int |
TERMS_VERSION_CURRENT
FST-based term dict, using ord as FST output.
The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts:- term statistics: docFreq, totalTermFreq;
- monotonic long[], e.g. the pointer to the postings list for that term;
- generic byte[], e.g. other information customized by postings base.
- single-level skip list to speed up metadata decoding by ord.
Files:
.tix
: Term Index.tbk
: Term Block
Term Index
The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field.
- TermIndex(.tix) --> Header, TermFSTNumFields, Footer
- TermFST --> Lucene.Net.Util.Fst.FST<T>
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- Since terms are already sorted before writing to Term Block, their ords can directly used to seek term metadata from term block.
Term Block
The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks:
- statistics bytes block: contains term statistics;
- metadata longs block: delta-encodes monotonic part of metadata;
- metadata bytes block: encodes other parts of metadata;
- skip block: contains skip data, to speed up metadata seeking and decoding
File Format:
- TermBlock(.tbk) --> Header, PostingsHeader, FieldSummary, DirOffset
- FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields, Footer
- DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock
- SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDeltaLongsSize >NumTerms
- StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms
- MetaLongsBlock --> < LongDeltaLongsSize, BytesSize > NumTerms
- MetaBytesBlock --> Byte MetaBytesBlockLength
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- DirOffset --> Uint64 (WriteInt64(long))
- NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt (WriteVInt32(int))
- NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong (WriteVInt64(long))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data).
- During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term.
- DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted.
Note
This API is experimental and might change in incompatible ways in the next release.
Declaration
public const int TERMS_VERSION_CURRENT = 1
Field Value
Type | Description |
---|---|
int |
TERMS_VERSION_START
FST-based term dict, using ord as FST output.
The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts:- term statistics: docFreq, totalTermFreq;
- monotonic long[], e.g. the pointer to the postings list for that term;
- generic byte[], e.g. other information customized by postings base.
- single-level skip list to speed up metadata decoding by ord.
Files:
.tix
: Term Index.tbk
: Term Block
Term Index
The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field.
- TermIndex(.tix) --> Header, TermFSTNumFields, Footer
- TermFST --> Lucene.Net.Util.Fst.FST<T>
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- Since terms are already sorted before writing to Term Block, their ords can directly used to seek term metadata from term block.
Term Block
The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks:
- statistics bytes block: contains term statistics;
- metadata longs block: delta-encodes monotonic part of metadata;
- metadata bytes block: encodes other parts of metadata;
- skip block: contains skip data, to speed up metadata seeking and decoding
File Format:
- TermBlock(.tbk) --> Header, PostingsHeader, FieldSummary, DirOffset
- FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields, Footer
- DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock
- SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDeltaLongsSize >NumTerms
- StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms
- MetaLongsBlock --> < LongDeltaLongsSize, BytesSize > NumTerms
- MetaBytesBlock --> Byte MetaBytesBlockLength
- Header --> CodecHeader (WriteHeader(DataOutput, string, int))
- DirOffset --> Uint64 (WriteInt64(long))
- NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt (WriteVInt32(int))
- NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong (WriteVInt64(long))
- Footer --> CodecFooter (Lucene.Net.Codecs.CodecUtil.WriteFooter(Lucene.Net.Store.IndexOutput))
Notes:
- The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data).
- During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term.
- DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted.
Note
This API is experimental and might change in incompatible ways in the next release.
Declaration
public const int TERMS_VERSION_START = 0
Field Value
Type | Description |
---|---|
int |
Methods
AddField(FieldInfo)
Add a new field.
Declaration
public override TermsConsumer AddField(FieldInfo field)
Parameters
Type | Name | Description |
---|---|---|
FieldInfo | field |
Returns
Type | Description |
---|---|
TermsConsumer |
Overrides
Dispose(bool)
Implementations must override and should dispose all resources used by this instance.
Declaration
protected override void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
bool | disposing |