writer.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright ©2021 The star-tex Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package iobuf
  5. import (
  6. "encoding/binary"
  7. "io"
  8. )
  9. type Writer struct {
  10. w io.Writer
  11. buf []byte
  12. }
  13. func NewWriter(w io.Writer) *Writer {
  14. return &Writer{
  15. w: w,
  16. buf: make([]byte, 4),
  17. }
  18. }
  19. func (w *Writer) Write(v []byte) (int, error) {
  20. return w.w.Write(v)
  21. }
  22. func (w *Writer) WriteU8(v uint8) {
  23. w.buf[0] = v
  24. w.w.Write(w.buf[:1])
  25. }
  26. func (w *Writer) WriteU16(v uint16) {
  27. binary.BigEndian.PutUint16(w.buf, v)
  28. w.w.Write(w.buf[:2])
  29. }
  30. func (w *Writer) WriteU24(v uint32) {
  31. w.buf[0] = uint8(v >> 16)
  32. w.buf[1] = uint8(v >> 8)
  33. w.buf[2] = uint8(v)
  34. w.w.Write(w.buf[:3])
  35. }
  36. func (w *Writer) WriteU32(v uint32) {
  37. binary.BigEndian.PutUint32(w.buf, v)
  38. w.w.Write(w.buf[:4])
  39. }
  40. func (w *Writer) WriteI8(v int8) {
  41. w.WriteU8(uint8(v))
  42. }
  43. func (w *Writer) WriteI16(v int16) {
  44. w.WriteU16(uint16(v))
  45. }
  46. func (w *Writer) WriteI24(v int32) {
  47. w.buf[0] = uint8(v >> 16)
  48. w.buf[1] = uint8(v >> 8)
  49. w.buf[2] = uint8(v)
  50. w.w.Write(w.buf[:3])
  51. }
  52. func (w *Writer) WriteI32(v int32) {
  53. w.WriteU32(uint32(v))
  54. }
  55. func (w *Writer) WriteBuf(v []byte) {
  56. w.w.Write(v)
  57. }
  58. var (
  59. _ io.Writer = (*Writer)(nil)
  60. )