forked from OSchip/llvm-project
Remove unused type Either from Utility library.
llvm-svn: 339328
This commit is contained in:
parent
b89367ac46
commit
14dc665398
|
@ -12,115 +12,61 @@
|
|||
|
||||
#include "llvm/ADT/Optional.h"
|
||||
|
||||
#include <functional>
|
||||
|
||||
namespace lldb_utility {
|
||||
template <typename T1, typename T2> class Either {
|
||||
private:
|
||||
enum class Selected { One, Two };
|
||||
|
||||
Selected m_selected;
|
||||
union {
|
||||
T1 m_t1;
|
||||
T2 m_t2;
|
||||
};
|
||||
|
||||
public:
|
||||
Either(const T1 &t1) {
|
||||
m_t1 = t1;
|
||||
m_selected = Selected::One;
|
||||
}
|
||||
|
||||
Either(const T2 &t2) {
|
||||
m_t2 = t2;
|
||||
m_selected = Selected::Two;
|
||||
}
|
||||
|
||||
Either(const Either<T1, T2> &rhs) {
|
||||
switch (rhs.m_selected) {
|
||||
case Selected::One:
|
||||
m_t1 = rhs.GetAs<T1>().getValue();
|
||||
m_selected = Selected::One;
|
||||
break;
|
||||
case Selected::Two:
|
||||
m_t2 = rhs.GetAs<T2>().getValue();
|
||||
m_selected = Selected::Two;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
template <class X, typename std::enable_if<std::is_same<T1, X>::value>::type
|
||||
* = nullptr>
|
||||
llvm::Optional<T1> GetAs() const {
|
||||
switch (m_selected) {
|
||||
case Selected::One:
|
||||
return m_t1;
|
||||
default:
|
||||
return llvm::Optional<T1>();
|
||||
}
|
||||
}
|
||||
|
||||
template <class X, typename std::enable_if<std::is_same<T2, X>::value>::type
|
||||
* = nullptr>
|
||||
llvm::Optional<T2> GetAs() const {
|
||||
switch (m_selected) {
|
||||
case Selected::Two:
|
||||
return m_t2;
|
||||
default:
|
||||
return llvm::Optional<T2>();
|
||||
}
|
||||
}
|
||||
|
||||
template <class ResultType>
|
||||
ResultType Apply(std::function<ResultType(T1)> if_T1,
|
||||
std::function<ResultType(T2)> if_T2) const {
|
||||
switch (m_selected) {
|
||||
case Selected::One:
|
||||
return if_T1(m_t1);
|
||||
case Selected::Two:
|
||||
return if_T2(m_t2);
|
||||
}
|
||||
}
|
||||
|
||||
bool operator==(const Either<T1, T2> &rhs) {
|
||||
return (GetAs<T1>() == rhs.GetAs<T1>()) && (GetAs<T2>() == rhs.GetAs<T2>());
|
||||
}
|
||||
|
||||
explicit operator bool() {
|
||||
switch (m_selected) {
|
||||
case Selected::One:
|
||||
return (bool)m_t1;
|
||||
case Selected::Two:
|
||||
return (bool)m_t2;
|
||||
}
|
||||
}
|
||||
|
||||
Either<T1, T2> &operator=(const Either<T1, T2> &rhs) {
|
||||
switch (rhs.m_selected) {
|
||||
case Selected::One:
|
||||
m_t1 = rhs.GetAs<T1>().getValue();
|
||||
m_selected = Selected::One;
|
||||
break;
|
||||
case Selected::Two:
|
||||
m_t2 = rhs.GetAs<T2>().getValue();
|
||||
m_selected = Selected::Two;
|
||||
break;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
~Either() {
|
||||
switch (m_selected) {
|
||||
case Selected::One:
|
||||
m_t1.T1::~T1();
|
||||
break;
|
||||
case Selected::Two:
|
||||
m_t2.T2::~T2();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T1, typename T2>
|
||||
class Either {
|
||||
private:
|
||||
enum class Selected {
|
||||
One, Two
|
||||
};
|
||||
|
||||
Selected m_selected;
|
||||
union {
|
||||
T1 m_t1;
|
||||
T2 m_t2;
|
||||
};
|
||||
|
||||
public:
|
||||
Either(const T1& t1)
|
||||
{
|
||||
m_t1 = t1;
|
||||
m_selected = Selected::One;
|
||||
}
|
||||
|
||||
Either(const T2& t2)
|
||||
{
|
||||
m_t2 = t2;
|
||||
m_selected = Selected::Two;
|
||||
}
|
||||
|
||||
template <class X, typename std::enable_if<std::is_same<T1,X>::value>::type * = nullptr >
|
||||
llvm::Optional<T1>
|
||||
GetAs()
|
||||
{
|
||||
switch (m_selected)
|
||||
{
|
||||
case Selected::One:
|
||||
return m_t1;
|
||||
default:
|
||||
return llvm::Optional<T1>();
|
||||
}
|
||||
}
|
||||
|
||||
template <class X, typename std::enable_if<std::is_same<T2,X>::value>::type * = nullptr >
|
||||
llvm::Optional<T2>
|
||||
GetAs()
|
||||
{
|
||||
switch (m_selected)
|
||||
{
|
||||
case Selected::Two:
|
||||
return m_t2;
|
||||
default:
|
||||
return llvm::Optional<T2>();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace lldb_utility
|
||||
|
||||
#endif // #ifndef liblldb_Either_h_
|
||||
|
||||
|
|
|
@ -1777,7 +1777,6 @@
|
|||
26CFDCA2186163A4000E63E5 /* Editline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Editline.cpp; sourceTree = "<group>"; };
|
||||
26CFDCA01861638D000E63E5 /* Editline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Editline.h; path = include/lldb/Host/Editline.h; sourceTree = "<group>"; };
|
||||
2326CF511BDD693B00A5CEAC /* EditlineTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EditlineTest.cpp; sourceTree = "<group>"; };
|
||||
9481FE6B1B5F2D9200DED357 /* Either.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Either.h; path = include/lldb/Utility/Either.h; sourceTree = "<group>"; };
|
||||
26D9FDC812F784FD0003F2EE /* EmulateInstruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EmulateInstruction.cpp; path = source/Core/EmulateInstruction.cpp; sourceTree = "<group>"; };
|
||||
26D9FDC612F784E60003F2EE /* EmulateInstruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EmulateInstruction.h; path = include/lldb/Core/EmulateInstruction.h; sourceTree = "<group>"; };
|
||||
9A22A15D135E30370024DDC3 /* EmulateInstructionARM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EmulateInstructionARM.cpp; sourceTree = "<group>"; };
|
||||
|
@ -4510,7 +4509,6 @@
|
|||
49CA96E81E6AAC6600C03FEE /* DataEncoder.cpp */,
|
||||
49CA96F41E6AAC8E00C03FEE /* DataExtractor.h */,
|
||||
49CA96E91E6AAC6600C03FEE /* DataExtractor.cpp */,
|
||||
9481FE6B1B5F2D9200DED357 /* Either.h */,
|
||||
26BC7DD310F1B7D500F91463 /* Endian.h */,
|
||||
AFC2DCE61E6E2ED000283714 /* FastDemangle.cpp */,
|
||||
AFC2DCED1E6E2F9800283714 /* FastDemangle.h */,
|
||||
|
|
Loading…
Reference in New Issue