libcommonc++  0.7
LoadableModule.h++
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------------
2  commonc++ - A C++ Common Class Library
3  Copyright (C) 2005-2014 Mark A Lindner
4 
5  This file is part of commonc++.
6 
7  This library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Library General Public
9  License as published by the Free Software Foundation; either
10  version 2 of the License, or (at your option) any later version.
11 
12  This library 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 GNU
15  Library General Public License for more details.
16 
17  You should have received a copy of the GNU Library General Public
18  License along with this library; if not, write to the Free
19  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  ---------------------------------------------------------------------------
21 */
22 
23 #ifndef __ccxx_LoadableModule_hxx
24 #define __ccxx_LoadableModule_hxx
25 
26 #include <commonc++/Common.h++>
28 #include <commonc++/String.h++>
29 #include <commonc++/Version.h++>
30 
31 namespace ccxx {
32 
42 {
43  public:
44 
52  LoadableModule(const String& path = String::null);
53 
55  ~LoadableModule();
56 
63  void open();
64 
66  void close();
67 
69  inline bool isOpen() const
70  { return(_open); }
71 
79  void* lookup(const char* symbol);
80 
88  void* lookup(const String& symbol);
89 
97  inline void* operator[](const char* symbol)
98  { return(lookup(symbol)); }
99 
107  inline void* operator[](const String& symbol)
108  { return(lookup(symbol)); }
109 
114  inline void setPath(const String& path)
115  { if(!_open) _path = path; }
116 
118  inline String getPath() const
119  { return(_path); }
120 
126  static String getExtension();
127 
133  static String getPrefix();
134 
144  static String fileNameForStem(const String& stem);
145 
159  static String fileNameForStem(const String& stem, const Version& version);
160 
167  static bool isLoadableModuleFile(const String& fileName);
168 
169  private:
170 
171  String _path;
172  bool _open;
173 
174 #ifdef CCXX_OS_WINDOWS
175  HINSTANCE _handle;
176 #else
177  void* _handle;
178 #endif
179 
181 };
182 
183 } // namespace ccxx
184 
185 #endif // __ccxx_LoadableModule_hxx
A class representing an interface version number.
Definition: Version.h++:57
bool isOpen() const
Determine if the object file has been opened.
Definition: LoadableModule.h++:69
void * operator[](const String &symbol)
Look up a symbol within the loadable object.
Definition: LoadableModule.h++:107
#define COMMONCPP_API
Definition: Common.h++:126
A flexible, reference counted, copy-on-write, thread-safe, nullable string.
Definition: String.h++:50
String getPath() const
Get the object file path.
Definition: LoadableModule.h++:118
void setPath(const String &path)
Set the object file path.
Definition: LoadableModule.h++:114
#define CCXX_COPY_DECLS(CLASS)
Inlines declarations of a copy constructor and assignment operator for the class CLASS.
Definition: Common.h++:295
static const String null
The null string.
Definition: String.h++:1128
Definition: AllocationMap.c++:25
An encapsulation of a dynamically loadable module, such as a shared library or object file on UNIX sy...
Definition: LoadableModule.h++:41
void * operator[](const char *symbol)
Look up a symbol within the loadable object.
Definition: LoadableModule.h++:97