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  }