public void RegisterMarried(PersonWithMetadata parent1, PersonWithMetadata parent2) { var father = parent1; var mother = parent2; if (parent1.IsFemale && !parent2.IsFemale) { father = parent2; mother = parent1; } var howManyOtherChildrenFather = _numberOfOtherChildrenForMarriedCouples(father); var howManyOtherChildrenMother = _numberOfOtherChildrenForMarriedCouples(mother); var couple = new Couple { FatherNin = father.Person.NIN, MotherNin = mother.Person.NIN, FatherSn = father.Person.Sn, MotherSn = mother.Person.Sn }; AddToCoupleCache(couple, ParentRelationshipSearch.KeyMarriedParents(father, mother), false); if (howManyOtherChildrenFather > 0) { AddToParentCacheReturnKey(howManyOtherChildrenFather, father); } if (howManyOtherChildrenMother > 0) { AddToParentCacheReturnKey(howManyOtherChildrenMother, mother); } }
private void AddToCoupleCache(Couple couple, string key, bool onlyIfRemainingNumberOfChildrenAbove0 = true) { if (couple.RemainingNumberOfChildren > 0 || !onlyIfRemainingNumberOfChildrenAbove0) { if (!CoupleCache.ContainsKey(key)) { CoupleCache.Add(key, new List <Couple>()); } CoupleCache[key].Add(couple); } }
private Couple GetNewCouple(ParentRelationshipSearch next, PersonWithMetadata child, Randomizer randy) { var mother = next.Mother == null ? null : (GetParentNinFromCache(next.Mother) ?? GetNewParent(next.Mother, married: false)); var father = next.Father == null ? null : (GetParentNinFromCache(next.Father, mother) ?? GetNewParent(next.Father, married: false)); if (mother == null && father == null) { return(null); } var howManyChildrenTogether = GetNumberOfChildsTogether(mother?.RemainingNumberOfChildren, father?.RemainingNumberOfChildren, randy); int?beforeFather = father?.RemainingNumberOfChildren; int?beforeMother = mother?.RemainingNumberOfChildren; //usikker på om dette er mulig .. if (mother != null) { mother.RemainingNumberOfChildren = mother.RemainingNumberOfChildren - howManyChildrenTogether; } if (father != null) { father.RemainingNumberOfChildren = father.RemainingNumberOfChildren - howManyChildrenTogether; } var couple = new Couple { FatherNin = father?.Nin, MotherNin = mother?.Nin, FatherSn = father?.Sn, MotherSn = mother?.Sn, RemainingNumberOfChildren = howManyChildrenTogether - 1 }; AddToCoupleCache(couple, next.KeyParents()); return(couple); }