convert enum to enum class and provide to_string

This commit is contained in:
William Woodall 2016-03-03 18:13:46 -08:00
parent 249b7d80d8
commit 0c826497f1
2 changed files with 33 additions and 1 deletions

View file

@ -17,6 +17,7 @@
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include <chrono>
#include <cstdlib> #include <cstdlib>
#include <iostream> #include <iostream>
#include <list> #include <list>
@ -42,7 +43,13 @@ namespace executor
* INTERRUPTED: The future is not complete, spinning was interrupted by Ctrl-C or another error. * INTERRUPTED: The future is not complete, spinning was interrupted by Ctrl-C or another error.
* TIMEOUT: Spinning timed out. * TIMEOUT: Spinning timed out.
*/ */
enum FutureReturnCode {SUCCESS, INTERRUPTED, TIMEOUT}; enum class FutureReturnCode {SUCCESS, INTERRUPTED, TIMEOUT};
std::ostream &
operator << (std::ostream & os, const FutureReturnCode & future_return_code);
std::string
to_string(const FutureReturnCode & future_return_code);
/// ///
/** /**

View file

@ -12,6 +12,8 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#include <type_traits>
#include "rclcpp/executor.hpp" #include "rclcpp/executor.hpp"
#include "rclcpp/scope_exit.hpp" #include "rclcpp/scope_exit.hpp"
@ -20,6 +22,7 @@
using rclcpp::executor::AnyExecutable; using rclcpp::executor::AnyExecutable;
using rclcpp::executor::Executor; using rclcpp::executor::Executor;
using rclcpp::executor::ExecutorArgs; using rclcpp::executor::ExecutorArgs;
using rclcpp::executor::FutureReturnCode;
Executor::Executor(const ExecutorArgs & args) Executor::Executor(const ExecutorArgs & args)
: spinning(false), : spinning(false),
@ -569,3 +572,25 @@ Executor::get_next_executable(std::chrono::nanoseconds timeout)
} }
return any_exec; return any_exec;
} }
std::ostream &
rclcpp::executor::operator << (std::ostream & os, const FutureReturnCode & future_return_code)
{
return os << to_string(future_return_code);
}
std::string
rclcpp::executor::to_string(const FutureReturnCode & future_return_code)
{
using enum_type = std::underlying_type<FutureReturnCode>::type;
using std::string;
using std::to_string;
switch (future_return_code) {
case FutureReturnCode::SUCCESS:
return string("SUCCESS (" + to_string(static_cast<enum_type>(future_return_code)) + ")");
case FutureReturnCode::INTERRUPTED:
return string("INTERRUPTED (" + to_string(static_cast<enum_type>(future_return_code)) + ")");
case FutureReturnCode::TIMEOUT:
return string("TIMEOUT (" + to_string(static_cast<enum_type>(future_return_code)) + ")");
}
}