You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.go 805 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package cache
  2. type Ranger interface {
  3. GetPosition() int64
  4. GetLength() int64
  5. }
  6. // 查找第一个包含指定位置的段索引。如果所有段都不包含指定位置,那么有以下三种情况:
  7. //
  8. // 1. pos小于第一个段的位置,返回-1
  9. //
  10. // 2. pos大于等于最后一个段的结束位置,返回BuzyCount() - 1
  11. //
  12. // 3. pos在段之间的空洞内,那么会返回小于pos的最后一个段
  13. //
  14. // 注:2、3情况返回的结果是相同的
  15. func FirstContains[T Ranger](arr []T, pos int64) int {
  16. low, high := 0, len(arr)-1
  17. for low <= high {
  18. mid := (low + high) / 2
  19. if arr[mid].GetPosition() > pos {
  20. high = mid - 1
  21. } else if arr[mid].GetPosition() < pos {
  22. if mid == len(arr)-1 {
  23. return mid
  24. }
  25. low = mid
  26. } else {
  27. return mid
  28. }
  29. }
  30. return high
  31. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。