public void InitOptions(ISynchronizedLinks <TLink> links) { if (UseSequenceMarker) { if (_equalityComparer.Equals(SequenceMarkerLink, links.Constants.Null)) { SequenceMarkerLink = links.CreatePoint(); } else { if (!links.Exists(SequenceMarkerLink)) { var link = links.CreatePoint(); if (!_equalityComparer.Equals(link, SequenceMarkerLink)) { throw new InvalidOperationException("Cannot recreate sequence marker link."); } } } if (MarkedSequenceMatcher == null) { MarkedSequenceMatcher = new MarkedSequenceCriterionMatcher <TLink>(links, SequenceMarkerLink); } } var balancedVariantConverter = new BalancedVariantConverter <TLink>(links); if (UseCompression) { if (LinksToSequenceConverter == null) { ICounter <TLink, TLink> totalSequenceSymbolFrequencyCounter; if (UseSequenceMarker) { totalSequenceSymbolFrequencyCounter = new TotalMarkedSequenceSymbolFrequencyCounter <TLink>(links, MarkedSequenceMatcher); } else { totalSequenceSymbolFrequencyCounter = new TotalSequenceSymbolFrequencyCounter <TLink>(links); } var doubletFrequenciesCache = new LinkFrequenciesCache <TLink>(links, totalSequenceSymbolFrequencyCounter); var compressingConverter = new CompressingConverter <TLink>(links, balancedVariantConverter, doubletFrequenciesCache); LinksToSequenceConverter = compressingConverter; } } else { if (LinksToSequenceConverter == null) { LinksToSequenceConverter = balancedVariantConverter; } } if (UseIndex && Index == null) { Index = new SequenceIndex <TLink>(links); } if (Walker == null) { Walker = new RightSequenceWalker <TLink>(links, new DefaultStack <TLink>()); } }
public SynchronizedSequenceIndex(ISynchronizedLinks <TLink> links) => _links = links;