6.2. kink/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値として戻す。
例
:BIN.require_from('kink/')
stdout.print_line(BIN.of(0x00 0x01 0xff).size.repr) # => 3
6.2.1.2. Bin.any?¶
any?はBinの長さが1以上であるかどうかを戻す。
例
:BIN.require_from('kink/')
stdout.print_line(BIN.of().any?.repr) # => false
stdout.print_line(BIN.of(0x00).any?.repr) # => true
6.2.1.3. Bin.get(Ind)¶
getはIndの位置のBinの要素を戻す。
結果は [0x00, 0xff] の範囲内の整数のnum値である。
事前条件
Indは[0, Bin.size)の範囲の整数のnum値でなければならない。
例
:BIN.require_from('kink/')
:Magic <- BIN.of(0xca 0xfe 0xba 0xbe)
stdout.print_line(Magic.get(1).repr) # => 254
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が同じ要素の列を持っているかどうかを戻す。
事前条件
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以下であるかどうかを戻す。
事前条件
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のstr表現を戻す。
表現は、要素を16進数として持つ。たとえば: `(bin 0x00 0x01 0xfe 0xff)`
Binの要素数が128を超える場合、表現は最初と最後のそれぞれ32要素に切り詰められる。また、全体の要素数がその間に表記される。
例
:BIN.require_from('kink/')
stdout.print_line(BIN.of(0 1 254 255).repr) # => (bin 0x00 0x01 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の要素は [0x00, 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のそれぞれの要素は [0x00, 0xff] の範囲の整数のnum値でなければならない。
例
:BIN.require_from('kink/')
:Bin <- BIN.from_each([0 1 254 255])
stdout.print_line(Bin.repr) # => (bin 0x00 0x01 0xfe 0xff)