Sketcher: GeometryFacade and ExternalGeometryFacade nullptr creation

====================================================================

If the Part::Geometry * is nullptr, then it is convenient to have a
std::unique<GeometryFacade> that contains a nullptr too, because many
functions check for a Part::Geometry being a nullptr.
This commit is contained in:
Abdullah Tahiri
2020-12-05 09:41:33 +01:00
committed by abdullahtahiriyo
parent 858abd99ca
commit 2b35a7eec4
3 changed files with 25 additions and 8 deletions

View File

@@ -54,14 +54,18 @@ ExternalGeometryFacade::ExternalGeometryFacade(const Part::Geometry * geometry)
std::unique_ptr<ExternalGeometryFacade> ExternalGeometryFacade::getFacade(Part::Geometry * geometry)
{
return std::unique_ptr<ExternalGeometryFacade>(new ExternalGeometryFacade(geometry));
//return std::make_unique<ExternalGeometryFacade>(geometry); // make_unique has no access to private constructor
if(geometry != nullptr)
return std::unique_ptr<ExternalGeometryFacade>(new ExternalGeometryFacade(geometry));
else
return std::unique_ptr<ExternalGeometryFacade>(nullptr);
}
std::unique_ptr<const ExternalGeometryFacade> ExternalGeometryFacade::getFacade(const Part::Geometry * geometry)
{
return std::unique_ptr<const ExternalGeometryFacade>(new ExternalGeometryFacade(geometry));
//return std::make_unique<const ExternalGeometryFacade>(geometry); // make_unique has no access to private constructor
if(geometry != nullptr)
return std::unique_ptr<const ExternalGeometryFacade>(new ExternalGeometryFacade(geometry));
else
return std::unique_ptr<const ExternalGeometryFacade>(nullptr);
}
void ExternalGeometryFacade::setGeometry(Part::Geometry *geometry)

View File

@@ -50,17 +50,24 @@ GeometryFacade::GeometryFacade(const Part::Geometry * geometry)
initExtension();
else
THROWM(Base::ValueError, "GeometryFacade initialized with Geometry null pointer");
}
std::unique_ptr<GeometryFacade> GeometryFacade::getFacade(Part::Geometry * geometry)
{
return std::unique_ptr<GeometryFacade>(new GeometryFacade(geometry));
if(geometry != nullptr)
return std::unique_ptr<GeometryFacade>(new GeometryFacade(geometry));
else
return std::unique_ptr<GeometryFacade>(nullptr);
//return std::make_unique<GeometryFacade>(geometry); // make_unique has no access to private constructor
}
std::unique_ptr<const GeometryFacade> GeometryFacade::getFacade(const Part::Geometry * geometry)
{
return std::unique_ptr<const GeometryFacade>(new GeometryFacade(geometry));
if(geometry != nullptr)
return std::unique_ptr<const GeometryFacade>(new GeometryFacade(geometry));
else
return std::unique_ptr<const GeometryFacade>(nullptr);
//return std::make_unique<const GeometryFacade>(geometry); // make_unique has no access to private constructor
}

View File

@@ -222,10 +222,16 @@ class SketcherExport GeometryTypedFacade : public GeometryFacade
public: // Factory methods
static std::unique_ptr<GeometryTypedFacade<GeometryT>> getTypedFacade(GeometryT * geometry) {
return std::unique_ptr<GeometryTypedFacade<GeometryT>>(new GeometryTypedFacade(geometry));
if(geometry != nullptr)
return std::unique_ptr<GeometryTypedFacade<GeometryT>>(new GeometryTypedFacade(geometry));
else
return std::unique_ptr<GeometryTypedFacade<GeometryT>>(nullptr);
}
static std::unique_ptr<const GeometryTypedFacade<GeometryT>> getTypedFacade(const GeometryT * geometry) {
return std::unique_ptr<const GeometryTypedFacade<GeometryT>>(new GeometryTypedFacade(geometry));
if(geometry != nullptr)
return std::unique_ptr<const GeometryTypedFacade<GeometryT>>(new GeometryTypedFacade(geometry));
else
return std::unique_ptr<const GeometryTypedFacade<GeometryT>>(nullptr);
}
template < typename... Args >