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>
|
||||
|
||||
#define PRIVATE_CLASS(Class) \
|
||||
friend class Class##Private; \
|
||||
Class##Private* pimpl_func(); \
|
||||
const Class##Private* pimpl_func() const;
|
||||
friend class Class##Private;
|
||||
|
||||
namespace planning_scene {
|
||||
MOVEIT_CLASS_FORWARD(PlanningScene)
|
||||
|
||||
@ -31,12 +31,13 @@ bool ContainerBasePrivate::traverseStages(const ContainerBase::StageCallback &pr
|
||||
continue;
|
||||
ContainerBase *container = dynamic_cast<ContainerBase*>(stage.get());
|
||||
if (container)
|
||||
container->pimpl_func()->traverseStages(processor, depth+1);
|
||||
static_cast<ContainerBasePrivate*>(container->pimpl_func())->traverseStages(processor, depth+1);
|
||||
}
|
||||
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();
|
||||
impl->parent_ = this;
|
||||
subtask->setPlanningScene(scene_);
|
||||
@ -46,7 +47,6 @@ ContainerBasePrivate::iterator ContainerBasePrivate::insert(ContainerBasePrivate
|
||||
}
|
||||
|
||||
|
||||
PRIVATE_CLASS_IMPL(ContainerBase)
|
||||
ContainerBase::ContainerBase(ContainerBasePrivate *impl)
|
||||
: SubTask(impl)
|
||||
{
|
||||
@ -86,7 +86,6 @@ const SubTaskPrivate *SerialContainerPrivate::next_(const SubTaskPrivate *child)
|
||||
}
|
||||
|
||||
|
||||
PRIVATE_CLASS_IMPL(SerialContainer)
|
||||
SerialContainer::SerialContainer(SerialContainerPrivate *impl)
|
||||
: ContainerBase(impl)
|
||||
{}
|
||||
|
||||
@ -101,7 +101,6 @@ const SubTaskPrivate* SubTaskPrivate::next() const {
|
||||
}
|
||||
|
||||
|
||||
PRIVATE_CLASS_IMPL(PropagatingAnyWay)
|
||||
PropagatingAnyWay::PropagatingAnyWay(const std::string &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)
|
||||
: PropagatingAnyWay(new PropagatingForwardPrivate(this, name))
|
||||
{}
|
||||
|
||||
|
||||
PRIVATE_CLASS_IMPL(PropagatingBackward)
|
||||
PropagatingBackward::PropagatingBackward(const std::string &name)
|
||||
: PropagatingAnyWay(new PropagatingBackwardPrivate(this, name))
|
||||
{}
|
||||
|
||||
|
||||
PRIVATE_CLASS_IMPL(Generator)
|
||||
Generator::Generator(const std::string &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)
|
||||
: 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
|
||||
#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)
|
||||
: SerialContainer(new TaskPrivate(this, name))
|
||||
{
|
||||
@ -135,7 +134,8 @@ bool traverseFullTrajectories(
|
||||
}
|
||||
|
||||
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();
|
||||
std::vector<SubTrajectory*> trace;
|
||||
trace.reserve(nr_of_trajectories);
|
||||
|
||||
@ -90,7 +90,7 @@ TEST_F(SubTaskTest, interfaceFlags) {
|
||||
|
||||
TEST_F(SubTaskTest, serialContainer) {
|
||||
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->output_));
|
||||
@ -100,7 +100,7 @@ TEST_F(SubTaskTest, serialContainer) {
|
||||
|
||||
/***** inserting first stage *****/
|
||||
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)));
|
||||
EXPECT_FALSE(g); // ownership transferred to container
|
||||
VALIDATE(gp);
|
||||
@ -114,14 +114,14 @@ TEST_F(SubTaskTest, serialContainer) {
|
||||
|
||||
/***** inserting second stage *****/
|
||||
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)));
|
||||
EXPECT_FALSE(f); // ownership transferred to container
|
||||
VALIDATE(gp, fp);
|
||||
|
||||
/***** inserting third stage *****/
|
||||
auto f2 = std::make_unique<TestPropagatingForward>();
|
||||
PropagatingForwardPrivate *fp2 = f2->pimpl_func();
|
||||
PropagatingForwardPrivate *fp2 = static_cast<PropagatingForwardPrivate*>(f2->pimpl_func());
|
||||
#if 0
|
||||
EXPECT_FALSE(c.insert(std::move(f2), 0)); // should fail at first position
|
||||
EXPECT_TRUE(bool(f)); // ownership not transferred to container
|
||||
|
||||
Loading…
Reference in New Issue
Block a user