github.com/onflow/atree@v0.6.0/slab.go (about) 1 /* 2 * Atree - Scalable Arrays and Ordered Maps 3 * 4 * Copyright 2021 Dapper Labs, Inc. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package atree 20 21 type Slab interface { 22 Storable 23 24 ID() StorageID 25 Split(SlabStorage) (Slab, Slab, error) 26 Merge(Slab) error 27 // LendToRight rebalances slabs by moving elements from left to right 28 LendToRight(Slab) error 29 // BorrowFromRight rebalances slabs by moving elements from right to left 30 BorrowFromRight(Slab) error 31 } 32 33 func IsRootOfAnObject(slabData []byte) (bool, error) { 34 if len(slabData) < versionAndFlagSize { 35 return false, NewDecodingErrorf("data is too short") 36 } 37 38 flag := slabData[1] 39 40 return isRoot(flag), nil 41 } 42 43 func HasPointers(slabData []byte) (bool, error) { 44 if len(slabData) < versionAndFlagSize { 45 return false, NewDecodingErrorf("data is too short") 46 } 47 48 flag := slabData[1] 49 50 return hasPointers(flag), nil 51 } 52 53 func HasSizeLimit(slabData []byte) (bool, error) { 54 if len(slabData) < versionAndFlagSize { 55 return false, NewDecodingErrorf("data is too short") 56 } 57 58 flag := slabData[1] 59 60 return hasSizeLimit(flag), nil 61 }