Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Cost.hpp

    r06ecda9 rc92bdcc  
    3131                #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
    3232                        // Little-endian => first value is low priority and last is high priority.
     33                        unsigned char padding;                                  ///< unused
    3334                        unsigned char referenceCost;                    ///< reference conversions
    3435                        unsigned char specCost;                                 ///< Polymorphic type specializations (type assertions), negative cost
     
    3738                        unsigned char safeCost;                                 ///< Safe (widening) conversions
    3839                        unsigned char polyCost;                                 ///< Count of parameters and return values bound to some poly type
    39                         unsigned char implicitCost;                             ///< Aggregate implicit cost
    4040                        unsigned char unsafeCost;                               ///< Unsafe (narrowing) conversions
    4141                #else
     
    4646        };
    4747        static const unsigned char correctb = 0xff;             // byte correction for negative spec cost
    48         static const uint64_t correctw = 0x00'00'00'00'00'00'ff'00; //' word correction for negative spec cost
     48        static const uint64_t correctw = 0x00'00'00'00'00'ff'00'00; //' word correction for negative spec cost
    4949  public:
    5050        // Compiler adjusts constants for correct endian.
    5151        enum : uint64_t {
    52                 zero      = 0x00'00'00'00'00'00'ff'00,
    53                 infinity  = 0xff'ff'ff'ff'ff'ff'00'ff,
    54                 unsafe    = 0x01'00'00'00'00'00'ff'00,
    55                 implicit  = 0x00'01'00'00'01'00'ff'00,
    56                 poly      = 0x00'00'01'00'00'00'ff'00,
    57                 safe      = 0x00'00'00'01'00'00'ff'00,
    58                 sign      = 0x00'00'00'00'01'00'ff'00,
    59                 var       = 0x00'00'00'00'00'01'ff'00,
    60                 spec      = 0x00'00'00'00'00'00'fe'00,
    61                 reference = 0x00'00'00'00'00'00'ff'01,
     52                zero      = 0x00'00'00'00'00'ff'00'00,
     53                infinity  = 0xff'ff'ff'ff'ff'00'ff'ff,
     54                unsafe    = 0x01'00'00'00'00'ff'00'00,
     55                poly      = 0x00'01'00'00'00'ff'00'00,
     56                safe      = 0x00'00'01'00'00'ff'00'00,
     57                sign      = 0x00'00'00'01'00'ff'00'00,
     58                var       = 0x00'00'00'00'01'ff'00'00,
     59                spec      = 0x00'00'00'00'00'fe'00'00,
     60                reference = 0x00'00'00'00'00'ff'01'00,
    6261        }; //'
    6362
    6463        Cost( uint64_t all ) { Cost::all = all; }
    65         Cost( int unsafeCost, int polyCost, int safeCost, int signCost, int implicitCost, int varCost, int specCost, int referenceCost ) {
     64        Cost( int unsafeCost, int polyCost, int safeCost, int signCost, int varCost, int specCost, int referenceCost ) {
    6665                // Assume little-endian => first value is low priority and last is high priority.
    6766                v = {
    6867                #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
     68                        (unsigned char)0,                                               // padding
    6969                        (unsigned char)referenceCost,                   // low priority
    7070                        (unsigned char)(specCost + correctb),   // correct for signedness
     
    7373                        (unsigned char)safeCost,
    7474                        (unsigned char)polyCost,
    75                         (unsigned char)implicitCost,
    7675                        (unsigned char)unsafeCost,                              // high priority
    7776                #else
     
    8281
    8382        int get_unsafeCost() const { return v.unsafeCost; }
    84         int get_implictCost() const { return v.implicitCost; }
    8583        int get_polyCost() const { return v.polyCost; }
    8684        int get_safeCost() const { return v.safeCost; }
     
    114112        Cost incUnsafe( int inc = 1 ) {
    115113                if ( all != infinity ) { assert( v.unsafeCost + inc <= UCHAR_MAX ); v.unsafeCost += inc; }
    116                 return *this;
    117         }
    118 
    119         Cost incImplicit( int inc = 1 ) {
    120                 if ( all != infinity ) { assert( v.implicitCost + inc <= UCHAR_MAX ); v.implicitCost += inc; }
    121114                return *this;
    122115        }
     
    175168
    176169inline std::ostream & operator<<( std::ostream & os, const Cost cost ) {
    177         return os << "( " << cost.get_unsafeCost() << ", " << cost.get_implictCost() << ", " << cost.get_polyCost() << ", " << cost.get_safeCost()
     170        return os << "( " << cost.get_unsafeCost() << ", " << cost.get_polyCost() << ", " << cost.get_safeCost()
    178171                          << ", " << cost.get_signCost() << ", " << cost.get_varCost() << ", " << cost.get_specCost()
    179172                          << ", " << cost.get_referenceCost() << " )";
Note: See TracChangeset for help on using the changeset viewer.