/// <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)); }
public ObjectsAndTagsStorage(string path, long minimumStorageSizeInBytes) { var constants = new LinksConstants <uint>(enableExternalReferencesSupport: true); _memory = new FileMappedResizableDirectMemory(path); _memoryManager = new ResizableDirectMemoryLinks <uint>(_memory, minimumStorageSizeInBytes, constants, useAvlBasedIndex: false); _links = _memoryManager.DecorateWithAutomaticUniquenessAndUsagesResolution(); _links = new LinksItselfConstantToSelfReferenceResolver <uint>(_links); _addressToRawNumberConverter = new AddressToRawNumberConverter <uint>(); }
public DoubletsDbContext(string dataDBFilename, string indexDBFilename) { var dataMemory = new FileMappedResizableDirectMemory(dataDBFilename); var indexMemory = new FileMappedResizableDirectMemory(indexDBFilename); var linksConstants = new LinksConstants <TLinkAddress>(enableExternalReferencesSupport: true); // Init the links storage _disposableLinks = new UInt32SplitMemoryLinks(dataMemory, indexMemory, UInt32SplitMemoryLinks.DefaultLinksSizeStep, linksConstants); // Low-level logic _links = new UInt32Links(_disposableLinks); // Main logic in the combined decorator // Set up constant links (markers, aka mapped links) TLinkAddress currentMappingLinkIndex = 1; _meaningRoot = GetOrCreateMeaningRoot(currentMappingLinkIndex++); _unicodeSymbolMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _unicodeSequenceMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _titlePropertyMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _contentPropertyMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _publicationDateTimePropertyMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); _blogPostMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); // Create properties operator that is able to control reading and writing properties for any link (object) _defaultLinkPropertyOperator = new PropertiesOperator <TLinkAddress>(_links); // Create converters that are able to convert link's address (UInt64 value) to a raw number represented with another UInt64 value and back _numberToAddressConverter = new RawNumberToAddressConverter <TLinkAddress>(); _addressToNumberConverter = new AddressToRawNumberConverter <TLinkAddress>(); // Create converters for dates _longRawNumberToDateTimeConverter = new LongRawNumberSequenceToDateTimeConverter <TLinkAddress>(new LongRawNumberSequenceToNumberConverter <TLinkAddress, long>(_links, _numberToAddressConverter)); _dateTimeToLongRawNumberConverter = new DateTimeToLongRawNumberSequenceConverter <TLinkAddress>(new NumberToLongRawNumberSequenceConverter <long, TLinkAddress>(_links, _addressToNumberConverter)); // Create converters that are able to convert string to unicode sequence stored as link and back var balancedVariantConverter = new BalancedVariantConverter <TLinkAddress>(_links); var unicodeSymbolCriterionMatcher = new TargetMatcher <TLinkAddress>(_links, _unicodeSymbolMarker); var unicodeSequenceCriterionMatcher = new TargetMatcher <TLinkAddress>(_links, _unicodeSequenceMarker); var charToUnicodeSymbolConverter = new CharToUnicodeSymbolConverter <TLinkAddress>(_links, _addressToNumberConverter, _unicodeSymbolMarker); var unicodeSymbolToCharConverter = new UnicodeSymbolToCharConverter <TLinkAddress>(_links, _numberToAddressConverter, unicodeSymbolCriterionMatcher); var sequenceWalker = new RightSequenceWalker <TLinkAddress>(_links, new DefaultStack <TLinkAddress>(), unicodeSymbolCriterionMatcher.IsMatched); _stringToUnicodeSequenceConverter = new CachingConverterDecorator <string, TLinkAddress>(new StringToUnicodeSequenceConverter <TLinkAddress>(_links, charToUnicodeSymbolConverter, balancedVariantConverter, _unicodeSequenceMarker)); _unicodeSequenceToStringConverter = new CachingConverterDecorator <TLinkAddress, string>(new UnicodeSequenceToStringConverter <TLinkAddress>(_links, unicodeSequenceCriterionMatcher, sequenceWalker, unicodeSymbolToCharConverter)); }
public PlatformDataBase(string indexFileName, string dataFileName) { this.indexFileName = indexFileName; this.dataFileName = dataFileName; var dataMemory = new FileMappedResizableDirectMemory(this.dataFileName); var indexMemory = new FileMappedResizableDirectMemory(this.indexFileName); var linksConstants = new LinksConstants <TLinkAddress>(enableExternalReferencesSupport: true); // Init the links storage this._disposableLinks = new UInt32SplitMemoryLinks(dataMemory, indexMemory, UInt32SplitMemoryLinks.DefaultLinksSizeStep, linksConstants); // Low-level logic this.links = new UInt32Links(_disposableLinks); // Main logic in the combined decorator // Set up constant links (markers, aka mapped links) TLinkAddress currentMappingLinkIndex = 1; this._meaningRoot = GerOrCreateMeaningRoot(currentMappingLinkIndex++); this._unicodeSymbolMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); this._unicodeSequenceMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); this._bookMarker = GetOrCreateNextMapping(currentMappingLinkIndex++); // Create converters that are able to convert link's address (UInt64 value) to a raw number represented with another UInt64 value and back this._numberToAddressConverter = new RawNumberToAddressConverter <TLinkAddress>(); this._addressToNumberConverter = new AddressToRawNumberConverter <TLinkAddress>(); // Create converters that are able to convert string to unicode sequence stored as link and back var balancedVariantConverter = new BalancedVariantConverter <TLinkAddress>(links); var unicodeSymbolCriterionMatcher = new TargetMatcher <TLinkAddress>(links, _unicodeSymbolMarker); var unicodeSequenceCriterionMatcher = new TargetMatcher <TLinkAddress>(links, _unicodeSequenceMarker); var charToUnicodeSymbolConverter = new CharToUnicodeSymbolConverter <TLinkAddress>(links, _addressToNumberConverter, _unicodeSymbolMarker); var unicodeSymbolToCharConverter = new UnicodeSymbolToCharConverter <TLinkAddress>(links, _numberToAddressConverter, unicodeSymbolCriterionMatcher); var sequenceWalker = new RightSequenceWalker <TLinkAddress>(links, new DefaultStack <TLinkAddress>(), unicodeSymbolCriterionMatcher.IsMatched); this._stringToUnicodeSequenceConverter = new CachingConverterDecorator <string, TLinkAddress>(new StringToUnicodeSequenceConverter <TLinkAddress>(links, charToUnicodeSymbolConverter, balancedVariantConverter, _unicodeSequenceMarker)); this._unicodeSequenceToStringConverter = new CachingConverterDecorator <TLinkAddress, string>(new UnicodeSequenceToStringConverter <TLinkAddress>(links, unicodeSequenceCriterionMatcher, sequenceWalker, unicodeSymbolToCharConverter)); }