forked from OSchip/llvm-project
Added std::string as a built-in type for mapping.
llvm-svn: 193344
This commit is contained in:
parent
7edb87a92c
commit
e38e57206f
|
@ -234,6 +234,7 @@ The following types have built-in support in YAML I/O:
|
||||||
* float
|
* float
|
||||||
* double
|
* double
|
||||||
* StringRef
|
* StringRef
|
||||||
|
* std::string
|
||||||
* int64_t
|
* int64_t
|
||||||
* int32_t
|
* int32_t
|
||||||
* int16_t
|
* int16_t
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
//===- llvm/Supporrt/YAMLTraits.h -------------------------------*- C++ -*-===//
|
//===- llvm/Support/YAMLTraits.h -------------------------------*- C++ -*-===//
|
||||||
//
|
//
|
||||||
// The LLVM Linker
|
// The LLVM Linker
|
||||||
//
|
//
|
||||||
|
@ -538,6 +538,12 @@ struct ScalarTraits<StringRef> {
|
||||||
static StringRef input(StringRef, void*, StringRef &);
|
static StringRef input(StringRef, void*, StringRef &);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ScalarTraits<std::string> {
|
||||||
|
static void output(const std::string &, void*, llvm::raw_ostream &);
|
||||||
|
static StringRef input(StringRef, void*, std::string &);
|
||||||
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct ScalarTraits<uint8_t> {
|
struct ScalarTraits<uint8_t> {
|
||||||
static void output(const uint8_t &, void*, llvm::raw_ostream &);
|
static void output(const uint8_t &, void*, llvm::raw_ostream &);
|
||||||
|
|
|
@ -648,6 +648,17 @@ StringRef ScalarTraits<StringRef>::input(StringRef Scalar, void *,
|
||||||
return StringRef();
|
return StringRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScalarTraits<std::string>::output(const std::string &Val, void *,
|
||||||
|
raw_ostream &Out) {
|
||||||
|
Out << Val;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringRef ScalarTraits<std::string>::input(StringRef Scalar, void *,
|
||||||
|
std::string &Val) {
|
||||||
|
Val = Scalar.str();
|
||||||
|
return StringRef();
|
||||||
|
}
|
||||||
|
|
||||||
void ScalarTraits<uint8_t>::output(const uint8_t &Val, void *,
|
void ScalarTraits<uint8_t>::output(const uint8_t &Val, void *,
|
||||||
raw_ostream &Out) {
|
raw_ostream &Out) {
|
||||||
// use temp uin32_t because ostream thinks uint8_t is a character
|
// use temp uin32_t because ostream thinks uint8_t is a character
|
||||||
|
|
|
@ -130,6 +130,7 @@ TEST(YAMLIO, TestSequenceMapWriteAndRead) {
|
||||||
|
|
||||||
struct BuiltInTypes {
|
struct BuiltInTypes {
|
||||||
llvm::StringRef str;
|
llvm::StringRef str;
|
||||||
|
std::string stdstr;
|
||||||
uint64_t u64;
|
uint64_t u64;
|
||||||
uint32_t u32;
|
uint32_t u32;
|
||||||
uint16_t u16;
|
uint16_t u16;
|
||||||
|
@ -153,6 +154,7 @@ namespace yaml {
|
||||||
struct MappingTraits<BuiltInTypes> {
|
struct MappingTraits<BuiltInTypes> {
|
||||||
static void mapping(IO &io, BuiltInTypes& bt) {
|
static void mapping(IO &io, BuiltInTypes& bt) {
|
||||||
io.mapRequired("str", bt.str);
|
io.mapRequired("str", bt.str);
|
||||||
|
io.mapRequired("stdstr", bt.stdstr);
|
||||||
io.mapRequired("u64", bt.u64);
|
io.mapRequired("u64", bt.u64);
|
||||||
io.mapRequired("u32", bt.u32);
|
io.mapRequired("u32", bt.u32);
|
||||||
io.mapRequired("u16", bt.u16);
|
io.mapRequired("u16", bt.u16);
|
||||||
|
@ -181,6 +183,7 @@ TEST(YAMLIO, TestReadBuiltInTypes) {
|
||||||
BuiltInTypes map;
|
BuiltInTypes map;
|
||||||
Input yin("---\n"
|
Input yin("---\n"
|
||||||
"str: hello there\n"
|
"str: hello there\n"
|
||||||
|
"stdstr: hello where?\n"
|
||||||
"u64: 5000000000\n"
|
"u64: 5000000000\n"
|
||||||
"u32: 4000000000\n"
|
"u32: 4000000000\n"
|
||||||
"u16: 65000\n"
|
"u16: 65000\n"
|
||||||
|
@ -201,6 +204,7 @@ TEST(YAMLIO, TestReadBuiltInTypes) {
|
||||||
|
|
||||||
EXPECT_FALSE(yin.error());
|
EXPECT_FALSE(yin.error());
|
||||||
EXPECT_TRUE(map.str.equals("hello there"));
|
EXPECT_TRUE(map.str.equals("hello there"));
|
||||||
|
EXPECT_TRUE(map.stdstr == "hello where?");
|
||||||
EXPECT_EQ(map.u64, 5000000000ULL);
|
EXPECT_EQ(map.u64, 5000000000ULL);
|
||||||
EXPECT_EQ(map.u32, 4000000000U);
|
EXPECT_EQ(map.u32, 4000000000U);
|
||||||
EXPECT_EQ(map.u16, 65000);
|
EXPECT_EQ(map.u16, 65000);
|
||||||
|
@ -227,6 +231,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
|
||||||
{
|
{
|
||||||
BuiltInTypes map;
|
BuiltInTypes map;
|
||||||
map.str = "one two";
|
map.str = "one two";
|
||||||
|
map.stdstr = "three four";
|
||||||
map.u64 = 6000000000ULL;
|
map.u64 = 6000000000ULL;
|
||||||
map.u32 = 3000000000U;
|
map.u32 = 3000000000U;
|
||||||
map.u16 = 50000;
|
map.u16 = 50000;
|
||||||
|
@ -255,6 +260,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
|
||||||
|
|
||||||
EXPECT_FALSE(yin.error());
|
EXPECT_FALSE(yin.error());
|
||||||
EXPECT_TRUE(map.str.equals("one two"));
|
EXPECT_TRUE(map.str.equals("one two"));
|
||||||
|
EXPECT_TRUE(map.stdstr == "three four");
|
||||||
EXPECT_EQ(map.u64, 6000000000ULL);
|
EXPECT_EQ(map.u64, 6000000000ULL);
|
||||||
EXPECT_EQ(map.u32, 3000000000U);
|
EXPECT_EQ(map.u32, 3000000000U);
|
||||||
EXPECT_EQ(map.u16, 50000);
|
EXPECT_EQ(map.u16, 50000);
|
||||||
|
@ -279,6 +285,11 @@ struct StringTypes {
|
||||||
llvm::StringRef str3;
|
llvm::StringRef str3;
|
||||||
llvm::StringRef str4;
|
llvm::StringRef str4;
|
||||||
llvm::StringRef str5;
|
llvm::StringRef str5;
|
||||||
|
std::string stdstr1;
|
||||||
|
std::string stdstr2;
|
||||||
|
std::string stdstr3;
|
||||||
|
std::string stdstr4;
|
||||||
|
std::string stdstr5;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
@ -291,6 +302,11 @@ namespace yaml {
|
||||||
io.mapRequired("str3", st.str3);
|
io.mapRequired("str3", st.str3);
|
||||||
io.mapRequired("str4", st.str4);
|
io.mapRequired("str4", st.str4);
|
||||||
io.mapRequired("str5", st.str5);
|
io.mapRequired("str5", st.str5);
|
||||||
|
io.mapRequired("stdstr1", st.stdstr1);
|
||||||
|
io.mapRequired("stdstr2", st.stdstr2);
|
||||||
|
io.mapRequired("stdstr3", st.stdstr3);
|
||||||
|
io.mapRequired("stdstr4", st.stdstr4);
|
||||||
|
io.mapRequired("stdstr5", st.stdstr5);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -305,6 +321,11 @@ TEST(YAMLIO, TestReadWriteStringTypes) {
|
||||||
map.str3 = "`ccc";
|
map.str3 = "`ccc";
|
||||||
map.str4 = "@ddd";
|
map.str4 = "@ddd";
|
||||||
map.str5 = "";
|
map.str5 = "";
|
||||||
|
map.stdstr1 = "'eee";
|
||||||
|
map.stdstr2 = "\"fff";
|
||||||
|
map.stdstr3 = "`ggg";
|
||||||
|
map.stdstr4 = "@hhh";
|
||||||
|
map.stdstr5 = "";
|
||||||
|
|
||||||
llvm::raw_string_ostream ostr(intermediate);
|
llvm::raw_string_ostream ostr(intermediate);
|
||||||
Output yout(ostr);
|
Output yout(ostr);
|
||||||
|
@ -317,6 +338,11 @@ TEST(YAMLIO, TestReadWriteStringTypes) {
|
||||||
EXPECT_NE(llvm::StringRef::npos, flowOut.find("'`ccc'"));
|
EXPECT_NE(llvm::StringRef::npos, flowOut.find("'`ccc'"));
|
||||||
EXPECT_NE(llvm::StringRef::npos, flowOut.find("'@ddd'"));
|
EXPECT_NE(llvm::StringRef::npos, flowOut.find("'@ddd'"));
|
||||||
EXPECT_NE(llvm::StringRef::npos, flowOut.find("''\n"));
|
EXPECT_NE(llvm::StringRef::npos, flowOut.find("''\n"));
|
||||||
|
EXPECT_NE(std::string::npos, flowOut.find("'''eee"));
|
||||||
|
EXPECT_NE(std::string::npos, flowOut.find("'\"fff'"));
|
||||||
|
EXPECT_NE(std::string::npos, flowOut.find("'`ggg'"));
|
||||||
|
EXPECT_NE(std::string::npos, flowOut.find("'@hhh'"));
|
||||||
|
EXPECT_NE(std::string::npos, flowOut.find("''\n"));
|
||||||
|
|
||||||
{
|
{
|
||||||
Input yin(intermediate);
|
Input yin(intermediate);
|
||||||
|
@ -329,6 +355,11 @@ TEST(YAMLIO, TestReadWriteStringTypes) {
|
||||||
EXPECT_TRUE(map.str3.equals("`ccc"));
|
EXPECT_TRUE(map.str3.equals("`ccc"));
|
||||||
EXPECT_TRUE(map.str4.equals("@ddd"));
|
EXPECT_TRUE(map.str4.equals("@ddd"));
|
||||||
EXPECT_TRUE(map.str5.equals(""));
|
EXPECT_TRUE(map.str5.equals(""));
|
||||||
|
EXPECT_TRUE(map.stdstr1 == "'eee");
|
||||||
|
EXPECT_TRUE(map.stdstr2 == "\"fff");
|
||||||
|
EXPECT_TRUE(map.stdstr3 == "`ggg");
|
||||||
|
EXPECT_TRUE(map.stdstr4 == "@hhh");
|
||||||
|
EXPECT_TRUE(map.stdstr5 == "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue