private void PrepareWorkingDataForNationalMandateGiving(int mirsCount, int partiesCountTable1, bool[] workingPartyFlagsTable1, int[,] votesTable1, out int partiesCountInTable2, out int[,] votesTable2, out Party[] partiesTable2, out int partiesCountTable2, out int allMandatesAfterStep0, out int allVotesTable2)
{
//GENERATE TABLE2
partiesCountInTable2 = workingPartyFlagsTable1.Count(f => f);
//Votes table
votesTable2 = new int[mirsCount, partiesCountInTable2];
int[,] givenMandatesTable2 = new int[mirsCount, partiesCountInTable2];
List<Party> partiesListTable2 = new List<Party>();
int partyIndexTable2 = 0;
for (int j = 0; j < partiesCountTable1; j++)//TO DO - optimize by j
{
if (workingPartyFlagsTable1[j])
{
for (int i = 0; i < mirsCount; i++)
{
votesTable2[i, partyIndexTable2] = votesTable1[i, j];
givenMandatesTable2[i, partyIndexTable2] = 0;//_givenMandatesTable1[i, j];
}
partiesListTable2.Add(_partiesAll[j]);
partyIndexTable2++;
}
}
partiesTable2 = partiesListTable2.ToArray();//indexed array with parties in Table2
partiesCountTable2 = partiesListTable2.Count;
//calculatae new quote - Hare
allMandatesAfterStep0 = _mirMandatesAvailable.Sum();
allVotesTable2 = 0;//chl.14-chl16
for (int i = 0; i < mirsCount; i++)
{
for (int j = 0; j < partiesCountTable2; j++)
{
allVotesTable2 += votesTable2[i, j];
}
}
}