-
Notifications
You must be signed in to change notification settings - Fork 1
/
countitem.go
82 lines (70 loc) · 1.92 KB
/
countitem.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
Copyright © 2023, 2024 M.Watermann, 10247 Berlin, Germany
All rights reserved
EMail : <support@mwat.de>
*/
package hashtags
//lint:file-ignore ST1017 - I prefer Yoda conditions
type (
// `TCountItem` holds a #hashtag/@mention and its number of occurrences.
TCountItem struct {
Count int // number of IDs for this #hashtag/@mention
Tag string // name of #hashtag/@mention
}
)
// -------------------------------------------------------------------------
// methods of TCountItem
// `Compare()` compares two `TCountItem` instances based on their tags
// and counts.
//
// Parameters:
// - aItem: The other TCountItem instance to compare with.
//
// Returns:
// - `-1` if the current instance is less than `aItem`.
// - ` 0` if the current instance is equal to `aItem`.
// - `+1` if the current instance is greater than `aItem`.
func (ci TCountItem) Compare(aItem TCountItem) int {
at, bt := ci.Tag+"Z", aItem.Tag+"Z" // avoid empty strings
if MarkHash == at[0] || MarkMention == at[0] {
at = at[1:]
}
if MarkHash == bt[0] || MarkMention == bt[0] {
bt = bt[1:]
}
switch true {
case at < bt:
return -1
case at > bt:
return +1
default:
switch true {
case ci.Count < aItem.Count:
return -1
case ci.Count > aItem.Count:
return 1
}
}
return 0
} // Compare()
// `Equal()` checks whether the current `TCountItem` is equal to `aItem`.
//
// Parameters:
// - `aItem`: The other item to compare with.
//
// Returns:
// - `bool`: Whether the two items are equal.
func (ci TCountItem) Equal(aItem TCountItem) bool {
return (0 == ci.Compare(aItem))
} // Equal()
// `Less()` checks whether this `TCountItem` is less than `aItem`.
//
// Parameters:
// - `aItem`: The other `TCountItem` instance to compare with.
//
// Returns:
// - `bool`: Whether the current instance is less than the other item.
func (ci TCountItem) Less(aItem TCountItem) bool {
return (-1 == ci.Compare(aItem))
} // Less()
/* EoF */