Class CombinedDecorator<TLinkAddress>
- Namespace
- Platform.Data.Doublets.Decorators
- Assembly
- Platform.Data.Doublets.dll
Represents a combined decorator that implements the basic logic for interacting with the links storage for links with addresses represented as ulong.
Представляет комбинированный декоратор, реализующий основную логику по взаимодействии с хранилищем связей, для связей с адресами представленными в виде ulong.
public class CombinedDecorator<TLinkAddress> : LinksDisposableDecoratorBase<TLinkAddress>, ILinks<TLinkAddress>, ILinks<TLinkAddress, LinksConstants<TLinkAddress>>, IDisposable where TLinkAddress : IUnsignedNumber<TLinkAddress>
Type Parameters
TLinkAddress
- Inheritance
-
LinksOperatorBase<TLinkAddress>LinksDecoratorBase<TLinkAddress>LinksDisposableDecoratorBase<TLinkAddress>CombinedDecorator<TLinkAddress>
- Implements
-
ILinks<TLinkAddress>ILinks<TLinkAddress, LinksConstants<TLinkAddress>>
- Inherited Members
- Extension Methods
Remarks
Возможные оптимизации: Объединение в одном поле Source и Target с уменьшением до 32 бит. + меньше объём БД - меньше производительность - больше ограничение на количество связей в БД) Ленивое хранение размеров поддеревьев (расчитываемое по мере использования БД) + меньше объём БД - больше сложность
Текущее теоретическое ограничение на индекс связи, из-за использования 5 бит в размере поддеревьев для AVL баланса и флагов нитей: 2 в степени(64 минус 5 равно 59 ) равно 576 460 752 303 423 488 Желательно реализовать поддержку переключения между деревьями и битовыми индексами (битовыми строками) - вариант матрицы (выстраеваемой лениво).
Решить отключать ли проверки при компиляции под Release. Т.е. исключения будут выбрасываться только при #if DEBUG
Constructors
CombinedDecorator(ILinks<TLinkAddress>)
Initializes a new CombinedDecorator<TLinkAddress> instance.
public CombinedDecorator(ILinks<TLinkAddress> links)
Parameters
linksILinks<TLinkAddress>A links.
Methods
Create(IList<TLinkAddress>?, WriteHandler<TLinkAddress>?)
Creates the substitution.
public override TLinkAddress Create(IList<TLinkAddress>? substitution, WriteHandler<TLinkAddress>? handler)
Parameters
substitutionIList<TLinkAddress>The substitution.
handlerWriteHandler<TLinkAddress>Optional callback; null continues without invoking a callback.
Returns
- TLinkAddress
The TLinkAddress
Delete(IList<TLinkAddress>?, WriteHandler<TLinkAddress>?)
Deletes the substitution.
public override TLinkAddress Delete(IList<TLinkAddress>? restriction, WriteHandler<TLinkAddress>? handler)
Parameters
restrictionIList<TLinkAddress>The substitution.
handlerWriteHandler<TLinkAddress>Optional callback; null continues without invoking a callback.
Returns
- TLinkAddress
Update(IList<TLinkAddress>?, IList<TLinkAddress>?, WriteHandler<TLinkAddress>?)
Updates the substitution.
public override TLinkAddress Update(IList<TLinkAddress>? restriction, IList<TLinkAddress>? substitution, WriteHandler<TLinkAddress>? handler)
Parameters
restrictionIList<TLinkAddress>The substitution.
substitutionIList<TLinkAddress>The substitution.
handlerWriteHandler<TLinkAddress>Optional callback; null continues without invoking a callback.
Returns
- TLinkAddress
The TLinkAddress