Home | History | Annotate | Download | only in Mangler
      1 //===----------------------- FunctionDescriptor.h ------------------------===//
      2 //
      3 //                              SPIR Tools
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===---------------------------------------------------------------------===//
      9 /*
     10  * Contributed by: Intel Corporation.
     11  */
     12 
     13 #ifndef __FUNCTION_DESCRIPTOR_H__
     14 #define __FUNCTION_DESCRIPTOR_H__
     15 
     16 #include "ParameterType.h"
     17 #include "Refcount.h"
     18 #include <string>
     19 #include <vector>
     20 
     21 namespace SPIR {
     22 typedef std::vector<RefCount<ParamType> > TypeVector;
     23 
     24 struct FunctionDescriptor {
     25   /// @brief Returns a human readable string representation of the function's
     26   ///        prototype.
     27   /// @returns std::string representing the function's prototype.
     28   std::string toString() const;
     29 
     30   /// The name of the function (stripped).
     31   std::string name;
     32   /// Parameter list of the function.
     33   TypeVector parameters;
     34 
     35   bool operator == (const FunctionDescriptor&) const;
     36 
     37   /// @brief Enables function descriptors to serve as keys in stl maps.
     38   bool operator < (const FunctionDescriptor&) const;
     39   bool isNull() const;
     40 
     41   /// @brief Create a singular value, that represents a 'null' FunctionDescriptor.
     42   static FunctionDescriptor null();
     43 
     44   static std::string nullString();
     45 };
     46 
     47 template <typename T>
     48 std::ostream& operator<< (T& o, const SPIR::FunctionDescriptor& fd) {
     49   o << fd.toString();
     50   return o;
     51 }
     52 } // End SPIR namespace
     53 
     54 #endif //__FUNCTION_DESCRIPTOR_H__
     55