//===-- UserID.h ------------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef liblldb_UserID_h_ #define liblldb_UserID_h_ #include "lldb/lldb-defines.h" #include "lldb/lldb-types.h" namespace lldb_private { class Stream; /// \class UserID UserID.h "lldb/Core/UserID.h" /// A mix in class that contains a generic user ID. /// /// UserID is designed as a mix in class that can contain an integer based /// unique identifier for a variety of objects in lldb. /// /// The value for this identifier is chosen by each parser plug-in. A value /// should be chosen that makes sense for each kind of object and should allow /// quick access to further and more in depth parsing. /// /// Symbol table entries can use this to store the original symbol table /// index, functions can use it to store the symbol table index or the /// DWARF offset. struct UserID { /// Construct with optional user ID. UserID(lldb::user_id_t uid = LLDB_INVALID_UID) : m_uid(uid) {} /// Destructor. ~UserID() {} /// Clears the object state. /// /// Clears the object contents back to a default invalid state. void Clear() { m_uid = LLDB_INVALID_UID; } /// Get accessor for the user ID. /// /// \return /// The user ID. lldb::user_id_t GetID() const { return m_uid; } /// Set accessor for the user ID. /// /// \param[in] uid /// The new user ID. void SetID(lldb::user_id_t uid) { m_uid = uid; } /// Unary predicate function object that can search for a matching user ID. /// /// Function object that can be used on any class that inherits from UserID: /// \code /// iterator pos; /// pos = std::find_if (coll.begin(), coll.end(), UserID::IDMatches(blockID)); /// \endcode class IDMatches { public: /// Construct with the user ID to look for. IDMatches(lldb::user_id_t uid) : m_uid(uid) {} /// Unary predicate function object callback. bool operator()(const UserID &rhs) const { return m_uid == rhs.GetID(); } private: // Member variables. const lldb::user_id_t m_uid; ///< The user ID we are looking for }; protected: // Member variables. lldb::user_id_t m_uid; ///< The user ID that uniquely identifies an object. }; inline bool operator==(const UserID &lhs, const UserID &rhs) { return lhs.GetID() == rhs.GetID(); } inline bool operator!=(const UserID &lhs, const UserID &rhs) { return lhs.GetID() != rhs.GetID(); } /// Stream the UserID object to a Stream. Stream &operator<<(Stream &strm, const UserID &uid); } // namespace lldb_private #endif // liblldb_UserID_h_