mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-29 10:25:12 +00:00
Added "Profile" method to APFloat for use with FoldingSet.
Added member template "Add" to FoldingSetNodeID that allows "adding" arbitrary objects to a profile via dispatch to FoldingSetTrait<T>::Profile(). Removed FoldingSetNodeID::AddAPFloat and FoldingSetNodeID::APInt, as their functionality is now replaced using the above mentioned member template. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46957 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -181,6 +181,10 @@ namespace llvm {
|
||||
APFloat(const APFloat &);
|
||||
~APFloat();
|
||||
|
||||
/// Profile - Used to insert APFloat objects, or objects that contain
|
||||
/// APFloat objects, into FoldingSets.
|
||||
void Profile(FoldingSetNodeID& NID) const;
|
||||
|
||||
/// @brief Used by the Bitcode serializer to emit APInts to Bitcode.
|
||||
void Emit(Serializer& S) const;
|
||||
|
||||
|
@@ -178,6 +178,19 @@ protected:
|
||||
virtual void GetNodeProfile(FoldingSetNodeID &ID, Node *N) const = 0;
|
||||
};
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// FoldingSetTrait - This trait class is used to define behavior of how
|
||||
/// to "profile" (in the FoldingSet parlance) an object of a given type.
|
||||
/// The default behavior is to invoke a 'Profile' method on an object, but
|
||||
/// through template specialization the behavior can be tailored for specific
|
||||
/// types. Combined with the FoldingSetNodeWrapper classs, one can add objects
|
||||
/// to FoldingSets that were not originally designed to have that behavior.
|
||||
///
|
||||
template<typename T> struct FoldingSetTrait {
|
||||
static inline void Profile(const T& X, FoldingSetNodeID& ID) { X.Profile(ID);}
|
||||
static inline void Profile(T& X, FoldingSetNodeID& ID) { X.Profile(ID); }
|
||||
};
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
/// FoldingSetNodeID - This class is used to gather all the unique data bits of
|
||||
/// a node. When all the bits are gathered this class is used to produce a
|
||||
@@ -206,10 +219,11 @@ public:
|
||||
void AddInteger(uint64_t I);
|
||||
void AddFloat(float F);
|
||||
void AddDouble(double D);
|
||||
void AddAPFloat(const APFloat& apf);
|
||||
void AddAPInt(const APInt& api);
|
||||
void AddString(const std::string &String);
|
||||
|
||||
template <typename T>
|
||||
inline void Add(const T& x) { FoldingSetTrait<T>::Profile(x, *this); }
|
||||
|
||||
/// clear - Clear the accumulated profile, allowing this FoldingSetNodeID
|
||||
/// object to be used to compute a new profile.
|
||||
inline void clear() { Bits.clear(); }
|
||||
@@ -227,19 +241,6 @@ public:
|
||||
typedef FoldingSetImpl::Node FoldingSetNode;
|
||||
template<class T> class FoldingSetIterator;
|
||||
template<class T> class FoldingSetBucketIterator;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// FoldingSetTrait - This trait class is used to define behavior of how
|
||||
/// to "profile" (in the FoldingSet parlance) an object of a given type.
|
||||
/// The default behavior is to invoke a 'Profile' method on an object, but
|
||||
/// through template specialization the behavior can be tailored for specific
|
||||
/// types. Combined with the FoldingSetNodeWrapper classs, one can add objects
|
||||
/// to FoldingSets that were not originally designed to have that behavior.
|
||||
///
|
||||
template<typename T> struct FoldingSetTrait {
|
||||
static inline void Profile(const T& X, FoldingSetNodeID& ID) { X.Profile(ID);}
|
||||
static inline void Profile(T& X, FoldingSetNodeID& ID) { X.Profile(ID); }
|
||||
};
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// FoldingSet - This template class is used to instantiate a specialized
|
||||
|
Reference in New Issue
Block a user