Move constructors out-of-line and flesh out their documentation. No
authorChandler Carruth <chandlerc@gmail.com>
Mon, 20 Feb 2012 00:02:47 +0000 (00:02 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 20 Feb 2012 00:02:47 +0000 (00:02 +0000)
functionality changed. This is in preparation for some refactoring of
how this class behaves.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150941 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Triple.h
lib/Support/Triple.cpp

index f5f96a2261f2a2463894587c82515c5b2fbbba20..a4b496e4991f90de67e9236dd708ea4cde45693a 100644 (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
index 9621dd31f16159f8eccd50da132879d5c86dfbf3..24ead35c20dff481d5cad5d4a43b9fdc7c699857 100644 (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;