source: trunk/nv/library.hh @ 16

Last change on this file since 16 was 16, checked in by melon, 12 years ago

Added library_error destructor that promises to throw no exceptions.

File size: 2.2 KB
RevLine 
[4]1// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
2// http://chaosforge.org/
3//
4// This file is part of NV Libraries.
5// For conditions of distribution and use, see copyright notice in nv.hh
6
7/**
8 * @file library.hh
9 * @author Kornel Kisielewicz
10 * @brief Implements a dynamic library class
11 */
12
13#ifndef NV_LIBRARY_HH
14#define NV_LIBRARY_HH
15
16#include <nv/exception.hh>
17#include <string>
18
19namespace nv
20{
21        /**
22         * library
23         * @brief Class representing a dynamically loaded library
24         */
25        class library
26        {
27        public:
28
29                /**
30                 * Library constructor
31                 *
32                 * Opens the library
33                 */
34                library( const std::string& name );
35
36                /**
37                 * Opens the library
38                 */
39                void open( const std::string& name );
40
41                /**
42                 * Returns library name
43                 */
44                const std::string& get_name() const;
45
46                /**
47                 * Get symbol from library
48                 */
49                void* get( const std::string& symbol );
50
51                /**
52                 * Destructor
53                 *
54                 * Closes the library if open.
55                 */
56                ~library();
57
58                /**
59                 * Returns library loading error if present
60                 *
61                 * Exact implementation depends on platform/compiler.
62                 */
63                static std::string get_error();
64
65        protected:
66                /**
67                 * Opens the library
68                 *
69                 * Opens the library and prepares it for getting symbols.
70                 * Needs to be done before any get call.
71                 */
72                void open();
73
74                /**
75                 * @brief Closes the library
76                 *
77                 * Closes the library. Any further get calls or operations on
78                 * received symbols are invalid!
79                 */
80                void close();
81
82                /// Library handle
83                void* m_handle;
84
85                /// Library name
86                std::string m_name;
87
88        };  // class Library
89
90        class library_error : public runtime_error
91        {
92                /// Library name
93                std::string m_name;
94        public:
95                /**
96                 * Constructor
97                 */
98                library_error( const std::string& message, const std::string& name )
99                        : runtime_error( "Library (" + name + ") : " + message + " [ " + library::get_error() + " ]"), m_name( name )
100                {
101                }
102
103                /**
[16]104                 * Destructor.
105                 *
106                 * It must not throw any exceptions because of the inheritance
107                 */
108                ~library_error() throw() {}
109
110                /**
[4]111                 * Returns library name
112                 */
113                const std::string& get_name()
114                {
115                        return m_name;
116                }
117        };
118
119} // namespace nv
120
121#endif // NV_LIBRARY_HH
Note: See TracBrowser for help on using the repository browser.