|
1 | 1 | package delta
|
2 | 2 |
|
3 |
| -import "time" |
| 3 | +import ( |
| 4 | + "fmt" |
| 5 | + "time" |
| 6 | +) |
4 | 7 |
|
5 | 8 | // ------------------------------------------------ ---------------------------------------------------------------------
|
6 | 9 |
|
7 |
| -// TimeSliceDelta 对时间序列做delta |
8 |
| -func TimeSliceDelta(timeSlice []time.Time, compareToType CompareToType) []uint64 { |
9 |
| - result := make([]uint64, len(timeSlice)) |
| 10 | +// ToTimeSliceDelta 对时间序列做delta |
| 11 | +func ToTimeSliceDelta(timeSlice []time.Time, compareToType CompareToType) []uint64 { |
| 12 | + deltaSlice := make([]uint64, len(timeSlice)) |
10 | 13 | for index, t := range timeSlice {
|
11 | 14 | if index == 0 {
|
12 |
| - result[index] = uint64(t.UnixMilli()) |
| 15 | + deltaSlice[index] = uint64(t.UnixMilli()) |
13 | 16 | continue
|
14 | 17 | }
|
15 |
| - if compareToType == CompareToFirst { |
16 |
| - result[index] = TimeDelta(t, timeSlice[0]) |
17 |
| - } else if compareToType == CompareToLast { |
18 |
| - result[index] = TimeDelta(t, timeSlice[index-1]) |
| 18 | + switch compareToType { |
| 19 | + case CompareToFirst: |
| 20 | + deltaSlice[index] = TimeDelta(t, timeSlice[0]) |
| 21 | + case CompareToLast: |
| 22 | + deltaSlice[index] = TimeDelta(t, timeSlice[index-1]) |
| 23 | + default: |
| 24 | + panic(fmt.Errorf("not support compare type: %#v", compareToType)) |
19 | 25 | }
|
20 | 26 | }
|
21 |
| - return result |
| 27 | + return deltaSlice |
22 | 28 | }
|
23 | 29 |
|
24 | 30 | // FromTimeSliceDelta 从Time的delta恢复时间序列
|
25 | 31 | func FromTimeSliceDelta(deltaSlice []uint64, compareToType CompareToType) []time.Time {
|
26 |
| - result := make([]time.Time, 0) |
| 32 | + timeSlice := make([]time.Time, 0) |
27 | 33 | for index, delta := range deltaSlice {
|
28 | 34 | if index == 0 {
|
29 |
| - result[index] = time.UnixMilli(int64(delta)) |
| 35 | + timeSlice[index] = time.UnixMilli(int64(delta)) |
30 | 36 | continue
|
31 | 37 | }
|
32 |
| - if compareToType == CompareToFirst { |
33 |
| - result[index] = time.UnixMilli(int64(deltaSlice[0] + delta)) |
34 |
| - } else if compareToType == CompareToLast { |
35 |
| - result[index] = result[index-1].Add(time.Millisecond * time.Duration(delta)) |
| 38 | + switch compareToType { |
| 39 | + case CompareToFirst: |
| 40 | + timeSlice[index] = time.UnixMilli(int64(deltaSlice[0] + delta)) |
| 41 | + case CompareToLast: |
| 42 | + timeSlice[index] = timeSlice[index-1].Add(time.Millisecond * time.Duration(delta)) |
| 43 | + default: |
| 44 | + panic(fmt.Errorf("not support compare type: %#v", compareToType)) |
36 | 45 | }
|
37 | 46 | }
|
38 |
| - return result |
| 47 | + return timeSlice |
39 | 48 | }
|
40 | 49 |
|
| 50 | +// TimeDelta 求两个时间的差 |
41 | 51 | func TimeDelta(t1 time.Time, t2 time.Time) uint64 {
|
42 | 52 | return uint64(t1.UnixMilli() - t2.UnixMilli())
|
43 | 53 | }
|
44 | 54 |
|
45 | 55 | // ------------------------------------------------ ---------------------------------------------------------------------
|
46 | 56 |
|
47 |
| -// TimestampSliceDelta 对时间戳做delta |
48 |
| -func TimestampSliceDelta(timestampSlice []uint64, compareToType CompareToType) []uint64 { |
49 |
| - result := make([]uint64, len(timestampSlice)) |
| 57 | +// ToTimestampSliceDelta 对时间戳做delta |
| 58 | +func ToTimestampSliceDelta(timestampSlice []uint64, compareToType CompareToType) []uint64 { |
| 59 | + deltaSlice := make([]uint64, len(timestampSlice)) |
50 | 60 | for index, timestamp := range timestampSlice {
|
51 | 61 | if index == 0 {
|
52 |
| - result[index] = timestamp |
| 62 | + deltaSlice[index] = timestamp |
53 | 63 | continue
|
54 | 64 | }
|
55 |
| - if compareToType == CompareToFirst { |
56 |
| - result[index] = timestampSlice[index] - timestampSlice[0] |
57 |
| - } else if compareToType == CompareToLast { |
58 |
| - result[index] = timestampSlice[index] - timestampSlice[index-1] |
| 65 | + switch compareToType { |
| 66 | + case CompareToFirst: |
| 67 | + deltaSlice[index] = timestamp - timestampSlice[0] |
| 68 | + case CompareToLast: |
| 69 | + deltaSlice[index] = timestamp - timestampSlice[index-1] |
| 70 | + default: |
| 71 | + panic(fmt.Errorf("not support compare type: %#v", compareToType)) |
59 | 72 | }
|
60 | 73 | }
|
61 |
| - return result |
| 74 | + return deltaSlice |
62 | 75 | }
|
63 | 76 |
|
64 | 77 | // FromTimestampSliceDelta 从时间戳的delta恢复时间戳序列
|
65 | 78 | func FromTimestampSliceDelta(deltaSlice []uint64, compareToType CompareToType) []uint64 {
|
66 |
| - result := make([]uint64, 0) |
| 79 | + timeSlice := make([]uint64, 0) |
67 | 80 | for index, delta := range deltaSlice {
|
68 | 81 | if index == 0 {
|
69 |
| - result[index] = delta |
| 82 | + timeSlice[index] = delta |
70 | 83 | continue
|
71 | 84 | }
|
72 |
| - if compareToType == CompareToFirst { |
73 |
| - result[index] = deltaSlice[0] + delta |
74 |
| - } else if compareToType == CompareToLast { |
75 |
| - result[index] = result[index-1] + delta |
| 85 | + switch compareToType { |
| 86 | + case CompareToFirst: |
| 87 | + timeSlice[index] = deltaSlice[0] + delta |
| 88 | + case CompareToLast: |
| 89 | + timeSlice[index] = timeSlice[index-1] + delta |
| 90 | + default: |
| 91 | + panic(fmt.Errorf("not support compare type: %#v", compareToType)) |
76 | 92 | }
|
77 | 93 | }
|
78 |
| - return result |
| 94 | + return timeSlice |
79 | 95 | }
|
80 | 96 |
|
81 | 97 | // ------------------------------------------------ ---------------------------------------------------------------------
|
0 commit comments