示例#1
0
        /// <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);
        }
示例#2
0
            /// <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);
            }
示例#3
0
            /// <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);
            }