124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- UserID.h ------------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_UserID_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_UserID_h_ 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class UserID UserID.h "lldb/Core/UserID.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A mix in class that contains a generic user ID. 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// UserID is desinged as a mix in class that can contain an integer 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// based unique identifier for a varietly of objects in lldb. 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The value for this identifier is chosen by each parser plug-in. A 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// value should be chosen that makes sense for each kind of object 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// should and allows quick access to further and more in depth parsing. 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Symbol table entries can use this to store the original symbol table 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// index, functions can use it to store the symbol table index or the 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// DWARF offset. 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct UserID 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with optional user ID. 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer UserID (lldb::user_id_t uid = LLDB_INVALID_UID) : m_uid(uid) {} 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4377e67a51acb825d79d25be687c085833713d5205Greg Clayton ~UserID () 4477e67a51acb825d79d25be687c085833713d5205Greg Clayton { 4577e67a51acb825d79d25be687c085833713d5205Greg Clayton } 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clears the object state. 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clears the object contents back to a default invalid state. 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 53726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer Clear () { m_uid = LLDB_INVALID_UID; } 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the user ID. 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The user ID. 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t 62726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer GetID () const { return m_uid; } 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set accessor for the user ID. 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] uid 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The new user ID. 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 71726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer SetID (lldb::user_id_t uid) { m_uid = uid; } 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Unary predicate function object that can search for a matching 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// user ID. 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Function object that can be used on any class that inherits 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from UserID: 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \code 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// iterator pos; 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pos = std::find_if (coll.begin(), coll.end(), UserID::IDMatches(blockID)); 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \endcode 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class IDMatches 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //-------------------------------------------------------------- 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the user ID to look for. 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //-------------------------------------------------------------- 90726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer IDMatches (lldb::user_id_t uid) : m_uid(uid) {} 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //-------------------------------------------------------------- 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Unary predicate function object callback. 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //-------------------------------------------------------------- 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 96726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer operator () (const UserID& rhs) const { return m_uid == rhs.GetID(); } 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //-------------------------------------------------------------- 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //-------------------------------------------------------------- 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::user_id_t m_uid; ///< The user ID we are looking for 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t m_uid; ///< The user ID that uniquely identifies an object. 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramerinline bool operator== (const UserID& lhs, const UserID& rhs) 114726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer{ 115726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer return lhs.GetID() == rhs.GetID(); 116726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer} 117726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer 118726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramerinline bool operator!= (const UserID& lhs, const UserID& rhs) 119726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer{ 120726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer return lhs.GetID() != rhs.GetID(); 121726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer} 122726cccbbe0087d5269c465da5433cbf1269700b0Benjamin Kramer 12321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham//-------------------------------------------------------------- 12421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham/// Stream the UserID object to a Stream. 12521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham//-------------------------------------------------------------- 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerStream& operator << (Stream& strm, const UserID& uid); 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_UserID_h_ 131