1 /**
2   Mirror _structseq.h
3 
4   Tuple object interface
5 */
6 module deimos.python.structseq;
7 
8 import deimos.python.pyport;
9 import deimos.python.object;
10 import deimos.python.tupleobject;
11 
12 extern(C):
13 // Python-header-file: Include/structseq.h:
14 
15 /// _
16 struct PyStructSequence_Field {
17     /// _
18     char* name;
19     /// _
20     char* doc;
21 }
22 
23 /// _
24 struct PyStructSequence_Desc {
25     /// _
26     char* name;
27     /// _
28     char* doc;
29     /// _
30     PyStructSequence_Field* fields;
31     /// _
32     int n_in_sequence;
33 }
34 
35 /// _
36 void PyStructSequence_InitType(PyTypeObject* type, PyStructSequence_Desc* desc);
37 version(Python_3_2_Or_Later) {
38     /// Availability: >= 3.2
39     PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc* desc);
40 }
41 /// _
42 PyObject* PyStructSequence_New(PyTypeObject* type);
43 
44 version(Python_3_2_Or_Later) {
45     /// _
46     alias PyTupleObject PyStructSequence;
47     /// _
48     alias PyTuple_SET_ITEM PyStructSequence_SET_ITEM;
49 
50     /// Availability: >= 3.2
51     void PyStructSequence_SetItem(PyObject*, Py_ssize_t, PyObject*);
52     /// Availability: >= 3.2
53     PyObject* PyStructSequence_GetItem(PyObject*, Py_ssize_t);
54 }else{
55     /// _
56     struct PyStructSequence {
57         mixin PyObject_VAR_HEAD;
58         // Will the D layout for a 1-obj array be the same as the C layout?  I
59         // think the D array will be larger.
60         PyObject*[1] _ob_item;
61         /// _
62         PyObject** ob_item()() {
63             return _ob_item.ptr;
64         }
65     }
66     // D translation of C macro:
67     /** Macro, *only* to be used to fill in brand new objects */
68     PyObject* PyStructSequence_SET_ITEM()(PyObject* op, int i, PyObject* v) {
69         PyStructSequence* ot = cast(PyStructSequence*) op;
70         ot.ob_item[i] = v;
71         return v;
72     }
73 }