mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-30 18:35:18 +00:00
36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
|
// Copyright 2018 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
||
|
// of this source code is governed by a BSD-style license that can be found in
|
||
|
// the LICENSE file.
|
||
|
|
||
|
package sstable
|
||
|
|
||
|
import (
|
||
|
"unsafe"
|
||
|
|
||
|
"github.com/cockroachdb/pebble/internal/manual"
|
||
|
)
|
||
|
|
||
|
func getBytes(ptr unsafe.Pointer, length int) []byte {
|
||
|
return (*[manual.MaxArrayLen]byte)(ptr)[:length:length]
|
||
|
}
|
||
|
|
||
|
func decodeVarint(ptr unsafe.Pointer) (uint32, unsafe.Pointer) {
|
||
|
if a := *((*uint8)(ptr)); a < 128 {
|
||
|
return uint32(a),
|
||
|
unsafe.Pointer(uintptr(ptr) + 1)
|
||
|
} else if a, b := a&0x7f, *((*uint8)(unsafe.Pointer(uintptr(ptr) + 1))); b < 128 {
|
||
|
return uint32(b)<<7 | uint32(a),
|
||
|
unsafe.Pointer(uintptr(ptr) + 2)
|
||
|
} else if b, c := b&0x7f, *((*uint8)(unsafe.Pointer(uintptr(ptr) + 2))); c < 128 {
|
||
|
return uint32(c)<<14 | uint32(b)<<7 | uint32(a),
|
||
|
unsafe.Pointer(uintptr(ptr) + 3)
|
||
|
} else if c, d := c&0x7f, *((*uint8)(unsafe.Pointer(uintptr(ptr) + 3))); d < 128 {
|
||
|
return uint32(d)<<21 | uint32(c)<<14 | uint32(b)<<7 | uint32(a),
|
||
|
unsafe.Pointer(uintptr(ptr) + 4)
|
||
|
} else {
|
||
|
d, e := d&0x7f, *((*uint8)(unsafe.Pointer(uintptr(ptr) + 4)))
|
||
|
return uint32(e)<<28 | uint32(d)<<21 | uint32(c)<<14 | uint32(b)<<7 | uint32(a),
|
||
|
unsafe.Pointer(uintptr(ptr) + 5)
|
||
|
}
|
||
|
}
|