]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: create a faster & cleaner alternative to argv_to_vec() 42820/head
authorRonen Friedman <rfriedma@redhat.com>
Tue, 17 Aug 2021 05:11:15 +0000 (05:11 +0000)
committerRonen Friedman <rfriedma@redhat.com>
Tue, 17 Aug 2021 18:06:58 +0000 (18:06 +0000)
New function signature follows current C++ guidance regarding
returning values from functions. It is also faster
- 1.3X for a sample test of 10 arguments.

Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
Co-authored-by: Kefu Chai <tchaikov@gmail.com>
src/ceph_osd.cc
src/common/ceph_argparse.cc
src/common/ceph_argparse.h

index 012c764575ed52d802370819f5499ba2bdb43b6b..b10c799b4a3bb9263c4ad13dde095ba4a0571df4 100644 (file)
@@ -118,8 +118,7 @@ static void usage()
 
 int main(int argc, const char **argv)
 {
-  vector<const char*> args;
-  argv_to_vec(argc, argv, args);
+  auto args = argv_to_vec(argc, argv);
   if (args.empty()) {
     cerr << argv[0] << ": -h or --help for usage" << std::endl;
     exit(1);
index 72d97f046c7f4fff03a8475620632a1dddf71301..7b6662c98a8bbd708f6a8f5bc22ad98653a3fe36 100644 (file)
@@ -132,6 +132,12 @@ void argv_to_vec(int argc, const char **argv,
   args.insert(args.end(), argv + 1, argv + argc);
 }
 
+std::vector<const char*> argv_to_vec(int argc, const char** argv)
+{
+  assert(argc > 0);
+  return {argv + 1, argv + argc};
+}
+
 void vec_to_argv(const char *argv0, std::vector<const char*>& args,
                  int *argc, const char ***argv)
 {
index 1c5370a3150460a220f299e3ff3e612c66feb033..06b3f2d995328689504d171fc6e321ed72104385 100644 (file)
@@ -46,6 +46,7 @@ extern void clear_g_str_vec();
 extern void env_to_vec(std::vector<const char*>& args, const char *name=NULL);
 extern void argv_to_vec(int argc, const char **argv,
                  std::vector<const char*>& args);
+extern std::vector<const char*> argv_to_vec(int argc, const char** argv);
 extern void vec_to_argv(const char *argv0, std::vector<const char*>& args,
                        int *argc, const char ***argv);