1#include <NumberFormatParameters.h> 2 3// defaults 4static const bool kDefaultUseGrouping = false; 5static const number_format_sign_policy kDefaultSignPolicy 6 = B_USE_NEGATIVE_SIGN_ONLY; 7static const number_format_base kDefaultBase = B_DEFAULT_BASE; 8static const bool kDefaultUseBasePrefix = false; 9static const size_t kDefaultMinimalIntegerDigits = 1; 10static const bool kDefaultUseZeroPadding = false; 11 12// flags 13enum { 14 USE_GROUPING_SET = 0x01, 15 SIGN_POLICY_SET = 0x02, 16 BASE_SET = 0x04, 17 USE_BASE_PREFIX_SET = 0x08, 18 MINIMAL_INTEGER_DIGITS_SET = 0x10, 19 USE_ZERO_PADDING_SET = 0x20, 20}; 21 22// constructor 23BNumberFormatParameters::BNumberFormatParameters( 24 const BNumberFormatParameters *parent) 25 : BFormatParameters(parent), 26 fParent(parent), 27 fFlags(0) 28{ 29} 30 31// copy constructor 32BNumberFormatParameters::BNumberFormatParameters( 33 const BNumberFormatParameters &other) 34 : BFormatParameters(other), 35 fParent(other.fParent), 36 fUseGrouping(other.fUseGrouping), 37 fSignPolicy(other.fSignPolicy), 38 fBase(other.fBase), 39 fUseBasePrefix(other.fUseBasePrefix), 40 fMinimalIntegerDigits(other.fMinimalIntegerDigits), 41 fFlags(other.fFlags) 42{ 43} 44 45// destructor 46BNumberFormatParameters::~BNumberFormatParameters() 47{ 48} 49 50// SetUseGrouping 51void 52BNumberFormatParameters::SetUseGrouping(bool useGrouping) 53{ 54 fUseGrouping = useGrouping; 55 fFlags |= USE_GROUPING_SET; 56} 57 58// UseGrouping 59bool 60BNumberFormatParameters::UseGrouping() const 61{ 62 if (fFlags & USE_GROUPING_SET) 63 return fUseGrouping; 64 if (fParent) 65 return fParent->UseGrouping(); 66 return kDefaultUseGrouping; 67} 68 69// SetSignPolicy 70void 71BNumberFormatParameters::SetSignPolicy(number_format_sign_policy policy) 72{ 73 fSignPolicy = policy; 74 fFlags |= SIGN_POLICY_SET; 75} 76 77// SignPolicy 78number_format_sign_policy 79BNumberFormatParameters::SignPolicy() const 80{ 81 if (fFlags & SIGN_POLICY_SET) 82 return fSignPolicy; 83 if (fParent) 84 return fParent->SignPolicy(); 85 return kDefaultSignPolicy; 86} 87 88// SetBase 89void 90BNumberFormatParameters::SetBase(number_format_base base) 91{ 92 fBase = base; 93 fFlags |= BASE_SET; 94} 95 96// Base 97number_format_base 98BNumberFormatParameters::Base() const 99{ 100 if (fFlags & BASE_SET) 101 return fBase; 102 if (fParent) 103 return fParent->Base(); 104 return kDefaultBase; 105} 106 107// SetUseBasePrefix 108void 109BNumberFormatParameters::SetUseBasePrefix(bool useBasePrefix) 110{ 111 fUseBasePrefix = useBasePrefix; 112 fFlags |= USE_BASE_PREFIX_SET; 113} 114 115// UseBasePrefix 116bool 117BNumberFormatParameters::UseBasePrefix() const 118{ 119 if (fFlags & USE_BASE_PREFIX_SET) 120 return fUseBasePrefix; 121 if (fParent) 122 return fParent->UseBasePrefix(); 123 return kDefaultUseBasePrefix; 124} 125 126// SetMinimalIntegerDigits 127void 128BNumberFormatParameters::SetMinimalIntegerDigits(size_t minIntegerDigits) 129{ 130 fMinimalIntegerDigits = minIntegerDigits; 131 fFlags |= MINIMAL_INTEGER_DIGITS_SET; 132} 133 134// MinimalIntegerDigits 135size_t 136BNumberFormatParameters::MinimalIntegerDigits() const 137{ 138 if (fFlags & MINIMAL_INTEGER_DIGITS_SET) 139 return fMinimalIntegerDigits; 140 if (fParent) 141 return fParent->MinimalIntegerDigits(); 142 return kDefaultMinimalIntegerDigits; 143} 144 145// SetUseZeroPadding 146void 147BNumberFormatParameters::SetUseZeroPadding(bool useZeroPadding) 148{ 149 fUseZeroPadding = useZeroPadding; 150 fFlags |= USE_ZERO_PADDING_SET; 151} 152 153// UseZeroPadding 154bool 155BNumberFormatParameters::UseZeroPadding() const 156{ 157 if (fFlags & USE_ZERO_PADDING_SET) 158 return fUseZeroPadding; 159 if (fParent) 160 return fParent->UseZeroPadding(); 161 return kDefaultUseZeroPadding; 162} 163 164// SetParentNumberParameters 165void 166BNumberFormatParameters::SetParentNumberParameters( 167 const BNumberFormatParameters *parent) 168{ 169 fParent = parent; 170 SetParentParameters(parent); 171} 172 173// ParentNumberParameters 174const BNumberFormatParameters * 175BNumberFormatParameters::ParentNumberParameters() const 176{ 177 return fParent; 178} 179 180// = 181BNumberFormatParameters & 182BNumberFormatParameters::operator=(const BNumberFormatParameters &other) 183{ 184 BFormatParameters::operator=(other); 185 fParent = other.fParent; 186 fUseGrouping = other.fUseGrouping; 187 fSignPolicy = other.fSignPolicy; 188 fBase = other.fBase; 189 fUseBasePrefix = other.fUseBasePrefix; 190 fMinimalIntegerDigits = other.fMinimalIntegerDigits; 191 fFlags = other.fFlags; 192 fUseZeroPadding = other.fUseZeroPadding; 193 return *this; 194} 195 196