10596faeddefbf198de137d5e893708495ab1584cFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert/* 4c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * Copyright (C) 2015, International Business Machines 5c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * Corporation and others. All Rights Reserved. 6c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * 7c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * file name: digitinterval.cpp 8c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert */ 9c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 10c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "unicode/utypes.h" 11c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 12c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "digitinterval.h" 13c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 14c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertU_NAMESPACE_BEGIN 15c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 16c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid DigitInterval::expandToContain(const DigitInterval &rhs) { 17c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (fSmallestInclusive > rhs.fSmallestInclusive) { 18c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fSmallestInclusive = rhs.fSmallestInclusive; 19c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 20c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (fLargestExclusive < rhs.fLargestExclusive) { 21c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fLargestExclusive = rhs.fLargestExclusive; 22c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 23c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 24c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 25c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid DigitInterval::shrinkToFitWithin(const DigitInterval &rhs) { 26c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (fSmallestInclusive < rhs.fSmallestInclusive) { 27c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fSmallestInclusive = rhs.fSmallestInclusive; 28c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 29c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (fLargestExclusive > rhs.fLargestExclusive) { 30c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fLargestExclusive = rhs.fLargestExclusive; 31c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 32c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 33c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 34c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid DigitInterval::setIntDigitCount(int32_t count) { 35c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fLargestExclusive = count < 0 ? INT32_MAX : count; 36c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 37c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 38c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid DigitInterval::setFracDigitCount(int32_t count) { 39c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fSmallestInclusive = count < 0 ? INT32_MIN : -count; 40c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 41c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 42c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid DigitInterval::expandToContainDigit(int32_t digitExponent) { 43c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (fLargestExclusive <= digitExponent) { 44c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fLargestExclusive = digitExponent + 1; 45c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } else if (fSmallestInclusive > digitExponent) { 46c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fSmallestInclusive = digitExponent; 47c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 48c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 49c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 50c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool DigitInterval::contains(int32_t x) const { 51c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return (x < fLargestExclusive && x >= fSmallestInclusive); 52c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 53c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 54c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 55c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertU_NAMESPACE_END 56c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 57