33using System . Diagnostics . CodeAnalysis ;
44using System . Linq ;
55using System . Numerics ;
6- using System . Runtime . CompilerServices ;
6+ using System . Runtime . InteropServices ;
77using Amazon . DynamoDBv2 . Model ;
8- using static System . Runtime . InteropServices . CollectionsMarshal ;
98
109namespace DynamoDBGenerator . Internal ;
1110
@@ -145,6 +144,43 @@ public static AttributeValue FromStringSet(IEnumerable<string> strings, string?
145144 }
146145 }
147146
147+ private static TSet ToStringSet < TSet > (
148+ List < string > numbers ,
149+ Func < int , TSet > factory ,
150+ string ? dataMember
151+ )
152+ where TSet : ICollection < string >
153+ {
154+ var span = CollectionsMarshal . AsSpan ( numbers ) ;
155+ var set = factory ( span . Length ) ;
156+
157+ foreach ( var @string in span )
158+ {
159+ if ( @string is null )
160+ throw ExceptionHelper . NotNull ( $ "{ dataMember } [UNKNOWN]") ;
161+
162+ set . Add ( @string ) ;
163+ }
164+
165+ return set ;
166+ }
167+
168+ private static TSet ToNullableStringSet < TSet > (
169+ List < string ? > numbers ,
170+ Func < int , TSet > factory ,
171+ string ? _
172+ )
173+ where TSet : ICollection < string ? >
174+ {
175+ var span = CollectionsMarshal . AsSpan ( numbers ) ;
176+ var set = factory ( span . Length ) ;
177+
178+ foreach ( var @string in span )
179+ set . Add ( @string ) ;
180+
181+ return set ;
182+ }
183+
148184 private static TSet ToNumberSet < TNumber , TSet > (
149185 List < string > numbers ,
150186 Func < int , TSet > factory ,
@@ -153,7 +189,7 @@ private static TSet ToNumberSet<TNumber, TSet>(
153189 where TSet : ICollection < TNumber >
154190 where TNumber : struct , INumber < TNumber >
155191 {
156- var span = AsSpan ( numbers ) ;
192+ var span = CollectionsMarshal . AsSpan ( numbers ) ;
157193 var set = factory ( span . Length ) ;
158194
159195 foreach ( var number in span )
@@ -166,7 +202,7 @@ private static TSet ToNumberSet<TNumber, TSet>(
166202
167203 return set ;
168204 }
169-
205+
170206 private static TSet ToNullableNumberSet < TNumber , TSet > (
171207 List < string ? > numbers ,
172208 Func < int , TSet > factory ,
@@ -175,7 +211,7 @@ private static TSet ToNullableNumberSet<TNumber, TSet>(
175211 where TSet : ICollection < TNumber ? >
176212 where TNumber : struct , INumber < TNumber >
177213 {
178- var span = AsSpan ( numbers ) ;
214+ var span = CollectionsMarshal . AsSpan ( numbers ) ;
179215 var set = factory ( span . Length ) ;
180216
181217 foreach ( var number in span )
@@ -189,6 +225,60 @@ private static TSet ToNullableNumberSet<TNumber, TSet>(
189225 return set ;
190226 }
191227
228+ public static ISet < string > ToStringISet ( List < string > ss , string ? dataMember )
229+ {
230+ return ToStringSet < HashSet < string > > ( ss , i => new HashSet < string > ( i ) , dataMember ) ;
231+ }
232+
233+ public static IReadOnlySet < string > ToStringIReadOnlySet ( List < string > ss , string ? dataMember )
234+ {
235+ return ToStringSet < HashSet < string > > ( ss , i => new HashSet < string > ( i ) , dataMember ) ;
236+ }
237+
238+ public static HashSet < string > ToStringHashSet ( List < string > ss , string ? dataMember )
239+ {
240+ return ToStringSet < HashSet < string > > ( ss , i => new HashSet < string > ( i ) , dataMember ) ;
241+ }
242+
243+ public static ISet < string ? > ToNullableStringISet ( List < string ? > ss , string ? dataMember )
244+ {
245+ return ToNullableStringSet < HashSet < string ? > > ( ss , i => new HashSet < string ? > ( i ) , dataMember ) ;
246+ }
247+
248+ public static IReadOnlySet < string ? > ToNullableStringIReadOnlySet ( List < string ? > ss , string ? dataMember )
249+ {
250+ return ToNullableStringSet < HashSet < string ? > > ( ss , i => new HashSet < string ? > ( i ) , dataMember ) ;
251+ }
252+
253+ public static HashSet < string ? > ToNullableStringHashSet ( List < string ? > ss , string ? dataMember )
254+ {
255+ return ToNullableStringSet < HashSet < string ? > > ( ss , i => new HashSet < string ? > ( i ) , dataMember ) ;
256+ }
257+
258+ public static SortedSet < string ? > ToNullableStringSortedSet ( List < string ? > ss , string ? _ )
259+ {
260+ var span = CollectionsMarshal . AsSpan ( ss ) ;
261+ var set = new SortedSet < string ? > ( ) ;
262+ foreach ( var se in span )
263+ set . Add ( se ) ;
264+
265+ return set ;
266+ }
267+ public static SortedSet < string > ToStringSortedSet ( List < string > ss , string ? dataMember )
268+ {
269+ var span = CollectionsMarshal . AsSpan ( ss ) ;
270+ var set = new SortedSet < string > ( ) ;
271+ foreach ( var se in span )
272+ {
273+ if ( se is null )
274+ throw ExceptionHelper . NotNull ( $ "{ dataMember } [UNKNOWN]") ;
275+
276+ set . Add ( se ) ;
277+ }
278+
279+ return set ;
280+ }
281+
192282 public static ISet < TNumber > ToNumberISet < TNumber > ( List < string > ns , string ? dataMember )
193283 where TNumber : struct , INumber < TNumber >
194284 {
@@ -201,16 +291,16 @@ public static IReadOnlySet<TNumber> ToNumberIReadOnlySet<TNumber>(List<string> n
201291 return ToNumberSet < TNumber , HashSet < TNumber > > ( ns , i => new HashSet < TNumber > ( i ) , dataMember ) ;
202292 }
203293
204- public static HashSet < TNumber > ToNumberHashSet < TNumber > ( List < string > ns , string ? dataMember )
294+ public static HashSet < TNumber > ToNumberHashSet < TNumber > ( List < string > ss , string ? dataMember )
205295 where TNumber : struct , INumber < TNumber >
206296 {
207- return ToNumberSet < TNumber , HashSet < TNumber > > ( ns , i => new HashSet < TNumber > ( i ) , dataMember ) ;
297+ return ToNumberSet < TNumber , HashSet < TNumber > > ( ss , i => new HashSet < TNumber > ( i ) , dataMember ) ;
208298 }
209299
210300 public static SortedSet < TNumber > ToNumberSortedSet < TNumber > ( List < string > ns , string ? dataMember )
211301 where TNumber : struct , INumber < TNumber >
212302 {
213- var span = AsSpan ( ns ) ;
303+ var span = CollectionsMarshal . AsSpan ( ns ) ;
214304 var set = new SortedSet < TNumber > ( ) ;
215305 foreach ( var se in span )
216306 {
@@ -321,7 +411,7 @@ public static AttributeValue FromList<T, TArgument>(
321411 string ? dataMember ,
322412 Func < T , TArgument , string ? , AttributeValue > resultSelector )
323413 {
324- var span = AsSpan ( list ) ;
414+ var span = CollectionsMarshal . AsSpan ( list ) ;
325415 var attributeValues = new List < AttributeValue > ( span . Length ) ;
326416 for ( var i = 0 ; i < span . Length ; i ++ )
327417 attributeValues . Add ( resultSelector ( span [ i ] , argument , $ "{ dataMember } [{ i } ]") ) ;
@@ -358,7 +448,7 @@ public static List<TResult> ToList<TResult, TArgument>(
358448 Func < AttributeValue , TArgument , string ? , TResult > resultSelector
359449 )
360450 {
361- var span = AsSpan ( attributeValues ) ;
451+ var span = CollectionsMarshal . AsSpan ( attributeValues ) ;
362452 var elements = new List < TResult > ( span . Length ) ;
363453 for ( var i = 0 ; i < span . Length ; i ++ )
364454 elements . Add ( resultSelector ( span [ i ] , argument , $ "{ dataMember } [{ i } ]") ) ;
@@ -384,7 +474,7 @@ public static TResult[] ToArray<TResult, TArgument>(
384474 Func < AttributeValue , TArgument , string ? , TResult > resultSelector
385475 )
386476 {
387- var span = AsSpan ( attributeValues ) ;
477+ var span = CollectionsMarshal . AsSpan ( attributeValues ) ;
388478 var elements = new TResult [ span . Length ] ;
389479 for ( var i = 0 ; i < span . Length ; i ++ )
390480 elements [ i ] = resultSelector ( span [ i ] , argument , $ "{ dataMember } [{ i } ]") ;
0 commit comments