diff --git a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C index 641a051a41d59da9b35ec196c244d2320fd1679b..2c64282612975077b59f46a5c618c376291e56d8 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C +++ b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -79,104 +79,92 @@ Foam::dlLibraryTable::~dlLibraryTable() bool Foam::dlLibraryTable::open ( - const fileName& functionLibName, + const fileName& libName, const bool verbose ) { - if (functionLibName.size()) + if (libName.empty()) { - void* functionLibPtr = dlOpen - ( - fileName(functionLibName).expand(), - verbose - ); + return false; + } - if (debug) - { - InfoInFunction - << "Opened " << functionLibName - << " resulting in handle " << uintptr_t(functionLibPtr) << endl; - } + void* ptr = dlOpen(fileName(libName).expand(), verbose); - if (!functionLibPtr) - { - if (verbose) - { - WarningInFunction - << "could not load " << functionLibName - << endl; - } + if (debug) + { + InfoInFunction + << "Opened " << libName + << " resulting in handle " << uintptr_t(ptr) << endl; + } - return false; - } - else - { - libPtrs_.append(functionLibPtr); - libNames_.append(functionLibName); - return true; - } + if (ptr) + { + libPtrs_.append(ptr); + libNames_.append(libName); + return true; } - else + + if (verbose) { - return false; + WarningInFunction + << "could not load " << libName + << endl; } + + return false; } bool Foam::dlLibraryTable::close ( - const fileName& functionLibName, + const fileName& libName, const bool verbose ) { label index = -1; forAllReverse(libNames_, i) { - if (libNames_[i] == functionLibName) + if (libName == libNames_[i]) { index = i; break; } } - if (index != -1) + if (index == -1) { - if (debug) - { - InfoInFunction - << "Closing " << functionLibName - << " with handle " << uintptr_t(libPtrs_[index]) << endl; - } + return false; + } - bool ok = dlClose(libPtrs_[index]); + if (debug) + { + InfoInFunction + << "Closing " << libName + << " with handle " << uintptr_t(libPtrs_[index]) << endl; + } - libPtrs_[index] = nullptr; - libNames_[index] = fileName::null; + const bool ok = dlClose(libPtrs_[index]); - if (!ok) - { - if (verbose) - { - WarningInFunction - << "could not close " << functionLibName - << endl; - } - - return false; - } + libPtrs_[index] = nullptr; + libNames_[index].clear(); - return true; + if (!ok && verbose) + { + WarningInFunction + << "could not close " << libName + << endl; } - return false; + + return ok; } -void* Foam::dlLibraryTable::findLibrary(const fileName& functionLibName) +void* Foam::dlLibraryTable::findLibrary(const fileName& libName) { label index = -1; forAllReverse(libNames_, i) { - if (libNames_[i] == functionLibName) + if (libName == libNames_[i]) { index = i; break; @@ -187,6 +175,7 @@ void* Foam::dlLibraryTable::findLibrary(const fileName& functionLibName) { return libPtrs_[index]; } + return nullptr; } @@ -197,23 +186,20 @@ bool Foam::dlLibraryTable::open const word& libsEntry ) { - if (dict.found(libsEntry)) - { - fileNameList libNames(dict.lookup(libsEntry)); + fileNameList libNames; + dict.readIfPresent(libsEntry, libNames); - bool allOpened = !libNames.empty(); + label nOpen = 0; - forAll(libNames, i) + for (const fileName& libName : libNames) + { + if (dlLibraryTable::open(libName)) { - allOpened = dlLibraryTable::open(libNames[i]) && allOpened; + ++nOpen; } - - return allOpened; - } - else - { - return false; } + + return nOpen && nOpen == libNames.size(); } diff --git a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.H b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.H index b40c4c495393c32ce0b67d999a127bc362f9ff82..04f51fd5ad8cb717115ce87d5998e0775bae5b07 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.H +++ b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.H @@ -49,13 +49,15 @@ namespace Foam class dlLibraryTable { - // Private Member Functions + // Private data DynamicList<void*> libPtrs_; DynamicList<fileName> libNames_; + // Private Member Functions + //- No copy construct dlLibraryTable(const dlLibraryTable&) = delete; @@ -73,9 +75,9 @@ public: //- Construct null dlLibraryTable(); - //- Construct from dictionary and name of 'libs' entry giving - // the libraries to load - dlLibraryTable(const dictionary&, const word&); + //- Open all libraries listed in the 'libsEntry' entry in the + //- given dictionary. + dlLibraryTable(const dictionary& dict, const word& libsEntry); //- Destructor @@ -85,25 +87,25 @@ public: // Member Functions //- Open the named library, optionally with warnings if problems occur - bool open(const fileName& name, const bool verbose = true); + bool open(const fileName& libName, const bool verbose = true); //- Close the named library, optionally with warnings if problems occur - bool close(const fileName& name, const bool verbose = true); + bool close(const fileName& libName, const bool verbose = true); //- Find the handle of the named library - void* findLibrary(const fileName& name); + void* findLibrary(const fileName& libName); - //- Open all the libraries listed in the 'libsEntry' entry in the - // given dictionary if present - bool open(const dictionary&, const word& libsEntry); + //- Open all libraries listed in the 'libsEntry' entry in the + //- given dictionary. + bool open(const dictionary& dict, const word& libsEntry); - //- Open all the libraries listed in the 'libsEntry' entry in the - // given dictionary if present and check the additions - // to the given constructor table + //- Open all libraries listed in the 'libsEntry' entry in the + //- given dictionary and check the additions + //- to the given constructor table template<class TablePtr> bool open ( - const dictionary&, + const dictionary& dict, const word& libsEntry, const TablePtr& tablePtr ); diff --git a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTableTemplates.C b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTableTemplates.C index 62796ab0624045cf4bb14e0102d5f9b745852917..08491cb03a2562e75dd97dc3aee2464a18f3bcea 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTableTemplates.C +++ b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTableTemplates.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -37,47 +37,36 @@ bool Foam::dlLibraryTable::open const TablePtr& tablePtr ) { - if (dict.found(libsEntry)) - { - fileNameList libNames(dict.lookup(libsEntry)); - - bool allOpened = (libNames.size() > 0); + fileNameList libNames; + dict.readIfPresent(libsEntry, libNames); - forAll(libNames, i) - { - const fileName& libName = libNames[i]; + label nOpen = 0; - label nEntries = 0; - - if (tablePtr) - { - nEntries = tablePtr->size(); - } + for (const fileName& libName : libNames) + { + const label nEntries = (tablePtr ? tablePtr->size() : 0); - bool opened = dlLibraryTable::open(libName); - allOpened = opened && allOpened; + if (dlLibraryTable::open(libName)) + { + ++nOpen; - if (!opened) - { - WarningInFunction - << "Could not open library " << libName - << endl << endl; - } - else if (debug && (!tablePtr || tablePtr->size() <= nEntries)) + if (debug && (!tablePtr || tablePtr->size() <= nEntries)) { WarningInFunction << "library " << libName << " did not introduce any new entries" - << endl << endl; + << nl << endl; } } - - return allOpened; - } - else - { - return false; + else + { + WarningInFunction + << "Could not open library " << libName + << nl << endl; + } } + + return nOpen && nOpen == libNames.size(); }