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 21 of file CastUniquePointer.h.

Referenced by CreateExecutionerAction::act(), CreateProblemDefaultAction::act(), AddExternalAuxVariableAction::act(), ActionWarehouse::addActionBlock(), MFEMProblem::addBoundaryCondition(), NonlinearSystemBase::addBoundaryCondition(), NonlinearSystemBase::addDamper(), FormattedTable::addData(), FEProblemBase::addIndicator(), MFEMProblem::addKernel(), MFEMProblem::addMFEMSolver(), FEProblemBase::addMultiApp(), ConstraintWarehouse::addObject(), MooseObjectWarehouse< Indicator >::addObject(), MooseObjectWarehouseBase< Indicator >::addObject(), FEProblemBase::addTransfer(), FEProblemBase::addUserObject(), DerivativeParsedMaterialHelperTempl< is_ad >::assembleDerivatives(), NonlinearEigenSystem::checkIntegrity(), FEProblemBase::checkNonlocalCoupling(), SubProblem::cloneAlgebraicGhostingFunctor(), SubProblem::cloneCouplingGhostingFunctor(), ComputeFullJacobianThread::computeOnBoundary(), ComputeFullJacobianThread::computeOnElement(), EigenProblem::EigenProblem(), ExternalProblem::ExternalProblem(), FEProblem::FEProblem(), FormattedTable::fillEmptyValues(), ElementOrderConversionGenerator::generate(), BoundaryDeletionGenerator::generate(), OverlayMeshGenerator::generate(), SubdomainPerElementGenerator::generate(), ElementGenerator::generate(), SideSetsFromNormalsGenerator::generate(), SmoothMeshGenerator::generate(), AddMetaDataGenerator::generate(), SphereMeshGenerator::generate(), ExtraNodesetGenerator::generate(), SubdomainIDGenerator::generate(), FileMeshGenerator::generate(), TiledMeshGenerator::generate(), FillBetweenCurvesGenerator::generate(), FillBetweenSidesetsGenerator::generate(), BlockToMeshConverterGenerator::generate(), BoundaryLayerSubdomainGenerator::generate(), BreakBoundaryOnSubdomainGenerator::generate(), MoveNodeGenerator::generate(), PlaneIDMeshGenerator::generate(), RenameBlockGenerator::generate(), RenameBoundaryGenerator::generate(), ConcentricCircleMeshGenerator::generate(), SideSetsBetweenSubdomainsGenerator::generate(), SideSetsFromNodeSetsGenerator::generate(), SideSetsFromPointsGenerator::generate(), FlipSidesetGenerator::generate(), MeshDiagnosticsGenerator::generate(), AnnularMeshGenerator::generate(), GeneratedMeshGenerator::generate(), ImageSubdomainGenerator::generate(), TransformGenerator::generate(), NodeSetsFromSideSetsGenerator::generate(), ExamplePatchMeshGenerator::generate(), BreakMeshByBlockGenerator::generate(), CartesianMeshGenerator::generate(), ParsedSubdomainGeneratorBase::generate(), ParsedCurveGenerator::generate(), SideSetsFromBoundingBoxGenerator::generate(), ParsedGenerateNodeset::generate(), StackGenerator::generate(), MeshExtruderGenerator::generate(), ElementsToSimplicesConverter::generate(), AllSideSetsByNormalsGenerator::generate(), CombinerGenerator::generate(), MeshCollectionGenerator::generate(), StitchBoundaryMeshGenerator::generate(), ImageMeshGenerator::generate(), StitchedMeshGenerator::generate(), BreakMeshByElementGenerator::generate(), XYZDelaunayGenerator::generate(), CircularBoundaryCorrectionGenerator::generate(), RinglebMeshGenerator::generate(), SpiralAnnularMeshGenerator::generate(), OrientedSubdomainBoundingBoxGenerator::generate(), XYDelaunayGenerator::generate(), ElementDeletionGeneratorBase::generate(), SideSetsAroundSubdomainGenerator::generate(), ParsedGenerateSideset::generate(), TransfiniteMeshGenerator::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(), and Moose::Builder::walkRaw().

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

◆ 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 39 of file CastUniquePointer.h.

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

◆ 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 57 of file CastUniquePointer.h.

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

◆ 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 75 of file CastUniquePointer.h.

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