Skip to content

Commit

Permalink
Sketcher: GeometryFacade and ExternalGeometryFacade nullptr creation
Browse files Browse the repository at this point in the history
====================================================================

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.
  • Loading branch information
abdullahtahiriyo committed Dec 10, 2020
1 parent 858abd9 commit 2b35a7e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 8 deletions.
12 changes: 8 additions & 4 deletions src/Mod/Sketcher/App/ExternalGeometryFacade.cpp
Expand Up @@ -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)
Expand Down
11 changes: 9 additions & 2 deletions src/Mod/Sketcher/App/GeometryFacade.cpp
Expand Up @@ -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
}

Expand Down
10 changes: 8 additions & 2 deletions src/Mod/Sketcher/App/GeometryFacade.h
Expand Up @@ -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 >
Expand Down

0 comments on commit 2b35a7e

Please sign in to comment.