The first byte of a t_text value has index 0.
t_bool operator==(t_text t1, t_text t2)
t_bool operator!=(t_text t1, t_text t2) = operator!(operator==(t1, t2))
t_text operator+(t_text t1, t_text t2)
t_int _length(t_text t)
t_text _elem(t_text t, t_int i)
t_text
_sub(t_text t, t_int start = 0, t_int len = _length(t)) =
{
int w = _length(t);
int i = _min(_max(start, 0)), w);
int j = _min(i + _max(len, 0), w);
// 0 <= i <= j <= _length(t); extract [i..j)
t_text r = "";
for (; i < j; i++) r = operator+(r, _elem(t, i));
return r;
}
t_int
_find(t_text t, t_text p, t_int start = 0) =
{
int j = _length(t) - _length(p);
if (j < 0) return -1;
int i = _max(start, 0);
if (i > j) return -1;
for (; i <= j; i++) {
int k = 0;
while (k < _length(p) &&
_elem(t, i+k) == _elem(p, k)) k++;
if (k == _length(p)) return i;
}
return -1;
}
t_int
_findr(t_text t, t_text p, t_int start = 0) =
{
int j = _length(t) - _length(p);
if (j < 0) return -1;
int i = _max(start, 0);
if (i > j) return -1;
for (; i <= j; j--) {
int k = 0;
while (k < _length(p) &&
_elem(t, j+k) == _elem(p, k)) k++;
if (k == _length(p)) return j;
}
return -1;
}