Skip to content

Commit ec202c7

Browse files
committed
add documentation & examples
1 parent fa6d12a commit ec202c7

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

doc.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright 2018 bearmini (Takashi Oguma)
2+
/*
3+
bitstream-go is a package to provide a bitstream reader / a bitstream writer.
4+
5+
6+
*/
7+
8+
package bitstream

doc_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package bitstream_test
2+
3+
import (
4+
"bytes"
5+
"encoding/hex"
6+
"fmt"
7+
"log"
8+
9+
"github.com/bearmini/bitstream-go"
10+
)
11+
12+
func ExampleReader() {
13+
// binary expression:
14+
// 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
15+
data := []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}
16+
17+
// Reader
18+
r := bitstream.NewReader(bytes.NewReader(data), nil)
19+
20+
// read a single bit
21+
bit0, err := r.ReadBit()
22+
if err != nil {
23+
log.Fatalf("%+v", err)
24+
}
25+
fmt.Printf("bit: %1b\n", bit0)
26+
27+
// read 2 bits
28+
bit1to2, err := r.ReadNBitsAsUint8(2)
29+
if err != nil {
30+
log.Fatalf("%+v", err)
31+
}
32+
fmt.Printf("bits: %02b\n", bit1to2)
33+
34+
// read 10 bits as big endian
35+
bit3to12, err := r.ReadNBitsAsUint16BE(10)
36+
if err != nil {
37+
log.Fatalf("%+v", err)
38+
}
39+
fmt.Printf("bits: %010b\n", bit3to12)
40+
41+
// read 20 bits as big endian
42+
bit13to32, err := r.ReadNBitsAsUint32BE(20)
43+
if err != nil {
44+
log.Fatalf("%+v", err)
45+
}
46+
fmt.Printf("bits: %020b\n", bit13to32)
47+
48+
// Output:
49+
// bit: 0
50+
// bits: 00
51+
// bits: 0000100100
52+
// bits: 01101000101011001111
53+
}
54+
55+
func ExampleWriter() {
56+
dst := bytes.NewBuffer([]byte{})
57+
58+
// Writer
59+
w := bitstream.NewWriter(dst)
60+
61+
// Write a single bit `1`
62+
err := w.WriteBit(1)
63+
if err != nil {
64+
log.Fatalf("%+v", err)
65+
}
66+
67+
// Write a bool value as a bit (true: 1, false: 0)
68+
err = w.WriteBool(false)
69+
if err != nil {
70+
log.Fatalf("%+v", err)
71+
}
72+
73+
// Write 2 bits `10`
74+
err = w.WriteNBitsOfUint8(2, 0x02)
75+
if err != nil {
76+
log.Fatalf("%+v", err)
77+
}
78+
79+
// Write 8 bits `0101 0011`
80+
err = w.WriteUint8(0x53)
81+
if err != nil {
82+
log.Fatalf("%+v", err)
83+
}
84+
85+
// Write 10 bits `11 0010 1101`
86+
err = w.WriteNBitsOfUint16BE(10, 0x032d)
87+
if err != nil {
88+
log.Fatalf("%+v", err)
89+
}
90+
91+
// Write 16 bits `0000 1111 0101 1010`
92+
err = w.WriteUint16BE(0x0f5a)
93+
if err != nil {
94+
log.Fatalf("%+v", err)
95+
}
96+
97+
w.Flush()
98+
99+
// we have written the following bits:
100+
// 1
101+
// 0
102+
// 10
103+
// 0101 0011
104+
// 1100 1011 01
105+
// 00 0011 1101 0110 10
106+
// 1010 0101 0011 1100 1011 0100 0011 1101 0110 10xx
107+
108+
fmt.Printf("%s", hex.EncodeToString(dst.Bytes()))
109+
// Output:
110+
// a53cb43d68
111+
}

0 commit comments

Comments
 (0)