new object $buffer: $libraries;
var $root created_on = 796268969;
var $root flags = ['methods, 'code, 'variables, 'core];
var $root inited = 1;
var $root managed = [$buffer];
var $root manager = $buffer;
var $root trusted = [];
public method .break_lines() {
arg buf;
var i, sub, out;
// break a buffer by \r or \n but keep its sub contents as buffers
out = [];
while ((i = 10 in buf)) {
sub = subbuf(buf, 1, i - 1);
buf = subbuf(buf, i + 1);
while ((i = 13 in sub)) {
if (buflen(sub) == i)
sub = subbuf(sub, 1, i - 1);
else
sub = subbuf(sub, 1, i - 1) + subbuf(sub, i + 1);
}
out += [sub];
}
if (buf) {
while ((i = 13 in buf)) {
if (buflen(buf) == i)
buf = subbuf(buf, 1, i - 1);
else
buf = subbuf(buf, 1, i - 1) + subbuf(buf, i + 1);
}
if (buf)
out += [buf];
}
return out;
};
public method .bufsub() {
arg buf, a, b;
var i, la, lb, lt;
// do we need a builtin for this?
// shagged from Kipp's core, until I write a builtin, optimized by Brandon
if ((a == b) || ((buflen(a) > buflen(buf)) || ((!a) || (!buf))))
return buf;
la = buflen(a);
lb = buflen(b);
lt = buflen(buf) - la;
i = 1;
anticipate_assignment();
while ((i < lt) && (i = bufidx(buf, a, i))) {
buf = (subbuf(buf, 1, i - 1) + b) + subbuf(buf, i + la);
i += lb;
}
return buf;
};
public method .from_list() {
arg list;
var buf, i;
// this differs from $list.to_buffer()
buf = `[];
for i in (list)
buf += `[i];
return buf;
};
public method .from_string(): native;
public method .from_strings(): native;
public method .from_veil_pkts(): native;
public method .length(): native;
public method .replace(): native;
public method .subrange(): native;
public method .to_list() {
arg buf;
var i, list;
return map i in [1 .. buflen(buf)] to (buf[i]);
};
public method .to_string(): native;
public method .to_strings(): native;
public method .to_veil_pkts(): native;