/ lib / numpy / core / include / numpy / arrayscalars.h
arrayscalars.h
  1  #ifndef NUMPY_CORE_INCLUDE_NUMPY_ARRAYSCALARS_H_
  2  #define NUMPY_CORE_INCLUDE_NUMPY_ARRAYSCALARS_H_
  3  
  4  #ifndef _MULTIARRAYMODULE
  5  typedef struct {
  6          PyObject_HEAD
  7          npy_bool obval;
  8  } PyBoolScalarObject;
  9  #endif
 10  
 11  
 12  typedef struct {
 13          PyObject_HEAD
 14          signed char obval;
 15  } PyByteScalarObject;
 16  
 17  
 18  typedef struct {
 19          PyObject_HEAD
 20          short obval;
 21  } PyShortScalarObject;
 22  
 23  
 24  typedef struct {
 25          PyObject_HEAD
 26          int obval;
 27  } PyIntScalarObject;
 28  
 29  
 30  typedef struct {
 31          PyObject_HEAD
 32          long obval;
 33  } PyLongScalarObject;
 34  
 35  
 36  typedef struct {
 37          PyObject_HEAD
 38          npy_longlong obval;
 39  } PyLongLongScalarObject;
 40  
 41  
 42  typedef struct {
 43          PyObject_HEAD
 44          unsigned char obval;
 45  } PyUByteScalarObject;
 46  
 47  
 48  typedef struct {
 49          PyObject_HEAD
 50          unsigned short obval;
 51  } PyUShortScalarObject;
 52  
 53  
 54  typedef struct {
 55          PyObject_HEAD
 56          unsigned int obval;
 57  } PyUIntScalarObject;
 58  
 59  
 60  typedef struct {
 61          PyObject_HEAD
 62          unsigned long obval;
 63  } PyULongScalarObject;
 64  
 65  
 66  typedef struct {
 67          PyObject_HEAD
 68          npy_ulonglong obval;
 69  } PyULongLongScalarObject;
 70  
 71  
 72  typedef struct {
 73          PyObject_HEAD
 74          npy_half obval;
 75  } PyHalfScalarObject;
 76  
 77  
 78  typedef struct {
 79          PyObject_HEAD
 80          float obval;
 81  } PyFloatScalarObject;
 82  
 83  
 84  typedef struct {
 85          PyObject_HEAD
 86          double obval;
 87  } PyDoubleScalarObject;
 88  
 89  
 90  typedef struct {
 91          PyObject_HEAD
 92          npy_longdouble obval;
 93  } PyLongDoubleScalarObject;
 94  
 95  
 96  typedef struct {
 97          PyObject_HEAD
 98          npy_cfloat obval;
 99  } PyCFloatScalarObject;
100  
101  
102  typedef struct {
103          PyObject_HEAD
104          npy_cdouble obval;
105  } PyCDoubleScalarObject;
106  
107  
108  typedef struct {
109          PyObject_HEAD
110          npy_clongdouble obval;
111  } PyCLongDoubleScalarObject;
112  
113  
114  typedef struct {
115          PyObject_HEAD
116          PyObject * obval;
117  } PyObjectScalarObject;
118  
119  typedef struct {
120          PyObject_HEAD
121          npy_datetime obval;
122          PyArray_DatetimeMetaData obmeta;
123  } PyDatetimeScalarObject;
124  
125  typedef struct {
126          PyObject_HEAD
127          npy_timedelta obval;
128          PyArray_DatetimeMetaData obmeta;
129  } PyTimedeltaScalarObject;
130  
131  
132  typedef struct {
133          PyObject_HEAD
134          char obval;
135  } PyScalarObject;
136  
137  #define PyStringScalarObject PyBytesObject
138  typedef struct {
139          /* note that the PyObject_HEAD macro lives right here */
140          PyUnicodeObject base;
141          Py_UCS4 *obval;
142          char *buffer_fmt;
143  } PyUnicodeScalarObject;
144  
145  
146  typedef struct {
147          PyObject_VAR_HEAD
148          char *obval;
149          PyArray_Descr *descr;
150          int flags;
151          PyObject *base;
152          void *_buffer_info;  /* private buffer info, tagged to allow warning */
153  } PyVoidScalarObject;
154  
155  /* Macros
156       Py<Cls><bitsize>ScalarObject
157       Py<Cls><bitsize>ArrType_Type
158     are defined in ndarrayobject.h
159  */
160  
161  #define PyArrayScalar_False ((PyObject *)(&(_PyArrayScalar_BoolValues[0])))
162  #define PyArrayScalar_True ((PyObject *)(&(_PyArrayScalar_BoolValues[1])))
163  #define PyArrayScalar_FromLong(i) \
164          ((PyObject *)(&(_PyArrayScalar_BoolValues[((i)!=0)])))
165  #define PyArrayScalar_RETURN_BOOL_FROM_LONG(i)                  \
166          return Py_INCREF(PyArrayScalar_FromLong(i)), \
167                  PyArrayScalar_FromLong(i)
168  #define PyArrayScalar_RETURN_FALSE              \
169          return Py_INCREF(PyArrayScalar_False),  \
170                  PyArrayScalar_False
171  #define PyArrayScalar_RETURN_TRUE               \
172          return Py_INCREF(PyArrayScalar_True),   \
173                  PyArrayScalar_True
174  
175  #define PyArrayScalar_New(cls) \
176          Py##cls##ArrType_Type.tp_alloc(&Py##cls##ArrType_Type, 0)
177  #define PyArrayScalar_VAL(obj, cls)             \
178          ((Py##cls##ScalarObject *)obj)->obval
179  #define PyArrayScalar_ASSIGN(obj, cls, val) \
180          PyArrayScalar_VAL(obj, cls) = val
181  
182  #endif  /* NUMPY_CORE_INCLUDE_NUMPY_ARRAYSCALARS_H_ */