ClockWork DB CoreAPI 1.0.48
Abstract Time Series and Storage/Management Library
Loading...
Searching...
No Matches
module_loader.hpp
1#ifndef HAVE_TOM__MODULE_LOADER_HPP
2#define HAVE_TOM__MODULE_LOADER_HPP
3
4#include <tom-util/defines.hpp>
5#include <tom-util/exceptions.hpp>
6#include <tom-util/scalar.hpp>
7
8#include <string>
9#include <map>
10#include <vector>
11#include <dirent.h>
12
13namespace tom {
14
15class TOM_UTIL_API dynamic_library
16{
17public:
18 typedef void * dynlib_t;
19
21 dynamic_library (const tom::string & name);
24 dynamic_library & operator= (const dynamic_library &);
25
26 const tom::string & name () const
27 {
28 return m_name;
29 }
30
31 template < typename Rt >
32 Rt loadSymbol (const tom::string & name);
33
34private:
35 void *
36 load_symbol( const tom::string & name );
37
38 tom::string m_name;
39 dynlib_t m_handle;
40
41};
42
43class TOM_UTIL_API module_loader
44{
45public:
46 typedef std::vector < tom::string > module_list;
47 typedef module_list::const_iterator module_list_iterator;
48
49 typedef std::map < tom::string, dynamic_library >module_map_type;
50 typedef module_map_type::const_iterator const_iterator;
51 typedef module_map_type::iterator iterator;
52 typedef module_map_type::key_type key_type;
53 typedef module_map_type::value_type value_type;
54
55 module_loader (const tom::string & directory);
56 virtual ~ module_loader ();
57
58 unsigned int
59 count () const
60 {
61 return m_modules.size ();
62 }
63 const_iterator
64 begin () const
65 {
66 return m_modules.begin ();
67 }
68 iterator
69 begin ()
70 {
71 return m_modules.begin ();
72 }
73 const_iterator
74 end () const
75 {
76 return m_modules.end ();
77 }
78 iterator
79 end ()
80 {
81 return m_modules.end ();
82 }
83
84protected:
85 virtual
87 load (const tom::string & module);
88
89 virtual
90 void
91 unload (const tom::string & module);
92
93 module_list_iterator
94 first_module () const
95 {
96 return m_module_list.begin ();
97 }
98 module_list_iterator
99 last_module () const
100 {
101 return m_module_list.end ();
102 }
103
104 tom::string m_directory;
105 module_map_type m_modules;
106 module_list m_module_list;
107
108private:
109 module_loader ();
110
111 void
112 init ();
113
114};
115
116class TOM_UTIL_API standard_module_loader:public module_loader
117{
118public:
119 standard_module_loader (const tom::string & directory);
120 virtual ~ standard_module_loader ();
121
122protected:
123
124private:
125
126};
127
128template < typename Rt >
129Rt
130dynamic_library::loadSymbol (const tom::string & name)
131{
132 return static_cast<Rt>( load_symbol(name) );
133}
134
135} // end tom namespace
136
137#endif
Definition module_loader.hpp:16
Definition module_loader.hpp:44
Definition module_loader.hpp:117
Definition value_types.hpp:96