/// Allow clients that need the byte representation, such as ASTWriterStmt
/// ::VisitStringLiteral(), access.
StringRef getBytes() const {
- // FIXME: StringRef may not be the right type to use as a result for this...
- assert((CharByteWidth==1 || CharByteWidth==2 || CharByteWidth==4)
- && "unsupported CharByteWidth");
- if (CharByteWidth==4) {
+ // FIXME: StringRef may not be the right type to use as a result for this.
+ if (CharByteWidth == 1)
+ return StringRef(StrData.asChar, getByteLength());
+ if (CharByteWidth == 4)
return StringRef(reinterpret_cast<const char*>(StrData.asUInt32),
getByteLength());
- } else if (CharByteWidth==2) {
- return StringRef(reinterpret_cast<const char*>(StrData.asUInt16),
- getByteLength());
- } else {
- return StringRef(StrData.asChar, getByteLength());
- }
+ assert(CharByteWidth == 2 && "unsupported CharByteWidth");
+ return StringRef(reinterpret_cast<const char*>(StrData.asUInt16),
+ getByteLength());
}
uint32_t getCodeUnit(size_t i) const {
- assert(i<Length && "out of bounds access");
- assert((CharByteWidth==1 || CharByteWidth==2 || CharByteWidth==4)
- && "unsupported CharByteWidth");
- if (CharByteWidth==4) {
- return StrData.asUInt32[i];
- } else if (CharByteWidth==2) {
- return StrData.asUInt16[i];
- } else {
+ assert(i < Length && "out of bounds access");
+ if (CharByteWidth == 1)
return static_cast<unsigned char>(StrData.asChar[i]);
- }
+ if (CharByteWidth == 4)
+ return StrData.asUInt32[i];
+ assert(CharByteWidth == 2 && "unsupported CharByteWidth");
+ return StrData.asUInt16[i];
}
unsigned getByteLength() const { return CharByteWidth*Length; }