get_range Singeli binding
This commit is contained in:
parent
7bb5a1d9d8
commit
2ed06e0db6
@ -32,3 +32,29 @@ def talloc{T, len} = emit{*T, 'TALLOCP', fmt_type{T}, len}
|
|||||||
def tfree{ptr} = emit{void, 'TFREE', ptr}
|
def tfree{ptr} = emit{void, 'TFREE', ptr}
|
||||||
def fmt_type{T} = merge{quality{T}, fmtnat{width{T}}}
|
def fmt_type{T} = merge{quality{T}, fmtnat{width{T}}}
|
||||||
def fmt_type{*T} = merge{'*',fmt_type{T}}
|
def fmt_type{*T} = merge{'*',fmt_type{T}}
|
||||||
|
|
||||||
|
def el_bit = 0
|
||||||
|
def el_i8 = 1
|
||||||
|
def el_i16 = 2
|
||||||
|
def el_i32 = 3
|
||||||
|
def el_f64 = 4
|
||||||
|
def el_c8 = 5
|
||||||
|
def el_c16 = 6
|
||||||
|
def el_c32 = 7
|
||||||
|
def el_B = 8
|
||||||
|
|
||||||
|
def get_range{elt, data:*_, len:ux if anyNum{elt} and (not knum{elt} or (elt>=el_bit and elt<=el_f64))} = {
|
||||||
|
def fns = emit{*fntype{*void, *i64, u64, u1}, '', 'getRange_fns'}
|
||||||
|
buf:*i64 = undefined{i64, 2}
|
||||||
|
def ok = load{fns, elt}(*void~~data, buf, len)
|
||||||
|
tup{ok, load{buf,0}, load{buf,1}}
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_range{data:*E, len} = get_range{match(E) {
|
||||||
|
{(u1)} => el_bit
|
||||||
|
{(i8)} => el_i8
|
||||||
|
{(i16)} => el_i16
|
||||||
|
{(i32)} => el_i32
|
||||||
|
{(f64)} => el_f64
|
||||||
|
}, data, len}
|
||||||
|
def get_range{data:*E, s, e} = get_range{data+s, e-s}
|
||||||
Loading…
Reference in New Issue
Block a user