/// <summary> /// Determine the structure of all the Key Elements within this Key Collection /// </summary> private KeyElementDetailList DetermineKeyElementDetail() { KeyElementDetailList keyElementDetailList = new KeyElementDetailList(); foreach (string keyElement in this) { KeyElementDetail keyElementDetail = new KeyElementDetail(keyElement); keyElementDetailList.Add(keyElementDetail); } return(keyElementDetailList); }
/// <summary> /// Determine how the supplied Key Element Detail compares to "this" Key Element Detail /// negative = "this" is less than "other" /// zero = "this" is equal to "other" /// positive = "this" is greater than other /// Notionally this function returns something akin to the arithmetical difference operation /// "this" - "other" /// </summary> /// <param name="otherKeyElementDetail">The other Key Element Detail with which "this" is to be compared</param> /// <returns>negative if "this" is less than "other", zero if "this" is equal to "other", positive if "this" is greater than "other"</returns> public int CompareTo(KeyElementDetail otherKeyElementDetail) { int comparisonIndicator = 0; // Default to equal if ((this.KeyElementType != KeyElementTypeEnum.Range) && (otherKeyElementDetail.KeyElementType != KeyElementTypeEnum.Range)) { // No Ranges involved so use simple comparison KeyElementComponentDetail keyElementComponentDetailLeft = this[0]; KeyElementComponentDetail keyElementComponentDetailRight = otherKeyElementDetail[0]; comparisonIndicator = keyElementComponentDetailLeft.CompareTo(keyElementComponentDetailRight); } // No Ranges involved so use simple comparison else if ((this.KeyElementType == KeyElementTypeEnum.Range) && (otherKeyElementDetail.KeyElementType == KeyElementTypeEnum.Range)) { // Two Ranges involved // Ranges are effectively equal if one range is fully enclosed within the other KeyElementComponentDetail keyElementComponentDetailLeftLowerLimit = this[0]; KeyElementComponentDetail keyElementComponentDetailLeftUpperLimit = this[1]; KeyElementComponentDetail keyElementComponentDetailRightLowerLimit = otherKeyElementDetail[0]; KeyElementComponentDetail keyElementComponentDetailRightUpperLimit = otherKeyElementDetail[1]; if (keyElementComponentDetailLeftUpperLimit.CompareTo(keyElementComponentDetailRightLowerLimit) < 0) { // Less than comparisonIndicator = -1; } else if (keyElementComponentDetailLeftLowerLimit.CompareTo(keyElementComponentDetailRightUpperLimit) > 0) { // Greater than comparisonIndicator = 1; } else { // Effectively the same comparisonIndicator = 0; } } // Two Ranges involved else if (this.KeyElementType == KeyElementTypeEnum.Range) { // "this" is a range key only // Test for rhs being in range of this KeyElementComponentDetail keyElementComponentDetailLeftLowerLimit = this[0]; KeyElementComponentDetail keyElementComponentDetailLeftUpperLimit = this[1]; KeyElementComponentDetail keyElementComponentDetailRight = otherKeyElementDetail[0]; if ((keyElementComponentDetailLeftLowerLimit.CompareTo(keyElementComponentDetailRight) <= 0) && (keyElementComponentDetailLeftUpperLimit.CompareTo(keyElementComponentDetailRight) >= 0) ) { // Right is in Range comparisonIndicator = 0; } else if (keyElementComponentDetailLeftUpperLimit.CompareTo(keyElementComponentDetailRight) < 0) { // Range is less than right comparisonIndicator = -1; } else { // Range must be greater than right comparisonIndicator = 1; } } // "this" is a range key only else { // rhs is a range key only // Test for this being in range of rhs KeyElementComponentDetail keyElementComponentDetailLeft = this[0]; KeyElementComponentDetail keyElementComponentDetailRightLowerLimit = otherKeyElementDetail[0]; KeyElementComponentDetail keyElementComponentDetailRightUpperLimit = otherKeyElementDetail[1]; if ((keyElementComponentDetailLeft.CompareTo(keyElementComponentDetailRightLowerLimit) >= 0) && (keyElementComponentDetailLeft.CompareTo(keyElementComponentDetailRightUpperLimit) <= 0) ) { // this is in the Range of Right comparisonIndicator = 0; } else if (keyElementComponentDetailLeft.CompareTo(keyElementComponentDetailRightLowerLimit) < 0) { // this is less than the Range of Right comparisonIndicator = -1; } else { // this must be greater than the Range of Right comparisonIndicator = 1; } } // rhs is a range key only return(comparisonIndicator); }
/// <summary> /// Determine whether the supplied Key Element Detail is effectively equal to "this" Key Element Detail /// </summary> /// <param name="otherKeyElementDetail">The other Key Element Detail with which "this" is to be compared</param> /// <returns>true if "this" is equal to other, or, false if not</returns> public bool Equals(KeyElementDetail otherKeyElementDetail) { bool isEqual = this.CompareTo(otherKeyElementDetail) == 0; return(isEqual); }