Have TableGen emit setSubgraphColor calls under control of a -gen-debug
[oota-llvm.git] / utils / TableGen / Record.h
index 83d358ad2ce746ed47cf96dba7e3ba6a09d72ba9..87a49ee2f8448c2fc89481cb3fd4460acf5d53ca 100644 (file)
@@ -15,6 +15,7 @@
 #ifndef RECORD_H
 #define RECORD_H
 
+#include "llvm/Support/DataTypes.h"
 #include <string>
 #include <vector>
 #include <map>
@@ -151,7 +152,7 @@ public:
 class BitsRecTy : public RecTy {
   unsigned Size;
 public:
-  BitsRecTy(unsigned Sz) : Size(Sz) {}
+  explicit BitsRecTy(unsigned Sz) : Size(Sz) {}
 
   unsigned getNumBits() const { return Size; }
 
@@ -268,7 +269,7 @@ public:
 class ListRecTy : public RecTy {
   RecTy *Ty;
 public:
-  ListRecTy(RecTy *T) : Ty(T) {}
+  explicit ListRecTy(RecTy *T) : Ty(T) {}
 
   RecTy *getElementType() const { return Ty; }
 
@@ -381,7 +382,7 @@ public:
 class RecordRecTy : public RecTy {
   Record *Rec;
 public:
-  RecordRecTy(Record *R) : Rec(R) {}
+  explicit RecordRecTy(Record *R) : Rec(R) {}
 
   Record *getRecord() const { return Rec; }
 
@@ -565,11 +566,11 @@ public:
 /// IntInit - 7 - Represent an initalization by a literal integer value.
 ///
 class IntInit : public Init {
-  int Value;
+  int64_t Value;
 public:
-  explicit IntInit(int V) : Value(V) {}
+  explicit IntInit(int64_t V) : Value(V) {}
 
-  int getValue() const { return Value; }
+  int64_t getValue() const { return Value; }
 
   virtual Init *convertInitializerTo(RecTy *Ty) {
     return Ty->convertValue(this);
@@ -966,7 +967,7 @@ class Record {
   std::vector<Record*> SuperClasses;
 public:
 
-  Record(const std::string &N) : Name(N) {}
+  explicit Record(const std::string &N) : Name(N) {}
   ~Record() {}
 
   const std::string &getName() const { return Name; }
@@ -1082,7 +1083,7 @@ public:
   /// its value as a vector of integers, throwing an exception if the field does
   /// not exist or if the value is not the right type.
   ///
-  std::vector<int> getValueAsListOfInts(const std::string &FieldName) const;
+  std::vector<int64_t> getValueAsListOfInts(const std::string &FieldName) const;
   
   /// getValueAsDef - This method looks up the specified field and returns its
   /// value as a Record, throwing an exception if the field does not exist or if
@@ -1097,10 +1098,10 @@ public:
   bool getValueAsBit(const std::string &FieldName) const;
 
   /// getValueAsInt - This method looks up the specified field and returns its
-  /// value as an int, throwing an exception if the field does not exist or if
-  /// the value is not the right type.
+  /// value as an int64_t, throwing an exception if the field does not exist or
+  /// if the value is not the right type.
   ///
-  int getValueAsInt(const std::string &FieldName) const;
+  int64_t getValueAsInt(const std::string &FieldName) const;
 
   /// getValueAsDag - This method looks up the specified field and returns its
   /// value as an Dag, throwing an exception if the field does not exist or if
@@ -1175,6 +1176,24 @@ public:
   void dump() const;
 };
 
+/// LessRecord - Sorting predicate to sort record pointers by name.
+///
+struct LessRecord {
+  bool operator()(const Record *Rec1, const Record *Rec2) const {
+    return Rec1->getName() < Rec2->getName();
+  }
+};
+
+/// LessRecordFieldName - Sorting predicate to sort record pointers by their 
+/// name field.
+///
+struct LessRecordFieldName {
+  bool operator()(const Record *Rec1, const Record *Rec2) const {
+    return Rec1->getValueAsString("Name") < Rec2->getValueAsString("Name");
+  }
+};
+
+  
 std::ostream &operator<<(std::ostream &OS, const RecordKeeper &RK);
 
 extern RecordKeeper Records;