mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-11 13:44:28 +00:00
Support writing a StringRef to a raw_ostream directly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76754 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
59fec6a532
commit
dbe77cfa0b
@ -15,6 +15,7 @@
|
||||
#define LLVM_SUPPORT_RAW_OSTREAM_H
|
||||
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
@ -151,21 +152,27 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(const char *Str) {
|
||||
// Inline fast path, particulary for constant strings where a
|
||||
// sufficiently smart compiler will simplify strlen.
|
||||
|
||||
size_t Size = strlen(Str);
|
||||
raw_ostream &operator<<(const StringRef &Str) {
|
||||
// Inline fast path, particularly for strings with a known length.
|
||||
size_t Size = Str.size();
|
||||
|
||||
// Make sure we can use the fast path.
|
||||
if (OutBufCur+Size > OutBufEnd)
|
||||
return write(Str, Size);
|
||||
return write(Str.data(), Size);
|
||||
|
||||
memcpy(OutBufCur, Str, Size);
|
||||
memcpy(OutBufCur, Str.data(), Size);
|
||||
OutBufCur += Size;
|
||||
return *this;
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(const char *Str) {
|
||||
// Inline fast path, particulary for constant strings where a sufficiently
|
||||
// smart compiler will simplify strlen.
|
||||
|
||||
this->operator<<(StringRef(Str));
|
||||
return *this;
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(const std::string& Str) {
|
||||
write(Str.data(), Str.length());
|
||||
return *this;
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
@ -66,6 +67,11 @@ TEST(StringRefTest, Utilities) {
|
||||
EXPECT_TRUE(Str.startswith("he"));
|
||||
EXPECT_FALSE(Str.startswith("helloworld"));
|
||||
EXPECT_FALSE(Str.startswith("hi"));
|
||||
|
||||
std::string Storage;
|
||||
raw_string_ostream OS(Storage);
|
||||
OS << StringRef("hello");
|
||||
EXPECT_EQ("hello", OS.str());
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
Loading…
Reference in New Issue
Block a user