35   interp_type_(ZERO_ORDER_HOLD)
 
   41   if (
x_.size() == 0 || x > 
x_.back()) {
 
   49               "X values must be increasing. (%f <= %f)",
 
   62   if (index < 
x_.size()) {
 
   63     return std::pair<double, double>(
x_[index], 
y_[index]);
 
   65     ROS_ERROR(
"Invalid index in getPoint (index=%zu, numPoints=%zu)",
 
   67     return std::pair<double, double>(0.0, 0.0);
 
   73   if (index < 
x_.size()) {
 
   74     x_.erase(
x_.begin()+index);
 
   75     y_.erase(
y_.begin()+index);
 
   77     ROS_ERROR(
"Invalid index in removePoint (index=%zu, numPoints=%zu)",
 
   96     return "zero_order_hold";
 
  111   const std::string ¶m_name,
 
  112   bool error_if_missing)
 
  114   std::string resolved_name = node_handle.
resolveName(param_name);
 
  117   if (node_handle.
getParam(param_name, curve_param)) {
 
  120     if (error_if_missing) {
 
  121       ROS_ERROR(
"Missing required parameter at '%s'.", resolved_name.c_str());
 
  131   const std::string ¶m_name)
 
  134     ROS_ERROR(
"Parameter '%s' must be a structure.", param_name.c_str());
 
  138   bool error_occurred = 
false;
 
  140   if (curve_param.
hasMember(
"interpolation_type")) {
 
  141     std::string interp_type = 
static_cast<std::string
>(curve_param[
"interpolation_type"]);
 
  143     if (interp_type == 
"zero_order_hold") {
 
  145     } 
else if (interp_type == 
"linear") {
 
  148       error_occurred = 
true;
 
  149       ROS_ERROR(
"Invalid interpolation type '%s' at '%s'.",
 
  150                 interp_type.c_str(), param_name.c_str());
 
  153     ROS_INFO(
"No 'interpolation_type' found in %s. " 
  154              "Defaulting to zero_order_hold.",
 
  160     ROS_INFO(
"Missing required parameter '%s/values'.",
 
  168     ROS_ERROR(
"Parameter '%s/values' must be an array.", param_name.c_str());
 
  172   for (
int i = 0; i < param_value.
size(); i++)
 
  178       ROS_ERROR(
"Parameter '%s/values[%d]' must be an array.",
 
  179                 param_name.c_str(), i);
 
  180       error_occurred = 
true;
 
  184     if (point_value.
size() != 2) {
 
  185       ROS_ERROR(
"Parameter '%s/values[%d]' must be 2 elements.",
 
  186                 param_name.c_str(), i);
 
  187       error_occurred = 
true;
 
  193     double x_value = std::numeric_limits<double>::quiet_NaN();
 
  194     double y_value = std::numeric_limits<double>::quiet_NaN();
 
  199       ROS_ERROR(
"Parameters '%s/values[%d][0] must be a double or an integer.",
 
  200                 param_name.c_str(), i);
 
  201       error_occurred = 
true;
 
  203       x_value = 
static_cast<double>(x_param);
 
  209       ROS_ERROR(
"Parameters '%s/values[%d][1] must be a double or an integer.",
 
  210                 param_name.c_str(), i);
 
  211       error_occurred = 
true;
 
  213       y_value = 
static_cast<double>(y_param);
 
  216     if (!error_occurred) {
 
  218         ROS_ERROR(
"Failed to add point %s/values[%d].",
 
  219                   param_name.c_str(), i);
 
  220         error_occurred = 
true;
 
  225   if (error_occurred) {
 
  235   if (
x_.size() == 0) {
 
  244   if (
x_.size() == 0) {