167653ee0SReid Kleckner //===- GUID.h ---------------------------------------------------*- C++ -*-===// 267653ee0SReid Kleckner // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 667653ee0SReid Kleckner // 767653ee0SReid Kleckner //===----------------------------------------------------------------------===// 867653ee0SReid Kleckner 967653ee0SReid Kleckner #ifndef LLVM_DEBUGINFO_CODEVIEW_GUID_H 1067653ee0SReid Kleckner #define LLVM_DEBUGINFO_CODEVIEW_GUID_H 1167653ee0SReid Kleckner 1267653ee0SReid Kleckner #include <cstdint> 1367653ee0SReid Kleckner #include <cstring> 1467653ee0SReid Kleckner 1567653ee0SReid Kleckner namespace llvm { 1667653ee0SReid Kleckner class raw_ostream; 1767653ee0SReid Kleckner 1867653ee0SReid Kleckner namespace codeview { 1967653ee0SReid Kleckner 2067653ee0SReid Kleckner /// This represents the 'GUID' type from windows.h. 2167653ee0SReid Kleckner struct GUID { 2267653ee0SReid Kleckner uint8_t Guid[16]; 2367653ee0SReid Kleckner }; 2467653ee0SReid Kleckner 2567653ee0SReid Kleckner inline bool operator==(const GUID &LHS, const GUID &RHS) { 2667653ee0SReid Kleckner return 0 == ::memcmp(LHS.Guid, RHS.Guid, sizeof(LHS.Guid)); 2767653ee0SReid Kleckner } 2867653ee0SReid Kleckner 29651db91cSReid Kleckner inline bool operator<(const GUID &LHS, const GUID &RHS) { 30651db91cSReid Kleckner return ::memcmp(LHS.Guid, RHS.Guid, sizeof(LHS.Guid)) < 0; 31651db91cSReid Kleckner } 32651db91cSReid Kleckner 33651db91cSReid Kleckner inline bool operator<=(const GUID &LHS, const GUID &RHS) { 34651db91cSReid Kleckner return ::memcmp(LHS.Guid, RHS.Guid, sizeof(LHS.Guid)) <= 0; 35651db91cSReid Kleckner } 36651db91cSReid Kleckner 37651db91cSReid Kleckner inline bool operator>(const GUID &LHS, const GUID &RHS) { 38651db91cSReid Kleckner return !(LHS <= RHS); 39651db91cSReid Kleckner } 40651db91cSReid Kleckner 41651db91cSReid Kleckner inline bool operator>=(const GUID &LHS, const GUID &RHS) { 42651db91cSReid Kleckner return !(LHS < RHS); 43651db91cSReid Kleckner } 44651db91cSReid Kleckner 45651db91cSReid Kleckner inline bool operator!=(const GUID &LHS, const GUID &RHS) { 46651db91cSReid Kleckner return !(LHS == RHS); 47651db91cSReid Kleckner } 48651db91cSReid Kleckner 4967653ee0SReid Kleckner raw_ostream &operator<<(raw_ostream &OS, const GUID &Guid); 5067653ee0SReid Kleckner 5167653ee0SReid Kleckner } // namespace codeview 5267653ee0SReid Kleckner } // namespace llvm 5367653ee0SReid Kleckner 5467653ee0SReid Kleckner #endif 55