Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1297821 > unrolled thread

[PATCH] staging: most: replace multiple if..else with table lookup

Started by"Gujulan Elango, Hari Prasath (H.)" <hgujulan@visteon.com>
First post2015-12-24 12:30 +0100
Last post2015-12-30 11:50 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] staging: most: replace multiple if..else with table lookup "Gujulan Elango, Hari Prasath (H.)" <hgujulan@visteon.com> - 2015-12-24 12:30 +0100
    Re: [PATCH] staging: most: replace multiple if..else with table  lookup Joe Perches <joe@perches.com> - 2015-12-24 17:10 +0100
      Re: [PATCH] staging: most: replace multiple if..else with table  lookup "Gujulan Elango, Hari Prasath (H.)" <hgujulan@visteon.com> - 2015-12-30 11:50 +0100

#1297821 — [PATCH] staging: most: replace multiple if..else with table lookup

From"Gujulan Elango, Hari Prasath (H.)" <hgujulan@visteon.com>
Date2015-12-24 12:30 +0100
Subject[PATCH] staging: most: replace multiple if..else with table lookup
Message-ID<qJcfM-65B-11@gated-at.bofh.it>
From: Hari Prasath Gujulan Elango <hgujulan@visteon.com>

Replace multiple if..else if..statements with simple table lookup in two
functions.

Signed-off-by: Hari Prasath Gujulan Elango <hgujulan@visteon.com>
---
 drivers/staging/most/mostcore/core.c | 39 ++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/drivers/staging/most/mostcore/core.c b/drivers/staging/most/mostcore/core.c
index ed1ed25..7b4636b 100644
--- a/drivers/staging/most/mostcore/core.c
+++ b/drivers/staging/most/mostcore/core.c
@@ -82,6 +82,14 @@ struct most_inst_obj {
 	struct list_head list;
 };
 
+static const struct {
+	int most_ch_data_type;
+	char *name;
+} ch_data_type[] = { { MOST_CH_CONTROL, "control\n" },
+	{ MOST_CH_ASYNC, "async\n" },
+	{ MOST_CH_SYNC, "sync\n" },
+	{ MOST_CH_ISOC_AVP, "isoc_avp\n"} };
+
 #define to_inst_obj(d) container_of(d, struct most_inst_obj, kobj)
 
 /**
@@ -414,14 +422,12 @@ static ssize_t show_set_datatype(struct most_c_obj *c,
 				 struct most_c_attr *attr,
 				 char *buf)
 {
-	if (c->cfg.data_type & MOST_CH_CONTROL)
-		return snprintf(buf, PAGE_SIZE, "control\n");
-	else if (c->cfg.data_type & MOST_CH_ASYNC)
-		return snprintf(buf, PAGE_SIZE, "async\n");
-	else if (c->cfg.data_type & MOST_CH_SYNC)
-		return snprintf(buf, PAGE_SIZE, "sync\n");
-	else if (c->cfg.data_type & MOST_CH_ISOC_AVP)
-		return snprintf(buf, PAGE_SIZE, "isoc_avp\n");
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
+		if (c->cfg.data_type & ch_data_type[i].most_ch_data_type)
+			return snprintf(buf, PAGE_SIZE, ch_data_type[i].name);
+	}
 	return snprintf(buf, PAGE_SIZE, "unconfigured\n");
 }
 
@@ -430,15 +436,14 @@ static ssize_t store_set_datatype(struct most_c_obj *c,
 				  const char *buf,
 				  size_t count)
 {
-	if (!strcmp(buf, "control\n")) {
-		c->cfg.data_type = MOST_CH_CONTROL;
-	} else if (!strcmp(buf, "async\n")) {
-		c->cfg.data_type = MOST_CH_ASYNC;
-	} else if (!strcmp(buf, "sync\n")) {
-		c->cfg.data_type = MOST_CH_SYNC;
-	} else if (!strcmp(buf, "isoc_avp\n")) {
-		c->cfg.data_type = MOST_CH_ISOC_AVP;
-	} else {
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
+		if (!strcmp(buf, ch_data_type[i].name))
+			c->cfg.data_type = ch_data_type[i].most_ch_data_type;
+	}
+
+	if (i == ARRAY_SIZE(ch_data_type)) {
 		pr_info("WARN: invalid attribute settings\n");
 		return -EINVAL;
 	}
-- 
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1297984 — Re: [PATCH] staging: most: replace multiple if..else with table lookup

FromJoe Perches <joe@perches.com>
Date2015-12-24 17:10 +0100
SubjectRe: [PATCH] staging: most: replace multiple if..else with table lookup
Message-ID<qJgCM-u9-57@gated-at.bofh.it>
In reply to#1297821
On Thu, 2015-12-24 at 10:49 +0000, Gujulan Elango, Hari Prasath (H.) wrote:
> From: Hari Prasath Gujulan Elango <hgujulan@visteon.com>
> 
> Replace multiple if..else if..statements with simple table lookup in two
> functions.
> 
> Signed-off-by: Hari Prasath Gujulan Elango <hgujulan@visteon.com>
> ---
>  drivers/staging/most/mostcore/core.c | 39 ++++++++++++++++++++----------------
>  1 file changed, 22 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/staging/most/mostcore/core.c b/drivers/staging/most/mostcore/core.c
> index ed1ed25..7b4636b 100644
> --- a/drivers/staging/most/mostcore/core.c
> +++ b/drivers/staging/most/mostcore/core.c
> @@ -82,6 +82,14 @@ struct most_inst_obj {
>  	struct list_head list;
>  };
>  
> +static const struct {
> +	int most_ch_data_type;
> +	char *name;
> +} ch_data_type[] = { { MOST_CH_CONTROL, "control\n" },
> +	{ MOST_CH_ASYNC, "async\n" },
> +	{ MOST_CH_SYNC, "sync\n" },
> +	{ MOST_CH_ISOC_AVP, "isoc_avp\n"} };
> +
>  #define to_inst_obj(d) container_of(d, struct most_inst_obj, kobj)
>  
>  /**
> @@ -414,14 +422,12 @@ static ssize_t show_set_datatype(struct most_c_obj *c,
>  				 struct most_c_attr *attr,
>  				 char *buf)
>  {
> -	if (c->cfg.data_type & MOST_CH_CONTROL)
> -		return snprintf(buf, PAGE_SIZE, "control\n");
> -	else if (c->cfg.data_type & MOST_CH_ASYNC)
> -		return snprintf(buf, PAGE_SIZE, "async\n");
> -	else if (c->cfg.data_type & MOST_CH_SYNC)
> -		return snprintf(buf, PAGE_SIZE, "sync\n");
> -	else if (c->cfg.data_type & MOST_CH_ISOC_AVP)
> -		return snprintf(buf, PAGE_SIZE, "isoc_avp\n");
> +	int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
> +		if (c->cfg.data_type & ch_data_type[i].most_ch_data_type)
> +			return snprintf(buf, PAGE_SIZE, ch_data_type[i].name);
> +	}
>  	return snprintf(buf, PAGE_SIZE, "unconfigured\n");
>  }
>  
> @@ -430,15 +436,14 @@ static ssize_t store_set_datatype(struct most_c_obj *c,
>  				  const char *buf,
>  				  size_t count)
>  {
> -	if (!strcmp(buf, "control\n")) {
> -		c->cfg.data_type = MOST_CH_CONTROL;
> -	} else if (!strcmp(buf, "async\n")) {
> -		c->cfg.data_type = MOST_CH_ASYNC;
> -	} else if (!strcmp(buf, "sync\n")) {
> -		c->cfg.data_type = MOST_CH_SYNC;
> -	} else if (!strcmp(buf, "isoc_avp\n")) {
> -		c->cfg.data_type = MOST_CH_ISOC_AVP;
> -	} else {
> +	int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
> +		if (!strcmp(buf, ch_data_type[i].name))
> +			c->cfg.data_type = ch_data_type[i].most_ch_data_type;

Missing braces and break;

> +	}
> +
> +	if (i == ARRAY_SIZE(ch_data_type)) {
>  		pr_info("WARN: invalid attribute settings\n");
>  		return -EINVAL;
>  	}

This seems like a lot of code for a simple test.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1299307 — Re: [PATCH] staging: most: replace multiple if..else with table lookup

From"Gujulan Elango, Hari Prasath (H.)" <hgujulan@visteon.com>
Date2015-12-30 11:50 +0100
SubjectRe: [PATCH] staging: most: replace multiple if..else with table lookup
Message-ID<qLmum-5sY-11@gated-at.bofh.it>
In reply to#1297984
On Thu, Dec 24, 2015 at 08:06:26AM -0800, Joe Perches wrote:
> On Thu, 2015-12-24 at 10:49 +0000, Gujulan Elango, Hari Prasath (H.) wrote:
> > From: Hari Prasath Gujulan Elango <hgujulan@visteon.com>
> > 
> > Replace multiple if..else if..statements with simple table lookup in two
> > functions.
> > 
> > Signed-off-by: Hari Prasath Gujulan Elango <hgujulan@visteon.com>
> > ---
> >  drivers/staging/most/mostcore/core.c | 39 ++++++++++++++++++++----------------
> >  1 file changed, 22 insertions(+), 17 deletions(-)
> > 
> > diff --git a/drivers/staging/most/mostcore/core.c b/drivers/staging/most/mostcore/core.c
> > index ed1ed25..7b4636b 100644
> > --- a/drivers/staging/most/mostcore/core.c
> > +++ b/drivers/staging/most/mostcore/core.c
> > @@ -82,6 +82,14 @@ struct most_inst_obj {
> >  	struct list_head list;
> >  };
> >  
> > +static const struct {
> > +	int most_ch_data_type;
> > +	char *name;
> > +} ch_data_type[] = { { MOST_CH_CONTROL, "control\n" },
> > +	{ MOST_CH_ASYNC, "async\n" },
> > +	{ MOST_CH_SYNC, "sync\n" },
> > +	{ MOST_CH_ISOC_AVP, "isoc_avp\n"} };
> > +
> >  #define to_inst_obj(d) container_of(d, struct most_inst_obj, kobj)
> >  
> >  /**
> > @@ -414,14 +422,12 @@ static ssize_t show_set_datatype(struct most_c_obj *c,
> >  				 struct most_c_attr *attr,
> >  				 char *buf)
> >  {
> > -	if (c->cfg.data_type & MOST_CH_CONTROL)
> > -		return snprintf(buf, PAGE_SIZE, "control\n");
> > -	else if (c->cfg.data_type & MOST_CH_ASYNC)
> > -		return snprintf(buf, PAGE_SIZE, "async\n");
> > -	else if (c->cfg.data_type & MOST_CH_SYNC)
> > -		return snprintf(buf, PAGE_SIZE, "sync\n");
> > -	else if (c->cfg.data_type & MOST_CH_ISOC_AVP)
> > -		return snprintf(buf, PAGE_SIZE, "isoc_avp\n");
> > +	int i;
> > +
> > +	for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
> > +		if (c->cfg.data_type & ch_data_type[i].most_ch_data_type)
> > +			return snprintf(buf, PAGE_SIZE, ch_data_type[i].name);
> > +	}
> >  	return snprintf(buf, PAGE_SIZE, "unconfigured\n");
> >  }
> >  
> > @@ -430,15 +436,14 @@ static ssize_t store_set_datatype(struct most_c_obj *c,
> >  				  const char *buf,
> >  				  size_t count)
> >  {
> > -	if (!strcmp(buf, "control\n")) {
> > -		c->cfg.data_type = MOST_CH_CONTROL;
> > -	} else if (!strcmp(buf, "async\n")) {
> > -		c->cfg.data_type = MOST_CH_ASYNC;
> > -	} else if (!strcmp(buf, "sync\n")) {
> > -		c->cfg.data_type = MOST_CH_SYNC;
> > -	} else if (!strcmp(buf, "isoc_avp\n")) {
> > -		c->cfg.data_type = MOST_CH_ISOC_AVP;
> > -	} else {
> > +	int i;
> > +
> > +	for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
> > +		if (!strcmp(buf, ch_data_type[i].name))
> > +			c->cfg.data_type = ch_data_type[i].most_ch_data_type;
> 
> Missing braces and break;
> 
> > +	}
> > +
> > +	if (i == ARRAY_SIZE(ch_data_type)) {
> >  		pr_info("WARN: invalid attribute settings\n");
> >  		return -EINVAL;
> >  	}
> 
> This seems like a lot of code for a simple test.
> 
Hello Joe,
I have sent a v2 for this patch with corrections made.

Regards,
Hari Prasath--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web