//---------------------------------------------------------------------

        void IStandRankingMethod.RankStands(List<Stand>    stands,
                                            StandRanking[] rankings)
        {
            int i = 0;
            foreach (Stand stand in stands)
            {
                double standEconImportance = 0.0;
//                foreach (ActiveSite site in stand)
//                {
//                    double siteEconImportance = 0.0;
//                    foreach (AgeCohort cohort in site)
//                    {
//                        if (cohort.Age > 0 && cohort.Age > Prescription.EconomicTable[cohort.Species].MinimumAge)
//                            siteEconImportance += Prescription.EconomicTable[cohort.Species].Rank / Prescription.EconomicTable[cohort.Species].MinimumAge * cohort.Age;
//                    }
//                    standEconImportance += siteEconImportance;
//                }
//                standEconImportance /= stand.SiteCount;

                StandRanking ranking = new StandRanking();
                ranking.Stand = stand;
                ranking.Rank = standEconImportance;
                rankings[i] = ranking;
            }
        }
        //---------------------------------------------------------------------

        void IStandRankingMethod.RankStands(List<Stand> stands,
                                            StandRanking[] rankings)
        {
            for (int i = 0; i < stands.Count; i++) {
                Stand stand = stands[i];
                rankings[i].Stand = stand;
                rankings[i].Rank = stand.Age;
            }
        }
        //---------------------------------------------------------------------

        void IStandRankingMethod.RankStands(List<Stand> stands,
                                            StandRanking[] rankings)
        {
            for (int i = 0; i < stands.Count; i++) {
                Stand stand = stands[i];
                double rank = 0;
                if (! stand.IsSetAside) {
                    bool meetsAllRequirements = true;
                    foreach (IRankingRequirement requirement in requirements) {
                        if (! requirement.MetBy(stand)) {
                            meetsAllRequirements = false;
                            break;
                        }
                    }
                    if (meetsAllRequirements)
                        rank = ComputeRank(stand);
                }
                rankings[i].Stand = stand;
                rankings[i].Rank = rank;
            }
        }
        //---------------------------------------------------------------------

        void IStandRankingMethod.RankStands(List<Stand> stands,
                                            StandRanking[] rankings) {
            InitializeForRanking(stands, stands.Count);
            for (int i = 0; i < stands.Count; i++) {
                Stand stand = stands[i];
                double rank = 0;
                if (! stand.IsSetAside) {
                    //check if stand meets all the ranking requirements
                    bool meetsAllRequirements = true;
                    foreach (IRequirement requirement in requirements) {
                        if (! requirement.MetBy(stand)) {
                            meetsAllRequirements = false;
							//set stand rank to 0
							rankings[i].Rank = 0;
                            break;
                        }
                    }
					
                    //if the stand meets all the requirements and is not set-aside,, get its rank
                    if (meetsAllRequirements) {
                        rank = ComputeRank(stand, i);
                    }
                    //otherwise, rank it 0 (so it will not be harvested.)
                    else {
                        rank = 0;
                    }
                }
				else {
					rankings[i].Rank = 0;
				}
                rankings[i].Stand = stand;
                rankings[i].Rank = rank;
                //assign rank to stand
//				UI.WriteLine("stand {0} rank = {1}\n\n", rankings[i].Stand.MapCode, rankings[i].Rank);
            }
        }
        //---------------------------------------------------------------------

        /// <summary>
        /// Compares two stand rankings such that the higher ranking comes
        /// before the lower ranking.
        /// </summary>
        public static int CompareRankings(StandRanking x,
                                          StandRanking y)
        {
            if (x.Rank > y.Rank)
                return -1;
            else if (x.Rank < y.Rank)
                return 1;
            else
                return 0;
        }