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