diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C index c105fea511..65561dfcb7 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.C +++ b/src/surfMesh/MeshedSurface/MeshedSurface.C @@ -39,6 +39,43 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +template +Foam::wordHashSet Foam::MeshedSurface::readTypes() +{ + wordHashSet known(2*fileExtensionConstructorTablePtr_->size()); + + forAllIter + ( + typename fileExtensionConstructorTable::iterator, + *fileExtensionConstructorTablePtr_, + iter + ) + { + known.insert(iter.key()); + } + + return known; +} + + +template +Foam::wordHashSet Foam::MeshedSurface::writeTypes() +{ + wordHashSet supported(2*writefileExtensionMemberFunctionTablePtr_->size()); + + forAllIter + ( + typename writefileExtensionMemberFunctionTable::iterator, + *writefileExtensionMemberFunctionTablePtr_, + iter + ) + { + supported.insert(iter.key()); + } + + return supported; +} + // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // @@ -55,7 +92,10 @@ bool Foam::MeshedSurface::canReadType return true; } - return UnsortedMeshedSurface::canReadType(ext, verbose); + wordHashSet available = readTypes(); + available += SiblingType::readTypes(); + + return checkSupport(available, ext, verbose, "reading"); } @@ -72,32 +112,7 @@ bool Foam::MeshedSurface::canWriteType return true; } - typename writefileExtensionMemberFunctionTable::iterator mfIter = - writefileExtensionMemberFunctionTablePtr_->find(ext); - - if (mfIter == writefileExtensionMemberFunctionTablePtr_->end()) - { - if (verbose) - { - SortableList known - ( - writefileExtensionMemberFunctionTablePtr_->toc() - ); - - Info<<"Unknown file extension for writing: " << ext << nl; - // compact output: - Info<<"Valid types: ( " << nativeExt; - forAll(known, i) - { - Info<<" " << known[i]; - } - Info<<" )" << endl; - } - - return false; - } - - return true; + return checkSupport(writeTypes(), ext, verbose, "writing"); } @@ -150,7 +165,7 @@ void Foam::MeshedSurface::write "MeshedSurface::write(const fileName&)" ) << "Unknown file extension " << ext << nl << nl << "Valid types are :" << endl - << writefileExtensionMemberFunctionTablePtr_->toc() + << writeTypes() << exit(FatalError); } diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.H b/src/surfMesh/MeshedSurface/MeshedSurface.H index 3d00d370c8..e6665a2845 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.H +++ b/src/surfMesh/MeshedSurface/MeshedSurface.H @@ -49,6 +49,7 @@ SourceFiles #include "surfaceFormatsCore.H" #include "runTimeSelectionTables.H" #include "memberFunctionSelectionTables.H" +#include "HashSet.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -83,6 +84,7 @@ private: //- Private typedefs for convenience typedef PrimitiveMeshedSurface ParentType; + typedef UnsortedMeshedSurface SiblingType; // Private Member Data @@ -92,12 +94,6 @@ private: // Private member functions - //- set a single patch - void onePatch(); - - //- basic sanity check on patches - void checkPatches(); - //- Sort faces by regionIds and set patches void sortFacesByRegion(const UList