//public Dictionary<string, Dictionary<string, SubjectCompareOutcome>> SubjectTree { get; private set; } //public Dictionary<ISubjectInput, HashSet<ISubjectInput>> PerRiskExplosionMapping { get; private set; } public SubjectTreeBuilder(HashSet <PrimarySubject> _inputList, bool _matrixForm) { OriginalSubjects = new HashSet <PrimarySubject>(_inputList); WholeSubjects = new HashSet <PrimarySubject>(_inputList); OriginalPerRiskSubjects = new HashSet <PrimarySubject>(); foreach (PrimarySubject subject in OriginalSubjects) { if (subject.IsPerRisk) { OriginalPerRiskSubjects.Add(subject); } } ExplodedSubjectList = new HashSet <PrimarySubject>(); MatrixForm = _matrixForm; if (MatrixForm) { SubjectTreeMatrix = new SubjectCompareOutcome[21000, 21000]; } else { SubjectTreeArray = new Dictionary <int, SubjectCompareOutcome> [1000000]; } OriginalSubjectsMinusPerRisk = new HashSet <PrimarySubject>(OriginalSubjects); OriginalSubjectsMinusPerRisk.ExceptWith(OriginalPerRiskSubjects); }
public SubjectCompareOutcome CompareTwoSubjects(PrimarySubject s1, PrimarySubject s2) { SubjectCompareOutcome colOut = CompareTwoCOLs(s1.CauseOfLossSet.Collection, s2.CauseOfLossSet.Collection); SubjectCompareOutcome expOut = CompareTwoExpTypes(s1.ExposureTypes.Collection, s2.ExposureTypes.Collection); SubjectCompareOutcome schOut = CompareTwoSchedules(s1.Schedule, s2.Schedule); if (colOut == SubjectCompareOutcome.Equal && expOut == SubjectCompareOutcome.Equal && schOut == SubjectCompareOutcome.Equal) { if (s1.IsPerRisk == s2.IsPerRisk) { return(SubjectCompareOutcome.Equal); } else if (s1.IsPerRisk && !s2.IsPerRisk) { return(SubjectCompareOutcome.Child); } else { return(SubjectCompareOutcome.Parent); } } else if (colOut == SubjectCompareOutcome.Disjoin || expOut == SubjectCompareOutcome.Disjoin || schOut == SubjectCompareOutcome.Disjoin) { return(SubjectCompareOutcome.Disjoin); } else if ((colOut == SubjectCompareOutcome.Parent || colOut == SubjectCompareOutcome.Equal) && (expOut == SubjectCompareOutcome.Parent || expOut == SubjectCompareOutcome.Equal) && (schOut == SubjectCompareOutcome.Parent || schOut == SubjectCompareOutcome.Equal)) { return(SubjectCompareOutcome.Parent); } else if ((colOut == SubjectCompareOutcome.Child || colOut == SubjectCompareOutcome.Equal) && (expOut == SubjectCompareOutcome.Child || expOut == SubjectCompareOutcome.Equal) && (schOut == SubjectCompareOutcome.Child || schOut == SubjectCompareOutcome.Equal)) { return(SubjectCompareOutcome.Child); } else { return(SubjectCompareOutcome.Overlap); } }