Home | History | Annotate | Download | only in lif
      1 // Copyright 2016 The Go 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 
      5 // +build solaris
      6 
      7 package lif
      8 
      9 // This file contains duplicates of encoding/binary package.
     10 //
     11 // This package is supposed to be used by the net package of standard
     12 // library. Therefore the package set used in the package must be the
     13 // same as net package.
     14 
     15 var (
     16 	littleEndian binaryLittleEndian
     17 	bigEndian    binaryBigEndian
     18 )
     19 
     20 type binaryByteOrder interface {
     21 	Uint16([]byte) uint16
     22 	Uint32([]byte) uint32
     23 	Uint64([]byte) uint64
     24 	PutUint16([]byte, uint16)
     25 	PutUint32([]byte, uint32)
     26 	PutUint64([]byte, uint64)
     27 }
     28 
     29 type binaryLittleEndian struct{}
     30 
     31 func (binaryLittleEndian) Uint16(b []byte) uint16 {
     32 	_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
     33 	return uint16(b[0]) | uint16(b[1])<<8
     34 }
     35 
     36 func (binaryLittleEndian) PutUint16(b []byte, v uint16) {
     37 	_ = b[1] // early bounds check to guarantee safety of writes below
     38 	b[0] = byte(v)
     39 	b[1] = byte(v >> 8)
     40 }
     41 
     42 func (binaryLittleEndian) Uint32(b []byte) uint32 {
     43 	_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
     44 	return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
     45 }
     46 
     47 func (binaryLittleEndian) PutUint32(b []byte, v uint32) {
     48 	_ = b[3] // early bounds check to guarantee safety of writes below
     49 	b[0] = byte(v)
     50 	b[1] = byte(v >> 8)
     51 	b[2] = byte(v >> 16)
     52 	b[3] = byte(v >> 24)
     53 }
     54 
     55 func (binaryLittleEndian) Uint64(b []byte) uint64 {
     56 	_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
     57 	return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
     58 		uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
     59 }
     60 
     61 func (binaryLittleEndian) PutUint64(b []byte, v uint64) {
     62 	_ = b[7] // early bounds check to guarantee safety of writes below
     63 	b[0] = byte(v)
     64 	b[1] = byte(v >> 8)
     65 	b[2] = byte(v >> 16)
     66 	b[3] = byte(v >> 24)
     67 	b[4] = byte(v >> 32)
     68 	b[5] = byte(v >> 40)
     69 	b[6] = byte(v >> 48)
     70 	b[7] = byte(v >> 56)
     71 }
     72 
     73 type binaryBigEndian struct{}
     74 
     75 func (binaryBigEndian) Uint16(b []byte) uint16 {
     76 	_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
     77 	return uint16(b[1]) | uint16(b[0])<<8
     78 }
     79 
     80 func (binaryBigEndian) PutUint16(b []byte, v uint16) {
     81 	_ = b[1] // early bounds check to guarantee safety of writes below
     82 	b[0] = byte(v >> 8)
     83 	b[1] = byte(v)
     84 }
     85 
     86 func (binaryBigEndian) Uint32(b []byte) uint32 {
     87 	_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
     88 	return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
     89 }
     90 
     91 func (binaryBigEndian) PutUint32(b []byte, v uint32) {
     92 	_ = b[3] // early bounds check to guarantee safety of writes below
     93 	b[0] = byte(v >> 24)
     94 	b[1] = byte(v >> 16)
     95 	b[2] = byte(v >> 8)
     96 	b[3] = byte(v)
     97 }
     98 
     99 func (binaryBigEndian) Uint64(b []byte) uint64 {
    100 	_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
    101 	return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
    102 		uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
    103 }
    104 
    105 func (binaryBigEndian) PutUint64(b []byte, v uint64) {
    106 	_ = b[7] // early bounds check to guarantee safety of writes below
    107 	b[0] = byte(v >> 56)
    108 	b[1] = byte(v >> 48)
    109 	b[2] = byte(v >> 40)
    110 	b[3] = byte(v >> 32)
    111 	b[4] = byte(v >> 24)
    112 	b[5] = byte(v >> 16)
    113 	b[6] = byte(v >> 8)
    114 	b[7] = byte(v)
    115 }
    116