From bd2b24fbcaf89d827610f5371a0c13c3db1ae38b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 11:41:48 -0500 Subject: Writing a small little function to generate the ID. --- src/generate-id.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/generate-id.c (limited to 'src/generate-id.c') diff --git a/src/generate-id.c b/src/generate-id.c new file mode 100644 index 0000000..95a4bee --- /dev/null +++ b/src/generate-id.c @@ -0,0 +1,58 @@ +/* +Quick litte lack to generate the ordering ID. + +Copyright 2010 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + +struct ordering_id_struct { + gchar category; + gchar first; + gchar second; + gchar third; +}; + +union ordering_id_union_t { + guint32 id; + struct ordering_id_struct str; +}; + +guint32 +generate_id (const gchar category, const gchar * id) +{ + union ordering_id_union_t u; + + u.str.category = category; + + u.str.first = 0; + u.str.second = 0; + u.str.third = 0; + + if (id != NULL) { + if (id[0] != '\0') { + u.str.first = id[0]; + if (id[1] != '\0') { + u.str.second = id[1]; + if (id[2] != '\0') { + u.str.third = id[2]; + } + } + } + } + + return u.id; +} -- cgit v1.2.3 From 5bffdaf7141fd7909474daa23ff9107c6f047453 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 11:43:42 -0500 Subject: Brining generate-id into the fold --- src/generate-id.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/generate-id.c') diff --git a/src/generate-id.c b/src/generate-id.c index 95a4bee..6855b39 100644 --- a/src/generate-id.c +++ b/src/generate-id.c @@ -19,6 +19,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include "generate-id.h" + struct ordering_id_struct { gchar category; gchar first; -- cgit v1.2.3 From 26d50dfef1ddbc5cda58cb221501c6b5654b36b5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 11 Aug 2010 10:10:45 -0500 Subject: Switching to be more opaque, but also more sane. --- src/generate-id.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/generate-id.c') diff --git a/src/generate-id.c b/src/generate-id.c index 6855b39..79e2c26 100644 --- a/src/generate-id.c +++ b/src/generate-id.c @@ -34,7 +34,7 @@ union ordering_id_union_t { }; guint32 -generate_id (const gchar category, const gchar * id) +generate_id (const AppIndicatorCategory category, const gchar * id) { union ordering_id_union_t u; -- cgit v1.2.3 From 38c7a01f9a5c462ea31403a55de5b08f3fb86222 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 11 Aug 2010 11:03:02 -0500 Subject: Making the categories a case statement. --- src/generate-id.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/generate-id.c') diff --git a/src/generate-id.c b/src/generate-id.c index 79e2c26..5b0eb8b 100644 --- a/src/generate-id.c +++ b/src/generate-id.c @@ -33,12 +33,34 @@ union ordering_id_union_t { struct ordering_id_struct str; }; +#define MULTIPLIER 32 + guint32 generate_id (const AppIndicatorCategory category, const gchar * id) { union ordering_id_union_t u; - u.str.category = category; + switch (category) { + case APP_INDICATOR_CATEGORY_OTHER: + u.str.category = MULTIPLIER * 5; + break; + case APP_INDICATOR_CATEGORY_APPLICATION_STATUS: + u.str.category = MULTIPLIER * 4; + break; + case APP_INDICATOR_CATEGORY_COMMUNICATIONS: + u.str.category = MULTIPLIER * 3; + break; + case APP_INDICATOR_CATEGORY_SYSTEM_SERVICES: + u.str.category = MULTIPLIER * 2; + break; + case APP_INDICATOR_CATEGORY_HARDWARE: + u.str.category = MULTIPLIER * 1; + break; + default: + g_warning("Got an undefined category: %d", category); + u.str.category = 0; + break; + } u.str.first = 0; u.str.second = 0; -- cgit v1.2.3 From 8bfbd55d1427fb23ab63d90df388c68799b3eaca Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 11 Aug 2010 11:06:39 -0500 Subject: Instead of using a struct just using multiply, which in all reality, is more clear and the compiler will optimize it for us. --- src/generate-id.c | 45 ++++++++++++++++----------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) (limited to 'src/generate-id.c') diff --git a/src/generate-id.c b/src/generate-id.c index 5b0eb8b..a504e44 100644 --- a/src/generate-id.c +++ b/src/generate-id.c @@ -21,62 +21,49 @@ with this program. If not, see . #include "generate-id.h" -struct ordering_id_struct { - gchar category; - gchar first; - gchar second; - gchar third; -}; - -union ordering_id_union_t { - guint32 id; - struct ordering_id_struct str; -}; - #define MULTIPLIER 32 guint32 -generate_id (const AppIndicatorCategory category, const gchar * id) +generate_id (const AppIndicatorCategory catenum, const gchar * id) { - union ordering_id_union_t u; + gchar category = 0; + gchar first = 0; + gchar second = 0; + gchar third = 0; - switch (category) { + switch (catenum) { case APP_INDICATOR_CATEGORY_OTHER: - u.str.category = MULTIPLIER * 5; + category = MULTIPLIER * 5; break; case APP_INDICATOR_CATEGORY_APPLICATION_STATUS: - u.str.category = MULTIPLIER * 4; + category = MULTIPLIER * 4; break; case APP_INDICATOR_CATEGORY_COMMUNICATIONS: - u.str.category = MULTIPLIER * 3; + category = MULTIPLIER * 3; break; case APP_INDICATOR_CATEGORY_SYSTEM_SERVICES: - u.str.category = MULTIPLIER * 2; + category = MULTIPLIER * 2; break; case APP_INDICATOR_CATEGORY_HARDWARE: - u.str.category = MULTIPLIER * 1; + category = MULTIPLIER * 1; break; default: g_warning("Got an undefined category: %d", category); - u.str.category = 0; + category = 0; break; } - u.str.first = 0; - u.str.second = 0; - u.str.third = 0; - if (id != NULL) { if (id[0] != '\0') { - u.str.first = id[0]; + first = id[0]; if (id[1] != '\0') { - u.str.second = id[1]; + second = id[1]; if (id[2] != '\0') { - u.str.third = id[2]; + third = id[2]; } } } } - return u.id; + return (((((category * 256) + first) * 256) + second) * 256) + third; } -- cgit v1.2.3 From cfe735bc43d3240b60da3668d5c211286ff32023 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 11 Aug 2010 15:35:08 -0500 Subject: Using unsigned chars for calculating, we want no sign extension. --- src/generate-id.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/generate-id.c') diff --git a/src/generate-id.c b/src/generate-id.c index a504e44..14d762e 100644 --- a/src/generate-id.c +++ b/src/generate-id.c @@ -26,10 +26,10 @@ with this program. If not, see . guint32 generate_id (const AppIndicatorCategory catenum, const gchar * id) { - gchar category = 0; - gchar first = 0; - gchar second = 0; - gchar third = 0; + guchar category = 0; + guchar first = 0; + guchar second = 0; + guchar third = 0; switch (catenum) { case APP_INDICATOR_CATEGORY_OTHER: -- cgit v1.2.3