From b89d4c74822cb0a90a0b9c72120c02b33a415dad Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Tue, 17 Aug 2021 05:11:15 +0000 Subject: [PATCH] common: create a faster & cleaner alternative to argv_to_vec() 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 Co-authored-by: Kefu Chai --- src/ceph_osd.cc | 3 +-- src/common/ceph_argparse.cc | 6 ++++++ src/common/ceph_argparse.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index 012c764575ed5..b10c799b4a3bb 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -118,8 +118,7 @@ static void usage() int main(int argc, const char **argv) { - vector 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); diff --git a/src/common/ceph_argparse.cc b/src/common/ceph_argparse.cc index 72d97f046c7f4..7b6662c98a8bb 100644 --- a/src/common/ceph_argparse.cc +++ b/src/common/ceph_argparse.cc @@ -132,6 +132,12 @@ void argv_to_vec(int argc, const char **argv, args.insert(args.end(), argv + 1, argv + argc); } +std::vector 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& args, int *argc, const char ***argv) { diff --git a/src/common/ceph_argparse.h b/src/common/ceph_argparse.h index 1c5370a315046..06b3f2d995328 100644 --- a/src/common/ceph_argparse.h +++ b/src/common/ceph_argparse.h @@ -46,6 +46,7 @@ extern void clear_g_str_vec(); extern void env_to_vec(std::vector& args, const char *name=NULL); extern void argv_to_vec(int argc, const char **argv, std::vector& args); +extern std::vector argv_to_vec(int argc, const char** argv); extern void vec_to_argv(const char *argv0, std::vector& args, int *argc, const char ***argv); -- 2.39.5