Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

types.go 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright (c) 2012-2014 Jeremy Latt
  2. // Copyright (c) 2014-2015 Edmund Huber
  3. // Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
  4. // released under the MIT license
  5. package irc
  6. import (
  7. "strings"
  8. )
  9. // ModeSet holds a set of modes.
  10. type ModeSet map[Mode]bool
  11. // String returns the modes in this set.
  12. func (set ModeSet) String() string {
  13. if len(set) == 0 {
  14. return ""
  15. }
  16. strs := make([]string, len(set))
  17. index := 0
  18. for mode := range set {
  19. strs[index] = mode.String()
  20. index++
  21. }
  22. return strings.Join(strs, "")
  23. }
  24. // ClientSet is a set of clients.
  25. type ClientSet map[*Client]bool
  26. // Add adds the given client to this set.
  27. func (clients ClientSet) Add(client *Client) {
  28. clients[client] = true
  29. }
  30. // Remove removes the given client from this set.
  31. func (clients ClientSet) Remove(client *Client) {
  32. delete(clients, client)
  33. }
  34. // Has returns true if the given client is in this set.
  35. func (clients ClientSet) Has(client *Client) bool {
  36. return clients[client]
  37. }
  38. // MemberSet is a set of members with modes.
  39. type MemberSet map[*Client]ModeSet
  40. // Add adds the given client to this set.
  41. func (members MemberSet) Add(member *Client) {
  42. members[member] = make(ModeSet)
  43. }
  44. // Remove removes the given client from this set.
  45. func (members MemberSet) Remove(member *Client) {
  46. delete(members, member)
  47. }
  48. // Has returns true if the given client is in this set.
  49. func (members MemberSet) Has(member *Client) bool {
  50. _, ok := members[member]
  51. return ok
  52. }
  53. // HasMode returns true if the given client is in this set with the given mode.
  54. func (members MemberSet) HasMode(member *Client, mode Mode) bool {
  55. modes, ok := members[member]
  56. if !ok {
  57. return false
  58. }
  59. return modes[mode]
  60. }
  61. // AnyHasMode returns true if any of our clients has the given mode.
  62. func (members MemberSet) AnyHasMode(mode Mode) bool {
  63. for _, modes := range members {
  64. if modes[mode] {
  65. return true
  66. }
  67. }
  68. return false
  69. }
  70. // ChannelSet is a set of channels.
  71. type ChannelSet map[*Channel]bool