DynamicLibrary.h revision 6d101887bb427b3c879c0c06775ab4dcb1cd265b
1//===-- DynamicLibrary.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_DynamicLibrary_h_
11#define liblldb_DynamicLibrary_h_
12
13#include "lldb/Host/FileSpec.h"
14#include "lldb/Host/Host.h"
15
16namespace lldb_private {
17
18class DynamicLibrary
19{
20public:
21    DynamicLibrary (const FileSpec& spec, uint32_t options = Host::eDynamicLibraryOpenOptionLazy |
22                                                             Host::eDynamicLibraryOpenOptionLocal |
23                                                             Host::eDynamicLibraryOpenOptionLimitGetSymbol);
24
25    ~DynamicLibrary ();
26
27    template <typename T = void*>
28    T GetSymbol (const char* name)
29    {
30        Error err;
31        if (!m_handle)
32            return (T)NULL;
33        void* symbol = Host::DynamicLibraryGetSymbol (m_handle, name, err);
34        if (!symbol)
35            return (T)NULL;
36        return (T)symbol;
37    }
38
39private:
40    lldb_private::FileSpec m_filespec;
41    void* m_handle;
42
43    DISALLOW_COPY_AND_ASSIGN (DynamicLibrary);
44};
45
46} // namespace lldb_private
47
48#endif  // liblldb_DynamicLibrary_h_
49