github.com/scottcagno/storage@v1.8.0/pkg/bw/v3/common.go (about) 1 package v3 2 3 import "errors" 4 5 var ( 6 ErrNotEnoughRoom = errors.New("not enough room left in the buffer") 7 ErrBadChecksum = errors.New("bad checksum") 8 ErrBadPageSize = errors.New("bad page size; must be evenly divisible") 9 ) 10 11 const ( 12 defaultPageSize = 512 13 defaultPageAlign = true 14 defaultAutoFlush = true 15 ) 16 17 const ( 18 minPageSize = 64 19 maxPageSize = 64 << 10 20 ) 21 22 type page struct { 23 data [defaultPageSize]byte 24 } 25 26 var defaultOptions = &Options{ 27 pageSize: defaultPageSize, 28 pageAlign: defaultPageAlign, 29 autoFlush: defaultAutoFlush, 30 } 31 32 type Options struct { 33 pageSize int 34 pageAlign bool 35 autoFlush bool 36 } 37 38 func checkOptions(opt *Options) error { 39 if opt == nil { 40 opt = defaultOptions 41 } 42 if opt.pageSize < minPageSize { 43 opt.pageSize = minPageSize 44 } 45 if opt.pageSize > maxPageSize { 46 opt.pageSize = maxPageSize 47 } 48 if opt.pageSize > minPageSize && opt.pageSize < maxPageSize { 49 if r := opt.pageSize % minPageSize; r != 0 { 50 opt.pageSize = (opt.pageSize + minPageSize - 1) &^ (minPageSize - 1) 51 } 52 } 53 return nil 54 }