Point Cloud Library (PCL)  1.5.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
parse.h
Go to the documentation of this file.
00001 /*
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Copyright (c) 2010, Willow Garage, Inc.
00005  *  All rights reserved.
00006  *
00007  *  Redistribution and use in source and binary forms, with or without
00008  *  modification, are permitted provided that the following conditions
00009  *  are met:
00010  *
00011  *   * Redistributions of source code must retain the above copyright
00012  *     notice, this list of conditions and the following disclaimer.
00013  *   * Redistributions in binary form must reproduce the above
00014  *     copyright notice, this list of conditions and the following
00015  *     disclaimer in the documentation and/or other materials provided
00016  *     with the distribution.
00017  *   * Neither the name of Willow Garage, Inc. nor the names of its
00018  *     contributors may be used to endorse or promote products derived
00019  *     from this software without specific prior written permission.
00020  *
00021  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032  *  POSSIBILITY OF SUCH DAMAGE.
00033  *
00034  * $Id: parse.h 4702 2012-02-23 09:39:33Z gedikli $
00035  *
00036  */
00037 #ifndef TERMINAL_TOOLS_PARSE_H_
00038 #define TERMINAL_TOOLS_PARSE_H_
00039 
00040 #include <vector>
00041 #include <string>
00042 #include <string.h>
00043 #include <stdlib.h>
00044 #include <boost/algorithm/string.hpp>
00045 #include <sstream>
00046 
00047 #include <pcl/pcl_macros.h>
00048 
00049 namespace pcl
00050 {
00051   namespace console
00052   {
00053 
00064     PCL_EXPORTS bool
00065     find_switch (int argc, char** argv, const char* argument_name);
00066 
00074     PCL_EXPORTS int
00075     find_argument (int argc, char** argv, const char* argument_name);
00076 
00084     template<typename Type> int
00085     parse (int argc, char** argv, const char* argument_name, Type& value)
00086     {
00087       int index = find_argument (argc, argv, argument_name) + 1;
00088 
00089       if (index > 0 && index < argc)
00090       {
00091         std::istringstream stream;
00092         stream.clear ();
00093         stream.str (argv[index]);
00094         stream >> value;
00095       }
00096 
00097       return (index - 1);
00098     }
00099 
00107     PCL_EXPORTS int
00108     parse_argument (int argc, char** argv, const char* str, std::string &val);
00109 
00117     PCL_EXPORTS int
00118     parse_argument (int argc, char** argv, const char* str, bool &val);
00119 
00127     PCL_EXPORTS int
00128     parse_argument (int argc, char** argv, const char* str, double &val);
00129 
00137     PCL_EXPORTS int
00138     parse_argument (int argc, char** argv, const char* str, int &val);
00139 
00147     PCL_EXPORTS int
00148     parse_argument (int argc, char** argv, const char* str, unsigned int &val);
00149 
00157     PCL_EXPORTS int
00158     parse_argument (int argc, char** argv, const char* str, char &val);
00159 
00169     PCL_EXPORTS int
00170     parse_2x_arguments (int argc, char** argv, const char* str, double &f, double &s, bool debug = true);
00171 
00181     PCL_EXPORTS int
00182     parse_2x_arguments (int argc, char** argv, const char* str, int &f, int &s, bool debug = true);
00183 
00194     PCL_EXPORTS int
00195     parse_3x_arguments (int argc, char** argv, const char* str, double &f, double &s, double &t, bool debug = true);
00196 
00207     PCL_EXPORTS int
00208     parse_3x_arguments (int argc, char** argv, const char* str, int &f, int &s, int &t, bool debug = true);
00209 
00217     PCL_EXPORTS int
00218     parse_x_arguments (int argc, char** argv, const char* str, std::vector<double>& v);
00219 
00227     PCL_EXPORTS int
00228     parse_x_arguments (int argc, char** argv, const char* str, std::vector<int>& v);
00229 
00237     PCL_EXPORTS bool
00238     parse_multiple_arguments (int argc, char** argv, const char* str, std::vector<int> &values);
00239 
00247     PCL_EXPORTS bool
00248     parse_multiple_arguments (int argc, char** argv, const char* str, std::vector<double> &values);
00249 
00257     PCL_EXPORTS bool
00258     parse_multiple_arguments (int argc, char** argv, const char* str, std::vector<std::string> &values);
00259 
00269     PCL_EXPORTS bool
00270     parse_multiple_2x_arguments (int argc, char** argv, const char* str, std::vector<double> &values_f, std::vector<double> &values_s);
00271 
00282     PCL_EXPORTS bool
00283     parse_multiple_3x_arguments (int argc, char** argv, const char* str, std::vector<double> &values_f, std::vector<double> &values_s, std::vector<double> &values_t);
00284 
00291     PCL_EXPORTS std::vector<int>
00292     parse_file_extension_argument (int argc, char** argv, const std::string &ext);
00293   }
00294 }
00295 
00296 #endif