123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package tools
- import (
- "fmt"
- "os"
- "path/filepath"
- )
- //LittleEndian
- func getUint16(b []byte, offset int) uint16 {
- _ = b[offset+1] // early bounds check
- return uint16(b[offset+0]) |
- uint16(b[offset+1])<<8
- }
- //LittleEndian
- func getUint32(b []byte, offset int) uint32 {
- _ = b[offset+3] // early bounds check
- return uint32(b[offset+0]) |
- uint32(b[offset+1])<<8 |
- uint32(b[offset+2])<<16 |
- uint32(b[offset+3])<<24
- }
- //LittleEndian
- func getUint64(b []byte, offset int) uint64 {
- _ = b[offset+7] // bounds check hint to compiler; see golang.org/issue/14808
- return uint64(b[offset+0]) |
- uint64(b[offset+1])<<8 |
- uint64(b[offset+2])<<16 |
- uint64(b[offset+3])<<24 |
- uint64(b[offset+4])<<32 |
- uint64(b[offset+5])<<40 |
- uint64(b[offset+6])<<48 |
- uint64(b[offset+7])<<56
- }
- //LittleEndian
- func putUint64(v uint64, b []byte, offset int) {
- _ = b[offset+7] // early bounds check to guarantee safety of writes below
- b[offset+0] = byte(v)
- b[offset+1] = byte(v >> 8)
- b[offset+2] = byte(v >> 16)
- b[offset+3] = byte(v >> 24)
- b[offset+4] = byte(v >> 32)
- b[offset+5] = byte(v >> 40)
- b[offset+6] = byte(v >> 48)
- b[offset+7] = byte(v >> 56)
- }
- //LittleEndian
- func putUint32(v uint32, b []byte, offset int) {
- _ = b[offset+3]
- b[offset+0] = byte(v)
- b[offset+1] = byte(v >> 8)
- b[offset+2] = byte(v >> 16)
- b[offset+3] = byte(v >> 24)
- }
- func copyBytes(src []byte, srcStart int, dst []byte, dstStart int, count int) (int, error) {
- if len(src) < srcStart+count || len(dst) < dstStart+count {
- return -1, fmt.Errorf("Array index out of bounds")
- }
- for i := 0; i < count; i++ {
- dst[dstStart+i] = src[srcStart+i]
- }
- return count, nil
- }
- func fileNameAndExt(path string) (string, string) {
- name := filepath.Base(path)
- for i := len(name) - 1; i >= 0 && !os.IsPathSeparator(name[i]); i-- {
- if name[i] == '.' {
- return name[:i], name[i:]
- }
- }
- return name, ""
- }
|