pimpl_func() only in SubTask class

This commit is contained in:
Robert Haschke 2017-10-03 22:17:41 +02:00
parent 11b6dd2efd
commit ce7d570459
6 changed files with 11 additions and 24 deletions

View File

@ -9,9 +9,7 @@
#include <list> #include <list>
#define PRIVATE_CLASS(Class) \ #define PRIVATE_CLASS(Class) \
friend class Class##Private; \ friend class Class##Private;
Class##Private* pimpl_func(); \
const Class##Private* pimpl_func() const;
namespace planning_scene { namespace planning_scene {
MOVEIT_CLASS_FORWARD(PlanningScene) MOVEIT_CLASS_FORWARD(PlanningScene)

View File

@ -31,12 +31,13 @@ bool ContainerBasePrivate::traverseStages(const ContainerBase::StageCallback &pr
continue; continue;
ContainerBase *container = dynamic_cast<ContainerBase*>(stage.get()); ContainerBase *container = dynamic_cast<ContainerBase*>(stage.get());
if (container) if (container)
container->pimpl_func()->traverseStages(processor, depth+1); static_cast<ContainerBasePrivate*>(container->pimpl_func())->traverseStages(processor, depth+1);
} }
return true; return true;
} }
ContainerBasePrivate::iterator ContainerBasePrivate::insert(ContainerBasePrivate::value_type &&subtask, ContainerBasePrivate::const_iterator pos) { ContainerBasePrivate::iterator ContainerBasePrivate::insert(ContainerBasePrivate::value_type &&subtask,
ContainerBasePrivate::const_iterator pos) {
SubTaskPrivate *impl = subtask->pimpl_func(); SubTaskPrivate *impl = subtask->pimpl_func();
impl->parent_ = this; impl->parent_ = this;
subtask->setPlanningScene(scene_); subtask->setPlanningScene(scene_);
@ -46,7 +47,6 @@ ContainerBasePrivate::iterator ContainerBasePrivate::insert(ContainerBasePrivate
} }
PRIVATE_CLASS_IMPL(ContainerBase)
ContainerBase::ContainerBase(ContainerBasePrivate *impl) ContainerBase::ContainerBase(ContainerBasePrivate *impl)
: SubTask(impl) : SubTask(impl)
{ {
@ -86,7 +86,6 @@ const SubTaskPrivate *SerialContainerPrivate::next_(const SubTaskPrivate *child)
} }
PRIVATE_CLASS_IMPL(SerialContainer)
SerialContainer::SerialContainer(SerialContainerPrivate *impl) SerialContainer::SerialContainer(SerialContainerPrivate *impl)
: ContainerBase(impl) : ContainerBase(impl)
{} {}

View File

@ -101,7 +101,6 @@ const SubTaskPrivate* SubTaskPrivate::next() const {
} }
PRIVATE_CLASS_IMPL(PropagatingAnyWay)
PropagatingAnyWay::PropagatingAnyWay(const std::string &name) PropagatingAnyWay::PropagatingAnyWay(const std::string &name)
: SubTask(new PropagatingAnyWayPrivate(this, name)) : SubTask(new PropagatingAnyWayPrivate(this, name))
{} {}
@ -179,19 +178,16 @@ void PropagatingAnyWay::newOutputState(const Interface::iterator &it)
} }
PRIVATE_CLASS_IMPL(PropagatingForward)
PropagatingForward::PropagatingForward(const std::string& name) PropagatingForward::PropagatingForward(const std::string& name)
: PropagatingAnyWay(new PropagatingForwardPrivate(this, name)) : PropagatingAnyWay(new PropagatingForwardPrivate(this, name))
{} {}
PRIVATE_CLASS_IMPL(PropagatingBackward)
PropagatingBackward::PropagatingBackward(const std::string &name) PropagatingBackward::PropagatingBackward(const std::string &name)
: PropagatingAnyWay(new PropagatingBackwardPrivate(this, name)) : PropagatingAnyWay(new PropagatingBackwardPrivate(this, name))
{} {}
PRIVATE_CLASS_IMPL(Generator)
Generator::Generator(const std::string &name) Generator::Generator(const std::string &name)
: SubTask(new GeneratorPrivate(this, name)) : SubTask(new GeneratorPrivate(this, name))
{} {}
@ -209,7 +205,6 @@ void Generator::spawn(const planning_scene::PlanningSceneConstPtr& ps, double co
} }
PRIVATE_CLASS_IMPL(Connecting)
Connecting::Connecting(const std::string &name) Connecting::Connecting(const std::string &name)
: SubTask(new ConnectingPrivate(this, name)) : SubTask(new ConnectingPrivate(this, name))
{ {

View File

@ -143,10 +143,5 @@ private:
} } } }
// implement pimpl_func()
#define PRIVATE_CLASS_IMPL(Class) \
inline Class##Private* Class::pimpl_func() { return static_cast<Class##Private*>(pimpl_); } \
inline const Class##Private* Class::pimpl_func() const { return static_cast<const Class##Private*>(pimpl_); } \
// get correctly casted private impl pointer // get correctly casted private impl pointer
#define IMPL(Class) Class##Private * const impl = pimpl_func() #define IMPL(Class) Class##Private * const impl = static_cast<Class##Private*>(pimpl_func());

View File

@ -68,7 +68,6 @@ public:
}; };
PRIVATE_CLASS_IMPL(Task)
Task::Task(const std::string &name) Task::Task(const std::string &name)
: SerialContainer(new TaskPrivate(this, name)) : SerialContainer(new TaskPrivate(this, name))
{ {
@ -135,7 +134,8 @@ bool traverseFullTrajectories(
} }
bool Task::processSolutions(const Task::SolutionCallback& processor) { bool Task::processSolutions(const Task::SolutionCallback& processor) {
const TaskPrivate::array_type& children = pimpl_func()->children(); IMPL(Task);
const TaskPrivate::array_type& children = impl->children();
const size_t nr_of_trajectories = children.size(); const size_t nr_of_trajectories = children.size();
std::vector<SubTrajectory*> trace; std::vector<SubTrajectory*> trace;
trace.reserve(nr_of_trajectories); trace.reserve(nr_of_trajectories);

View File

@ -90,7 +90,7 @@ TEST_F(SubTaskTest, interfaceFlags) {
TEST_F(SubTaskTest, serialContainer) { TEST_F(SubTaskTest, serialContainer) {
SerialContainer c("serial"); SerialContainer c("serial");
SerialContainerPrivate *cp = c.pimpl_func(); SerialContainerPrivate *cp = static_cast<SerialContainerPrivate*>(c.pimpl_func());
EXPECT_TRUE(bool(cp->input_)); EXPECT_TRUE(bool(cp->input_));
EXPECT_TRUE(bool(cp->output_)); EXPECT_TRUE(bool(cp->output_));
@ -100,7 +100,7 @@ TEST_F(SubTaskTest, serialContainer) {
/***** inserting first stage *****/ /***** inserting first stage *****/
auto g = std::make_unique<TestGenerator>(); auto g = std::make_unique<TestGenerator>();
GeneratorPrivate *gp = g->pimpl_func(); GeneratorPrivate *gp = static_cast<GeneratorPrivate*>(g->pimpl_func());
ASSERT_TRUE(c.insert(std::move(g))); ASSERT_TRUE(c.insert(std::move(g)));
EXPECT_FALSE(g); // ownership transferred to container EXPECT_FALSE(g); // ownership transferred to container
VALIDATE(gp); VALIDATE(gp);
@ -114,14 +114,14 @@ TEST_F(SubTaskTest, serialContainer) {
/***** inserting second stage *****/ /***** inserting second stage *****/
auto f = std::make_unique<TestPropagatingForward>(); auto f = std::make_unique<TestPropagatingForward>();
PropagatingForwardPrivate *fp = f->pimpl_func(); PropagatingForwardPrivate *fp = static_cast<PropagatingForwardPrivate*>(f->pimpl_func());
ASSERT_TRUE(c.insert(std::move(f))); ASSERT_TRUE(c.insert(std::move(f)));
EXPECT_FALSE(f); // ownership transferred to container EXPECT_FALSE(f); // ownership transferred to container
VALIDATE(gp, fp); VALIDATE(gp, fp);
/***** inserting third stage *****/ /***** inserting third stage *****/
auto f2 = std::make_unique<TestPropagatingForward>(); auto f2 = std::make_unique<TestPropagatingForward>();
PropagatingForwardPrivate *fp2 = f2->pimpl_func(); PropagatingForwardPrivate *fp2 = static_cast<PropagatingForwardPrivate*>(f2->pimpl_func());
#if 0 #if 0
EXPECT_FALSE(c.insert(std::move(f2), 0)); // should fail at first position EXPECT_FALSE(c.insert(std::move(f2), 0)); // should fail at first position
EXPECT_TRUE(bool(f)); // ownership not transferred to container EXPECT_TRUE(bool(f)); // ownership not transferred to container