Skip to content

Commit 11cafa4

Browse files
Levi ArmstrongLevi-Armstrong
authored andcommitted
Simplify the process generator interface to avoid std::function
1 parent 55ef25c commit 11cafa4

26 files changed

+194
-302
lines changed

tesseract/tesseract_planning/tesseract_process_managers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ include(GenerateExportHeader)
3939
add_library(${PROJECT_NAME}
4040
src/core/process_input.cpp
4141
src/core/debug_observer.cpp
42+
src/core/process_generator.cpp
4243
src/core/process_planning_future.cpp
4344
src/core/process_planning_server.cpp
4445
src/core/process_environment_cache.cpp

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/core/process_generator.h

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,26 @@
3030
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
3131
#include <functional>
3232
#include <memory>
33+
#include <taskflow/taskflow.hpp>
3334
TESSERACT_COMMON_IGNORE_WARNINGS_POP
3435

35-
#include <tesseract_process_managers/core/types.h>
3636
#include <tesseract_process_managers/core/process_input.h>
3737

3838
namespace tesseract_planning
3939
{
4040
/**
4141
* @brief This is a base class for generating instances of processes as tasks such that they may be executed in
42-
* parallel. A typical workflow would be taskflow.emplace(process_generator.generateTask(input) override)
42+
* parallel. A typical workflow would be task t = process_generator.generateTask(input, taskflow)
4343
*
44-
* Only unique pointers should be used because of the ability to abort the process.
44+
* Only unique pointers should be used because of the ability to abort the process. With recent changes this may no
45+
* longer be valid but need to investigate.
4546
*/
4647
class ProcessGenerator
4748
{
4849
public:
4950
using UPtr = std::unique_ptr<ProcessGenerator>;
5051

51-
ProcessGenerator() = default;
52+
ProcessGenerator(std::string name = "");
5253
virtual ~ProcessGenerator() = default;
5354
ProcessGenerator(const ProcessGenerator&) = delete;
5455
ProcessGenerator& operator=(const ProcessGenerator&) = delete;
@@ -59,21 +60,55 @@ class ProcessGenerator
5960
* @brief Get the task name
6061
* @return The name
6162
*/
62-
virtual const std::string& getName() const = 0;
63+
virtual const std::string& getName() const;
6364

6465
/**
6566
* @brief Generated a Task
6667
* @param input The process input
68+
* @param taskflow The taskflow to associate the task with
6769
* @return Task
6870
*/
69-
virtual TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) = 0;
71+
virtual tf::Task generateTask(ProcessInput input, tf::Taskflow& taskflow);
72+
73+
/**
74+
* @brief Assign work to the provided task
75+
* @param input The process input
76+
* @param task The task to assign the work to
77+
*/
78+
virtual void assignTask(ProcessInput input, tf::Task& task);
79+
80+
/**
81+
* @brief Generated a Task
82+
* @param input The process input
83+
* @param taskflow The taskflow to associate the task with
84+
* @return Conditional Task
85+
*/
86+
virtual tf::Task generateConditionalTask(ProcessInput input, tf::Taskflow& taskflow);
87+
88+
/**
89+
* @brief Assign work to the provided task
90+
* @param input The process input
91+
* @param task The task to assign the work to
92+
*/
93+
virtual void assignConditionalTask(ProcessInput input, tf::Task& task);
94+
95+
protected:
96+
/** @brief The name of the process */
97+
std::string name_;
98+
99+
/**
100+
* @brief Generated a Task
101+
* @param input The process input
102+
* @return Task
103+
*/
104+
virtual void process(ProcessInput input, std::size_t unique_id) const = 0;
70105

71106
/**
72107
* @brief Generate Conditional Task
73108
* @param input The process input
74109
* @return Conditional Task
75110
*/
76-
virtual TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) = 0;
111+
virtual int conditionalProcess(ProcessInput input, std::size_t unique_id) const = 0;
77112
};
78113

79114
} // namespace tesseract_planning

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/continuous_contact_check_process_generator.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,11 @@ class ContinuousContactCheckProcessGenerator : public ProcessGenerator
5151
ContinuousContactCheckProcessGenerator(ContinuousContactCheckProcessGenerator&&) = delete;
5252
ContinuousContactCheckProcessGenerator& operator=(ContinuousContactCheckProcessGenerator&&) = delete;
5353

54-
const std::string& getName() const override;
55-
56-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
57-
58-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
59-
6054
tesseract_collision::CollisionCheckConfig config;
6155

62-
private:
63-
std::string name_;
64-
65-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
56+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
6657

67-
void process(ProcessInput input, std::size_t unique_id) const;
58+
void process(ProcessInput input, std::size_t unique_id) const override;
6859
};
6960

7061
class ContinuousContactCheckProcessInfo : public ProcessInfo

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/discrete_contact_check_process_generator.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,11 @@ class DiscreteContactCheckProcessGenerator : public ProcessGenerator
5252
DiscreteContactCheckProcessGenerator(DiscreteContactCheckProcessGenerator&&) = delete;
5353
DiscreteContactCheckProcessGenerator& operator=(DiscreteContactCheckProcessGenerator&&) = delete;
5454

55-
const std::string& getName() const override;
56-
57-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
58-
59-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
60-
6155
tesseract_collision::CollisionCheckConfig config;
6256

63-
private:
64-
std::string name_;
65-
66-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
57+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
6758

68-
void process(ProcessInput input, std::size_t unique_id) const;
59+
void process(ProcessInput input, std::size_t unique_id) const override;
6960
};
7061

7162
class DiscreteContactCheckProcessInfo : public ProcessInfo

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/fix_state_bounds_process_generator.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,11 @@ class FixStateBoundsProcessGenerator : public ProcessGenerator
7171
FixStateBoundsProcessGenerator(FixStateBoundsProcessGenerator&&) = delete;
7272
FixStateBoundsProcessGenerator& operator=(FixStateBoundsProcessGenerator&&) = delete;
7373

74-
const std::string& getName() const override;
75-
76-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
77-
78-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
79-
8074
FixStateBoundsProfileMap composite_profiles;
8175

82-
private:
83-
std::string name_;
84-
85-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
76+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
8677

87-
void process(ProcessInput input, std::size_t unique_id) const;
78+
void process(ProcessInput input, std::size_t unique_id) const override;
8879
};
8980

9081
class FixStateBoundsProcessInfo : public ProcessInfo

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/fix_state_collision_process_generator.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,11 @@ class FixStateCollisionProcessGenerator : public ProcessGenerator
9090
FixStateCollisionProcessGenerator(FixStateCollisionProcessGenerator&&) = delete;
9191
FixStateCollisionProcessGenerator& operator=(FixStateCollisionProcessGenerator&&) = delete;
9292

93-
const std::string& getName() const override;
94-
95-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
96-
97-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
98-
9993
FixStateCollisionProfileMap composite_profiles;
10094

101-
private:
102-
std::string name_;
103-
104-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
95+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
10596

106-
void process(ProcessInput input, std::size_t unique_id) const;
97+
void process(ProcessInput input, std::size_t unique_id) const override;
10798
};
10899

109100
class FixStateCollisionProcessInfo : public ProcessInfo

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/iterative_spline_parameterization_process_generator.h

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,17 @@ class IterativeSplineParameterizationProcessGenerator : public ProcessGenerator
6464
IterativeSplineParameterizationProcessGenerator&
6565
operator=(IterativeSplineParameterizationProcessGenerator&&) = delete;
6666

67-
const std::string& getName() const override;
68-
69-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
70-
71-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
72-
7367
IterativeSplineParameterizationProfileMap composite_profiles;
7468
IterativeSplineParameterizationProfileMap move_profiles;
7569

76-
private:
77-
std::string name_;
70+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
7871

79-
IterativeSplineParameterization solver_;
72+
void process(ProcessInput input, std::size_t unique_id) const override;
8073

81-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
82-
83-
void process(ProcessInput input, std::size_t unique_id) const;
74+
private:
75+
IterativeSplineParameterization solver_;
8476
};
77+
8578
class IterativeSplineParameterizationProcessInfo : public ProcessInfo
8679
{
8780
public:

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/motion_planner_process_generator.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,12 @@ class MotionPlannerProcessGenerator : public ProcessGenerator
4545
MotionPlannerProcessGenerator(MotionPlannerProcessGenerator&&) = delete;
4646
MotionPlannerProcessGenerator& operator=(MotionPlannerProcessGenerator&&) = delete;
4747

48-
const std::string& getName() const override;
48+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
4949

50-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
51-
52-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
50+
void process(ProcessInput input, std::size_t unique_id) const override;
5351

5452
private:
5553
std::shared_ptr<MotionPlanner> planner_{ nullptr };
56-
57-
std::string name_;
58-
59-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
60-
61-
void process(ProcessInput input, std::size_t unique_id) const;
6254
};
6355

6456
class MotionPlannerProcessInfo : public ProcessInfo

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/profile_switch_process_generator.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,11 @@ class ProfileSwitchProcessGenerator : public ProcessGenerator
5656
ProfileSwitchProcessGenerator(ProfileSwitchProcessGenerator&&) = delete;
5757
ProfileSwitchProcessGenerator& operator=(ProfileSwitchProcessGenerator&&) = delete;
5858

59-
const std::string& getName() const override;
60-
61-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
62-
63-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
64-
6559
ProfileSwitchProfileMap composite_profiles;
6660

67-
private:
68-
std::string name_;
69-
70-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
61+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
7162

72-
void process(ProcessInput input, std::size_t unique_id) const;
63+
void process(ProcessInput input, std::size_t unique_id) const override;
7364
};
7465

7566
class ProfileSwitchProcessInfo : public ProcessInfo

tesseract/tesseract_planning/tesseract_process_managers/include/tesseract_process_managers/process_generators/seed_min_length_process_generator.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,13 @@ class SeedMinLengthProcessGenerator : public ProcessGenerator
5151
SeedMinLengthProcessGenerator(SeedMinLengthProcessGenerator&&) = delete;
5252
SeedMinLengthProcessGenerator& operator=(SeedMinLengthProcessGenerator&&) = delete;
5353

54-
const std::string& getName() const override;
54+
int conditionalProcess(ProcessInput input, std::size_t unique_id) const override;
5555

56-
TaskflowVoidFn generateTask(ProcessInput input, std::size_t unique_id) override;
57-
58-
TaskflowIntFn generateConditionalTask(ProcessInput input, std::size_t unique_id) override;
56+
void process(ProcessInput input, std::size_t unique_id) const override;
5957

6058
private:
61-
std::string name_;
62-
6359
long min_length_{ 10 };
6460

65-
int conditionalProcess(ProcessInput input, std::size_t unique_id) const;
66-
67-
void process(ProcessInput input, std::size_t unique_id) const;
68-
6961
void subdivide(CompositeInstruction& composite,
7062
const CompositeInstruction& current_composite,
7163
Instruction& start_instruction,

0 commit comments

Comments
 (0)