SlideShare a Scribd company logo
Touchless
enum to string
in C
No more enum mapping headaches

Arun Saha
Why

(Log) Message:
Error: Device 1234 failed.

What is device 1234,
btw, any name?
Nov 27 2013

Touchless enum to string

2
Why

For machines, numbers are natural,
but,
For humans, names are natural.

Nov 27 2013

Touchless enum to string

3
Why

(Log) Message:
Error: Device 1234 (cdrom)
failed.

Ooops…
aha! the cdrom
Nov 27 2013

Touchless enum to string

4
What

Number to Name
need
unique
bidirectional
(1:1)
mapping
Nov 27 2013

Touchless enum to string

5
What

Mapping Example
ColorCode (enum)
<->
ColorName (char const *)
Translation API
/// Map Number -> Name
ColorName colorName( ColorCode );
/// Map Name -> Number
ColorCode colorCode( ColorName );
Nov 27 2013

Touchless enum to string

6
How

Attempt #1: Array of strings
Numbers defined as enum
Names defined as array of char const *
In array of names, position/index of a string is same
as its code.
(A minor variation is to use a switch statement on the number (ColorCode))

Nov 27 2013

Touchless enum to string

7
How

Attempt #1: Array of strings
In the array, position/index of a string
is same as its code.
Issue 1: The sequence in the array is
dependent on the sequence in the
enum, any out of order element
messes up the mapping.
Nov 27 2013

Touchless enum to string

8
How

Attempt #1: Array of strings
In the array, position/index of a string
is same as its code.
Issue 2: For a (number, name) pair, the number
and the name are defined in two separate files;
out of sync file pair (e.g. maintainer added
enum in one file but missed to add name in the
other file) garbles the mapping.
Nov 27 2013

Touchless enum to string

9
How

Solution:
Define (number, name) pair in a
separate file
COLOR_DEF( ColorRed, “Red”)

Nov 27 2013

Touchless enum to string

10
How

Solution:
Define (number, name) pair in a
separate file as macro
#define COLOR_DEF( ColorRed, “Red”)

The author avoids macro as much as possible, but the current situation
is a good usage of macro, which is hard to obtain otherwise.
Nov 27 2013

Touchless enum to string

11
Solution Insight:
Different Macro Expansion

How

.h file:
• Expand macro to get number in enum
• #define COLOR_DEF(number, name) number,

.c file:
• Expand macro to get name in array
• #define COLOR_DEF(number, name) name,

Nov 27 2013

Touchless enum to string

12
How
.h file:
Expand macro to get number in enum

color.h
typedef enum ColorCode {
ColorFirst = 0,
#define COLOR_DEF( number, name ) number,
#include "color_defs.h"
#undef COLOR_DEF
ColorLast
} ColorCode;

color_defs.h
COLOR_DEF( ColorRed, "Red" )
COLOR_DEF( ColorYellow, "Yellow" )
COLOR_DEF( ColorGreen, "Green" )
color.c

.c file:
Expand macro to get name in array

static const ColorName colorNames[] = {
"First",
#define COLOR_DEF( number, name ) name,
#include "color_defs.h"
#undef COLOR_DEF
"Last"
};
How

Code available at github
https://github.com/arunksaha/enum_to_string

Nov 27 2013

Touchless enum to string

14
Thank you!
Comments are much appreciated
Arun Saha
http://www.linkedin.com/in/arunksaha

Nov 27 2013

Touchless enum to string

15

More Related Content

What's hot

Chapter3 Search
Chapter3 SearchChapter3 Search
Chapter3 Search
Khiem Ho
 
Regex Presentation
Regex PresentationRegex Presentation
Regex Presentation
arnolambert
 
Dfs presentation
Dfs presentationDfs presentation
Dfs presentation
Alizay Khan
 
Python advanced 2. regular expression in python
Python advanced 2. regular expression in pythonPython advanced 2. regular expression in python
Python advanced 2. regular expression in python
John(Qiang) Zhang
 
lecture 17
lecture 17lecture 17
lecture 17
sajinsc
 

What's hot (20)

Tree and binary tree
Tree and binary treeTree and binary tree
Tree and binary tree
 
Chapter3 Search
Chapter3 SearchChapter3 Search
Chapter3 Search
 
Tries - Tree Based Structures for Strings
Tries - Tree Based Structures for StringsTries - Tree Based Structures for Strings
Tries - Tree Based Structures for Strings
 
Breadth First Search Algorithm In 10 Minutes | Artificial Intelligence Tutori...
Breadth First Search Algorithm In 10 Minutes | Artificial Intelligence Tutori...Breadth First Search Algorithm In 10 Minutes | Artificial Intelligence Tutori...
Breadth First Search Algorithm In 10 Minutes | Artificial Intelligence Tutori...
 
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
 
Regex Presentation
Regex PresentationRegex Presentation
Regex Presentation
 
Dfs presentation
Dfs presentationDfs presentation
Dfs presentation
 
Procedures And Functions in Matlab
Procedures And Functions in MatlabProcedures And Functions in Matlab
Procedures And Functions in Matlab
 
Data structures final lecture 1
Data structures final  lecture 1Data structures final  lecture 1
Data structures final lecture 1
 
Binary tree and Binary search tree
Binary tree and Binary search treeBinary tree and Binary search tree
Binary tree and Binary search tree
 
Python advanced 2. regular expression in python
Python advanced 2. regular expression in pythonPython advanced 2. regular expression in python
Python advanced 2. regular expression in python
 
PHP Regular Expressions
PHP Regular ExpressionsPHP Regular Expressions
PHP Regular Expressions
 
lecture 17
lecture 17lecture 17
lecture 17
 
binary search tree
binary search treebinary search tree
binary search tree
 
Strings in Python
Strings in PythonStrings in Python
Strings in Python
 
Data Structure and Algorithms Binary Tree
Data Structure and Algorithms Binary TreeData Structure and Algorithms Binary Tree
Data Structure and Algorithms Binary Tree
 
Data structure and algorithm All in One
Data structure and algorithm All in OneData structure and algorithm All in One
Data structure and algorithm All in One
 
Regular Expressions in PHP
Regular Expressions in PHPRegular Expressions in PHP
Regular Expressions in PHP
 
Bfs dfs
Bfs dfsBfs dfs
Bfs dfs
 
DFS and BFS
DFS and BFSDFS and BFS
DFS and BFS
 

Similar to Touchless Enum to String in C

Hello, I need help writing a code in C. It wants to do things with f.pdf
Hello, I need help writing a code in C. It wants to do things with f.pdfHello, I need help writing a code in C. It wants to do things with f.pdf
Hello, I need help writing a code in C. It wants to do things with f.pdf
mohamednihalshahru
 

Similar to Touchless Enum to String in C (8)

Hello, I need help writing a code in C. It wants to do things with f.pdf
Hello, I need help writing a code in C. It wants to do things with f.pdfHello, I need help writing a code in C. It wants to do things with f.pdf
Hello, I need help writing a code in C. It wants to do things with f.pdf
 
Perl_Part4
Perl_Part4Perl_Part4
Perl_Part4
 
2 Prolog L 1 V2.ppt
2 Prolog L 1 V2.ppt2 Prolog L 1 V2.ppt
2 Prolog L 1 V2.ppt
 
Shishirppt
ShishirpptShishirppt
Shishirppt
 
Data structure.pptx
Data structure.pptxData structure.pptx
Data structure.pptx
 
Unitii classnotes
Unitii classnotesUnitii classnotes
Unitii classnotes
 
Odoo ORM Methods | Object Relational Mapping in Odoo15
Odoo ORM Methods | Object Relational Mapping in Odoo15 Odoo ORM Methods | Object Relational Mapping in Odoo15
Odoo ORM Methods | Object Relational Mapping in Odoo15
 
Java Extension Methods
Java Extension MethodsJava Extension Methods
Java Extension Methods
 

Recently uploaded

Recently uploaded (20)

Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 

Touchless Enum to String in C

  • 1. Touchless enum to string in C No more enum mapping headaches Arun Saha
  • 2. Why (Log) Message: Error: Device 1234 failed. What is device 1234, btw, any name? Nov 27 2013 Touchless enum to string 2
  • 3. Why For machines, numbers are natural, but, For humans, names are natural. Nov 27 2013 Touchless enum to string 3
  • 4. Why (Log) Message: Error: Device 1234 (cdrom) failed. Ooops… aha! the cdrom Nov 27 2013 Touchless enum to string 4
  • 6. What Mapping Example ColorCode (enum) <-> ColorName (char const *) Translation API /// Map Number -> Name ColorName colorName( ColorCode ); /// Map Name -> Number ColorCode colorCode( ColorName ); Nov 27 2013 Touchless enum to string 6
  • 7. How Attempt #1: Array of strings Numbers defined as enum Names defined as array of char const * In array of names, position/index of a string is same as its code. (A minor variation is to use a switch statement on the number (ColorCode)) Nov 27 2013 Touchless enum to string 7
  • 8. How Attempt #1: Array of strings In the array, position/index of a string is same as its code. Issue 1: The sequence in the array is dependent on the sequence in the enum, any out of order element messes up the mapping. Nov 27 2013 Touchless enum to string 8
  • 9. How Attempt #1: Array of strings In the array, position/index of a string is same as its code. Issue 2: For a (number, name) pair, the number and the name are defined in two separate files; out of sync file pair (e.g. maintainer added enum in one file but missed to add name in the other file) garbles the mapping. Nov 27 2013 Touchless enum to string 9
  • 10. How Solution: Define (number, name) pair in a separate file COLOR_DEF( ColorRed, “Red”) Nov 27 2013 Touchless enum to string 10
  • 11. How Solution: Define (number, name) pair in a separate file as macro #define COLOR_DEF( ColorRed, “Red”) The author avoids macro as much as possible, but the current situation is a good usage of macro, which is hard to obtain otherwise. Nov 27 2013 Touchless enum to string 11
  • 12. Solution Insight: Different Macro Expansion How .h file: • Expand macro to get number in enum • #define COLOR_DEF(number, name) number, .c file: • Expand macro to get name in array • #define COLOR_DEF(number, name) name, Nov 27 2013 Touchless enum to string 12
  • 13. How .h file: Expand macro to get number in enum color.h typedef enum ColorCode { ColorFirst = 0, #define COLOR_DEF( number, name ) number, #include "color_defs.h" #undef COLOR_DEF ColorLast } ColorCode; color_defs.h COLOR_DEF( ColorRed, "Red" ) COLOR_DEF( ColorYellow, "Yellow" ) COLOR_DEF( ColorGreen, "Green" ) color.c .c file: Expand macro to get name in array static const ColorName colorNames[] = { "First", #define COLOR_DEF( number, name ) name, #include "color_defs.h" #undef COLOR_DEF "Last" };
  • 14. How Code available at github https://github.com/arunksaha/enum_to_string Nov 27 2013 Touchless enum to string 14
  • 15. Thank you! Comments are much appreciated Arun Saha http://www.linkedin.com/in/arunksaha Nov 27 2013 Touchless enum to string 15