Elm  1.0
ELM is a library providing generic data structures, OS-independent interface, plugins and XML.
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Plugger.h
1 /*
2  * Path class interface
3  *
4  * This file is part of OTAWA
5  * Copyright (c) 2005-12, IRIT UPS.
6  *
7  * OTAWA is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * OTAWA is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with OTAWA; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 #ifndef ELM_SYS_PLUGGER_H
22 #define ELM_SYS_PLUGGER_H
23 
24 #include <elm/PreIterator.h>
25 #include <elm/sys/Plugin.h>
26 #include <elm/genstruct/Vector.h>
27 #include <elm/sys/Directory.h>
28 #include <elm/sys/Path.h>
29 #include <elm/util/ErrorHandler.h>
30 
31 namespace elm { namespace sys {
32 
33 // Plugger class
34 class Plugger: public ErrorBase {
35  friend class Plugin;
36  friend class PluginManager;
37 public:
38  typedef enum error_t {
39  OK = 0,
46  } error_t;
47 
48 public:
49  Plugger(CString hook, const Version& plugger_version, String paths = "*");
50  virtual ~Plugger(void);
51  void addPath(String path);
52  void removePath(String path);
53  void resetPaths(void);
54  Plugin *plug(const string& path);
55  Plugin *plugFile(sys::Path path);
56  inline String hook(void) const;
57  string getLastError(void);
58 
59  // deprecated
60  virtual void onError(String message);
61  virtual void onWarning(String message);
62  error_t lastError(void);
64 
65  // Iterator class
66  class Iterator: public PreIterator<Iterator, String> {
67  Plugger& plugger;
69  int i;
70  int _path;
71  Directory::Iterator *file;
72  void go(void);
73  public:
74  Iterator(Plugger& _plugger);
75  ~Iterator(void);
76  bool ended(void) const;
77  String item(void) const;
78  void next(void);
79  Plugin *plug(void) const;
80  Path path(void) const;
81  };
82 
83  class PathIterator: public genstruct::Vector<string>::Iterator {
84  public:
85  inline PathIterator(const Plugger& plugger)
86  : genstruct::Vector<string>::Iterator(plugger.paths) { }
87  inline PathIterator(const PathIterator& iter)
88  : genstruct::Vector<string>::Iterator(iter) { }
89  };
90 
91 private:
92 
93  static genstruct::Vector<Plugger *> pluggers;
94  CString _hook;
95  Version per_vers;
98  error_t err;
99  static void leave(Plugin *plugin);
100  Plugin *plug(Plugin *plugin, void *handle);
101  inline genstruct::Vector<Plugin *>& statics(void);
102  void onError(error_level_t level, const string& message);
103  Plugin *lookELD(const Path& path, error_t& err);
104 
105  // portability functions
106  static void *link(sys::Path lib);
107  static void unlink(void *handle);
108  static void *lookSymbol(void *handle, cstring hook);
109  static void *lookLibrary(sys::Path lib, genstruct::Vector<string> rpath);
110  static string error(void);
111 };
112 
113 // Inlines
114 inline String Plugger::hook(void) const {
115  return _hook;
116 }
117 
118 inline genstruct::Vector<Plugin *>& Plugger::statics(void) {
119  return Plugin::static_plugins;
120 }
121 
122 } } // elm::sys
123 
124 #endif // ELM_SYS_PLUGGER_H
Definition: Plugger.h:40
Definition: CString.h:17
friend class Vector
Definition: Vector.h:44
Definition: PreIterator.h:29
PathIterator(const PathIterator &iter)
Definition: Plugger.h:87
Definition: Plugger.h:44
Plugger(CString hook, const Version &plugger_version, String paths="*")
Definition: system_Plugger.cpp:89
error_level_t
Definition: ErrorHandler.h:31
error_t
Definition: Plugger.h:38
~Iterator(void)
Definition: system_Plugger.cpp:638
Definition: Path.h:31
Definition: ErrorHandler.h:49
bool ended(void) const
Definition: system_Plugger.cpp:648
Plugin * plug(const string &path)
Definition: system_Plugger.cpp:176
String hook(void) const
Definition: Plugger.h:114
void next(void)
Definition: system_Plugger.cpp:684
string getLastError(void)
Definition: system_Plugger.cpp:493
Definition: Plugger.h:41
error_t lastError(void)
Definition: system_Plugger.cpp:471
PathIterator(const Plugger &plugger)
Definition: Plugger.h:85
Plugin * plug(void) const
Definition: system_Plugger.cpp:693
friend class PluginManager
Definition: Plugger.h:36
virtual void onWarning(String message)
Definition: system_Plugger.cpp:555
Iterator(Plugger &_plugger)
Definition: system_Plugger.cpp:625
void removePath(String path)
Definition: system_Plugger.cpp:157
Definition: Plugger.h:43
Definition: Directory.h:39
Definition: Plugger.h:83
Definition: Plugger.h:42
Plugin * plugFile(sys::Path path)
Definition: system_Plugger.cpp:365
String lastErrorMessage(void)
Definition: system_Plugger.cpp:482
Definition: Plugger.h:66
Definition: String.h:31
Path path(void) const
Definition: system_Plugger.cpp:673
Definition: Plugger.h:34
Definition: Plugger.h:45
Definition: Vector.h:35
void addPath(String path)
Definition: system_Plugger.cpp:148
String item(void) const
Definition: system_Plugger.cpp:657
Definition: Plugin.h:42
Definition: Version.h:30
virtual ~Plugger(void)
Definition: system_Plugger.cpp:127
void resetPaths(void)
Definition: system_Plugger.cpp:165
virtual void onError(String message)
Definition: system_Plugger.cpp:530
Definition: Plugger.h:39