DynamicRegisterInfo.h revision 263363
1//===-- DynamicRegisterInfo.h -----------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef lldb_DynamicRegisterInfo_h_
11#define lldb_DynamicRegisterInfo_h_
12
13// C Includes
14// C++ Includes
15#include <vector>
16#include <map>
17
18// Other libraries and framework includes
19// Project includes
20#include "lldb/lldb-private.h"
21#include "lldb/Core/ConstString.h"
22
23class DynamicRegisterInfo
24{
25public:
26    DynamicRegisterInfo ();
27
28    DynamicRegisterInfo (const lldb_private::PythonDictionary &dict,
29                         lldb::ByteOrder byte_order);
30
31    virtual
32    ~DynamicRegisterInfo ();
33
34    size_t
35    SetRegisterInfo (const lldb_private::PythonDictionary &dict,
36                     lldb::ByteOrder byte_order);
37
38    void
39    AddRegister (lldb_private::RegisterInfo &reg_info,
40                 lldb_private::ConstString &reg_name,
41                 lldb_private::ConstString &reg_alt_name,
42                 lldb_private::ConstString &set_name);
43
44    void
45    Finalize ();
46
47    size_t
48    GetNumRegisters() const;
49
50    size_t
51    GetNumRegisterSets() const;
52
53    size_t
54    GetRegisterDataByteSize() const;
55
56    const lldb_private::RegisterInfo *
57    GetRegisterInfoAtIndex (uint32_t i) const;
58
59    const lldb_private::RegisterSet *
60    GetRegisterSet (uint32_t i) const;
61
62    uint32_t
63    GetRegisterSetIndexByName (lldb_private::ConstString &set_name, bool can_create);
64
65    uint32_t
66    ConvertRegisterKindToRegisterNumber (uint32_t kind, uint32_t num) const;
67
68    void
69    Dump () const;
70
71    void
72    Clear();
73
74protected:
75    //------------------------------------------------------------------
76    // Classes that inherit from DynamicRegisterInfo can see and modify these
77    //------------------------------------------------------------------
78    typedef std::vector <lldb_private::RegisterInfo> reg_collection;
79    typedef std::vector <lldb_private::RegisterSet> set_collection;
80    typedef std::vector <uint32_t> reg_num_collection;
81    typedef std::vector <reg_num_collection> set_reg_num_collection;
82    typedef std::vector <lldb_private::ConstString> name_collection;
83    typedef std::map<uint32_t, reg_num_collection> reg_to_regs_map;
84
85    lldb_private::RegisterInfo *
86    GetRegisterInfo (const lldb_private::ConstString &reg_name);
87
88    reg_collection m_regs;
89    set_collection m_sets;
90    set_reg_num_collection m_set_reg_nums;
91    name_collection m_set_names;
92    reg_to_regs_map m_value_regs_map;
93    reg_to_regs_map m_invalidate_regs_map;
94    size_t m_reg_data_byte_size;   // The number of bytes required to store all registers
95    bool m_finalized;
96};
97
98#endif  // lldb_DynamicRegisterInfo_h_
99