File: UIBreakpoint.hpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (74 lines) | stat: -rw-r--r-- 2,309 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef UIBREAKPOINT_HPP
#define UIBREAKPOINT_HPP

#include "JSON.h"
#include "clDebuggerBreakpoint.hpp"
#include "codelite_exports.h"

#include <functional>
#include <unordered_set>
#include <wx/string.h>

enum class UIBreakpointType {
    INVALID = -1,
    FUNCTION,
    SOURCE,
};

class WXDLLIMPEXP_CL UIBreakpoint
{
public:
    typedef std::unordered_set<UIBreakpoint> set_t;

protected:
    UIBreakpointType m_type = UIBreakpointType::INVALID;
    wxString m_file;
    int m_line = wxNOT_FOUND;
    wxString m_function;
    wxString m_condition;

public:
    UIBreakpoint();
    UIBreakpoint(const wxString& file, int line)
        : m_type(UIBreakpointType::SOURCE)
        , m_file(file)
        , m_line(line)
    {
    }
    ~UIBreakpoint();

    void SetFile(const wxString& file) { this->m_file = file; }
    void SetFunction(const wxString& function) { this->m_function = function; }
    void SetLine(int line) { this->m_line = line; }
    void SetType(UIBreakpointType type) { this->m_type = type; }
    const wxString& GetFile() const { return m_file; }
    const wxString& GetFunction() const { return m_function; }
    int GetLine() const { return m_line; }
    UIBreakpointType GetType() const { return m_type; }

    void SetCondition(const wxString& condition) { this->m_condition = condition; }
    const wxString& GetCondition() const { return m_condition; }

    bool SameAs(const UIBreakpoint& other) const;
    bool operator==(const UIBreakpoint& other) const { return SameAs(other); }

    wxString GetKey() const { return (wxString() << GetFile() << GetLine() << GetFunction()); }

    // aliases
    bool IsFunctionBreakpoint() const { return GetType() == UIBreakpointType::FUNCTION; }
    bool IsSourceBreakpoint() const { return GetType() == UIBreakpointType::SOURCE; }
    bool IsOk() const { return GetType() != UIBreakpointType::INVALID; }

    JSONItem To() const;
    void From(const JSONItem& json);
    bool From(const clDebuggerBreakpoint& bp);
};

// provide custom hash so we will be able to use UIBreakpoint with unordered_map/unordered_set et al
namespace std
{
template <> struct hash<UIBreakpoint> {
    std::size_t operator()(const UIBreakpoint& b) const { return hash<std::wstring>{}(b.GetKey().ToStdWstring()); }
};
} // namespace std
#endif // UIBREAKPOINT_HPP