@@ -237,6 +237,70 @@ public static bool RefEquality<T>(T? lhs, T? rhs, [MaybeNullWhen(false)] out T l
237
237
return null ;
238
238
}
239
239
240
+ public static MaskItem < bool , IEnumerable < MaskItemIndexed < P2Int , bool , M ? > > ? > ? Array2dEqualsHelper < T , M > (
241
+ this IReadOnlyArray2d < T > ? lhs ,
242
+ IReadOnlyArray2d < T > ? rhs ,
243
+ Func < T , T , M > maskGetter ,
244
+ Include include )
245
+ where M : class , IMask < bool >
246
+ {
247
+ if ( lhs == null && rhs == null )
248
+ {
249
+ return include == Include . All ? new MaskItem < bool , IEnumerable < MaskItemIndexed < P2Int , bool , M ? > > ? > ( true , default ) : default ;
250
+ }
251
+ if ( lhs == null || rhs == null )
252
+ {
253
+ return new MaskItem < bool , IEnumerable < MaskItemIndexed < P2Int , bool , M ? > > ? > ( false , default ) ;
254
+ }
255
+
256
+ if ( lhs . Width != rhs . Width
257
+ || lhs . Height != rhs . Height )
258
+ {
259
+ return new MaskItem < bool , IEnumerable < MaskItemIndexed < P2Int , bool , M ? > > ? > ( false , default ) ;
260
+ }
261
+
262
+ var overall = true ;
263
+ List < MaskItemIndexed < P2Int , bool , M ? > > masks = new ( ) ;
264
+ for ( int y = 0 ; y < lhs . Height ; y ++ )
265
+ {
266
+ for ( int x = 0 ; x < lhs . Width ; x ++ )
267
+ {
268
+ var lhsVal = lhs [ x , y ] ;
269
+ var rhsVal = rhs [ x , y ] ;
270
+ var val = new MaskItemIndexed < P2Int , bool , M ? > ( index : new P2Int ( x , y ) , overall : false , specific : default ) ;
271
+ EqualsHelper ( val , lhsVal , rhsVal , maskGetter , include ) ;
272
+
273
+ if ( include == Include . All || ! val . Overall )
274
+ {
275
+ masks . Add ( val ) ;
276
+ }
277
+ else
278
+ {
279
+ overall = false ;
280
+ }
281
+ }
282
+ }
283
+ if ( overall )
284
+ {
285
+ switch ( include )
286
+ {
287
+ case Include . All :
288
+ overall = masks . All ( ( b ) => b . Overall ) ;
289
+ break ;
290
+ case Include . OnlyFailures :
291
+ overall = ! masks . Any ( ) ;
292
+ break ;
293
+ default :
294
+ throw new NotImplementedException ( ) ;
295
+ }
296
+ }
297
+ if ( ! overall || include == Include . All )
298
+ {
299
+ return new MaskItem < bool , IEnumerable < MaskItemIndexed < P2Int , bool , M ? > > ? > ( overall , masks ) ;
300
+ }
301
+ return null ;
302
+ }
303
+
240
304
public static MaskItem < bool , IEnumerable < ( P2Int Index , bool EqualValues ) > ? > ? Array2dEqualsHelper < T > (
241
305
this IReadOnlyArray2d < T > ? lhs ,
242
306
IReadOnlyArray2d < T > ? rhs ,
0 commit comments