mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
As Doug pointed out (and I really should know), it is perfectly easy to
make VariadicFunction actually be trivial. Do so, and also make it look more like your standard trivial functor by making it a struct with no access specifiers. The unit test is updated to initialize its functors properly. llvm-svn: 146827
This commit is contained in:
parent
0ec73f6e98
commit
c8e6351626
@ -103,10 +103,7 @@ namespace llvm {
|
||||
/// fixed leading arguments and up-to 32 optional arguments.
|
||||
template <typename ResultT, typename ArgT,
|
||||
ResultT (*Func)(ArrayRef<const ArgT *>)>
|
||||
class VariadicFunction {
|
||||
public:
|
||||
VariadicFunction() {}
|
||||
|
||||
struct VariadicFunction {
|
||||
ResultT operator()() const {
|
||||
return Func(ArrayRef<const ArgT *>());
|
||||
}
|
||||
@ -153,10 +150,7 @@ class VariadicFunction {
|
||||
|
||||
template <typename ResultT, typename Param0T, typename ArgT,
|
||||
ResultT (*Func)(Param0T, ArrayRef<const ArgT *>)>
|
||||
class VariadicFunction1 {
|
||||
public:
|
||||
VariadicFunction1() {}
|
||||
|
||||
struct VariadicFunction1 {
|
||||
ResultT operator()(Param0T P0) const {
|
||||
return Func(P0, ArrayRef<const ArgT *>());
|
||||
}
|
||||
@ -203,10 +197,7 @@ class VariadicFunction1 {
|
||||
|
||||
template <typename ResultT, typename Param0T, typename Param1T, typename ArgT,
|
||||
ResultT (*Func)(Param0T, Param1T, ArrayRef<const ArgT *>)>
|
||||
class VariadicFunction2 {
|
||||
public:
|
||||
VariadicFunction2() {}
|
||||
|
||||
struct VariadicFunction2 {
|
||||
ResultT operator()(Param0T P0, Param1T P1) const {
|
||||
return Func(P0, P1, ArrayRef<const ArgT *>());
|
||||
}
|
||||
@ -255,10 +246,7 @@ class VariadicFunction2 {
|
||||
template <typename ResultT, typename Param0T, typename Param1T,
|
||||
typename Param2T, typename ArgT,
|
||||
ResultT (*Func)(Param0T, Param1T, Param2T, ArrayRef<const ArgT *>)>
|
||||
class VariadicFunction3 {
|
||||
public:
|
||||
VariadicFunction3() {}
|
||||
|
||||
struct VariadicFunction3 {
|
||||
ResultT operator()(Param0T P0, Param1T P1, Param2T P2) const {
|
||||
return Func(P0, P1, P2, ArrayRef<const ArgT *>());
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ std::string StringCatImpl(ArrayRef<const std::string *> Args) {
|
||||
S += *Args[i];
|
||||
return S;
|
||||
}
|
||||
const VariadicFunction<std::string, std::string, StringCatImpl> StringCat;
|
||||
const VariadicFunction<std::string, std::string, StringCatImpl> StringCat = {};
|
||||
|
||||
TEST(VariadicFunctionTest, WorksForClassTypes) {
|
||||
EXPECT_EQ("", StringCat());
|
||||
@ -45,7 +45,7 @@ long SumImpl(ArrayRef<const int *> Args) {
|
||||
Result += *Args[i];
|
||||
return Result;
|
||||
}
|
||||
const VariadicFunction<long, int, SumImpl> Sum;
|
||||
const VariadicFunction<long, int, SumImpl> Sum = {};
|
||||
|
||||
TEST(VariadicFunctionTest, WorksForPrimitiveTypes) {
|
||||
EXPECT_EQ(0, Sum());
|
||||
@ -65,7 +65,7 @@ int StringAppendImpl(std::string *Dest, ArrayRef<const std::string *> Args) {
|
||||
return Chars;
|
||||
}
|
||||
const VariadicFunction1<int, std::string *, std::string,
|
||||
StringAppendImpl> StringAppend;
|
||||
StringAppendImpl> StringAppend = {};
|
||||
|
||||
TEST(VariadicFunction1Test, Works) {
|
||||
std::string S0("hi");
|
||||
@ -93,7 +93,7 @@ void CountInRangeImpl(int *NumInRange, int Low, int High,
|
||||
++(*NumInRange);
|
||||
}
|
||||
const VariadicFunction3<void, int *, int, int, int,
|
||||
CountInRangeImpl> CountInRange;
|
||||
CountInRangeImpl> CountInRange = {};
|
||||
|
||||
TEST(VariadicFunction3Test, Works) {
|
||||
int N = -1;
|
||||
|
Loading…
Reference in New Issue
Block a user