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