diff --git a/csharp/Platform.Data.Doublets/ILinksExtensions.cs b/csharp/Platform.Data.Doublets/ILinksExtensions.cs index 3599e8efd..2ff8d7b3d 100644 --- a/csharp/Platform.Data.Doublets/ILinksExtensions.cs +++ b/csharp/Platform.Data.Doublets/ILinksExtensions.cs @@ -17,30 +17,26 @@ namespace Platform.Data.Doublets { /// - /// - /// Represents the links extensions. - /// - /// + /// Creates a static class ILinksExtensions. + /// Создает статический класс ILinksExtensions. /// public static class ILinksExtensions { /// - /// - /// Runs the random creations using the specified links. - /// - /// + /// Creates links with random values in the specified links storage. + /// Создаёт связи со случайными значениями в указанном хранилище связей. /// /// /// The link. /// /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The amount of creations. - /// + /// Number of operations to create links. + /// Количество операция для создания связей. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void RunRandomCreations(this ILinks links, ulong amountOfCreations) @@ -58,22 +54,20 @@ public static void RunRandomCreations(this ILinks links, ulong amo } /// - /// - /// Runs the random searches using the specified links. - /// - /// + /// Search for links with random values ​​in the specified link store. + /// Ищет связи со случайными значениями в указанном хранилище связей. /// /// /// The link. /// /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The amount of searches. - /// + /// Number of operations to find links. + /// Количество операция для поиска связей. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void RunRandomSearches(this ILinks links, ulong amountOfSearches) @@ -91,22 +85,20 @@ public static void RunRandomSearches(this ILinks links, ulong amou } /// - /// - /// Runs the random deletions using the specified links. - /// - /// + /// Removing links with random values ​​in the specified link store. + /// Удаляет связей со случайными значениями в указанном хранилище связей. /// /// /// The link. /// /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The amount of deletions. - /// + /// Number of operations to delete links. + /// Количество операция для удаления связей. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void RunRandomDeletions(this ILinks links, ulong amountOfDeletions) @@ -130,22 +122,20 @@ public static void RunRandomDeletions(this ILinks links, ulong amo } /// - /// - /// Deletes the links. - /// - /// + /// Removing link ​​in the specified link store. + /// Удаляет связь в указанном хранилище связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The link to delete. - /// + /// The link to be removed. + /// Связь которую нужно удалить. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Delete(this ILinks links, TLink linkToDelete) @@ -155,8 +145,20 @@ public static void Delete(this ILinks links, TLink linkToDelete) links.EnforceResetValues(linkToDelete); links.Delete(new LinkAddress(linkToDelete)); } - } + } + /// + /// Removes all links in the specified store. + /// Удаляет все связи в указанном хранилище. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// /// /// TODO: Возможно есть очень простой способ это сделать. /// (Например просто удалить файл, или изменить его размер таким образом, @@ -179,18 +181,16 @@ public static void DeleteAll(this ILinks links) } /// - /// - /// Firsts the links. - /// - /// + /// Looks for the first link in the first store. + /// Ищет первую связь в первом хранилище. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// /// В процессе поиска по хранилищу не было найдено связей. @@ -226,26 +226,24 @@ public static TLink First(this ILinks links) } /// - /// - /// Singles the or default using the specified links. - /// - /// + /// Finds a link that satisfies the specified constraint, if there is one, otherwise returns the default link address. + /// Находит связь, которая удовлетворяет указанном ограничению, если такая существует в единственном экземпляре, в противном случае возвращает адрес связи по умолчанию. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The query. - /// + /// Limitation. + /// Ограничение. /// /// - /// The result. - /// + /// Return result. + /// Возвращает результат. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IList SingleOrDefault(this ILinks links, IList query) @@ -276,6 +274,26 @@ TLink linkHandler(IList link) #region Paths + /// + /// Checks the existence of a base along the given path. + /// Проверяет существование базы по данному пути. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Links store path. + /// Путь к хранилищу связей. + /// + /// + /// Returns true if there is a path to the link or false if there is no path to the link. + /// Возвращает значение true в случае существание пути к связе или false в случае отстутсвии пути к связи. + /// /// /// TODO: Как так? Как то что ниже может быть корректно? /// Скорее всего практически не применимо @@ -315,6 +333,30 @@ public static bool CheckPathExistance(this ILinks links, params TL return true; } + /// + /// Retrieved by key link by link address. + /// Получает с помощью ключевой связи и с помощью адреса связи адресс главной связи. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The key link. + /// Ключевая связь. + /// + /// + /// The links storage. + /// Хранилище связи. + /// + /// + /// Main link path. + /// Путь к главной связи. + /// + /// + /// Returns the current link. + /// Возвращеает текущую связь. + /// /// /// Может потребовать дополнительного стека для PathElement's при использовании SequenceWalker. /// @@ -331,38 +373,32 @@ public static TLink GetByKeys(this ILinks links, TLink root, param } /// - /// - /// Gets the square matrix sequence element by index using the specified links. - /// - /// + /// Picks up a matrix of slave link addresses using the master link index. + /// Палучает матрицу адресов побойчных связей с помощью индекса главной связи. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The root. - /// + /// The key link. + /// Ключевая связь. /// /// - /// The size. - /// + /// Link address matrix size. + /// Размер матрицы адресов связи. /// /// - /// The index. - /// + /// The link index. + /// Индекс связи. /// - /// - /// Sequences with sizes other than powers of two are not supported. - /// - /// /// - /// The current link. - /// + /// Returns the current master link. + /// Возвращает текущую главную связь. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetSquareMatrixSequenceElementByIndex(this ILinks links, TLink root, ulong size, ulong index) @@ -388,69 +424,173 @@ public static TLink GetSquareMatrixSequenceElementByIndex(this ILinks - /// Возвращает индекс указанной связи. + /// Gets the index of the specified relationship in the specified storage. + /// Получеает индекс указанной связи в указанном хранилище. /// - /// Хранилище связей. - /// Связь представленная списком, состоящим из её адреса и содержимого. - /// Индекс начальной связи для указанной связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The link. + /// Связь. + /// + /// + /// Index of the specified link. + /// Индекс указанной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetIndex(this ILinks links, IList link) => link[links.Constants.IndexPart]; /// - /// Возвращает индекс начальной (Source) связи для указанной связи. + /// Gets the start of a link in the specified link store. + /// Получает начало связи в указанном хранилище связей. /// - /// Хранилище связей. - /// Индекс связи. - /// Индекс начальной связи для указанной связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The link. + /// Связь. + /// + /// + /// The beginning of the specified connection. + /// Начало указанной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetSource(this ILinks links, TLink link) => links.GetLink(link)[links.Constants.SourcePart]; /// - /// Возвращает индекс начальной (Source) связи для указанной связи. + /// Gets the start of a link in the specified link store. + /// Получает начало связи в указанном хранилище связей. /// - /// Хранилище связей. - /// Связь представленная списком, состоящим из её адреса и содержимого. - /// Индекс начальной связи для указанной связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The list of the links. + /// Список связей. + /// + /// + /// The beginning of the specified connection. + /// Начало указанной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetSource(this ILinks links, IList link) => link[links.Constants.SourcePart]; /// - /// Возвращает индекс конечной (Target) связи для указанной связи. + /// Gets the end of a link in the specified link store. + /// Получает конец связи в указанном хранилище связей. /// - /// Хранилище связей. - /// Индекс связи. - /// Индекс конечной связи для указанной связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The list of the links. + /// Список связей. + /// + /// + /// The end of the specified connection. + /// Конец указанной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetTarget(this ILinks links, TLink link) => links.GetLink(link)[links.Constants.TargetPart]; /// - /// Возвращает индекс конечной (Target) связи для указанной связи. + /// Gets the end of a link in the specified link store. + /// Получает конец связи в указанном хранилище связей. /// - /// Хранилище связей. - /// Связь представленная списком, состоящим из её адреса и содержимого. - /// Индекс конечной связи для указанной связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The list of the links. + /// Список связей. + /// + /// + /// The end of the specified connection. + /// Конец указанной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetTarget(this ILinks links, IList link) => link[links.Constants.TargetPart]; /// - /// Выполняет проход по всем связям, соответствующим шаблону, вызывая обработчик (handler) для каждой подходящей связи. + /// Loops through all the links that match the pattern, invoking a handler for each matching link. + /// Выполняет проход по всем связям, соответствующим шаблону, вызывая обработчик (handler) для каждой подходящей связи. /// - /// Хранилище связей. - /// Обработчик каждой подходящей связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Handler for every matching link. + /// Обработчик каждой подходящей связи. + /// /// Ограничения на содержимое связей. Каждое ограничение может иметь значения: Constants.Null - 0-я связь, обозначающая ссылку на пустоту, Any - отсутствие ограничения, 1..∞ конкретный адрес связи. - /// True, в случае если проход по связям не был прерван и False в обратном случае. + /// + /// Returns True if the pass through the links was not interrupted and False otherwise. + /// Возвращает значение True, в случае если проход по связям не был прерван и значение False в обратном случае. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool Each(this ILinks links, Func, TLink> handler, params TLink[] restrictions) => EqualityComparer.Default.Equals(links.Each(handler, restrictions), links.Constants.Continue); /// - /// Выполняет проход по всем связям, соответствующим шаблону, вызывая обработчик (handler) для каждой подходящей связи. + /// Handles every relationship with the specified start and end. + /// Обрабатывает каждую связь с указанным началом и концом. /// - /// Хранилище связей. - /// Значение, определяющее соответствующие шаблону связи. (Constants.Null - 0-я связь, обозначающая ссылку на пустоту в качестве начала, Constants.Any - любое начало, 1..∞ конкретное начало) - /// Значение, определяющее соответствующие шаблону связи. (Constants.Null - 0-я связь, обозначающая ссылку на пустоту в качестве конца, Constants.Any - любой конец, 1..∞ конкретный конец) - /// Обработчик каждой подходящей связи. - /// True, в случае если проход по связям не был прерван и False в обратном случае. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// Handler for every matching link. + /// Обработчик каждой подходящей связи. + /// + /// + /// Returns the processing value for each relationship with the specified start and end.. + /// Возвращает значение обработки каждой связи с указанным началом и концом. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool Each(this ILinks links, TLink source, TLink target, Func handler) { @@ -459,37 +599,55 @@ public static bool Each(this ILinks links, TLink source, TLink tar } /// - /// Выполняет проход по всем связям, соответствующим шаблону, вызывая обработчик (handler) для каждой подходящей связи. + /// Using the template, it traverses each link and calls the link handler for each uploaded link.. + /// С помощью шаблона проходит по каждой связи в вызывает обработчик связи для каждой подъодящей связи. /// - /// Хранилище связей. - /// Значение, определяющее соответствующие шаблону связи. (Constants.Null - 0-я связь, обозначающая ссылку на пустоту в качестве начала, Constants.Any - любое начало, 1..∞ конкретное начало) - /// Значение, определяющее соответствующие шаблону связи. (Constants.Null - 0-я связь, обозначающая ссылку на пустоту в качестве конца, Constants.Any - любой конец, 1..∞ конкретный конец) - /// Обработчик каждой подходящей связи. - /// True, в случае если проход по связям не был прерван и False в обратном случае. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The beggining of the link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// Handler for every matching link. + /// Обработчик каждой подходящей связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Returns true if the pass through the links was not interrupted and False otherwise. + /// Вовзращает значение true, в случае если проход по связям не был прерван и False в обратном случае. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool Each(this ILinks links, TLink source, TLink target, Func, TLink> handler) => links.Each(handler, links.Constants.Any, source, target); /// - /// - /// Alls the links. - /// - /// + /// Using constraints, checks the addresses of links in the link store. + /// С помощью ограничений проверяет адреса связей в хранилище связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links Storage. + /// Хранилище связей. /// /// - /// The restrictions. - /// + /// Restrictions on communication addresses. + /// Ограничения по адресам связи. /// /// - /// A list of i list t link - /// + /// Returns the value of a set of links in the case of a nonzero set, and an empty set otherwise. + /// Возвращает значение множества связей в случае ненулевого множества, и пустое множество в обратном случае. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IList> All(this ILinks links, params TLink[] restrictions) @@ -509,26 +667,24 @@ public static IList> All(this ILinks links, params TL } /// - /// - /// Alls the indices using the specified links. - /// - /// + /// Checks link addresses by indexes in link store. + /// Проверяет адреса связей по индексам в хранилище связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The restrictions. - /// + /// Restrictions on communication addresses. + /// Ограничения по адресам связи. /// /// - /// A list of t link - /// + /// Returns the value of a set of links in the case of a nonzero set, and an empty set otherwise. + /// Возвращает значение множества связей в случае ненулевого множества, и пустое множество в обратном случае. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IList AllIndices(this ILinks links, params TLink[] restrictions) @@ -548,40 +704,50 @@ public static IList AllIndices(this ILinks links, params TL } /// - /// Возвращает значение, определяющее существует ли связь с указанными началом и концом в хранилище связей. + /// Checks if a link exists with the specified start and end in the link store. + /// Проверяет существует ли связь с указанным началом и концом в хранилище связей. /// - /// Хранилище связей. - /// Начало связи. - /// Конец связи. - /// Значение, определяющее существует ли связь. + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// Returns a value that determines whether a link exists or not. + /// Возвращает значение, определяющее существует связь или нет. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool Exists(this ILinks links, TLink source, TLink target) => Comparer.Default.Compare(links.Count(links.Constants.Any, source, target), default) > 0; #region Ensure // TODO: May be move to EnsureExtensions or make it both there and here - /// - /// - /// Ensures the link exists using the specified links. - /// - /// + /// Checks the connection for its existence. + /// Проверяет связь на ее существование. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// - /// + /// The links storage. + /// Хранилище связей. /// - /// The restrictions. - /// + /// Restrictions on communication addresses. + /// Ограничения по адресам связи. + /// /// - /// - /// sequence[{i}] - /// - /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsureLinkExists(this ILinks links, IList restrictions) { @@ -595,26 +761,24 @@ public static void EnsureLinkExists(this ILinks links, IList - /// - /// Ensures the inner reference exists using the specified links. - /// - /// + /// Checks if a link exists for the specified link argument. + /// Проверяет связь на существование по указанному аргументу связи. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The reference. - /// + /// Restrictions on communication addresses. + /// Ограничения по адресам связи. /// /// - /// The argument name. - /// + /// Argument name. + /// Значение аргумента. /// /// /// @@ -630,26 +794,24 @@ public static void EnsureInnerReferenceExists(this ILinks links, T } /// - /// - /// Ensures the inner reference exists using the specified links. - /// - /// + /// Checks for the existence of a connection in the specified range of contacts. + /// Проверяет на существованние связь в казанном диапазоне адресов связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище свящей. /// /// - /// The restrictions. - /// + /// Restrictions on communication addresses. + /// Ограничения по адресам связи. /// /// - /// The argument name. - /// + /// Argument name. + /// Значение аргумента. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsureInnerReferenceExists(this ILinks links, IList restrictions, string argumentName) @@ -661,18 +823,16 @@ public static void EnsureInnerReferenceExists(this ILinks links, I } /// - /// - /// Ensures the link is any or exists using the specified links. - /// - /// + /// Checks for connectivity by address link type. + /// Проверяет на существование связи по типам адресов связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// /// The restrictions. @@ -697,26 +857,24 @@ public static void EnsureLinkIsAnyOrExists(this ILinks links, ILis } /// - /// - /// Ensures the link is any or exists using the specified links. - /// - /// + /// Checks the existence of a link by the types of link addresses and the value of the link arguments. + /// Проверяет на существование связи по типам адресов связей и значением аргументов связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// /// The link. - /// + /// Связь. /// /// - /// The argument name. - /// + /// Argument name. + /// Значение аргумента. /// /// /// @@ -733,26 +891,24 @@ public static void EnsureLinkIsAnyOrExists(this ILinks links, TLin } /// - /// - /// Ensures the link is itself or exists using the specified links. - /// - /// + /// Checks for links in the link store or outside the store by link address type. + /// Проверяет существование связей в хранилище связей или вне хранилища по типам адрессов связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// /// The link. - /// + /// Связь. /// /// - /// The argument name. - /// + /// Argument name. + /// Значение аргумента. /// /// /// @@ -768,7 +924,30 @@ public static void EnsureLinkIsItselfOrExists(this ILinks links, T } } - /// Хранилище связей. + /// + /// Checks the link for its absence in the link repository. + /// Проверяет связь на ее отстутсвие в хранилище связей. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The link. + /// Связь. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsureDoesNotExists(this ILinks links, TLink source, TLink target) { @@ -778,7 +957,22 @@ public static void EnsureDoesNotExists(this ILinks links, TLink so } } - /// Хранилище связей. + /// + /// Checks the link store for unused links. + /// Проверяет хранилище связей на неиспользуемые связи. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The link. + /// Связь. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsureNoUsages(this ILinks links, TLink link) { @@ -788,15 +982,64 @@ public static void EnsureNoUsages(this ILinks links, TLink link) } } - /// Хранилище связей. + /// + /// Checks the link for its presence in the link storage. + /// Проверяет связь на ее наличие в хранилище связей. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The links addresses. + /// Адреса связей. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsureCreated(this ILinks links, params TLink[] addresses) => links.EnsureCreated(links.Create, addresses); - /// Хранилище связей. + /// + /// Checks links for addresses. + /// Проверяет связи на наличие адрессов. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The links addresses. + /// Адреса связей. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsurePointsCreated(this ILinks links, params TLink[] addresses) => links.EnsureCreated(links.CreatePoint, addresses); - /// Хранилище связей. + /// + /// Checks if a link has been created with the specified address. + /// Проверяет создана ли связь с указанным адрессом. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links Storage. + /// Хранилище связей. + /// + /// + /// Parameter indicating whether the link is created or not. + /// Параметр, указывающий создана связь или нет. + /// + /// + /// The links addresses. + /// Адреса связей. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnsureCreated(this ILinks links, Func creator, params TLink[] addresses) { @@ -826,7 +1069,26 @@ public static void EnsureCreated(this ILinks links, Func cr #endregion - /// Хранилище связей. + /// + /// Subtracts the number of times a link has been used in the link store. + /// Подстчитывает количество использований связи в хранилище связей. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The link. + /// Связь. + /// + /// + /// Returns the number of times the link has been used with the specified start and end. + /// Возвращает количество использований связи с указанным началом и концом. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink CountUsages(this ILinks links, TLink link) { @@ -846,11 +1108,53 @@ public static TLink CountUsages(this ILinks links, TLink link) return Arithmetic.Add(usagesAsSource, usagesAsTarget); } - /// Хранилище связей. + /// + /// Checks a link for its use in the link store. + /// Проверяет связь на ее использование в хранилище связей. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The link. + /// Связь. + /// + /// + /// Returns the communication address. + /// Возвращает адресс связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool HasUsages(this ILinks links, TLink link) => Comparer.Default.Compare(links.CountUsages(link), default) > 0; - /// Хранилище связей. + /// + /// Checks links in the link store for a specified beginning and end of a link. + /// Проверяет связи в хранилище связей на указанное начало и конец связи. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// Returns the addresses of equivalent links. + /// Возвращает адреса эквивалентных связей. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool Equals(this ILinks links, TLink link, TLink source, TLink target) { @@ -861,12 +1165,29 @@ public static bool Equals(this ILinks links, TLink link, TLink sou } /// - /// Выполняет поиск связи с указанными Source (началом) и Target (концом). + /// + /// /// - /// Хранилище связей. - /// Индекс связи, которая является началом для искомой связи. - /// Индекс связи, которая является концом для искомой связи. - /// Индекс искомой связи с указанными Source (началом) и Target (концом). + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// Returns the index of the link to find at the specified start or end. + /// Возвращает индекс искомой связи с указанным началом или концом. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink SearchOrDefault(this ILinks links, TLink source, TLink target) { @@ -876,11 +1197,41 @@ public static TLink SearchOrDefault(this ILinks links, TLink sourc return setter.Result; } - /// Хранилище связей. + /// + /// Creates a new link and link address in the link store. + /// Создает новую связь и адресс связи в хранилище связей. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Returns an empty link value. + /// Возврпащеает пустое значение связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink Create(this ILinks links) => links.Create(null); - /// Хранилище связей. + /// + /// Creates the value of the link address. + /// Создает значение адреса связи. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Returns an update of the link address. + /// Возвращает обновление адресса связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink CreatePoint(this ILinks links) { @@ -888,29 +1239,80 @@ public static TLink CreatePoint(this ILinks links) return links.Update(link, link, link); } - /// Хранилище связей. + /// + /// Creates and updates link address types with specified start and end. + /// Создает и обновляет типы адреса связи с указанным началом и концом. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// Returns the end and start of the link. + /// Возвращает значения конца и начала связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink CreateAndUpdate(this ILinks links, TLink source, TLink target) => links.Update(links.Create(), source, target); /// - /// Обновляет связь с указанными началом (Source) и концом (Target) - /// на связь с указанными началом (NewSource) и концом (NewTarget). + /// Updates a link with the specified start and end to a link with the specified start and end. + /// Обновляет связь с указанным началом и концом на связь с указанным началом и концом. /// - /// Хранилище связей. - /// Индекс обновляемой связи. - /// Индекс связи, которая является началом связи, на которую выполняется обновление. - /// Индекс связи, которая является концом связи, на которую выполняется обновление. - /// Индекс обновлённой связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связи. + /// + /// + /// The link. + /// Связь. + /// + /// + /// The new beggining of link. + /// Новое начало связи. + /// + /// + /// The new end of link. + /// Новый конец связи. + /// + /// + /// Returns the index of the updated link. + /// Возвращает индекс обновленной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink Update(this ILinks links, TLink link, TLink newSource, TLink newTarget) => links.Update(new LinkAddress(link), new Link(link, newSource, newTarget)); /// - /// Обновляет связь с указанными началом (Source) и концом (Target) - /// на связь с указанными началом (NewSource) и концом (NewTarget). + /// In two or more equivalent links, combine or delete incoming and outgoing links to one main link. + /// В двух или более эквивалентных свзять объединяет или удаляет входящие и выходящие связи к одной главной связи. /// - /// Хранилище связей. - /// Ограничения на содержимое связей. Каждое ограничение может иметь значения: Constants.Null - 0-я связь, обозначающая ссылку на пустоту, Itself - требование установить ссылку на себя, 1..∞ конкретный адрес другой связи. - /// Индекс обновлённой связи. + /// + /// The links type address. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// Ограничения на содержимое связей. + /// Restrictions on the content of links. + /// + /// + /// Depending on the condition, it returns the link update, the index, the link number that was deleted. + /// В зависимости от условия возвращает обновления связи, индекс, номер свзи которую удалил. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink Update(this ILinks links, params TLink[] restrictions) { @@ -929,34 +1331,32 @@ public static TLink Update(this ILinks links, params TLink[] restr } /// - /// - /// Resolves the constant as self reference using the specified links. - /// - /// + /// Allows the use of constant values ​​as independent communication addresses. + /// Разрешает использование константных значений как самостоятельные адреса связи. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The constant. - /// + /// Constant values. + /// Константные значение. /// /// - /// The restrictions. - /// + /// Constraints on constant values. + /// Ограничения константных значений. /// /// - /// The substitution. - /// + /// Changed communication addresses. + /// Измененные адреса связи. /// /// - /// A list of t link - /// + /// Returns the link and the type of its address. + /// Возвращает связь и тип ее адреса. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IList ResolveConstantAsSelfReference(this ILinks links, TLink constant, IList restrictions, IList substitution) @@ -977,12 +1377,29 @@ public static IList ResolveConstantAsSelfReference(this ILinks - /// Создаёт связь (если она не существовала), либо возвращает индекс существующей связи с указанными Source (началом) и Target (концом). + /// Creates a new link, a non-existing link. + /// Создает новую связь не существующую связь. /// - /// Хранилище связей. - /// Индекс связи, которая является началом на создаваемой связи. - /// Индекс связи, которая является концом для создаваемой связи. - /// Индекс связи, с указанным Source (началом) и Target (концом) + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// Returns the index of an existing relationship with the specified start and end of the relationship. + /// Вовзращает индекс существующей связи с указанным началом и концом связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink GetOrCreate(this ILinks links, TLink source, TLink target) { @@ -995,15 +1412,37 @@ public static TLink GetOrCreate(this ILinks links, TLink source, T } /// - /// Обновляет связь с указанными началом (Source) и концом (Target) - /// на связь с указанными началом (NewSource) и концом (NewTarget). + /// Updates a link with the specified start and end to a link with the specified new start and new end. + /// Обновляет связь с указанным началом и концом на связь с указанным новым началамо и новым концом. /// - /// Хранилище связей. - /// Индекс связи, которая является началом обновляемой связи. - /// Индекс связи, которая является концом обновляемой связи. - /// Индекс связи, которая является началом связи, на которую выполняется обновление. - /// Индекс связи, которая является концом связи, на которую выполняется обновление. - /// Индекс обновлённой связи. + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The beggining of link. + /// Начало связи. + /// + /// + /// The end of link. + /// Конец связи. + /// + /// + /// The new beggining of link. + /// Новое начало связи. + /// + /// + /// The new end of link. + /// Новый конец связи. + /// + /// + /// Returns the index of a specific relationship. + /// Возвращает индекс определенной связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink UpdateOrCreateOrGet(this ILinks links, TLink source, TLink target, TLink newSource, TLink newTarget) { @@ -1020,10 +1459,30 @@ public static TLink UpdateOrCreateOrGet(this ILinks links, TLink s return links.Update(link, newSource, newTarget); } - /// Удаляет связь с указанными началом (Source) и концом (Target). - /// Хранилище связей. - /// Индекс связи, которая является началом удаляемой связи. - /// Индекс связи, которая является концом удаляемой связи. + /// + /// Removes the link to the specified start and end. + /// Удаляет связь с указанным началом и концом. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The beggining of communication address.. + /// Начало адреса связи. + /// + /// + /// The ennd of communication address.. + /// Конец адреса связи. + /// + /// + /// Returns the default link value. + /// Возвращает стандарнтоне значение связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink DeleteIfExists(this ILinks links, TLink source, TLink target) { @@ -1035,10 +1494,22 @@ public static TLink DeleteIfExists(this ILinks links, TLink source } return default; } - - /// Удаляет несколько связей. - /// Хранилище связей. - /// Список адресов связей к удалению. + /// + /// Removing links. + /// Удаляет связи. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// List of deleted links. + /// Список удаленных связей. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void DeleteMany(this ILinks links, IList deletedLinks) { @@ -1048,34 +1519,51 @@ public static void DeleteMany(this ILinks links, IList dele } } - /// Before execution of this method ensure that deleted link is detached (all values - source and target are reset to null) or it might enter into infinite recursion. + /// + /// Removes used links on request. + /// Удаляет использованные связи по запросу. + /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The link index. + /// Индекс связи. + /// + /// Before execution of this method ensure that deleted link is detached + /// (all values - source and target are reset to null) + /// or it might enter into infinite recursion. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void DeleteAllUsages(this ILinks links, TLink linkIndex) { - var any = links.Constants.Any; - var usagesAsSourceQuery = new Link(any, linkIndex, any); + var anyConstant = links.Constants.Any; + var usagesAsSourceQuery = new Link(anyConstant, linkIndex, anyConstant); links.DeleteByQuery(usagesAsSourceQuery); - var usagesAsTargetQuery = new Link(any, any, linkIndex); + var usagesAsTargetQuery = new Link(anyConstant, linkIndex, anyConstant); links.DeleteByQuery(usagesAsTargetQuery); } /// - /// - /// Deletes the by query using the specified links. - /// - /// + /// Removes constrained links. + /// Удаляет связи по ограничениям. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The query. - /// + /// The limitation. + /// Ограничение. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void DeleteByQuery(this ILinks links, Link query) @@ -1095,26 +1583,24 @@ public static void DeleteByQuery(this ILinks links, Link qu // TODO: Move to Platform.Data /// - /// - /// Determines whether are values reset. - /// - /// + /// Checks if the link values ​​are cleared. + /// Проверяет сброшены ли значения связи. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище связей. /// /// - /// The link index. - /// + /// Link Index. + /// Индекс связи. /// /// - /// The bool - /// + /// Returns if the link values ​​are cleared, and if they are not cleared. + /// Возвращает значение если сброшены значения связи, и если не сброшены. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool AreValuesReset(this ILinks links, TLink linkIndex) @@ -1134,22 +1620,20 @@ public static bool AreValuesReset(this ILinks links, TLink linkInd // TODO: Create a universal version of this method in Platform.Data (with using of for loop) /// - /// - /// Resets the values using the specified links. - /// - /// + /// Resets communication values ​​without testing. + /// Сбрасывает значения связи без проведения проверок. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links Storage. + /// Хранилище связей. /// /// - /// The link index. - /// + /// Link Index. + /// Индекс связи. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void ResetValues(this ILinks links, TLink linkIndex) @@ -1161,22 +1645,20 @@ public static void ResetValues(this ILinks links, TLink linkIndex) // TODO: Create a universal version of this method in Platform.Data (with using of for loop) /// - /// - /// Enforces the reset values using the specified links. - /// - /// + /// Resets link values ​​if they have not been cleared earlier. + /// Сбрасывает значиения связи, если они не были сброшены ранее. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links Storage. + /// Хранилище связей. /// /// - /// The link index. - /// + /// Link Index. + /// Индекс связи. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void EnforceResetValues(this ILinks links, TLink linkIndex) @@ -1188,8 +1670,29 @@ public static void EnforceResetValues(this ILinks links, TLink lin } /// - /// Merging two usages graphs, all children of old link moved to be children of new link or deleted. + /// Explores two equivalent relationships. Links to the old link either become links to the new link or are deleted. + /// Исследует две эквивалентные связи. Ссылки на старую связь либо становяттся сслыками на новую связь либо удаляются. /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links storage. + /// Хранилище связей. + /// + /// + /// The previous link index. + /// Предыдущий индекс связи. + /// + /// + /// The new link index. + /// Новый индекс связи. + /// + /// + /// Returns the new link index. + /// Возвращает новый индекс связи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink MergeUsages(this ILinks links, TLink oldLinkIndex, TLink newLinkIndex) { @@ -1243,8 +1746,29 @@ public static TLink MergeUsages(this ILinks links, TLink oldLinkIn } /// - /// Replace one link with another (replaced link is deleted, children are updated or deleted). + /// Replaces one equivalent link with another,by deleting the first one, the links are either updated or deleted. + /// Заменяет одну эквивалентную связь другой, удаляя первую, ссылки либо обновляются либо удаляются. /// + /// + /// Communication address type. + /// Тип адреса связи. + /// + /// + /// The links Storage. + /// Хранилище связи. + /// + /// + /// The previous link index. + /// Предыдущий индекс связи. + /// + /// + /// The new link index. + /// Новый индекс связи. + /// + /// + /// Returns the new link index. + /// Возвращает новый индекс свзяи. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TLink MergeAndDelete(this ILinks links, TLink oldLinkIndex, TLink newLinkIndex) { @@ -1258,22 +1782,20 @@ public static TLink MergeAndDelete(this ILinks links, TLink oldLin } /// - /// - /// Decorates the with automatic uniqueness and usages resolution using the specified links. - /// - /// + /// Adds the following decorators to a link: a decorator that solves the problem of cascading links, removing links with empty content, and uniquely-used cascading links. + /// Дабавляет следующие декораторы к связи:декоратор, разешающий проблему каскадного использования связей, удаления связей с пустым содержанием и уникально-используемых каскадных связей. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The links storage. + /// Хранилище свщяей. /// /// - /// The links. - /// + /// Returns the links. + /// Возвращает связи. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ILinks DecorateWithAutomaticUniquenessAndUsagesResolution(this ILinks links) @@ -1285,26 +1807,24 @@ public static ILinks DecorateWithAutomaticUniquenessAndUsagesResolution - /// - /// Formats the links. - /// - /// + /// Gives the value of link in a specific format. + /// Выдает значение связи в определенном формате. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The Links Storage. + /// Хранилище связей. /// /// /// The link. /// /// /// - /// The string - /// + /// Formatted string with link values. + /// Форматированная строка со значениями связи. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string Format(this ILinks links, IList link) @@ -1314,28 +1834,26 @@ public static string Format(this ILinks links, IList link) } /// - /// - /// Formats the links. - /// - /// + /// Gets a link by index and displays the resulting link in a specific format. + /// Получает связь по индексу и выводит полученную связь в определенном формате. /// /// - /// The link. - /// + /// Communication address type. + /// Тип адреса связи. /// /// - /// The links. - /// + /// The Links storage. + /// Хранилище связей. /// /// - /// The link. - /// + /// The Link. + /// Связь. /// /// - /// The string - /// + /// Formatted string with link values. + /// Форматированная строка со значениями связи. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string Format(this ILinks links, TLink link) => links.Format(links.GetLink(link)); } -} \ No newline at end of file +}