public static MaskItem <bool, GenderedItem <bool>?>?EqualityMaskHelper <TItem>( IGenderedItemGetter <TItem>?lhs, IGenderedItemGetter <TItem>?rhs, Func <TItem, TItem, Include, bool> maskGetter, EqualsMaskHelper.Include include) { if (lhs == null || rhs == null) { if (lhs == null && rhs == null) { return(include == Include.All ? new MaskItem <bool, GenderedItem <bool>?>(true, default) : null); } return(new MaskItem <bool, GenderedItem <bool>?>(false, default)); } else { var maleMask = maskGetter(lhs.Male, rhs.Male, include); var femaleMask = maskGetter(lhs.Female, rhs.Female, include); bool overall = maleMask == femaleMask; if (!overall || include == Include.All) { return(new MaskItem <bool, GenderedItem <bool>?>( overall, new GenderedItem <bool>(maleMask, femaleMask))); } return(null); } }
public static MaskItem <bool, GenderedItem <MaskItem <bool, TMask?>?>?>?EqualityMaskHelper <TItem, TMask>( IGenderedItemGetter <TItem>?lhs, IGenderedItemGetter <TItem>?rhs, Func <TItem, TItem, Include, MaskItem <bool, TMask?>?> maskGetter, EqualsMaskHelper.Include include) where TMask : class, IMask <bool> { if (lhs == null || rhs == null) { if (lhs == null && rhs == null) { return(include == Include.All ? new MaskItem <bool, GenderedItem <MaskItem <bool, TMask?>?>?>(true, default) : null); } return(new MaskItem <bool, GenderedItem <MaskItem <bool, TMask?>?>?>(false, default)); } else { var maleMask = maskGetter(lhs.Male, rhs.Male, include); var femaleMask = maskGetter(lhs.Female, rhs.Female, include); var maleEqual = maleMask?.Overall ?? true; var femaleEqual = femaleMask?.Overall ?? true; var overall = maleEqual && femaleEqual; if (!overall || include == Include.All) { return(new MaskItem <bool, GenderedItem <MaskItem <bool, TMask?>?>?>( overall, new GenderedItem <MaskItem <bool, TMask?>?>( male: !maleEqual || include == Include.All ? maleMask : null, female: !femaleEqual || include == Include.All ? femaleMask : null))); } return(null); } }
public static void ToString <TItem>(IGenderedItemGetter <TItem> item, FileGeneration fg, string?name) { fg.AppendLine($"{name} =>"); fg.AppendLine("["); using (new DepthWrapper(fg)) { var male = item.Male; if (male is IPrintable mp) { mp.ToString(fg, "Male"); } else if (male != null) { fg.AppendLine($"Male => {male}"); } var female = item.Female; if (female is IPrintable fp) { fp.ToString(fg, "Female"); } else if (female != null) { fg.AppendLine($"Female => {female}"); } } fg.AppendLine("]"); }
public static MaskItem <bool, GenderedItem <MaskItem <bool, TMask?>?>?>?HasBeenSetMaskHelper <TItem, TMask>( IGenderedItemGetter <TItem?>?item, Func <TItem, TMask?> getter) where TItem : class where TMask : class, IMask <bool> { if (item == null) { return(null); } else { var maleMask = item.Male == null ? null : getter(item.Male); var femaleMask = item.Female == null ? null : getter(item.Female); var maleHas = maleMask?.Any(i => i) ?? false; var femaleHas = femaleMask?.Any(i => i) ?? false; return(new MaskItem <bool, GenderedItem <MaskItem <bool, TMask?>?>?>( true, new GenderedItem <MaskItem <bool, TMask?>?>( new MaskItem <bool, TMask?>(maleHas, maleMask), new MaskItem <bool, TMask?>(femaleHas, femaleMask)))); } }
public static MaskItem <bool, GenderedItem <TMask?>?>?HasBeenSetHelper <TItem, TMask>(IGenderedItemGetter <TItem>?item, Func <TItem, TMask?> getter) where TMask : class, IMask <bool> { if (item == null) { return(null); } else { return(new MaskItem <bool, GenderedItem <TMask?>?>( true, new GenderedItem <TMask?>( getter(item.Male), getter(item.Female)))); } }
public static void RemapLinks <TItem>(this IGenderedItemGetter <TItem?> gendered, IReadOnlyDictionary <FormKey, FormKey> mapping) where TItem : class, IFormLinkContainer { gendered.Male?.RemapLinks(mapping); gendered.Female?.RemapLinks(mapping); }