// IN APPEND MEASURES
// if len(s.buffer) < storage.DataPageSize {
// 	// allocate bigger buffer
// 	buf, databuf := growBuffers(growBuffersIn{
// 		databuf:       s.buffer,
// 		tSize:         timestamps.Size(),
// 		vSize:         values.Size(),
// 		requiredSpace: totalRequiredSpace,
// 	})

// 	s.buffer = buf
// 	// replace buffer in timestamps and values
// 	timestamps.Rotate(databuf) // fix pos
// 	values.Rotate(databuf)     // fix pos
// } else {

// IN DATABASE

// FIX
// УВАГА!
// Якщо буфер metric.buffer < розміру сторінки - для timestamps доступний весь буфер.
// Якщо буфер досяг розміру сторінки - в timestamps я передаю buffer[:DataPagePayloadSize]

// var dataBufferSizes = []int{
// 	1024,
// 	2048,
// 	4096,
// 	8192,
// }

// func calculateDataBufferSize(payloadSize int) int {
// 	for _, bufferSize := range dataBufferSizes {
// 		if payloadSize <= bufferSize {
// 			return bufferSize
// 		}
// 	}
// 	return storage.DataPageSize
// }

// func allocateBuffers(requiredSpace int) (buf, databuf []byte) {
// 	bufferSize := calculateDataBufferSize(requiredSpace)
// 	buf = make([]byte, bufferSize)
// 	if bufferSize == storage.DataPageSize {
// 		databuf = buf[:storage.DataPagePayloadSize]
// 	} else {
// 		databuf = buf
// 	}
// 	return
// }

// // src - databuf
// type growBuffersIn struct {
// 	databuf       []byte
// 	tSize         int
// 	vSize         int
// 	requiredSpace int
// }

// func growBuffers(in growBuffersIn) (buf, databuf []byte) {
// 	buf, databuf = allocateBuffers(in.requiredSpace)
// 	copy(databuf[len(databuf)-in.tSize:], in.databuf[len(in.databuf)-in.tSize:])
// 	copy(databuf, in.databuf[:in.vSize])
// 	return
// }

// type shrinkBufferIn struct {
// 	Buffer         []byte
// 	TimestampsSize int
// 	ValuesSize     int
// 	NewBufferSize  int
// }

// func shrinkBuffer(in shrinkBufferIn) []byte {
// 	buf := make([]byte, in.NewBufferSize)
// 	copy(buf, in.Buffer[:in.ValuesSize])
// 	copy(buf[:len(buf)-in.TimestampsSize], in.Buffer[len(in.Buffer)-in.TimestampsSize:])
// 	return buf
// }

// IN REPLAY_METRIC.TO_METRIC

// var (
// 	requiredSpace = s.tSize + s.vSize
// )
// bufferSize := calculateDataBufferSize(requiredSpace)
// if len(s.buf) > bufferSize {
// 	s.buf = shrinkBuffer(shrinkBufferIn{
// 		Buffer:         s.buf,
// 		TimestampsSize: s.tSize,
// 		ValuesSize:     s.vSize,
// 		NewBufferSize:  bufferSize,
// 	})
// }