arrayscalars.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #ifndef _NPY_ARRAYSCALARS_H_
  2. #define _NPY_ARRAYSCALARS_H_
  3. #ifndef _MULTIARRAYMODULE
  4. typedef struct {
  5. PyObject_HEAD
  6. npy_bool obval;
  7. } PyBoolScalarObject;
  8. #endif
  9. typedef struct {
  10. PyObject_HEAD
  11. signed char obval;
  12. } PyByteScalarObject;
  13. typedef struct {
  14. PyObject_HEAD
  15. short obval;
  16. } PyShortScalarObject;
  17. typedef struct {
  18. PyObject_HEAD
  19. int obval;
  20. } PyIntScalarObject;
  21. typedef struct {
  22. PyObject_HEAD
  23. long obval;
  24. } PyLongScalarObject;
  25. typedef struct {
  26. PyObject_HEAD
  27. npy_longlong obval;
  28. } PyLongLongScalarObject;
  29. typedef struct {
  30. PyObject_HEAD
  31. unsigned char obval;
  32. } PyUByteScalarObject;
  33. typedef struct {
  34. PyObject_HEAD
  35. unsigned short obval;
  36. } PyUShortScalarObject;
  37. typedef struct {
  38. PyObject_HEAD
  39. unsigned int obval;
  40. } PyUIntScalarObject;
  41. typedef struct {
  42. PyObject_HEAD
  43. unsigned long obval;
  44. } PyULongScalarObject;
  45. typedef struct {
  46. PyObject_HEAD
  47. npy_ulonglong obval;
  48. } PyULongLongScalarObject;
  49. typedef struct {
  50. PyObject_HEAD
  51. npy_half obval;
  52. } PyHalfScalarObject;
  53. typedef struct {
  54. PyObject_HEAD
  55. float obval;
  56. } PyFloatScalarObject;
  57. typedef struct {
  58. PyObject_HEAD
  59. double obval;
  60. } PyDoubleScalarObject;
  61. typedef struct {
  62. PyObject_HEAD
  63. npy_longdouble obval;
  64. } PyLongDoubleScalarObject;
  65. typedef struct {
  66. PyObject_HEAD
  67. npy_cfloat obval;
  68. } PyCFloatScalarObject;
  69. typedef struct {
  70. PyObject_HEAD
  71. npy_cdouble obval;
  72. } PyCDoubleScalarObject;
  73. typedef struct {
  74. PyObject_HEAD
  75. npy_clongdouble obval;
  76. } PyCLongDoubleScalarObject;
  77. typedef struct {
  78. PyObject_HEAD
  79. PyObject * obval;
  80. } PyObjectScalarObject;
  81. typedef struct {
  82. PyObject_HEAD
  83. npy_datetime obval;
  84. PyArray_DatetimeMetaData obmeta;
  85. } PyDatetimeScalarObject;
  86. typedef struct {
  87. PyObject_HEAD
  88. npy_timedelta obval;
  89. PyArray_DatetimeMetaData obmeta;
  90. } PyTimedeltaScalarObject;
  91. typedef struct {
  92. PyObject_HEAD
  93. char obval;
  94. } PyScalarObject;
  95. #define PyStringScalarObject PyStringObject
  96. #define PyUnicodeScalarObject PyUnicodeObject
  97. typedef struct {
  98. PyObject_VAR_HEAD
  99. char *obval;
  100. PyArray_Descr *descr;
  101. int flags;
  102. PyObject *base;
  103. } PyVoidScalarObject;
  104. /* Macros
  105. Py<Cls><bitsize>ScalarObject
  106. Py<Cls><bitsize>ArrType_Type
  107. are defined in ndarrayobject.h
  108. */
  109. #define PyArrayScalar_False ((PyObject *)(&(_PyArrayScalar_BoolValues[0])))
  110. #define PyArrayScalar_True ((PyObject *)(&(_PyArrayScalar_BoolValues[1])))
  111. #define PyArrayScalar_FromLong(i) \
  112. ((PyObject *)(&(_PyArrayScalar_BoolValues[((i)!=0)])))
  113. #define PyArrayScalar_RETURN_BOOL_FROM_LONG(i) \
  114. return Py_INCREF(PyArrayScalar_FromLong(i)), \
  115. PyArrayScalar_FromLong(i)
  116. #define PyArrayScalar_RETURN_FALSE \
  117. return Py_INCREF(PyArrayScalar_False), \
  118. PyArrayScalar_False
  119. #define PyArrayScalar_RETURN_TRUE \
  120. return Py_INCREF(PyArrayScalar_True), \
  121. PyArrayScalar_True
  122. #define PyArrayScalar_New(cls) \
  123. Py##cls##ArrType_Type.tp_alloc(&Py##cls##ArrType_Type, 0)
  124. #define PyArrayScalar_VAL(obj, cls) \
  125. ((Py##cls##ScalarObject *)obj)->obval
  126. #define PyArrayScalar_ASSIGN(obj, cls, val) \
  127. PyArrayScalar_VAL(obj, cls) = val
  128. #endif