예제 #1
0
      // Returns true if low, high, or current has changed
      private Boolean SetValues(Boolean lockAlreadyTaken, Int64? low, Int64? high, Int64? current) {
         if (!lockAlreadyTaken) m_lock.Enter(true);
         try {
            // If any value is null, set it to its current value (assume no change)
            low = low.GetValueOrDefault(m_low);
            high = high.GetValueOrDefault(m_high);
            current = current.GetValueOrDefault(m_current);

            if (low > high) throw new InvalidOperationException("Low can't be greater than high");

            Int64 oldLow = m_low, oldHigh = m_high, oldCurrent = m_current;
            m_low = low.Value;
            m_high = high.Value;

            // Make sure Current stays between Low and High inclusive
            if (current < m_low) current = m_low;
            if (current > m_high) current = m_high;
            m_current = current.Value;

            return (oldLow != m_low) || (oldHigh != m_high) || (oldCurrent != m_current);
         }
         finally {
           if (!lockAlreadyTaken) m_lock.Leave();
         }
      }