* [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) [not found] ` <39e6f6c70703152036m778ea054gf32723d0eda2be68@mail.gmail.com> @ 2007-03-16 15:24 ` Richard Knutsson 2007-03-16 16:33 ` Bernd Petrovitsch 2007-03-16 23:20 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Jan Engelhardt 0 siblings, 2 replies; 6+ messages in thread From: Richard Knutsson @ 2007-03-16 15:24 UTC (permalink / raw) To: Arnaldo Carvalho de Melo; +Cc: Kernel Janitors List, linux-kernel Added LKML to the Cc: to see if there is someone there who also have any comments... Arnaldo Carvalho de Melo wrote: > On 3/15/07, Richard Knutsson <ricknu-0@student.ltu.se> wrote: >> Hi >> >> Was just checking up the 'sparse' when I saw something like "abc"[value] >> and thought: what about the (statement) ? "yes" : "no" I have seen in >> the kernel. >> >> Ran: >> grep -Enr "\?.*y.*\:.*n" * >> and to my surprise, it was not so false-positive-prone and there are >> many who does it. (Piping it to "grep yes" resulted in 153 hits) So I >> thought, if we could standardize this and eliminate some jmp-commands >> while doing it (the compiler should make the functions below inline), it >> might be interesting. >> >> char yesno_chr(const bool value) >> { >> return "ny"[value]; >> } >> >> char *yesno_str(const bool value) >> { >> return &"no\0yes"[3 * value]; >> } >> >> >> (there may be better names for them) >> I believe this should be slightly faster. I wrote two programs (one for >> each approach) and used 'time' while running them, and in a loop of >> 1000,000 I found the above to be slightly faster, but the variations >> between runs were larger. >> So maybe it is as well to write: return value ? "yes" : "no"; but i >> think there is a need for this kind of functions at least. >> >> Thoughts? > > The function makes sense, how you implement it? Something simple as > this is hardly on a fast path 8) True, but every cycled wasted... ;) But a (condition) ? "yes" : "no" is preferable here, I guess (as it is more readable). The big problem is, where to put it? Seems wrong to put in <linux/string.h> since it appear to be a replica of userspace's <string.h> (otherwise, why put mem*-functions in there?). A new file? What would it be then, "string_generic.h" maybe, and perhaps put in the pr_(info/debug), KERN_(WARN/...) and v?printk() (well, all those functions) in there. This means it will have to be included by <linux/kernel.h> but I think it would be a good thing to split out a few functions from it. Just putting some ideas out there, any suggestions? Richard Knutsson ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) 2007-03-16 15:24 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Richard Knutsson @ 2007-03-16 16:33 ` Bernd Petrovitsch 2007-03-16 17:09 ` Richard Knutsson 2007-03-16 23:20 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Jan Engelhardt 1 sibling, 1 reply; 6+ messages in thread From: Bernd Petrovitsch @ 2007-03-16 16:33 UTC (permalink / raw) To: Richard Knutsson Cc: Arnaldo Carvalho de Melo, Kernel Janitors List, linux-kernel On Fri, 2007-03-16 at 16:24 +0100, Richard Knutsson wrote: [...] > more readable). The big problem is, where to put it? Seems wrong to put > in <linux/string.h> since it appear to be a replica of userspace's > <string.h> (otherwise, why put mem*-functions in there?). memcpy(3) and memcmp(3) are also there in user-space. Bernd -- Firmix Software GmbH http://www.firmix.at/ mobil: +43 664 4416156 fax: +43 1 7890849-55 Embedded Linux Development and Services ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) 2007-03-16 16:33 ` Bernd Petrovitsch @ 2007-03-16 17:09 ` Richard Knutsson 2007-03-16 17:15 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) Bernd Petrovitsch 0 siblings, 1 reply; 6+ messages in thread From: Richard Knutsson @ 2007-03-16 17:09 UTC (permalink / raw) To: Bernd Petrovitsch Cc: Arnaldo Carvalho de Melo, Kernel Janitors List, linux-kernel Bernd Petrovitsch wrote: > On Fri, 2007-03-16 at 16:24 +0100, Richard Knutsson wrote: > [...] > >> more readable). The big problem is, where to put it? Seems wrong to put >> in <linux/string.h> since it appear to be a replica of userspace's >> <string.h> (otherwise, why put mem*-functions in there?). >> > > memcpy(3) and memcmp(3) are also there in user-space. > Did I miss something or did you just restate what was stated? (If it was not a replica, I think the mem*-functions would be better placed in memory.h, or such) Richard Knutsson ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) 2007-03-16 17:09 ` Richard Knutsson @ 2007-03-16 17:15 ` Bernd Petrovitsch 0 siblings, 0 replies; 6+ messages in thread From: Bernd Petrovitsch @ 2007-03-16 17:15 UTC (permalink / raw) To: Richard Knutsson Cc: Arnaldo Carvalho de Melo, Kernel Janitors List, linux-kernel On Fri, 2007-03-16 at 18:09 +0100, Richard Knutsson wrote: > Bernd Petrovitsch wrote: > > On Fri, 2007-03-16 at 16:24 +0100, Richard Knutsson wrote: > > [...] > > > >> more readable). The big problem is, where to put it? Seems wrong to put > >> in <linux/string.h> since it appear to be a replica of userspace's > >> <string.h> (otherwise, why put mem*-functions in there?). > >> > > > > memcpy(3) and memcmp(3) are also there in user-space. > > > Did I miss something or did you just restate what was stated? (If it was > not a replica, I think the mem*-functions would be better placed in > memory.h, or such) Ah, I misunderstood it as if you wonder why mem*() functions in <string.h>. Sorry. Bernd -- Firmix Software GmbH http://www.firmix.at/ mobil: +43 664 4416156 fax: +43 1 7890849-55 Embedded Linux Development and Services ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) 2007-03-16 15:24 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Richard Knutsson 2007-03-16 16:33 ` Bernd Petrovitsch @ 2007-03-16 23:20 ` Jan Engelhardt 2007-03-17 0:59 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) Richard Knutsson 1 sibling, 1 reply; 6+ messages in thread From: Jan Engelhardt @ 2007-03-16 23:20 UTC (permalink / raw) To: Richard Knutsson Cc: Arnaldo Carvalho de Melo, Kernel Janitors List, linux-kernel On Mar 16 2007 16:24, Richard Knutsson wrote: >> > >> > char yesno_chr(const bool value) >> > { >> > return "ny"[value]; >> > } >> > >> > char *yesno_str(const bool value) >> > { >> > return &"no\0yes"[3 * value]; >> > } static/extern const char *const yesno[] = {"no", "yes"}; static inline const char *yesno_str(bool value) { return yesno[value]; } #or #define yesno_str(value) yesno[!!(value)] >> > Thoughts? Jan -- ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) 2007-03-16 23:20 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Jan Engelhardt @ 2007-03-17 0:59 ` Richard Knutsson 0 siblings, 0 replies; 6+ messages in thread From: Richard Knutsson @ 2007-03-17 0:59 UTC (permalink / raw) To: Jan Engelhardt Cc: Arnaldo Carvalho de Melo, Kernel Janitors List, linux-kernel Jan Engelhardt wrote: > On Mar 16 2007 16:24, Richard Knutsson wrote: > >>>> char yesno_chr(const bool value) >>>> { >>>> return "ny"[value]; >>>> } >>>> >>>> char *yesno_str(const bool value) >>>> { >>>> return &"no\0yes"[3 * value]; >>>> } >>>> > > static/extern const char *const yesno[] = {"no", "yes"}; > static inline const char *yesno_str(bool value) > Should we use "inline"? Isn't it better to leave that to the compiler? Why the "const"? > { > return yesno[value]; > } > That's better :) But I think a simple static char *yesno_str(bool value) { return value ? "yes" : "no"; } is to prefer, don't you? It is simpler and we don't need to deal with an unnecessary array (unless it may be used by itself, that is. Then I would go for your implementation). > #or > #define yesno_str(value) yesno[!!(value)] > Why not "(bool)value" instead? We cast all the other times we want a something to be of a different kind. Any thoughts where to put a function like this? Richard Knutsson ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-03-17 1:02 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <45F95351.60308@student.ltu.se>
[not found] ` <39e6f6c70703152036m778ea054gf32723d0eda2be68@mail.gmail.com>
2007-03-16 15:24 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Richard Knutsson
2007-03-16 16:33 ` Bernd Petrovitsch
2007-03-16 17:09 ` Richard Knutsson
2007-03-16 17:15 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) Bernd Petrovitsch
2007-03-16 23:20 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) (was: Re: [KJ] [RFC] A need for a "yesno"-function?) Jan Engelhardt
2007-03-17 0:59 ` [RFC] A need for "yesno"-function? (and "cleanup" of kernel.h) Richard Knutsson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox