11using System ;
22using System . Collections . Generic ;
3+ using System . Numerics ;
34using System . Runtime . CompilerServices ;
45using Platform . Setters ;
56using Platform . Data . Exceptions ;
@@ -17,27 +18,27 @@ namespace Platform.Data
1718 /// </summary>
1819 public static class ILinksExtensions
1920 {
20- public static TLinkAddress Create < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links ) => links . Create ( null ) ;
21+ public static TLinkAddress Create < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links ) where TLinkAddress : IUnsignedNumber < TLinkAddress > => links . Create ( null ) ;
2122
22- public static TLinkAddress Create < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , IList < TLinkAddress > ? substitution )
23+ public static TLinkAddress Create < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , IList < TLinkAddress > ? substitution ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
2324 {
2425 var constants = links . Constants ;
2526 Setter < TLinkAddress , TLinkAddress > setter = new Setter < TLinkAddress , TLinkAddress > ( constants . Continue , constants . Break , constants . Null ) ;
2627 links . Create ( substitution , setter . SetFirstFromNonNullSecondListAndReturnTrue ) ;
2728 return setter . Result ;
2829 }
2930
30- public static TLinkAddress Update < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , IList < TLinkAddress > ? restriction , IList < TLinkAddress > ? substitution )
31+ public static TLinkAddress Update < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , IList < TLinkAddress > ? restriction , IList < TLinkAddress > ? substitution ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
3132 {
3233 var constants = links . Constants ;
3334 Setter < TLinkAddress , TLinkAddress > setter = new ( constants . Continue , constants . Break , constants . Null ) ;
3435 links . Update ( restriction , substitution , setter . SetFirstFromNonNullSecondListAndReturnTrue ) ;
3536 return setter . Result ;
3637 }
3738
38- public static TLinkAddress Delete < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , TLinkAddress linkToDelete ) => Delete ( links , ( IList < TLinkAddress > ? ) new LinkAddress < TLinkAddress > ( linkToDelete ) ) ;
39+ public static TLinkAddress Delete < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , TLinkAddress linkToDelete ) where TLinkAddress : IUnsignedNumber < TLinkAddress > => Delete ( links , ( IList < TLinkAddress > ? ) new LinkAddress < TLinkAddress > ( linkToDelete ) ) ;
3940
40- public static TLinkAddress Delete < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , IList < TLinkAddress > ? restriction )
41+ public static TLinkAddress Delete < TLinkAddress > ( this ILinks < TLinkAddress , LinksConstants < TLinkAddress > > links , IList < TLinkAddress > ? restriction ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
4142 {
4243 var constants = links . Constants ;
4344 Setter < TLinkAddress , TLinkAddress > setter = new Setter < TLinkAddress , TLinkAddress > ( constants . Continue , constants . Break , constants . Null ) ;
@@ -72,7 +73,7 @@ public static TLinkAddress Delete<TLinkAddress>(this ILinks<TLinkAddress, LinksC
7273 /// <para></para>
7374 /// </returns>
7475 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
75- public static TLinkAddress Count < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , params TLinkAddress [ ] restrictions )
76+ public static TLinkAddress Count < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , params TLinkAddress [ ] restrictions ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
7677 where TConstants : LinksConstants < TLinkAddress >
7778 => links . Count ( restrictions ) ;
7879
@@ -83,7 +84,7 @@ public static TLinkAddress Count<TLinkAddress, TConstants>(this ILinks<TLinkAddr
8384 /// <param name="link">Индекс проверяемой на существование связи.</param>
8485 /// <returns>Значение, определяющее существует ли связь.</returns>
8586 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
86- public static bool Exists < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link )
87+ public static bool Exists < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
8788 where TConstants : LinksConstants < TLinkAddress >
8889 {
8990 var constants = links . Constants ;
@@ -96,7 +97,7 @@ public static bool Exists<TLinkAddress, TConstants>(this ILinks<TLinkAddress, TC
9697 /// TODO: May be move to EnsureExtensions or make it both there and here
9798 /// </remarks>
9899 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
99- public static void EnsureLinkExists < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link )
100+ public static void EnsureLinkExists < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
100101 where TConstants : LinksConstants < TLinkAddress >
101102 {
102103 if ( ! links . Exists ( link ) )
@@ -109,7 +110,7 @@ public static void EnsureLinkExists<TLinkAddress, TConstants>(this ILinks<TLinkA
109110 /// <param name="link">Индекс проверяемой на существование связи.</param>
110111 /// <param name="argumentName">Имя аргумента, в который передаётся индекс связи.</param>
111112 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
112- public static void EnsureLinkExists < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link , string argumentName )
113+ public static void EnsureLinkExists < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link , string argumentName ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
113114 where TConstants : LinksConstants < TLinkAddress >
114115 {
115116 if ( ! links . Exists ( link ) )
@@ -126,7 +127,7 @@ public static void EnsureLinkExists<TLinkAddress, TConstants>(this ILinks<TLinkA
126127 /// <param name="restrictions">Ограничения на содержимое связей. Каждое ограничение может иметь значения: Constants.Null - 0-я связь, обозначающая ссылку на пустоту, Any - отсутствие ограничения, 1..∞ конкретный индекс связи.</param>
127128 /// <returns>True, в случае если проход по связям не был прерван и False в обратном случае.</returns>
128129 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
129- public static TLinkAddress Each < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , ReadHandler < TLinkAddress > ? handler , params TLinkAddress [ ] restrictions )
130+ public static TLinkAddress Each < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , ReadHandler < TLinkAddress > ? handler , params TLinkAddress [ ] restrictions ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
130131 where TConstants : LinksConstants < TLinkAddress >
131132 => links . Each ( restrictions , handler ) ;
132133
@@ -137,7 +138,7 @@ public static TLinkAddress Each<TLinkAddress, TConstants>(this ILinks<TLinkAddre
137138 /// <param name="link">Индекс связи.</param>
138139 /// <returns>Уникальную связь.</returns>
139140 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
140- public static IList < TLinkAddress > ? GetLink < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link )
141+ public static IList < TLinkAddress > ? GetLink < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
141142 where TConstants : LinksConstants < TLinkAddress >
142143 {
143144 var constants = links . Constants ;
@@ -175,7 +176,7 @@ public static TLinkAddress Each<TLinkAddress, TConstants>(this ILinks<TLinkAddre
175176 /// И наоборот этот же метод поможет, если уже существует точка, но нам нужна пара.
176177 /// </remarks>
177178 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
178- public static bool IsFullPoint < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link )
179+ public static bool IsFullPoint < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
179180 where TConstants : LinksConstants < TLinkAddress >
180181 {
181182 if ( links . Constants . IsExternalReference ( link ) )
@@ -195,7 +196,7 @@ public static bool IsFullPoint<TLinkAddress, TConstants>(this ILinks<TLinkAddres
195196 /// Также в будущем можно будет проверять и всех родителей, чтобы проверить есть ли ссылки на себя (на эту связь).
196197 /// </remarks>
197198 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
198- public static bool IsPartialPoint < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link )
199+ public static bool IsPartialPoint < TLinkAddress , TConstants > ( this ILinks < TLinkAddress , TConstants > links , TLinkAddress link ) where TLinkAddress : IUnsignedNumber < TLinkAddress >
199200 where TConstants : LinksConstants < TLinkAddress >
200201 {
201202 if ( links . Constants . IsExternalReference ( link ) )
0 commit comments