mirror of
https://github.com/moveit/moveit_task_constructor.git
synced 2025-11-04 14:49:57 +08:00
pimpl_func() only in SubTask class
This commit is contained in:
parent
11b6dd2efd
commit
ce7d570459
@ -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)
|
||||||
|
|||||||
@ -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)
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user