1//===-- AddressResolver.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 liblldb_AddressResolver_h_
11#define liblldb_AddressResolver_h_
12
13#include <vector>
14
15// C Includes
16// C++ Includes
17// Other libraries and framework includes
18// Project includes
19#include "lldb/lldb-private.h"
20#include "lldb/Core/Address.h"
21#include "lldb/Core/AddressRange.h"
22#include "lldb/Host/FileSpec.h"
23#include "lldb/Core/SearchFilter.h"
24#include "lldb/Core/ConstString.h"
25
26namespace lldb_private {
27
28//----------------------------------------------------------------------
29/// @class AddressResolver AddressResolver.h "lldb/Core/AddressResolver.h"
30/// @brief This class works with SearchFilter to resolve function names and
31/// source file locations to their concrete addresses.
32//----------------------------------------------------------------------
33
34//----------------------------------------------------------------------
35/// General Outline:
36/// The AddressResolver is a Searcher.  In that protocol,
37/// the SearchFilter asks the question "At what depth of the symbol context
38/// descent do you want your callback to get called?" of the filter.  The resolver
39/// answers this question (in the GetDepth method) and provides the resolution callback.
40//----------------------------------------------------------------------
41
42class AddressResolver :
43   public Searcher
44{
45public:
46
47    typedef enum
48    {
49        Exact,
50        Regexp,
51        Glob
52    } MatchType;
53
54
55    AddressResolver ();
56
57    virtual
58    ~AddressResolver ();
59
60    virtual void
61    ResolveAddress (SearchFilter &filter);
62
63    virtual void
64    ResolveAddressInModules (SearchFilter &filter,
65                             ModuleList &modules);
66
67    virtual void
68    GetDescription (Stream *s) = 0;
69
70    std::vector<AddressRange> &
71    GetAddressRanges ();
72
73    size_t
74    GetNumberOfAddresses ();
75
76    AddressRange &
77    GetAddressRangeAtIndex (size_t idx);
78
79protected:
80
81    std::vector<AddressRange> m_address_ranges;
82
83private:
84    DISALLOW_COPY_AND_ASSIGN(AddressResolver);
85};
86
87} // namespace lldb_private
88
89#endif  // liblldb_AddressResolver_h_
90