11using System ;
2- using System . Buffers ;
3- using System . Collections ;
42using System . Collections . Generic ;
53using System . Diagnostics . CodeAnalysis ;
64using System . Linq ;
75using System . Numerics ;
6+ using System . Runtime . CompilerServices ;
87using Amazon . DynamoDBv2 . Model ;
98using static System . Runtime . InteropServices . CollectionsMarshal ;
109
@@ -24,9 +23,12 @@ public static class MarshallHelper
2423 [ return : NotNullIfNotNull ( nameof ( dict ) ) ]
2524 public static AttributeValue ? ToAttributeValue (
2625 [ NotNullIfNotNull ( nameof ( dict ) ) ] Dictionary < string , AttributeValue > ? dict
27- ) => dict is null
28- ? null
29- : new AttributeValue { M = dict } ;
26+ )
27+ {
28+ return dict is null
29+ ? null
30+ : new AttributeValue { M = dict } ;
31+ }
3032
3133 public static AttributeValue FromDictionary < T , TArgument > (
3234 IEnumerable < KeyValuePair < string , T > > dictionary ,
@@ -74,9 +76,7 @@ public static AttributeValue FromNumberSet<T>(IEnumerable<T> numbers, string? da
7476 var list = new List < string > ( count ) ;
7577
7678 foreach ( var @string in numbers )
77- {
7879 list . Add ( @string . ToString ( ) ?? throw ExceptionHelper . NotNull ( $ "{ dataMember } [UNKNOWN]") ) ;
79- }
8080
8181 return new AttributeValue { NS = list } ;
8282 }
@@ -117,60 +117,114 @@ public static AttributeValue FromStringSet(IEnumerable<string> strings, string?
117117 var list = new List < string > ( count ) ;
118118
119119 foreach ( var @string in strings )
120- {
121120 list . Add ( @string ?? throw ExceptionHelper . NotNull ( $ "{ dataMember } [UNKNOWN]") ) ;
122- }
123121
124122 return new AttributeValue { SS = list } ;
125123 }
126124 }
127125
128- public static ISet < TNumber > ToNumberISet < TNumber > ( List < string > ss , string ? dataMember )
129- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
126+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
127+ private static TSet ToNumberSet < TNumber , TSet > (
128+ List < string > numbers ,
129+ Func < int , TSet > factory ,
130+ string ? dataMember
131+ )
132+ where TSet : ICollection < TNumber >
133+ where TNumber : struct , INumber < TNumber >
130134 {
131- throw new Exception ( ) ;
135+ var span = AsSpan ( numbers ) ;
136+ var set = factory ( span . Length ) ;
137+
138+ foreach ( var number in span )
139+ {
140+ if ( number is null )
141+ throw ExceptionHelper . NotNull ( $ "{ dataMember } [UNKNOWN]") ;
142+
143+ set . Add ( TNumber . Parse ( number , null ) ) ;
144+ }
145+
146+ return set ;
132147 }
133148
134- public static IReadOnlySet < TNumber > ToNumberIReadOnlySet < TNumber > ( List < string > ss , string ? dataMember )
135- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
149+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
150+ private static TSet ToNullableNumberSet < TNumber , TSet > (
151+ List < string ? > numbers ,
152+ Func < int , TSet > factory ,
153+ string ? _
154+ )
155+ where TSet : ICollection < TNumber ? >
156+ where TNumber : struct , INumber < TNumber >
136157 {
137- throw new Exception ( ) ;
158+ var span = AsSpan ( numbers ) ;
159+ var set = factory ( span . Length ) ;
160+
161+ foreach ( var number in span )
162+ {
163+ if ( number is null )
164+ set . Add ( null ) ;
165+
166+ set . Add ( TNumber . Parse ( number , null ) ) ;
167+ }
168+
169+ return set ;
170+ }
171+
172+ public static ISet < TNumber > ToNumberISet < TNumber > ( List < string > ns , string ? dataMember )
173+ where TNumber : struct , INumber < TNumber >
174+ {
175+ return ToNumberSet < TNumber , HashSet < TNumber > > ( ns , i => new HashSet < TNumber > ( i ) , dataMember ) ;
138176 }
139177
140- public static HashSet < TNumber > ToNumberHashSet < TNumber > ( List < string > ss , string ? dataMember )
141- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
178+ public static IReadOnlySet < TNumber > ToNumberIReadOnlySet < TNumber > ( List < string > ns , string ? dataMember )
179+ where TNumber : struct , INumber < TNumber >
142180 {
143- throw new Exception ( ) ;
181+ return ToNumberSet < TNumber , HashSet < TNumber > > ( ns , i => new HashSet < TNumber > ( i ) , dataMember ) ;
144182 }
145183
146- public static SortedSet < TNumber > ToNumberSortedSet < TNumber > ( List < string > ss , string ? dataMember )
147- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
184+ public static HashSet < TNumber > ToNumberHashSet < TNumber > ( List < string > ns , string ? dataMember )
185+ where TNumber : struct , INumber < TNumber >
148186 {
149- throw new Exception ( ) ;
187+ return ToNumberSet < TNumber , HashSet < TNumber > > ( ns , i => new HashSet < TNumber > ( i ) , dataMember ) ;
188+ }
189+
190+ public static SortedSet < TNumber > ToNumberSortedSet < TNumber > ( List < string > ns , string ? dataMember )
191+ where TNumber : struct , INumber < TNumber >
192+ {
193+ var span = AsSpan ( ns ) ;
194+ var set = new SortedSet < TNumber > ( ) ;
195+ foreach ( var se in span )
196+ {
197+ if ( se is null )
198+ throw ExceptionHelper . NotNull ( $ "{ dataMember } [UNKNOWN]") ;
199+
200+ set . Add ( TNumber . Parse ( se , null ) ) ;
201+ }
202+
203+ return set ;
150204 }
151205
152- public static ISet < TNumber ? > ToNullableNumberISet < TNumber > ( List < string ? > ss , string ? dataMember )
153- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
206+ public static ISet < TNumber ? > ToNullableNumberISet < TNumber > ( List < string ? > ns , string ? dataMember )
207+ where TNumber : struct , INumber < TNumber >
154208 {
155- throw new Exception ( ) ;
209+ return ToNullableNumberSet < TNumber , HashSet < TNumber ? > > ( ns , i => new HashSet < TNumber ? > ( i ) , dataMember ) ;
156210 }
157211
158- public static IReadOnlySet < TNumber ? > ToNullableNumberIReadOnlySet < TNumber > ( List < string ? > ss , string ? dataMember )
159- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
212+ public static IReadOnlySet < TNumber ? > ToNullableNumberIReadOnlySet < TNumber > ( List < string ? > ns , string ? dataMember )
213+ where TNumber : struct , INumber < TNumber >
160214 {
161- throw new Exception ( ) ;
215+ return ToNullableNumberSet < TNumber , HashSet < TNumber ? > > ( ns , i => new HashSet < TNumber ? > ( i ) , dataMember ) ;
162216 }
163217
164- public static HashSet < TNumber ? > ToNullableNumberHashSet < TNumber > ( List < string ? > ss , string ? dataMember )
165- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
218+ public static HashSet < TNumber ? > ToNullableNumberHashSet < TNumber > ( List < string ? > ns , string ? dataMember )
219+ where TNumber : struct , INumber < TNumber >
166220 {
167- throw new Exception ( ) ;
221+ return ToNullableNumberSet < TNumber , HashSet < TNumber ? > > ( ns , i => new HashSet < TNumber ? > ( i ) , dataMember ) ;
168222 }
169223
170- public static SortedSet < TNumber ? > ToNullableNumberSortedSet < TNumber > ( List < string ? > ss , string ? dataMember )
171- where TNumber : struct , IParsable < TNumber > , INumber < TNumber >
224+ public static SortedSet < TNumber ? > ToNullableNumberSortedSet < TNumber > ( List < string ? > ns , string ? _ )
225+ where TNumber : struct , INumber < TNumber >
172226 {
173- throw new Exception ( ) ;
227+ return new SortedSet < TNumber ? > ( ns . Select ( x => x is null ? ( TNumber ? ) null : TNumber . Parse ( x , null ) ) ) ;
174228 }
175229
176230 public static ILookup < string , T > ToLookup < T , TArgument > (
0 commit comments