6.2. kink/BIN¶
bin 型の値のコンパニオンモジュール。
6.2.1. bin 型¶
bin は有限長の不変なバイト列である。
bin の要素は、[0x00, 0xff]の範囲内の整数の num 値である。
例
:BIN.require_from('kink/')
:Magic <- BIN.of(0xca 0xfe 0xba 0xbe)
:Slice <- Magic.take_front(2)
stdout.print_line(Slice.repr) # => (bin 0xca 0xfe)
6.2.1.1. Bin.size¶
size は Bin が含む要素の数を num 値として戻す。
6.2.1.2. Bin.any?¶
any?はBinの長さが1以上であるかどうかを戻す。
6.2.1.3. Bin.get(Ind)¶
get は Ind の位置の Bin の要素を戻す。
結果は[0, 0xff]の範囲内の整数の num 値である。
事前条件
Ind は[0, Bin.size]の範囲の整数の num 値でなければならない。
6.2.1.4. Bin.slice(From To)¶
sliceは、[From, To)の範囲のスライスをbinとして戻す。
事前条件
FromとToは整数のnum値でなければならない。
0 <= From <= To <= Bin.size
例
:BIN.require_from('kink/')
:Magic <- BIN.of(0xca 0xfe 0xba 0xbe)
:Slice <- Magic.slice(1 3)
stdout.print_line(Slice.repr) # => (bin 0xfe 0xba)
6.2.1.5. Bin.take_front(N)¶
take_front は Bin の最初の N 個の要素のスライスを bin 値として戻す。
事前条件
N は[0, Bin.size]の範囲の整数の num 値でなければならない。
例
:BIN.require_from('kink/')
:Pdf_signature <- BIN.of(0x25 0x50 0x44 0x46 0x2d)
:Slice <- Pdf_signature.take_front(2)
stdout.print_line(Slice.repr) # => (bin 0x25 0x50)
6.2.1.6. Bin.take_back(N)¶
take_back は Bin の最後の N 個の要素のスライスを bin 値として戻す。
事前条件
N は[0, Bin.size]の範囲の整数の num 値でなければならない。
例
:BIN.require_from('kink/')
:Pdf_signature <- BIN.of(0x25 0x50 0x44 0x46 0x2d)
:Slice <- Pdf_signature.take_back(2)
stdout.print_line(Slice.repr) # => (bin 0x46 0x2d)
6.2.1.7. Bin.drop_front(N)¶
drop_front は Bin の最初の N 個を除いた要素のスライスを bin 値として戻す。
事前条件
N は[0, Bin.size]の範囲の整数の num 値でなければならない。
例
:BIN.require_from('kink/')
:Pdf_signature <- BIN.of(0x25 0x50 0x44 0x46 0x2d)
:Slice <- Pdf_signature.drop_front(2)
stdout.print_line(Slice.repr) # => (bin 0x44 0x46 0x2d)
6.2.1.8. Bin.drop_back(N)¶
drop_back は Bin の最後の N 個を除いた要素のスライスを bin 値として戻す。
事前条件
N は[0, Bin.size]の範囲の整数の num 値でなければならない。
例
:BIN.require_from('kink/')
:Pdf_signature <- BIN.of(0x25 0x50 0x44 0x46 0x2d)
:Slice <- Pdf_signature.drop_back(2)
stdout.print_line(Slice.repr) # => (bin 0x25 0x50 0x44)
6.2.1.9. Bin1 + Bin2¶
+ 演算子、または op_add メソッドは、 Bin1 の要素を先頭に、 Bin2 の要素を末尾に持つ bin を戻す。
事前条件
Bin2 は bin 値でなければならない。
例
:BIN.require_from('kink/')
:Cafe <- BIN.of(0xca 0xfe)
:Babe <- BIN.of(0xba 0xbe)
:Cafe_babe <- Cafe + Babe
stdout.print_line(Cafe_babe.repr) # => (bin 0xca 0xfe 0xba 0xbe)
6.2.1.10. Bin * N¶
* 演算子、または op_mul メソッドは、 Bin の要素を N 回繰り返した bin 値を戻す。
事前条件
N は整数の num 値でなければならない。
例
:BIN.require_from('kink/')
:Babe <- BIN.of(0xba 0xbe)
:Babe_babe_babe <- Babe * 3
stdout.print_line(Babe_babe_babe.repr) # => (bin 0xba 0xbe 0xba 0xbe 0xba 0xbe)
6.2.1.11. Bin1 == Bin2¶
== 演算子、または op_eq メソッドは、 Bin1 と Bin2 が同じ要素の列を持っているかどうかを戻す。
事前条件
Bin1 と Bin2 は bin 値でなければならない。
例
:BIN.require_from('kink/')
:Bin <- BIN.of(1 2 3)
stdout.print_line((Bin == BIN.of(1 2 3)).repr) # => true
stdout.print_line((Bin != BIN.of(1 2 3)).repr) # => false
stdout.print_line((Bin == BIN.of(3 2 1)).repr) # => false
stdout.print_line((Bin != BIN.of(3 2 1)).repr) # => true
6.2.1.12. Bin1 <= Bin2¶
<=演算子、またはop_leメソッドは、Bin1がBin2よりも辞書順で小さいかどうかを戻す。
事前条件
Bin1とBin2はbin値でなければならない。
例
:BIN.require_from('kink/')
:compare <- {(:Bin :Arg_bin)
[:Lt? :Le? :Gt? :Ge?] = [
Bin < Arg_bin
Bin <= Arg_bin
Bin > Arg_bin
Bin >= Arg_bin
]
stdout.print_line(
'Lt?={} Le?={} Gt?={} Ge?={}'.format(Lt?.repr Le?.repr Gt?.repr Ge?.repr))
}
compare(BIN.of(1 2 3) BIN.of(1 2 3)) # => Lt?=false Le?=true Gt?=false Ge?=true
compare(BIN.of(1 2 3) BIN.of(1 2 3 4)) # => Lt?=true Le?=true Gt?=false Ge?=false
compare(BIN.of(1 2 3) BIN.of(1 2)) # => Lt?=false Le?=false Gt?=true Ge?=true
6.2.1.13. Bin.repr¶
repr は "(bin 0xca 0xfe 0xba 0xbe)", "(bin 0x01 0x02 0x03 ,,, size=999 ,,, 0xfd 0xfe 0xff)" のような文字列を戻す。
6.2.2. BIN.is?(Val)¶
is? は Val が bin 値であるかどうかを戻す。
例
:BIN.require_from('kink/')
:Bin <- BIN.of(1 2 3)
stdout.print_line(BIN.is?(Bin).repr) # => true
stdout.print_line(BIN.is?(42).repr) # => false
6.2.3. BIN.of(... Nums)¶
ofはNumsを要素として持つbin値を戻す。
事前条件
Numsの要素は[0, 0xff]の範囲の整数のnum値でなければならない。
例
:BIN.require_from('kink/')
:Bin <- BIN.of(0 1 254 255)
stdout.print_line(Bin.repr) # => (bin 0x00 0x01 0xfe 0xff)
6.2.4. BIN.from_each(Eacher)¶
from_eachはEacherの要素を持つbinを戻す。
事前条件
Eacherは、ベクタやiterのように、.each($consume)メソッドをサポートしなければならない。
Eacherのそれぞれのの要素は[0, 0xff]の範囲の整数のnum値でなければならない。
例
:BIN.require_from('kink/')
:Bin <- BIN.from_each([0 1 254 255])
stdout.print_line(Bin.repr) # => (bin 0x00 0x01 0xfe 0xff)