ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Console.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "Console.h"
9 
10 #include <Eigen/Core>
11 #include <string>
12 #include <vector>
13 
14 #include "Helper.h"
15 
16 namespace cloudViewer {
17 namespace utility {
18 
20  int argc,
21  char **argv,
22  const std::string &option,
23  const std::string &default_value /* = ""*/) {
24  char **itr = std::find(argv, argv + argc, option);
25  if (itr != argv + argc && ++itr != argv + argc) {
26  return std::string(*itr);
27  }
28  return default_value;
29 }
30 
31 int GetProgramOptionAsInt(int argc,
32  char **argv,
33  const std::string &option,
34  const int default_value /* = 0*/) {
35  std::string str = GetProgramOptionAsString(argc, argv, option, "");
36  if (str.length() == 0) {
37  return default_value;
38  }
39  char *end;
40  errno = 0;
41  long l = std::strtol(str.c_str(), &end, 0);
42  if ((errno == ERANGE && l == LONG_MAX) || l > INT_MAX) {
43  return default_value;
44  } else if ((errno == ERANGE && l == LONG_MIN) || l < INT_MIN) {
45  return default_value;
46  } else if (*end != '\0') {
47  return default_value;
48  }
49  return (int)l;
50 }
51 
52 double GetProgramOptionAsDouble(int argc,
53  char **argv,
54  const std::string &option,
55  const double default_value /* = 0.0*/) {
56  std::string str = GetProgramOptionAsString(argc, argv, option, "");
57  if (str.length() == 0) {
58  return default_value;
59  }
60  char *end;
61  errno = 0;
62  double l = std::strtod(str.c_str(), &end);
63  if (errno == ERANGE && (l == HUGE_VAL || l == -HUGE_VAL)) {
64  return default_value;
65  } else if (*end != '\0') {
66  return default_value;
67  }
68  return l;
69 }
70 
72  int argc,
73  char **argv,
74  const std::string &option,
75  const Eigen::VectorXd default_value /* =
76  Eigen::VectorXd::Zero()*/) {
77  std::string str = GetProgramOptionAsString(argc, argv, option, "");
78  if (str.length() == 0 || (!(str.front() == '(' && str.back() == ')') &&
79  !(str.front() == '[' && str.back() == ']') &&
80  !(str.front() == '<' && str.back() == '>'))) {
81  return default_value;
82  }
83  std::vector<std::string> tokens =
84  SplitString(str.substr(1, str.length() - 2), ",");
85  Eigen::VectorXd vec(tokens.size());
86  for (size_t i = 0; i < tokens.size(); i++) {
87  char *end;
88  errno = 0;
89  double l = std::strtod(tokens[i].c_str(), &end);
90  if (errno == ERANGE && (l == HUGE_VAL || l == -HUGE_VAL)) {
91  return default_value;
92  } else if (*end != '\0') {
93  return default_value;
94  }
95  vec(i) = l;
96  }
97  return vec;
98 }
99 
100 bool ProgramOptionExists(int argc, char **argv, const std::string &option) {
101  return std::find(argv, argv + argc, option) != argv + argc;
102 }
103 
105  char **argv,
106  const std::vector<std::string> &options) {
107  for (const auto &option : options) {
108  if (ProgramOptionExists(argc, argv, option)) {
109  return true;
110  }
111  }
112  return false;
113 }
114 
115 } // namespace utility
116 } // namespace cloudViewer
Helper functions for the ml ops.
int GetProgramOptionAsInt(int argc, char **argv, const std::string &option, const int default_value=0)
Definition: Console.cpp:31
bool ProgramOptionExistsAny(int argc, char **argv, const std::vector< std::string > &options)
Definition: Console.cpp:104
bool ProgramOptionExists(int argc, char **argv, const std::string &option)
Definition: Console.cpp:100
std::string GetProgramOptionAsString(int argc, char **argv, const std::string &option, const std::string &default_value="")
Definition: Console.cpp:19
void SplitString(std::vector< std::string > &tokens, const std::string &str, const std::string &delimiters=" ", bool trim_empty_str=true)
Definition: Helper.cpp:197
Eigen::VectorXd GetProgramOptionAsEigenVectorXd(int argc, char **argv, const std::string &option, const Eigen::VectorXd default_value=Eigen::VectorXd::Zero(0))
Definition: Console.cpp:71
double GetProgramOptionAsDouble(int argc, char **argv, const std::string &option, const double default_value=0.0)
Definition: Console.cpp:52
Generic file read and write utility for python interface.