From: Alexander Turenko <alexander.turenko@tarantool.org> To: "Michał Durak" <gdrbyko1@protonmail.com> Cc: "tarantool-patches@freelists.org" <tarantool-patches@freelists.org> Subject: [tarantool-patches] Re: [PATCH v2] add optional 'chars' param to string.strip functions Date: Mon, 21 Jan 2019 21:14:50 +0300 [thread overview] Message-ID: <20190121181448.hh4t7kvv45tc7ldu@tkn_work_nb> (raw) In-Reply-To: <MrxUIRW_r0gsgRqIkcnEy0eI_WA08r7ZmKT8-Ojs_3aZSID29KCsGjHzfIMVugbplVd2UPtQbW1djAF5r4YfMeiI9TPa7ca9jhQC18CJRiQ=@protonmail.com> Hi! Add the 'lua: ' prefix to the commit message header and try to fit it in 50 symbols, maybe like so: > lua: add 'chars' param to string.strip functions The Lua part looks okay, the test looks okay. See comments re C part below. WBR, Alexander Turenko. On Thu, Jan 17, 2019 at 09:35:20PM +0000, Michał Durak wrote: > Add optional 'chars' parameter to string.strip, string.lstrip > and string.rstrip for specifying the unwanted characters. > Behavior modeled after the equivalent Python built-ins. > > Needed for: #2977 Please, change to 'Fixes #2977' or 'Closes #2977' to auto-close the commit. Also it would be great if you would write docbot comment to allow the tarantool documentation team to catch the new task when your commit will land into 2.1 branch. Docs and example: https://github.com/tarantool/docbot/blob/master/README.md https://github.com/tarantool/tarantool/commit/dfa7a61d53fd8ad1d5aabb8138028eb121a40f61 > --- > > FreeLists seems to redact the email addresses of senders using ProtonMail. > Please direct any replies to gdrbyko1[at]protonmail[dot]com > branch: https://github.com/gdrbyKo1/tarantool/tree/gdrbyko1/gh-2977 > issue: https://github.com/tarantool/tarantool/issues/2977 > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt > index 04de5ad04..5ff4094ee 100644 > --- a/src/CMakeLists.txt > +++ b/src/CMakeLists.txt > @@ -109,6 +109,7 @@ set (core_sources > coll_def.c > mpstream.c > port.c > + tt_string.c Move it to src/lua/string.[ch]. > diff --git a/src/lua/string.lua b/src/lua/string.lua > index cbce26b35..35bd95343 100644 > --- a/src/lua/string.lua > +++ b/src/lua/string.lua > @@ -6,15 +6,23 @@ ffi.cdef[[ > const char *needle, size_t needle_len); > int memcmp(const char *mem1, const char *mem2, size_t num); > int isspace(int c); > + void > + string_strip_helper(const char *inp, unsigned long inp_len, > + const char *chars, unsigned long chars_len, > + bool lstrip, bool rstrip, > + unsigned long *newstart, unsigned long *newlen); > ]] Don't forget to change definition here after size_t changes (see below). > diff --git a/src/tt_string.c b/src/tt_string.c > new file mode 100644 > index 000000000..a3cd4ff94 > --- /dev/null > +++ b/src/tt_string.c Please, use tabs for indent. Consider out C style guide: https://www.tarantool.io/en/doc/1.10/dev_guide/c_style_guide/ > +unsigned long > +string_lstrip_helper(const char *inp, unsigned long inp_len, uint8_t *arr) > +{ 1. It seems that it is usual to use size_t for a string length. At least lua_tolstring() and strlen() use them. It seems that we should use it too. 2. We can make this and the following function static (and also remove them from a header). 3. I think a comment would be helpful, at least what is a return value. 4. I think we can name it like lstrip_helper() to highlight the fact that it a) is file-level (static); b) has different API from string_strip_helper(). > + unsigned long i; > + for (i = 0; i < inp_len; ++i) { > + unsigned c = inp[i]; Maybe this should be unsigned char? > + if (arr[c] == 0) > + break; > + } > + return i; > +} > + > +unsigned long > +string_rstrip_helper(const char *inp, unsigned long inp_len, uint8_t *arr) > +{ > + unsigned long i; > + for (i = inp_len - 1; i != (unsigned long)(-1); --i) { > + unsigned c = inp[i]; > + if (arr[c] == 0) > + break; > + } > + return inp_len - i - 1; > +} The same questions as for string_lstrip_helper are applicable here. > +void > +string_strip_helper(const char *inp, unsigned long inp_len, const char *chars, > + unsigned long chars_len, bool lstrip, bool rstrip, > + unsigned long *newstart, unsigned long *newlen) > +{ > + unsigned long skipped_from_left = 0; > + unsigned long skipped_from_right = 0; > + uint8_t arr[256] = {0}; > + for (unsigned long i = 0; i < chars_len; ++i) { > + unsigned c = chars[i]; > + arr[c] = 1; > + } > + > + if (lstrip) > + skipped_from_left = string_lstrip_helper(inp, inp_len, arr); > + if (rstrip && skipped_from_left < inp_len - 1) This condition is not quite obvious. Can you please comment it? > + skipped_from_right = string_rstrip_helper(inp, inp_len, arr); > + > + *newstart = skipped_from_left; > + *newlen = inp_len - skipped_from_left - skipped_from_right; > +} > +#include <stdint.h> > +#include <stdbool.h> > + > +#if defined(__cplusplus) > +extern "C" { > +#endif /* defined(__cplusplus) */ > + > +unsigned long > +string_lstrip_helper(const char *inp, unsigned long inp_len, uint8_t *arr); > + > +unsigned long > +string_rstrip_helper(const char *inp, unsigned long inp_len, uint8_t *arr); > + These function can be removed. > +/** \cond public */ > + > +void > +string_strip_helper(const char *inp, unsigned long inp_len, const char *chars, > + unsigned long chars_len, bool lstrip, bool rstrip, > + unsigned long *newstart, unsigned long *newlen); Tabs correctly used at line 51, but spaces are at line 52. Please, follow our C style guide (it is very similar to Linux Kernel style). Please add doxygen-style comments (what a function do, what are parameters and return values). Note: comments should fit into 66 symbols.
prev parent reply other threads:[~2019-01-21 18:14 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-17 21:35 [tarantool-patches] " Michał Durak 2019-01-21 18:14 ` Alexander Turenko [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190121181448.hh4t7kvv45tc7ldu@tkn_work_nb \ --to=alexander.turenko@tarantool.org \ --cc=gdrbyko1@protonmail.com \ --cc=tarantool-patches@freelists.org \ --subject='[tarantool-patches] Re: [PATCH v2] add optional '\''chars'\'' param to string.strip functions' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox