Следующий отрывок содержит объявление этих членов и функцию-член категории(), которая используется для определения того, действует ли эта оптимизация.
Код: Выделить всё
typedef uint8_t category_type;
enum class Category : category_type {
isSmall = 0,
isMedium = kIsLittleEndian ? 0x80 : 0x2,
isLarge = kIsLittleEndian ? 0x40 : 0x1,
};
Category category() const {
// works for both big-endian and little-endian
return static_cast(bytes_[lastChar] & categoryExtractMask);
}
struct MediumLarge {
Char * data_;
size_t size_;
size_t capacity_;
size_t capacity() const {
return kIsLittleEndian
? capacity_ & capacityExtractMask
: capacity_ >> 2;
}
void setCapacity(size_t cap, Category cat) {
capacity_ = kIsLittleEndian
? cap | (static_cast(cat)
Подробнее здесь: [url]https://stackoverflow.com/questions/45900169/does-fbstrings-small-string-optimization-rely-on-undefined-behavior[/url]
Мобильная версия