/usr/include/openturns/LibraryLoader.hxx is in libopenturns-dev 1.2-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | // -*- C++ -*-
/**
* @file LibraryLoader.hxx
* @brief The class LibraryLoader loads and manages all dynamic libraries
*
* Copyright (C) 2005-2013 EDF-EADS-Phimeca
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* @author schueller
* @date 2012-04-18 17:56:46 +0200 (Wed, 18 Apr 2012)
*/
#ifndef OPENTURNS_LIBRARYLOADER_HXX
#define OPENTURNS_LIBRARYLOADER_HXX
#include <iostream> // for std::ostream
#include <map> // for std::map
#include "OStream.hxx"
#include "Library.hxx"
#include "Lockable.hxx"
BEGIN_NAMESPACE_OPENTURNS
/**
* @class LibraryLoader
* @brief Loads and manages all dynamic libraries
* @ingroup Wrapper
*
* The LibraryLoader class acts as a general factory to load and unload
* dynamic libraries (Unix shared objects or Windows DLL) on demand.
* The class is based on the 'singleton' design pattern.
* Libraries are loaded only once and handles are stored in a map.
* @see Library
* @todo Library reference counting
* @toto Release method definition and implementation
*/
class LibraryLoader
: public Lockable
{
CLASSNAME;
public:
/** The accessor to the Singleton element */
static LibraryLoader & GetInstance();
/* Destructor */
~LibraryLoader();
/* String converter */
String __repr__() const;
String __str__(const String & offset = "") const;
/** @brief Loads the library at path
* This method takes the path, either relative or absolute, to a dynamic loadable object
* and tries to lod it. If the object was already loaded, the previous reference is returned.
* It not the object is searched for on the filesystem. If it can't be found a
* FileNotFoundException is raised. If it is found but can't be loaded a DynamicLibraryException
* is raised.
* @throw FileNotFoundException
* @throw DynamicLibraryException
* @param path A path to the object to be loaded
* @result An handle to the Library usable afterwars by other Open TURNS objects
*/
Library load(const FileName & path);
protected:
private:
/**
* The map that stores all the handles on loaded dynamic libraries
* Key is the path of the library, value is the handle onto the library.
* This map is protected against concurrent accesses
*/
typedef std::map<FileName, LibraryHandle> CatalogType;
CatalogType libraryCatalog_;
/** The unique instance of the Singleton model */
static LibraryLoader * p_instance_;
/** Default constructor */
LibraryLoader();
/** Copy constructor */
LibraryLoader(const LibraryLoader & other);
/** Assignment */
LibraryLoader & operator =(const LibraryLoader & other);
}
; /* class LibraryLoader */
/**
* @fn std::ostream & operator <<(std::ostream & os, const LibraryLoader & obj)
* @brief Output stream converter
* @param os A STL output stream object
* @param obj The object read by \em os
* @return A reference to \em os
*/
std::ostream & operator <<(std::ostream & os, const LibraryLoader & obj);
OStream & operator <<(OStream & OS, const LibraryLoader & obj);
END_NAMESPACE_OPENTURNS
#endif /* OPENTURNS_LIBRARYLOADER_HXX */
|