@@ -164,6 +164,31 @@ CPyTagged CPyBytes_Ord(PyObject *obj) {
164
164
return CPY_INT_TAG ;
165
165
}
166
166
167
+
168
+ PyObject * CPyBytes_RjustDefaultFill (PyObject * self , CPyTagged width ) {
169
+ if (!PyBytes_Check (self )) {
170
+ PyErr_SetString (PyExc_TypeError , "self must be bytes" );
171
+ return NULL ;
172
+ }
173
+ Py_ssize_t width_size_t = CPyTagged_AsSsize_t (width );
174
+ Py_ssize_t len = PyBytes_Size (self );
175
+ if (width_size_t <= len ) {
176
+ return PyBytes_FromStringAndSize (PyBytes_AsString (self ), len );
177
+ }
178
+ // should this be a constant?
179
+ PyObject * fillbyte = PyBytes_FromStringAndSize (" " , 1 );
180
+ // can we optimize out the above line and the below line?
181
+ char fill = PyBytes_AsString (fillbyte )[0 ];
182
+ Py_ssize_t pad = width_size_t - len ;
183
+ PyObject * result = PyBytes_FromStringAndSize (NULL , width_size_t );
184
+ if (!result ) return NULL ;
185
+ char * res_buf = PyBytes_AsString (result );
186
+ memset (res_buf , fill , pad );
187
+ memcpy (res_buf + pad , PyBytes_AsString (self ), len );
188
+ return result ;
189
+ }
190
+
191
+
167
192
PyObject * CPyBytes_Rjust (PyObject * self , CPyTagged width , PyObject * fillbyte ) {
168
193
if (!PyBytes_Check (self )) {
169
194
PyErr_SetString (PyExc_TypeError , "self must be bytes" );
@@ -188,6 +213,31 @@ PyObject *CPyBytes_Rjust(PyObject *self, CPyTagged width, PyObject *fillbyte) {
188
213
return result ;
189
214
}
190
215
216
+
217
+ PyObject * CPyBytes_LjustDefaultFill (PyObject * self , CPyTagged width ) {
218
+ if (!PyBytes_Check (self )) {
219
+ PyErr_SetString (PyExc_TypeError , "self must be bytes" );
220
+ return NULL ;
221
+ }
222
+ Py_ssize_t width_size_t = CPyTagged_AsSsize_t (width );
223
+ Py_ssize_t len = PyBytes_Size (self );
224
+ if (width_size_t <= len ) {
225
+ return PyBytes_FromStringAndSize (PyBytes_AsString (self ), len );
226
+ }
227
+ // should this be a constant?
228
+ PyObject * fillbyte = PyBytes_FromStringAndSize (" " , 1 );
229
+ // can we optimize out the above line and the below line?
230
+ char fill = PyBytes_AsString (fillbyte )[0 ];
231
+ Py_ssize_t pad = width_size_t - len ;
232
+ PyObject * result = PyBytes_FromStringAndSize (NULL , width_size_t );
233
+ if (!result ) return NULL ;
234
+ char * res_buf = PyBytes_AsString (result );
235
+ memcpy (res_buf , PyBytes_AsString (self ), len );
236
+ memset (res_buf + len , fill , pad );
237
+ return result ;
238
+ }
239
+
240
+
191
241
PyObject * CPyBytes_Ljust (PyObject * self , CPyTagged width , PyObject * fillbyte ) {
192
242
if (!PyBytes_Check (self )) {
193
243
PyErr_SetString (PyExc_TypeError , "self must be bytes" );
0 commit comments