static constexpr size_t ComponentSizeShift(Type type) { switch (type) { case kPrimVoid: case kPrimBoolean: case kPrimByte: return0; case kPrimChar: case kPrimShort: return1; case kPrimInt: case kPrimFloat: return2; case kPrimLong: case kPrimDouble: return3; case kPrimNot: return ComponentSizeShiftWidth(kObjectReferenceSize);
}
LOG(FATAL) << "Invalid type " << static_cast<int>(type);
UNREACHABLE();
}
static constexpr size_t ComponentSize(Type type) { switch (type) { case kPrimVoid: return0; case kPrimBoolean: case kPrimByte: return1; case kPrimChar: case kPrimShort: return2; case kPrimInt: case kPrimFloat: return4; case kPrimLong: case kPrimDouble: return8; case kPrimNot: return kObjectReferenceSize;
}
LOG(FATAL) << "Invalid type " << static_cast<int>(type);
UNREACHABLE();
}
staticconstchar* Descriptor(Type type) { switch (type) { case kPrimBoolean: return"Z"; case kPrimByte: return"B"; case kPrimChar: return"C"; case kPrimShort: return"S"; case kPrimInt: return"I"; case kPrimFloat: return"F"; case kPrimLong: return"J"; case kPrimDouble: return"D"; case kPrimVoid: return"V"; default:
LOG(FATAL) << "Primitive char conversion on invalid type " << static_cast<int>(type); return nullptr;
}
}
staticconstchar* PrettyDescriptor(Type type);
// Returns the descriptor corresponding to the boxed type of |type|. staticconstchar* BoxedDescriptor(Type type);
// Returns true if |type| is an numeric type. static constexpr bool IsNumericType(Type type) { switch (type) { case Primitive::Type::kPrimNot: returnfalse; case Primitive::Type::kPrimBoolean: returnfalse; case Primitive::Type::kPrimByte: returntrue; case Primitive::Type::kPrimChar: returntrue; case Primitive::Type::kPrimShort: returntrue; case Primitive::Type::kPrimInt: returntrue; case Primitive::Type::kPrimLong: returntrue; case Primitive::Type::kPrimFloat: returntrue; case Primitive::Type::kPrimDouble: returntrue; case Primitive::Type::kPrimVoid: returnfalse;
}
LOG(FATAL) << "Invalid type " << static_cast<int>(type);
UNREACHABLE();
}
// Return trues if |type| is a signed numeric type. static constexpr bool IsSignedNumericType(Type type) { switch (type) { case Primitive::Type::kPrimNot: returnfalse; case Primitive::Type::kPrimBoolean: returnfalse; case Primitive::Type::kPrimByte: returntrue; case Primitive::Type::kPrimChar: returnfalse; case Primitive::Type::kPrimShort: returntrue; case Primitive::Type::kPrimInt: returntrue; case Primitive::Type::kPrimLong: returntrue; case Primitive::Type::kPrimFloat: returntrue; case Primitive::Type::kPrimDouble: returntrue; case Primitive::Type::kPrimVoid: returnfalse;
}
LOG(FATAL) << "Invalid type " << static_cast<int>(type);
UNREACHABLE();
}
// Returns the number of bits required to hold the largest // positive number that can be represented by |type|. static constexpr size_t BitsRequiredForLargestValue(Type type) { switch (type) { case Primitive::Type::kPrimNot: return0u; case Primitive::Type::kPrimBoolean: return1u; case Primitive::Type::kPrimByte: return7u; case Primitive::Type::kPrimChar: return16u; case Primitive::Type::kPrimShort: return15u; case Primitive::Type::kPrimInt: return31u; case Primitive::Type::kPrimLong: return63u; case Primitive::Type::kPrimFloat: return128u; case Primitive::Type::kPrimDouble: return1024u; case Primitive::Type::kPrimVoid: return0u;
}
}
// Returns true if it is possible to widen type |from| to type |to|. Both |from| and // |to| should be numeric primitive types. staticbool IsWidenable(Type from, Type to) { if (!IsNumericType(from) || !IsNumericType(to)) { // Widening is only applicable between numeric types. returnfalse;
} if (IsSignedNumericType(from) && !IsSignedNumericType(to)) { // Nowhere to store the sign bit in |to|. returnfalse;
} if (BitsRequiredForLargestValue(from) > BitsRequiredForLargestValue(to)) { // The from,to pair corresponds to a narrowing. returnfalse;
} returntrue;
}
staticbool Is64BitType(Type type) { return type == kPrimLong || type == kPrimDouble;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.