//--------------------------------------------------------------------- /// <summary> /// constructor, assign members of the stucture /// </summary> public InclusionRule(string inclusion_type, AgeRange age_range, string temp_percent, List<string> species_list) { //assign members of the struct this.inclusion_type = inclusion_type; this.age_range = age_range; //check for type 'percentage' by looking for the % character string [] split = temp_percent.Split(new char [] {'%'}); //try to make a percentage. if this doesn't work then check for keyword 'highest' try { percentOfCells = ((double) Convert.ToInt32(split[0])) / 100; } catch (Exception) { //and set percentOfCells to -1 (the flag for InclusionRequirement to handle) percentOfCells = -1; } this.species_list = species_list; //get the species index list using species name this.species_index_list = new List<int>(); foreach (string species in species_list) { if (Model.Core.Species[species] != null) { this.species_index_list.Add(Model.Core.Species[species].Index); } } //Model.Core.UI.WriteLine("species index = {0}", this.species_index); }
//--------------------------------------------------------------------- /// <summary> /// constructor, assign members of the stucture /// </summary> public InclusionRule(string inclusion_type, AgeRange age_range, string temp_percent, List <string> species_list) { //assign members of the struct this.inclusion_type = inclusion_type; this.age_range = age_range; //check for type 'percentage' by looking for the % character string [] split = temp_percent.Split(new char [] { '%' }); //try to make a percentage. if this doesn't work then check for keyword 'highest' try { percentOfCells = ((double)Convert.ToInt32(split[0])) / 100; } catch (Exception) { //and set percentOfCells to -1 (the flag for InclusionRequirement to handle) percentOfCells = -1; } this.species_list = species_list; //get the species index list using species name this.species_index_list = new List <int>(); foreach (string species in species_list) { if (Model.Core.Species[species] != null) { this.species_index_list.Add(Model.Core.Species[species].Index); } } //Model.Core.UI.WriteLine("species index = {0}", this.species_index); }
//--------------------------------------------------------------------- /// <summary> /// Is a particular age included among the set of specific ages and ranges? /// </summary> public bool Contains(ushort age, out AgeRange? containingRange) { containingRange = null; if (ages.Contains(age)) return true; foreach (AgeRange range in ranges) { if (range.Contains(age)) { containingRange = range; return true; } } return false; }
//--------------------------------------------------------------------- /// <summary> /// Validates a cohort age or age range against previous ages and /// ranges. /// </summary> /// <param name="ageOrRange"> /// The age or age range that's being validated. /// </param> /// <param name="ages"> /// List of previous ages. /// </param> /// <param name="ranges"> /// List of previous ranges. /// </param> /// <remarks> /// If the age or range is validated, it is added to the corresponding /// list. /// </remarks> protected void ValidateAgeOrRange(InputValue <AgeRange> ageOrRange, List <ushort> ages, List <AgeRange> ranges) { if (ageOrRange.String.Contains("-")) { AgeRange range = ageOrRange.Actual; // Does the range contain any individual ages? foreach (ushort age in ages) { if (range.Contains(age)) { throw new InputValueException(ageOrRange.String, "The range {0} contains the age {1}", ageOrRange.String, age); } } // Does the range overlap any previous ranges? foreach (AgeRange previousRange in ranges) { if (range.Overlaps(previousRange)) { throw new InputValueException(ageOrRange.String, "The range {0} overlaps the range {1}-{2}", ageOrRange.String, previousRange.Start, previousRange.End); } } ranges.Add(range); } else { ushort age = ageOrRange.Actual.Start; // Does the age match any of the previous ages? foreach (ushort previousAge in ages) { if (age == previousAge) { throw new InputValueException(ageOrRange.String, "The age {0} appears more than once", ageOrRange.String); } } // Is the age in any of the previous ranges? foreach (AgeRange previousRange in ranges) { if (previousRange.Contains(age)) { throw new InputValueException(ageOrRange.String, "The age {0} lies within the range {1}-{2}", ageOrRange.String, previousRange.Start, previousRange.End); } } ages.Add(age); } }