xref: /llvm-project/llvm/include/llvm/DebugInfo/CodeView/GUID.h (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
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