// WriteByteOffs generates a kv file with key-value pairs represented as a // slice of buffer and some int slices of key offsets, key ends, value offsets, // and value ends. func WriteByteOffs(fp sophie.FsPath, buffer []byte, keyOffs, keyEnds, valOffs, valEnds []int) error { writer, err := fp.Create() if err != nil { return err } defer writer.Close() for i, keyOff := range keyOffs { keyEnd, valOff, valEnd := keyEnds[i], valOffs[i], valEnds[i] if err := sophie.VInt(keyEnd - keyOff).WriteTo(writer); err != nil { return err } if _, err := writer.Write(buffer[keyOff:keyEnd]); err != nil { return err } if err := sophie.VInt(valEnd - valOff).WriteTo(writer); err != nil { return err } if _, err := writer.Write(buffer[valOff:valEnd]); err != nil { return err } } return nil }