Serenity Operating System
1/*
2 * Copyright (c) 2020, Luke Wilde <lukew@serenityos.org>
3 * Copyright (c) 2022, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <AK/Vector.h>
11#include <LibGUI/Model.h>
12#include <sys/arch/regs.h>
13
14namespace HackStudio {
15
16struct RegisterData {
17 DeprecatedString name;
18 FlatPtr value;
19 bool changed { false };
20};
21
22class RegistersModel final : public GUI::Model {
23public:
24 static RefPtr<RegistersModel> create(PtraceRegisters const& regs)
25 {
26 return adopt_ref(*new RegistersModel(regs));
27 }
28
29 static RefPtr<RegistersModel> create(PtraceRegisters const& current_regs, PtraceRegisters const& previous_regs)
30 {
31 return adopt_ref(*new RegistersModel(current_regs, previous_regs));
32 }
33
34 enum Column {
35 Register,
36 Value,
37 __Count
38 };
39
40 virtual ~RegistersModel() override = default;
41
42 virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
43 virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; }
44 virtual DeprecatedString column_name(int) const override;
45 virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
46
47 PtraceRegisters const& raw_registers() const { return m_raw_registers; }
48
49private:
50 explicit RegistersModel(PtraceRegisters const& regs);
51 RegistersModel(PtraceRegisters const& current_regs, PtraceRegisters const& previous_regs);
52
53 PtraceRegisters m_raw_registers;
54 Vector<RegisterData> m_registers;
55};
56
57}