/// <summary> /// <para> /// Initializes a new <see cref="FileStorage"/> instance. /// </para> /// <para></para> /// </summary> /// <param name="DBFilename"> /// <para>A db filename.</para> /// <para></para> /// </param> public FileStorage(string DBFilename) { var linksConstants = new LinksConstants <TLinkAddress>(enableExternalReferencesSupport: true); var dataMemory = new FileMappedResizableDirectMemory(DBFilename); _disposableLinks = new UnitedMemoryLinks <TLinkAddress>(dataMemory, UnitedMemoryLinks <UInt64> .DefaultLinksSizeStep, linksConstants, IndexTreeType.Default); _synchronizedLinks = new SynchronizedLinks <TLinkAddress>(_disposableLinks); var link = _synchronizedLinks.Create(); link = _synchronizedLinks.Update(link, newSource: link, newTarget: link); ushort currentMappingLinkIndex = 1; Any = _synchronizedLinks.Constants.Any; _meaningRoot = GetOrCreateMeaningRoot(currentMappingLinkIndex++); _unicodeSymbolMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _unicodeSequenceMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _setMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _fileMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _addressToNumberConverter = new AddressToRawNumberConverter <TLinkAddress>(); _numberToAddressConverter = new RawNumberToAddressConverter <TLinkAddress>(); var balancedVariantConverter = new BalancedVariantConverter <TLinkAddress>(_synchronizedLinks); var unicodeSymbolCriterionMatcher = new TargetMatcher <TLinkAddress>(_synchronizedLinks, _unicodeSymbolMarker); var unicodeSequenceCriterionMatcher = new TargetMatcher <TLinkAddress>(_synchronizedLinks, _unicodeSequenceMarker); var charToUnicodeSymbolConverter = new CharToUnicodeSymbolConverter <TLinkAddress>(_synchronizedLinks, _addressToNumberConverter, _unicodeSymbolMarker); var unicodeSymbolToCharConverter = new UnicodeSymbolToCharConverter <TLinkAddress>(_synchronizedLinks, _numberToAddressConverter, unicodeSymbolCriterionMatcher); var sequenceWalker = new RightSequenceWalker <TLinkAddress>(_synchronizedLinks, new DefaultStack <TLinkAddress>(), unicodeSymbolCriterionMatcher.IsMatched); _stringToUnicodeSequenceConverter = new CachingConverterDecorator <string, TLinkAddress>(new StringToUnicodeSequenceConverter <TLinkAddress>(_synchronizedLinks, charToUnicodeSymbolConverter, balancedVariantConverter, _unicodeSequenceMarker)); _unicodeSequenceToStringConverter = new CachingConverterDecorator <TLinkAddress, string>(new UnicodeSequenceToStringConverter <TLinkAddress>(_synchronizedLinks, unicodeSequenceCriterionMatcher, sequenceWalker, unicodeSymbolToCharConverter)); }
static void Main() { string file = "db.links"; File.Delete(file); ulong a; // (1: 1 1) using (var linksMemory = new UnitedMemoryLinks <ulong>(file)) { a = linksMemory.CreatePoint(); } var header = FileHelpers.ReadFirstOrDefault <LinksHeader <ulong> >(file); var links = FileHelpers.ReadAll <RawLink <ulong> >(file).SkipFirst(); ulong b; // (2: 2 2) using (var linksMemory = new UnitedMemoryLinks <ulong>(file)) { b = linksMemory.CreatePoint(); } header = FileHelpers.ReadFirstOrDefault <LinksHeader <ulong> >(file); links = FileHelpers.ReadAll <RawLink <ulong> >(file).SkipFirst(); ulong c; // (3: 3 3) using (var linksMemory = new UnitedMemoryLinks <ulong>(file)) { c = linksMemory.CreatePoint(); } header = FileHelpers.ReadFirstOrDefault <LinksHeader <ulong> >(file); links = FileHelpers.ReadAll <RawLink <ulong> >(file).SkipFirst(); ulong aAndBPair; // (4: A B) using (var linksMemory = new UnitedMemoryLinks <ulong>(file)) { aAndBPair = linksMemory.CreateAndUpdate(a, b); } header = FileHelpers.ReadFirstOrDefault <LinksHeader <ulong> >(file); links = FileHelpers.ReadAll <RawLink <ulong> >(file).SkipFirst(); ulong abcSequence; // (5: (4: A B) C) using (var linksMemory = new UnitedMemoryLinks <ulong>(file)) { abcSequence = linksMemory.CreateAndUpdate(aAndBPair, c); } header = FileHelpers.ReadFirstOrDefault <LinksHeader <ulong> >(file); links = FileHelpers.ReadAll <RawLink <ulong> >(file).SkipFirst(); }
public static void Setup() { var dataMemory = new HeapResizableDirectMemory(); var indexMemory = new HeapResizableDirectMemory(); _splitMemory = new SplitMemoryLinks <uint>(dataMemory, indexMemory); _splitMemoryLinks = _splitMemory.DecorateWithAutomaticUniquenessAndUsagesResolution(); var memory = new HeapResizableDirectMemory(); _unitedMemory = new UnitedMemoryLinks <uint>(memory); _unitedMemoryLinks = _unitedMemory.DecorateWithAutomaticUniquenessAndUsagesResolution(); }