1254721Semaste//===-- AddressResolver.h ---------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_AddressResolver_h_
11254721Semaste#define liblldb_AddressResolver_h_
12254721Semaste
13254721Semaste#include <vector>
14254721Semaste
15254721Semaste// C Includes
16254721Semaste// C++ Includes
17254721Semaste// Other libraries and framework includes
18254721Semaste// Project includes
19254721Semaste#include "lldb/lldb-private.h"
20254721Semaste#include "lldb/Core/Address.h"
21254721Semaste#include "lldb/Core/AddressRange.h"
22254721Semaste#include "lldb/Host/FileSpec.h"
23254721Semaste#include "lldb/Core/SearchFilter.h"
24254721Semaste#include "lldb/Core/ConstString.h"
25254721Semaste
26254721Semastenamespace lldb_private {
27254721Semaste
28254721Semaste//----------------------------------------------------------------------
29254721Semaste/// @class AddressResolver AddressResolver.h "lldb/Core/AddressResolver.h"
30254721Semaste/// @brief This class works with SearchFilter to resolve function names and
31254721Semaste/// source file locations to their concrete addresses.
32254721Semaste//----------------------------------------------------------------------
33254721Semaste
34254721Semaste//----------------------------------------------------------------------
35254721Semaste/// General Outline:
36254721Semaste/// The AddressResolver is a Searcher.  In that protocol,
37254721Semaste/// the SearchFilter asks the question "At what depth of the symbol context
38254721Semaste/// descent do you want your callback to get called?" of the filter.  The resolver
39254721Semaste/// answers this question (in the GetDepth method) and provides the resolution callback.
40254721Semaste//----------------------------------------------------------------------
41254721Semaste
42254721Semasteclass AddressResolver :
43254721Semaste   public Searcher
44254721Semaste{
45254721Semastepublic:
46254721Semaste
47254721Semaste    typedef enum
48254721Semaste    {
49254721Semaste        Exact,
50254721Semaste        Regexp,
51254721Semaste        Glob
52254721Semaste    } MatchType;
53254721Semaste
54254721Semaste
55254721Semaste    AddressResolver ();
56254721Semaste
57254721Semaste    virtual
58254721Semaste    ~AddressResolver ();
59254721Semaste
60254721Semaste    virtual void
61254721Semaste    ResolveAddress (SearchFilter &filter);
62254721Semaste
63254721Semaste    virtual void
64254721Semaste    ResolveAddressInModules (SearchFilter &filter,
65254721Semaste                             ModuleList &modules);
66254721Semaste
67254721Semaste    virtual void
68254721Semaste    GetDescription (Stream *s) = 0;
69254721Semaste
70254721Semaste    std::vector<AddressRange> &
71254721Semaste    GetAddressRanges ();
72254721Semaste
73254721Semaste    size_t
74254721Semaste    GetNumberOfAddresses ();
75254721Semaste
76254721Semaste    AddressRange &
77254721Semaste    GetAddressRangeAtIndex (size_t idx);
78254721Semaste
79254721Semasteprotected:
80254721Semaste
81254721Semaste    std::vector<AddressRange> m_address_ranges;
82254721Semaste
83254721Semasteprivate:
84254721Semaste    DISALLOW_COPY_AND_ASSIGN(AddressResolver);
85254721Semaste};
86254721Semaste
87254721Semaste} // namespace lldb_private
88254721Semaste
89254721Semaste#endif  // liblldb_AddressResolver_h_
90