| #################### EnumBase #################### |
|
|
| cimport cython |
|
|
| cdef extern from *: |
| int PY_VERSION_HEX |
|
|
| cdef object __Pyx_OrderedDict |
| if PY_VERSION_HEX >= 0x02070000: |
| from collections import OrderedDict as __Pyx_OrderedDict |
| else: |
| __Pyx_OrderedDict = dict |
|
|
| @cython.internal |
| cdef class __Pyx_EnumMeta(type): |
| def __init__(cls, name, parents, dct): |
| type.__init__(cls, name, parents, dct) |
| cls.__members__ = __Pyx_OrderedDict() |
| def __iter__(cls): |
| return iter(cls.__members__.values()) |
| def __getitem__(cls, name): |
| return cls.__members__[name] |
|
|
| # @cython.internal |
| cdef object __Pyx_EnumBase |
| class __Pyx_EnumBase(int): |
| __metaclass__ = __Pyx_EnumMeta |
| def __new__(cls, value, name=None): |
| for v in cls: |
| if v == value: |
| return v |
| if name is None: |
| raise ValueError("Unknown enum value: '%s'" % value) |
| res = int.__new__(cls, value) |
| res.name = name |
| setattr(cls, name, res) |
| cls.__members__[name] = res |
| return res |
| def __repr__(self): |
| return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self) |
| def __str__(self): |
| return "%s.%s" % (self.__class__.__name__, self.name) |
|
|
| if PY_VERSION_HEX >= 0x03040000: |
| from enum import IntEnum as __Pyx_EnumBase |
|
|
| #################### EnumType #################### |
| #@requires: EnumBase |
|
|
| cdef dict __Pyx_globals = globals() |
| if PY_VERSION_HEX >= 0x03040000: |
| # create new IntEnum() |
| {{name}} = __Pyx_EnumBase('{{name}}', __Pyx_OrderedDict([ |
| {{for item in items}} |
| ('{{item}}', {{item}}), |
| {{endfor}} |
| ])) |
| {{for item in items}} |
| __Pyx_globals['{{item}}'] = {{name}}.{{item}} |
| {{endfor}} |
| else: |
| class {{name}}(__Pyx_EnumBase): |
| pass |
| {{for item in items}} |
| __Pyx_globals['{{item}}'] = {{name}}({{item}}, '{{item}}') |
| {{endfor}} |
|
|