text: // Copyright 2019 ZTE corporation. All Rights Reserved.
  // SPDX-License-Identifier: Apache-2.0
  
  #ifndef H41C78ACD_06D8_4B41_A442_24F761B9DBE9
  #define H41C78ACD_06D8_4B41_A442_24F761B9DBE9
  
  ////////////////////////////////////////////////////////////////////////////////
  #define DECL_EQUALS(cls)                 \
    bool operator!=(const cls& rhs) const; \
    bool operator==(const cls& rhs) const
  
  ////////////////////////////////////////////////////////////////////////////////
  #define FIELD_EQ(name) this->name == rhs.name
  #define FIELD_LT(name) this->name < rhs.name
  
  ////////////////////////////////////////////////////////////////////////////////
  #define SUPER_EQ(super) static_cast<const super&>(*this) == rhs
  #define SUPER_LT(super) static_cast<const super&>(*this) < rhs
  
  //////////////////////////////////////////////////////////////
  #define DEF_EQUALS(cls)                        \
    bool cls::operator!=(const cls& rhs) const { \
      return !(*this == rhs);                    \
    }                                            \
    bool cls::operator==(const cls& rhs) const
  
  ////////////////////////////////////////////////////////////////////////////////
  #define INLINE_EQUALS(cls)                \
    bool operator!=(const cls& rhs) const { \
      return !(*this == rhs);               \
    }                                       \
    bool operator==(const cls& rhs) const
  
  ////////////////////////////////////////////////////////////////////////////////
  #define DECL_LESS(cls)               \
    bool operator<(const cls&) const;  \
    bool operator>(const cls&) const;  \
    bool operator<=(const cls&) const; \
    bool operator>=(const cls&) const
  
  ////////////////////////////////////////////////////////////////////////////////
  #define DEF_LESS(cls)                          \
    bool cls::operator>(const cls& rhs) const {  \
      return !(*this <= rhs);                    \
    }                                            \
    bool cls::operator>=(const cls& rhs) const { \
      return !(*this < rhs);                     \
    }                                            \
    bool cls::operator<=(const cls& rhs) const { \
      return (*this < rhs) || (*this == rhs);    \
    }                                            \
    bool cls::operator<(const cls& rhs) const
  
  ////////////////////////////////////////////////////////////////////////////////
  #define INLINE_LESS(cls)                    \
    bool operator>(const cls& rhs) const {    \
      return !(*this <= rhs);                 \
    }                                         \
    bool operator>=(const cls& rhs) const {   \
      return !(*this < rhs);                  \
    }                                         \
    bool operator<=(const cls& rhs) const {   \
      return (*this < rhs) || (*this == rhs); \
    }                                         \
    bool operator<(const cls& rhs) const
  
  #endif
  