1 /** 2 Mirror _bytesobject.h 3 4 Note _bytesobject.h did not exist before python 2.6; however 5 for python 2, it simply provides aliases to contents of stringobject.h, 6 so we provide them anyways to make it easier to write portable extension 7 modules. 8 */ 9 module deimos.python.bytesobject; 10 11 import deimos.python.pyport; 12 import deimos.python.object; 13 import deimos.python.stringobject; 14 import core.stdc.stdarg; 15 16 version(Python_3_0_Or_Later) { 17 /** 18 * subclass of PyVarObject. 19 * 20 * Invariants: 21 * ob_sval contains space for 'ob_size+1' elements. 22 * ob_sval[ob_size] == 0. 23 * ob_shash is the hash of the string or -1 if not computed yet. 24 * 25 */ 26 extern(C): 27 struct PyBytesObject{ 28 mixin PyObject_VAR_HEAD; 29 /// _ 30 Py_hash_t ob_shash; 31 char[1] _ob_sval; 32 /// _ 33 @property char* ob_sval()() { 34 return _ob_sval.ptr; 35 } 36 37 } 38 39 /// 40 mixin(PyAPI_DATA!"PyTypeObject PyBytes_Type"); 41 /// 42 mixin(PyAPI_DATA!"PyTypeObject PyBytesIter_Type"); 43 // D translation of C macro: 44 /// 45 int PyBytes_Check()(PyObject* op) { 46 return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS); 47 } 48 /// 49 int PyBytes_CheckExact()(PyObject* op) { 50 return Py_TYPE(op) is &PyBytes_Type; 51 } 52 53 /// 54 PyObject* PyBytes_FromStringAndSize(const(char)*, Py_ssize_t); 55 /// 56 PyObject* PyBytes_FromString(const(char)*); 57 /// 58 PyObject* PyBytes_FromObject(PyObject*); 59 /// 60 PyObject* PyBytes_FromFormatV(const(char)*, va_list); 61 /// 62 PyObject* PyBytes_FromFormat(const(char)*, ...); 63 /// 64 Py_ssize_t PyBytes_Size(PyObject*); 65 /// 66 const(char)* PyBytes_AsString(PyObject*); 67 /// 68 PyObject* PyBytes_Repr(PyObject*, int); 69 /// 70 void PyBytes_Concat(PyObject**, PyObject*); 71 /// 72 void PyBytes_ConcatAndDel(PyObject**, PyObject*); 73 /// 74 int _PyBytes_Resize(PyObject**, Py_ssize_t); 75 /// 76 PyObject* _PyBytes_FormatLong(PyObject*, int, int, 77 int, char**, int*); 78 /// 79 PyObject* PyBytes_DecodeEscape(const(char)*, Py_ssize_t, 80 const(char)*, Py_ssize_t, 81 const(char)*); 82 // D translation of C macro: 83 /// 84 const(char)* PyBytes_AS_STRING()(PyObject* op) { 85 assert(PyBytes_Check(op)); 86 return (cast(PyBytesObject*) op).ob_sval; 87 88 89 } 90 /// 91 auto PyBytes_GET_SIZE()(PyObject* op) { 92 assert(PyBytes_Check(op)); 93 return Py_SIZE(op); 94 } 95 /// 96 PyObject* _PyBytes_Join(PyObject* sep, PyObject* x); 97 /** 98 Params: 99 obj = string or Unicode object 100 s = pointer to buffer variable 101 len = pointer to length variable or NULL (only possible for 0-terminated 102 strings) 103 */ 104 int PyBytes_AsStringAndSize( 105 PyObject* obj, 106 char** s, 107 Py_ssize_t* len 108 ); 109 /// 110 Py_ssize_t _PyBytes_InsertThousandsGroupingLocale( 111 char* buffer, 112 Py_ssize_t n_buffer, 113 char* digits, 114 Py_ssize_t n_digits, 115 Py_ssize_t min_width); 116 117 /** Using explicit passed-in values, insert the thousands grouping 118 into the string pointed to by buffer. For the argument descriptions, 119 see Objects/stringlib/localeutil.h */ 120 Py_ssize_t _PyBytes_InsertThousandsGrouping( 121 char* buffer, 122 Py_ssize_t n_buffer, 123 char* digits, 124 Py_ssize_t n_digits, 125 Py_ssize_t min_width, 126 const(char)* grouping, 127 const char* thousands_sep); 128 129 /// 130 enum F_LJUST = (1<<0); 131 /// 132 enum F_SIGN = (1<<1); 133 /// 134 enum F_BLANK = (1<<2); 135 /// 136 enum F_ALT = (1<<3); 137 /// 138 enum F_ZERO = (1<<4); 139 140 }else { 141 /// 142 alias PyStringObject PyBytesObject; 143 /// 144 alias PyString_Type PyBytes_Type; 145 /// 146 alias PyString_Check PyBytes_Check; 147 /// 148 alias PyString_CheckExact PyBytes_CheckExact; 149 /// 150 alias PyString_CHECK_INTERNED PyBytes_CHECK_INTERNED; 151 /// 152 alias PyString_AS_STRING PyBytes_AS_STRING; 153 /// 154 alias PyString_GET_SIZE PyBytes_GET_SIZE; 155 version(Python_2_6_Or_Later) { 156 /// Availability: >= 2.6 157 alias Py_TPFLAGS_STRING_SUBCLASS Py_TPFLAGS_BYTES_SUBCLASS; 158 } 159 /// 160 alias PyString_FromStringAndSize PyBytes_FromStringAndSize; 161 /// 162 alias PyString_FromString PyBytes_FromString; 163 /// 164 alias PyString_FromFormatV PyBytes_FromFormatV; 165 /// 166 alias PyString_FromFormat PyBytes_FromFormat; 167 /// 168 alias PyString_Size PyBytes_Size; 169 /// 170 alias PyString_AsString PyBytes_AsString; 171 /// 172 alias PyString_Repr PyBytes_Repr; 173 /// 174 alias PyString_Concat PyBytes_Concat; 175 /// 176 alias PyString_ConcatAndDel PyBytes_ConcatAndDel; 177 /// 178 alias _PyString_Resize _PyBytes_Resize; 179 /// 180 alias _PyString_Eq _PyBytes_Eq; 181 /// 182 alias PyString_Format PyBytes_Format; 183 /// 184 alias _PyString_FormatLong _PyBytes_FormatLong; 185 /// 186 alias PyString_DecodeEscape PyBytes_DecodeEscape; 187 /// 188 alias _PyString_Join _PyBytes_Join; 189 version(Python_2_7_Or_Later) { 190 // went away in python 2.7 191 }else { 192 /// Availability: <= 2.6 193 alias PyString_Decode PyBytes_Decode; 194 /// Availability: <= 2.6 195 alias PyString_Encode PyBytes_Encode; 196 /// Availability: <= 2.6 197 alias PyString_AsEncodedObject PyBytes_AsEncodedObject; 198 /// Availability: <= 2.6 199 alias PyString_AsDecodedObject PyBytes_AsDecodedObject; 200 /* 201 alias PyString_AsEncodedString PyBytes_AsEncodedString; 202 alias PyString_AsDecodedString PyBytes_AsDecodedString; 203 */ 204 } 205 /// 206 alias PyString_AsStringAndSize PyBytes_AsStringAndSize; 207 version(Python_2_6_Or_Later) { 208 /// Availability: >= 2.6 209 alias _PyString_InsertThousandsGrouping _PyBytes_InsertThousandsGrouping; 210 } 211 }