Beispiel #1
0
        /// <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();
        }