124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- BreakpointLocationCollection.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#ifndef liblldb_BreakpointLocationCollection_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_BreakpointLocationCollection_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass BreakpointLocationCollection
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    BreakpointLocationCollection();
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~BreakpointLocationCollection();
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Add the breakpoint \a bp_loc_sp to the list.
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] bp_sp
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Shared pointer to the breakpoint location that will get added
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     to the list.
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns breakpoint location id.
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Add (const lldb::BreakpointLocationSP& bp_loc_sp);
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Removes the breakpoint location given by \b breakID from this
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// list.
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] break_id
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint index to remove.
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] break_loc_id
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint location index in break_id to remove.
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b true if the breakpoint was in the list.
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
5654e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    Remove (lldb::break_id_t break_id, lldb::break_id_t break_loc_id);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Returns a shared pointer to the breakpoint location with id \a
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// breakID.
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] break_id
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint  ID to seek for.
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] break_loc_id
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint location ID in \a break_id to seek for.
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A shared pointer to the breakpoint.  May contain a NULL
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     pointer if the breakpoint doesn't exist.
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::BreakpointLocationSP
7354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id);
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Returns a shared pointer to the breakpoint location with id \a
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// breakID, const version.
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] breakID
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint location ID to seek for.
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] break_loc_id
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint location ID in \a break_id to seek for.
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A shared pointer to the breakpoint.  May contain a NULL
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     pointer if the breakpoint doesn't exist.
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb::BreakpointLocationSP
9054e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const;
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Returns a shared pointer to the breakpoint location with index
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// \a i.
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] i
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint location index to seek for.
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A shared pointer to the breakpoint.  May contain a NULL
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     pointer if the breakpoint doesn't exist.
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::BreakpointLocationSP
10436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetByIndex (size_t i);
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Returns a shared pointer to the breakpoint location with index
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// \a i, const version.
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] i
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The breakpoint location index to seek for.
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A shared pointer to the breakpoint.  May contain a NULL
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     pointer if the breakpoint doesn't exist.
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb::BreakpointLocationSP
11836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetByIndex (size_t i) const;
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Returns the number of elements in this breakpoint location list.
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @result
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of elements.
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSize() const { return m_break_loc_collection.size(); }
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Enquires of all the breakpoint locations in this list whether
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// we should stop at a hit at \a breakID.
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] context
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///    This contains the information about this stop.
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] breakID
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///    This break ID that we hit.
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///    \b true if we should stop, \b false otherwise.
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ShouldStop (StoppointCallbackContext *context);
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Print a description of the breakpoint locations in this list
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// to the stream \a s.
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] s
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The stream to which to print the description.
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] level
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The description level that indicates the detail level to
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     provide.
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see lldb::DescriptionLevel
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void GetDescription (Stream *s, lldb::DescriptionLevel level);
1593c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham
1603c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    //------------------------------------------------------------------
1613c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    /// Check whether this collection of breakpoint locations have any
1623c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    /// thread specifiers, and if yes, is \a thread_id contained in any
1633c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    /// of these specifiers.
1643c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    ///
1653c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    /// @param[in] thread
1663c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    ///     The thread against which to test.
1673c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    ///
1683c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    /// return
1693c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    ///     \b true if the collection contains at least one location that
1703c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    ///     would be valid for this thread, false otherwise.
1713c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    //------------------------------------------------------------------
1723c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham    bool ValidForThisThread (Thread *thread);
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
174090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    //------------------------------------------------------------------
175090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    /// Tell whether ALL the breakpoints in the location collection are internal.
176090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    ///
177090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    /// @result
178090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    ///     \b true if all breakpoint locations are owned by internal breakpoints,
179090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    ///     \b false otherwise.
180090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    //------------------------------------------------------------------
181090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    bool IsInternal() const;
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Classes that inherit from BreakpointLocationCollection can see
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // and modify these
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // For BreakpointLocationCollection only
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector<lldb::BreakpointLocationSP> collection;
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    collection::iterator
19854e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    GetIDPairIterator(lldb::break_id_t break_id, lldb::break_id_t break_loc_id);
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    collection::const_iterator
20154e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    GetIDPairConstIterator(lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const;
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    collection m_break_loc_collection;
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_BreakpointLocationCollection_h_
210