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);
        }