ECode CModuleInfo::GetAllImportModuleInfos( /* [out] */ ArrayOf<IModuleInfo *>* moduleInfos) { if (!moduleInfos) { return E_INVALID_ARGUMENT; } Int32 capacity = moduleInfos->GetLength(); if (!capacity) { return E_INVALID_ARGUMENT; } Int32 totalCount = mClsMod->mLibraryCount; if (!totalCount) { return NOERROR; } Int32 count = capacity < totalCount ? capacity : totalCount; ECode ec = NOERROR; for (Int32 i = 0; i < count; i++) { String libNames(getLibNameAddr(mClsModule->mBase, mClsMod->mLibraryNames, i)); AutoPtr<IModuleInfo> object; ec = g_objInfoList.AcquireModuleInfo(libNames, (IModuleInfo**)&object); if (FAILED(ec)) return ec; moduleInfos->Set(i, object); } return NOERROR; }
bool Foam::dlLibraryTable::open ( const dictionary& dict, const word& libsEntry, const TablePtr& tablePtr ) { if (dict.found(libsEntry)) { fileNameList libNames(dict.lookup(libsEntry)); bool allOpened = (libNames.size() > 0); forAll(libNames, i) { const fileName& libName = libNames[i]; label nEntries = 0; if (tablePtr) { nEntries = tablePtr->size(); } bool opened = dlLibraryTable::open(libName); allOpened = opened && allOpened; if (!opened) { WarningInFunction << "Could not open library " << libName << endl << endl; } else if (debug && (!tablePtr || tablePtr->size() <= nEntries)) { WarningInFunction << "library " << libName << " did not introduce any new entries" << endl << endl; } } return allOpened; }
Foam::autoPtr<Foam::dynamicFvMesh> Foam::dynamicFvMesh::New(const IOobject& io) { wordList libNames(1); libNames[0]=word("mesquiteMotionSolver"); forAll(libNames,i) { const word libName("lib"+libNames[i]+".so"); bool ok=dlLibraryTable::open(libName); if(!ok) { WarningIn("dynamicFvMesh::New(const IOobject& io)") << "Loading of dynamic mesh library " << libName << " unsuccesful. Some dynamic mesh methods may not be " << " available" << endl; } } // Enclose the creation of the dynamicMesh to ensure it is // deleted before the dynamicFvMesh is created otherwise the dictionary // is entered in the database twice IOdictionary dynamicMeshDict ( IOobject ( "dynamicMeshDict", io.time().constant(), (io.name() == dynamicFvMesh::defaultRegion ? "" : io.name() ), io.db(), IOobject::MUST_READ, IOobject::NO_WRITE, false ) ); word dynamicFvMeshTypeName(dynamicMeshDict.lookup("dynamicFvMesh")); Info<< "Selecting dynamicFvMesh " << dynamicFvMeshTypeName << endl; dlLibraryTable::open ( dynamicMeshDict, "dynamicFvMeshLibs", IOobjectConstructorTablePtr_ ); if (!IOobjectConstructorTablePtr_) { FatalErrorIn ( "dynamicFvMesh::New(const IOobject&)" ) << "dynamicFvMesh table is empty" << exit(FatalError); } IOobjectConstructorTable::iterator cstrIter = IOobjectConstructorTablePtr_->find(dynamicFvMeshTypeName); if (cstrIter == IOobjectConstructorTablePtr_->end()) { FatalErrorIn ( "dynamicFvMesh::New(const IOobject&)" ) << "Unknown dynamicFvMesh type " << dynamicFvMeshTypeName << endl << endl << "Valid dynamicFvMesh types are :" << endl << IOobjectConstructorTablePtr_->toc() << exit(FatalError); } return autoPtr<dynamicFvMesh>(cstrIter()(io)); }