blob: 0f2917764ba068934ed023d9f5a1936c882d7376 [file]
#ifndef MYPYC_BYTES_EXTRA_OPS_H
#define MYPYC_BYTES_EXTRA_OPS_H
#include <Python.h>
#include <stdint.h>
#include "CPy.h"
// Optimized bytes translate operation
PyObject *CPyBytes_Translate(PyObject *bytes, PyObject *table);
// Optimized bytes.__getitem__ operations
// If index is negative, convert to non-negative index (no range checking)
static inline int64_t CPyBytes_AdjustIndex(PyObject *obj, int64_t index) {
if (index < 0) {
return index + Py_SIZE(obj);
}
return index;
}
// Check if index is in valid range [0, len)
static inline bool CPyBytes_RangeCheck(PyObject *obj, int64_t index) {
return index >= 0 && index < Py_SIZE(obj);
}
// Get byte at index (no bounds checking) - returns as CPyTagged
static inline CPyTagged CPyBytes_GetItemUnsafe(PyObject *obj, int64_t index) {
return ((CPyTagged)(uint8_t)(PyBytes_AS_STRING(obj))[index]) << 1;
}
#endif