53 BOOL _allowsNonnumericFormatting;
54 BOOL _includesActualByteCount;
58 BOOL _zeroPadsFractionDigits;
65 if (
self = [super
init])
69 _allowsNonnumericFormatting = YES;
71 _includesActualByteCount = NO;
74 _zeroPadsFractionDigits = NO;
76 [_numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle];
77 [_numberFormatter setMinimumFractionDigits:0];
85 + (
CPString)stringFromByteCount:(
int)byteCount countStyle:(
int)countStyle
89 [formatter setCountStyle:countStyle];
91 return [formatter stringFromByteCount:byteCount];
109 while ((bytes >= divisor) && (exponent < unitCount))
116 if (_allowedUnits === 0 || (_allowedUnits & (1 << exponent)))
118 unitIndex = exponent;
128 if (unitIndex === -1)
129 for (var i = 1; i < unitCount; ++i)
131 unitBytes /= divisor;
133 if ((_allowedUnits === 0) || (_allowedUnits & (1 << i)))
144 if (unitBytes >= 1.0)
153 else if (exponent == 2)
160 if (_zeroPadsFractionDigits)
165 if (_zeroPadsFractionDigits)
173 [_numberFormatter setMinimumFractionDigits:minDigits];
174 [_numberFormatter setMaximumFractionDigits:maxDigits];
180 if (_allowsNonnumericFormatting && bytes === 0)
181 [parts addObject:@"Zero"];
183 [parts addObject:[_numberFormatter stringFromNumber:unitBytes]];
187 [parts addObject:CPByteCountFormatterUnits[unitIndex]];
189 if ((unitIndex > 0) && _includesCount && _includesUnit && _includesActualByteCount)
191 [_numberFormatter setMaximumFractionDigits:0];
195 var result = [parts componentsJoinedByString:@" "];
198 return [result stringByReplacingOccurrencesOfString:@"bytes" withString:@"byte"];
208 if ([anObject isKindOfClass:
CPNumber])
214 - (BOOL)getObjectValue:(idRef)anObject forString:(
CPString)aString errorDescription:(CPStringRef)anError
227 - (void)setCountStyle:(
int)style
232 - (BOOL)allowsNonnumericFormatting
234 return _allowsNonnumericFormatting;
237 - (void)setAllowsNonnumericFormatting:(BOOL)shouldAllowNonnumericFormatting
239 _allowsNonnumericFormatting = shouldAllowNonnumericFormatting;
242 - (BOOL)includesActualByteCount
244 return _includesActualByteCount;
247 - (void)setIncludesActualByteCount:(BOOL)shouldIncludeActualByteCount
249 _includesActualByteCount = shouldIncludeActualByteCount;
257 - (void)setAdaptive:(BOOL)shouldBeAdaptive
259 _adaptive = shouldBeAdaptive;
264 return _allowedUnits;
267 - (void)setAllowedUnits:(
int)allowed
270 _allowedUnits = allowed;
273 - (BOOL)includesCount
275 return _includesCount;
278 - (void)setIncludesCount:(BOOL)shouldIncludeCount
280 _includesCount = shouldIncludeCount;
285 return _includesUnit;
288 - (void)setIncludesUnit:(BOOL)shouldIncludeUnit
290 _includesUnit = shouldIncludeUnit;
293 - (BOOL)zeroPadsFractionDigits
295 return _zeroPadsFractionDigits;
298 - (void)setZeroPadsFractionDigits:(BOOL)shouldZeroPad
300 _zeroPadsFractionDigits = shouldZeroPad;
323 _countStyle = [aCoder decodeIntForKey:CPByteCountFormatterCountStyleKey];
324 _allowsNonnumericFormatting = [aCoder decodeBoolForKey:CPByteCountFormatterAllowsNonnumericFormattingKey];
325 _includesActualByteCount = [aCoder decodeBoolForKey:CPByteCountFormatterIncludesActualByteCountKey];
326 _includesCount = [aCoder decodeBoolForKey:CPByteCountFormatterIncludesCountKey];
327 _includesUnit = [aCoder decodeBoolForKey:CPByteCountFormatterIncludesUnitKey];
328 _adaptive = [aCoder decodeBoolForKey:CPByteCountFormatterAdaptiveKey];
329 _zeroPadsFractionDigits = [aCoder decodeBoolForKey:CPByteCountFormatterZeroPadsFractionDigitsKey];
330 _allowedUnits = [aCoder decodeIntForKey:CPByteCountFormatterAllowedUnitsKey];
340 [aCoder encodeInt:_countStyle forKey:CPByteCountFormatterCountStyleKey];
341 [aCoder encodeBool:_allowsNonnumericFormatting forKey:CPByteCountFormatterAllowsNonnumericFormattingKey];
342 [aCoder encodeBool:_includesActualByteCount forKey:CPByteCountFormatterIncludesActualByteCountKey];
343 [aCoder encodeBool:_includesCount forKey:CPByteCountFormatterIncludesCountKey];
344 [aCoder encodeBool:_includesUnit forKey:CPByteCountFormatterIncludesUnitKey];
345 [aCoder encodeBool:_adaptive forKey:CPByteCountFormatterAdaptiveKey];
346 [aCoder encodeBool:_zeroPadsFractionDigits forKey:CPByteCountFormatterZeroPadsFractionDigitsKey];
347 [aCoder encodeInt:_allowedUnits forKey:CPByteCountFormatterAllowedUnitsKey];
An immutable string (collection of characters).
Defines methods for use when archiving & restoring (enc/decoding).
A bridged object to native Javascript numbers.
id stringWithFormat:(CPString format, [,] ...)