https://mooseframework.inl.gov
Functions
CastUniquePointer.h File Reference

Go to the source code of this file.

Functions

template<typename T_DEST , typename T_SRC , typename T_DELETER >
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast (std::unique_ptr< T_SRC, T_DELETER > &src)
 These are reworked from https://stackoverflow.com/a/11003103. More...
 
template<typename T_DEST , typename T_SRC , typename T_DELETER >
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast (std::unique_ptr< T_SRC, T_DELETER > &&src)
 
template<typename T_DEST , typename T_SRC >
std::unique_ptr< T_DEST > dynamic_pointer_cast (std::unique_ptr< T_SRC > &src)
 
template<typename T_DEST , typename T_SRC >
std::unique_ptr< T_DEST > dynamic_pointer_cast (std::unique_ptr< T_SRC > &&src)
 

Function Documentation

◆ dynamic_pointer_cast() [1/4]

template<typename T_DEST , typename T_SRC , typename T_DELETER >
std::unique_ptr<T_DEST, T_DELETER> dynamic_pointer_cast ( std::unique_ptr< T_SRC, T_DELETER > &  src)

These are reworked from https://stackoverflow.com/a/11003103.

New GitHub Repo here: https://github.com/friedmud/unique_ptr_cast

Definition at line 22 of file CastUniquePointer.h.

Referenced by CreateExecutionerAction::act(), CreateProblemDefaultAction::act(), AddExternalAuxVariableAction::act(), ActionWarehouse::addActionBlock(), MFEMProblem::addBoundaryCondition(), NonlinearSystemBase::addBoundaryCondition(), NonlinearSystemBase::addDamper(), FormattedTable::addData(), MFEMProblem::addImagComponentToBC(), MFEMProblem::addImagComponentToKernel(), FEProblemBase::addIndicator(), MFEMProblem::addKernel(), FEProblemBase::addMultiApp(), ConstraintWarehouse::addObject(), MooseObjectWarehouseBase< Indicator >::addObject(), MooseObjectWarehouse< Indicator >::addObject(), MFEMProblem::addRealComponentToBC(), MFEMProblem::addRealComponentToKernel(), WebServerControl::addServerAction(), FEProblemBase::addTransfer(), FEProblemBase::addUserObject(), DerivativeParsedMaterialHelperTempl< is_ad >::assembleDerivatives(), BoundaryLayerUtils::buildBoundaryLayerRing(), NonlinearEigenSystem::checkIntegrity(), FEProblemBase::checkNonlocalCoupling(), SubProblem::cloneAlgebraicGhostingFunctor(), SubProblem::cloneCouplingGhostingFunctor(), Moose::MFEM::ComplexEquationSystemProblemOperator::ComplexEquationSystemProblemOperator(), ComputeFullJacobianThread::computeOnBoundary(), ComputeFullJacobianThread::computeOnElement(), EigenProblem::EigenProblem(), MFEMEigenvaluesPostprocessor::execute(), ExternalProblem::ExternalProblem(), FEProblem::FEProblem(), FormattedTable::fillEmptyValues(), Boundary2DDelaunayGenerator::General2DDelaunay(), SurfaceSubdomainsDelaunayRemesher::General2DDelaunay(), BoundaryDeletionGenerator::generate(), ElementOrderConversionGenerator::generate(), OverlayMeshGenerator::generate(), SubdomainIDGenerator::generate(), PlaneIDMeshGenerator::generate(), RenameBlockGenerator::generate(), RenameBoundaryGenerator::generate(), RenumberBySubdomainGenerator::generate(), ElementGenerator::generate(), SideSetsFromNormalsGenerator::generate(), SubdomainPerElementGenerator::generate(), AddMetaDataGenerator::generate(), SphereMeshGenerator::generate(), ExtraNodesetGenerator::generate(), FileMeshGenerator::generate(), TiledMeshGenerator::generate(), BlockToMeshConverterGenerator::generate(), BoundaryLayerSubdomainGenerator::generate(), BreakBoundaryOnSubdomainGenerator::generate(), MoveNodeGenerator::generate(), OrientSurfaceMeshGenerator::generate(), StitchMeshGenerator::generate(), ConcentricCircleMeshGenerator::generate(), ParsedSubdomainGeneratorBase::generate(), SideSetsBetweenSubdomainsGenerator::generate(), SmoothMeshGenerator::generate(), SideSetsFromNodeSetsGenerator::generate(), SideSetsFromPointsGenerator::generate(), ExamplePatchMeshGenerator::generate(), StitchBoundaryMeshGenerator::generate(), AnnularMeshGenerator::generate(), FillBetweenCurvesGenerator::generate(), SubdomainsFromPartitionerGenerator::generate(), FillBetweenSidesetsGenerator::generate(), FlipSidesetGenerator::generate(), GeneratedMeshGenerator::generate(), ImageSubdomainGenerator::generate(), BreakMeshByBlockGenerator::generate(), NodeSetsFromSideSetsGenerator::generate(), MeshDiagnosticsGenerator::generate(), BSplineCurveGenerator::generate(), CartesianMeshGenerator::generate(), ProjectSideSetOntoLevelSetGenerator::generate(), CombinerGenerator::generate(), StackGenerator::generate(), BreakMeshByElementGenerator::generate(), SideSetsFromAllNormalsGenerator::generate(), SideSetsFromBoundingBoxGenerator::generate(), XYZDelaunayGenerator::generate(), SurfaceSubdomainsFromAllNormalsGenerator::generate(), ParsedGenerateNodeset::generate(), MeshExtruderGenerator::generate(), ElementsToSimplicesConverter::generate(), MeshCollectionGenerator::generate(), TransformGenerator::generate(), ImageMeshGenerator::generate(), CircularBoundaryCorrectionGenerator::generate(), OrientedSubdomainBoundingBoxGenerator::generate(), SpiralAnnularMeshGenerator::generate(), ParsedCurveGenerator::generate(), RinglebMeshGenerator::generate(), ElementDeletionGeneratorBase::generate(), ParsedGenerateSideset::generate(), SideSetsAroundSubdomainGenerator::generate(), TransfiniteMeshGenerator::generate(), ManifoldSubdomainGenerator::generate(), SubdomainBoundingBoxGenerator::generate(), PatternedMeshGenerator::generate(), DistributedRectilinearMeshGenerator::generate(), BoundingBoxNodeSetGenerator::generate(), ActionWarehouse::getAction(), ActionWarehouse::getActions(), FormattedTable::getLastData(), FEProblemBase::getNonlinearSystem(), MooseObjectWarehouseBase< Indicator >::hasObjectsForVariableAndBlocks(), TableValue< T >::load(), ActionWarehouse::problem(), RefineBlockGenerator::recursive_refine(), RefineSidesetGenerator::recursive_refine(), CoarsenBlockGenerator::recursiveCoarsen(), NonlinearSystem::setupFiniteDifferencedPreconditioner(), Moose::MFEM::EigenproblemESProblemOperator::Solve(), MeshTriangulationUtils::triangulateWithDelaunay(), and Moose::Builder::walkRaw().

23 {
24  if (!src)
25  return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
26 
27  T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
28  if (!dest_ptr)
29  return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
30 
31  std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
32 
33  src.release();
34 
35  return dest_temp;
36 }

◆ dynamic_pointer_cast() [2/4]

template<typename T_DEST , typename T_SRC , typename T_DELETER >
std::unique_ptr<T_DEST, T_DELETER> dynamic_pointer_cast ( std::unique_ptr< T_SRC, T_DELETER > &&  src)

Definition at line 40 of file CastUniquePointer.h.

41 {
42  if (!src)
43  return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
44 
45  T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
46  if (!dest_ptr)
47  return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
48 
49  std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
50 
51  src.release();
52 
53  return dest_temp;
54 }

◆ dynamic_pointer_cast() [3/4]

template<typename T_DEST , typename T_SRC >
std::unique_ptr<T_DEST> dynamic_pointer_cast ( std::unique_ptr< T_SRC > &  src)

Definition at line 58 of file CastUniquePointer.h.

59 {
60  if (!src)
61  return std::unique_ptr<T_DEST>(nullptr);
62 
63  T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
64  if (!dest_ptr)
65  return std::unique_ptr<T_DEST>(nullptr);
66 
67  std::unique_ptr<T_DEST> dest_temp(dest_ptr);
68 
69  src.release();
70 
71  return dest_temp;
72 }

◆ dynamic_pointer_cast() [4/4]

template<typename T_DEST , typename T_SRC >
std::unique_ptr<T_DEST> dynamic_pointer_cast ( std::unique_ptr< T_SRC > &&  src)

Definition at line 76 of file CastUniquePointer.h.

77 {
78  if (!src)
79  return std::unique_ptr<T_DEST>(nullptr);
80 
81  T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
82  if (!dest_ptr)
83  return std::unique_ptr<T_DEST>(nullptr);
84 
85  std::unique_ptr<T_DEST> dest_temp(dest_ptr);
86 
87  src.release();
88 
89  return dest_temp;
90 }