Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef VIGIR_STEP_QUEUE_H__
00030 #define VIGIR_STEP_QUEUE_H__
00031
00032 #include <ros/ros.h>
00033
00034 #include <vigir_footstep_planning_msgs/footstep_planning_msgs.h>
00035 #include <vigir_footstep_planning_msgs/step_plan.h>
00036
00037
00038
00039 namespace vigir_step_control
00040 {
00041 using namespace vigir_footstep_planning;
00042
00043 typedef boost::shared_mutex Mutex;
00044 typedef boost::shared_lock<Mutex> SharedLock;
00045 typedef boost::unique_lock<Mutex> UniqueLock;
00046 typedef boost::upgrade_lock<Mutex> UpgradeLock;
00047 typedef boost::upgrade_to_unique_lock<Mutex> UpgradeToUniqueLock;
00048
00049
00050
00051 class StepQueue
00052 {
00053 public:
00054
00055 typedef boost::shared_ptr<StepQueue> Ptr;
00056 typedef boost::shared_ptr<const StepQueue> ConstPtr;
00057
00058 StepQueue();
00059 virtual ~StepQueue();
00060
00061 void reset();
00062
00067 bool empty() const;
00068
00073 size_t size() const;
00074
00079 bool isDirty() const;
00080
00084 void clearDirtyFlag();
00085
00095 bool updateStepPlan(const msgs::StepPlan& step_plan, int min_step_index = 0);
00096
00103 bool getStep(msgs::Step& step, unsigned int step_index = 0u);
00104
00111 bool getStepAt(msgs::Step& step, unsigned int position = 0u);
00112
00119 std::vector<msgs::Step> getSteps(unsigned int start_index, unsigned int end_index) const;
00120
00125 void removeStep(unsigned int step_index);
00126
00132 void removeSteps(unsigned int from_step_index, int to_step_index = -1);
00133
00139 bool popStep(msgs::Step& step);
00140 bool popStep();
00141
00146 int firstStepIndex() const;
00147
00152 int lastStepIndex() const;
00153
00154 protected:
00155 StepPlan step_plan_;
00156
00157 bool is_dirty_;
00158
00159
00160 mutable Mutex queue_mutex_;
00161 };
00162 }
00163
00164 #endif