tidy up code, make the common case (1-byte strings) come first

llvm-svn: 149942
This commit is contained in:
Chris Lattner 2012-02-07 00:39:21 +00:00
parent 76b292f5ba
commit 8573dc7e1f
1 changed files with 13 additions and 19 deletions

View File

@ -1369,31 +1369,25 @@ public:
/// 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; }