1 //===- GUID.h ---------------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_DEBUGINFO_CODEVIEW_GUID_H 10 #define LLVM_DEBUGINFO_CODEVIEW_GUID_H 11 12 #include "llvm/Support/Compiler.h" 13 #include <cstdint> 14 #include <cstring> 15 16 namespace llvm { 17 class raw_ostream; 18 19 namespace codeview { 20 21 /// This represents the 'GUID' type from windows.h. 22 struct GUID { 23 uint8_t Guid[16]; 24 }; 25 26 inline bool operator==(const GUID &LHS, const GUID &RHS) { 27 return 0 == ::memcmp(LHS.Guid, RHS.Guid, sizeof(LHS.Guid)); 28 } 29 30 inline bool operator<(const GUID &LHS, const GUID &RHS) { 31 return ::memcmp(LHS.Guid, RHS.Guid, sizeof(LHS.Guid)) < 0; 32 } 33 34 inline bool operator<=(const GUID &LHS, const GUID &RHS) { 35 return ::memcmp(LHS.Guid, RHS.Guid, sizeof(LHS.Guid)) <= 0; 36 } 37 38 inline bool operator>(const GUID &LHS, const GUID &RHS) { 39 return !(LHS <= RHS); 40 } 41 42 inline bool operator>=(const GUID &LHS, const GUID &RHS) { 43 return !(LHS < RHS); 44 } 45 46 inline bool operator!=(const GUID &LHS, const GUID &RHS) { 47 return !(LHS == RHS); 48 } 49 50 LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const GUID &Guid); 51 52 } // namespace codeview 53 } // namespace llvm 54 55 #endif 56