123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #################### 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}}
|