您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

types.go 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package irc
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. //
  7. // simple types
  8. //
  9. type ChannelNameMap map[Name]*Channel
  10. func (channels ChannelNameMap) Get(name Name) *Channel {
  11. return channels[name.ToLower()]
  12. }
  13. func (channels ChannelNameMap) Add(channel *Channel) error {
  14. if channels[channel.name.ToLower()] != nil {
  15. return fmt.Errorf("%s: already set", channel.name)
  16. }
  17. channels[channel.name.ToLower()] = channel
  18. return nil
  19. }
  20. func (channels ChannelNameMap) Remove(channel *Channel) error {
  21. if channel != channels[channel.name.ToLower()] {
  22. return fmt.Errorf("%s: mismatch", channel.name)
  23. }
  24. delete(channels, channel.name.ToLower())
  25. return nil
  26. }
  27. type ChannelModeSet map[ChannelMode]bool
  28. func (set ChannelModeSet) String() string {
  29. if len(set) == 0 {
  30. return ""
  31. }
  32. strs := make([]string, len(set))
  33. index := 0
  34. for mode := range set {
  35. strs[index] = mode.String()
  36. index += 1
  37. }
  38. return strings.Join(strs, "")
  39. }
  40. type ClientSet map[*Client]bool
  41. func (clients ClientSet) Add(client *Client) {
  42. clients[client] = true
  43. }
  44. func (clients ClientSet) Remove(client *Client) {
  45. delete(clients, client)
  46. }
  47. func (clients ClientSet) Has(client *Client) bool {
  48. return clients[client]
  49. }
  50. type MemberSet map[*Client]ChannelModeSet
  51. func (members MemberSet) Add(member *Client) {
  52. members[member] = make(ChannelModeSet)
  53. }
  54. func (members MemberSet) Remove(member *Client) {
  55. delete(members, member)
  56. }
  57. func (members MemberSet) Has(member *Client) bool {
  58. _, ok := members[member]
  59. return ok
  60. }
  61. func (members MemberSet) HasMode(member *Client, mode ChannelMode) bool {
  62. modes, ok := members[member]
  63. if !ok {
  64. return false
  65. }
  66. return modes[mode]
  67. }
  68. func (members MemberSet) AnyHasMode(mode ChannelMode) bool {
  69. for _, modes := range members {
  70. if modes[mode] {
  71. return true
  72. }
  73. }
  74. return false
  75. }
  76. type ChannelSet map[*Channel]bool
  77. func (channels ChannelSet) Add(channel *Channel) {
  78. channels[channel] = true
  79. }
  80. func (channels ChannelSet) Remove(channel *Channel) {
  81. delete(channels, channel)
  82. }
  83. func (channels ChannelSet) First() *Channel {
  84. for channel := range channels {
  85. return channel
  86. }
  87. return nil
  88. }
  89. //
  90. // interfaces
  91. //
  92. type Identifiable interface {
  93. Id() Name
  94. Nick() Name
  95. }