CF_INLINE CFIndex __CFDataRoundUpCapacity(CFIndex capacity) { if (capacity < 16) { return 16; } else if (capacity < LOW_THRESHOLD) { /* Up to 4x */ long idx = flsl(capacity); return (1L << (long)(idx + ((idx % 2 == 0) ? 0 : 1))); } else if (capacity < HIGH_THRESHOLD) { /* Up to 2x */ return (1L << (long)flsl(capacity)); } else { /* Round up to next multiple of CHUNK_SIZE */ unsigned long newCapacity = CHUNK_SIZE * (1+(capacity >> ((long)flsl(CHUNK_SIZE)-1))); return __CFMin(newCapacity, CFDATA_MAX_SIZE); } }
void _CFBigNumToCString(const _CFBigNum *vp, Boolean leading_zeros, Boolean leading_plus, char *buffer, size_t buflen) { if (vp->sign < 0) { *buffer++ = '-'; buflen--; } else if (leading_plus) { *buffer++ = '+'; buflen--; } char tmp[46]; snprintf(tmp, sizeof(tmp), "%09u%09u%09u%09u%09u", vp->digits[4], vp->digits[3], vp->digits[2], vp->digits[1], vp->digits[0]); if (leading_zeros) { memset(buffer, '0', buflen); uint32_t tocopy = __CFMin(sizeof(tmp), buflen); memmove(buffer + buflen - tocopy, tmp + sizeof(tmp) - tocopy, tocopy); // copies trailing nul from tmp to nul-terminate } else { char *s = tmp; while (*s == '0') s++; if (*s == 0) s--; // if tmp is all zeros, copy out at least one zero strlcpy(buffer, s, buflen); } }
static CFHashCode __CFDataHash(CFTypeRef cf) { CFDataRef data = (CFDataRef)cf; return CFHashBytes((uint8_t *)CFDataGetBytePtr(data), __CFMin(__CFDataLength(data), 80)); }
CF_INLINE CFIndex __CFArrayDequeRoundUpCapacity(CFIndex capacity) { if (capacity < 4) return 4; return __CFMin((1 << flsl(capacity)), __CF_MAX_BUCKETS_PER_DEQUE); }