1 /**
2   Mirror _cStringIO.h
3 
4   This header provides access to _cStringIO objects from C.
5   Functions are provided for calling _cStringIO objects and
6   macros are provided for testing whether you have _cStringIO
7   objects.
8 
9   Before calling any of the functions or macros, you must initialize
10   the routines with:
11 
12     PycString_IMPORT()
13 
14   This would typically be done in your init function.
15 
16   Note _cStringIO.h goes away in python 3
17   */
18 module deimos.python.cStringIO;
19 
20 import deimos.python.pyport;
21 import deimos.python.object;
22 import deimos.python.cobject;
23 
24 version(Python_3_0_Or_Later) {
25 }else{
26 extern(C):
27 // Python-header-file: Include/cStringIO.h:
28 
29 /// Availability: 2.*
30 PycStringIO_CAPI* PycStringIO = null;
31 
32 /// Availability: 2.*
33 PycStringIO_CAPI* PycString_IMPORT()() {
34     if (PycStringIO == null) {
35         PycStringIO = cast(PycStringIO_CAPI *)
36             PyCObject_Import("cStringIO", "cStringIO_CAPI");
37     }
38     return PycStringIO;
39 }
40 
41 /** Basic functions to manipulate cStringIO objects from C */
42 /// Availability: 2.*
43 struct PycStringIO_CAPI {
44     /** Read a string from an input object.  If the last argument
45     is -1, the remainder will be read.
46     */
47     int function(PyObject*, char**, Py_ssize_t) cread;
48     /** Read a line from an input object.  Returns the length of the read
49     line as an int and a pointer inside the object buffer as char** (so
50     the caller doesn't have to provide its own buffer as destination).
51     */
52     int function(PyObject*, char**) creadline;
53     /** Write a string to an output object*/
54     int function(PyObject*, const(char)*, Py_ssize_t) cwrite;
55     /** Get the output object as a Python string (returns new reference). */
56     PyObject* function(PyObject*) cgetvalue;
57     /** Create a new output object */
58     PyObject* function(int) NewOutput;
59     /** Create an input object from a Python string
60      (copies the Python string reference).
61      */
62     PyObject* function(PyObject*) NewInput;
63 
64     /** The Python types for cStringIO input and output objects.
65      Note that you can do input on an output object.
66      */
67     PyTypeObject* InputType;
68     /// ditto
69     PyTypeObject* OutputType;
70 }
71 
72 // D translations of C macros:
73 /// Availability: 2.*
74 int PycStringIO_InputCheck()(PyObject* o) {
75     return Py_TYPE(o) == PycStringIO.InputType;
76 }
77 /// Availability: 2.*
78 int PycStringIO_OutputCheck()(PyObject* o) {
79     return Py_TYPE(o) == PycStringIO.OutputType;
80 }
81 
82 
83 }