Skip to content

Instantly share code, notes, and snippets.

@Vizonex
Last active February 14, 2023 18:22
Show Gist options
  • Select an option

  • Save Vizonex/7d559aec63074ce48803d3c5bea9f8a4 to your computer and use it in GitHub Desktop.

Select an option

Save Vizonex/7d559aec63074ce48803d3c5bea9f8a4 to your computer and use it in GitHub Desktop.
A little snippet I made that will convert a python enum class into a C enum , this could be used to help you make Optimized C code.
# The MIT License (MIT)
#
# Copyright © 2023 Vizonex
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the “Software”), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
# The above copyright notice and this permission notice shall
# be included in all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
from enums import Enum
class Sample(Enum):
"""This is a test subject to convert"""
A = 0
B = 1
C = 2
def enum_to_c(e:Enum):
"""Writes python enums to C Enums this can be useful for writing C Library Extensions from DSLS"""
code = f"enum {e.__name__}_e " + "{\n"
code += ",\n".join([f" {name} = {value.value}" for name, value in e.members.items()])
code += "\n};\n"
code += f"typedef enum {e.__name__}_e {e.__name__}_t;"
return code
if __name__ == "__main__":
print(enum_to_c(Sample))
# /* -- OUTPUT -- */
# enum Sample_e {
# A = 0,
# B = 1,
# C = 2
# };
# typedef enum Sample_e Sample_t;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment