Move constructors out-of-line and flesh out their documentation. No

functionality changed. This is in preparation for some refactoring of
how this class behaves.

llvm-svn: 150941
This commit is contained in:
Chandler Carruth 2012-02-20 00:02:47 +00:00
parent c7e2bbf39f
commit 132aecc08e
2 changed files with 36 additions and 11 deletions

View File

@ -136,18 +136,13 @@ public:
/// @name Constructors
/// @{
/// \brief Default constructor produces an empty, invalid triple.
Triple() : Data(), Arch(InvalidArch) {}
explicit Triple(const Twine &Str) : Data(Str.str()), Arch(InvalidArch) {}
Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr)
: Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr).str()),
Arch(InvalidArch) {
}
explicit Triple(const Twine &Str);
Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr);
Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr,
const Twine &EnvironmentStr)
: Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr + Twine('-') +
EnvironmentStr).str()), Arch(InvalidArch) {
}
const Twine &EnvironmentStr);
/// @}
/// @name Normalization

View File

@ -215,8 +215,6 @@ const char *Triple::getArchNameForAssembler() {
.Default(NULL);
}
//
Triple::ArchType Triple::ParseArch(StringRef ArchName) {
return StringSwitch<ArchType>(ArchName)
.Cases("i386", "i486", "i586", "i686", x86)
@ -304,6 +302,38 @@ void Triple::Parse() const {
assert(isInitialized() && "Failed to initialize!");
}
/// \brief Construct a triple from the string representation provided.
///
/// This doesn't actually parse the string representation eagerly. Instead it
/// stores it, and tracks the fact that it hasn't been parsed. The first time
/// any of the structural queries are made, the string is parsed and the
/// results cached in various members.
Triple::Triple(const Twine &Str) : Data(Str.str()), Arch(InvalidArch) {}
/// \brief Construct a triple from string representations of the architecture,
/// vendor, and OS.
///
/// This doesn't actually use these already distinct strings to setup the
/// triple information. Instead it joins them into a canonical form of a triple
/// string, and lazily parses it on use.
Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr)
: Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr).str()),
Arch(InvalidArch) {
}
/// \brief Construct a triple from string representations of the architecture,
/// vendor, OS, and environment.
///
/// This doesn't actually use these already distinct strings to setup the
/// triple information. Instead it joins them into a canonical form of a triple
/// string, and lazily parses it on use.
Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr,
const Twine &EnvironmentStr)
: Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr + Twine('-') +
EnvironmentStr).str()),
Arch(InvalidArch) {
}
std::string Triple::normalize(StringRef Str) {
// Parse into components.
SmallVector<StringRef, 4> Components;