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

Maps.kt 1.3KB

1234567891011121314151617181920212223242526272829303132
  1. package com.dmdirc.ktirc.model
  2. import com.dmdirc.ktirc.io.CaseMapping
  3. abstract class CaseInsensitiveMap<T>(private val caseMappingProvider: () -> CaseMapping, private val nameOf: (T) -> String) : Iterable<T> {
  4. private val values = HashSet<T>()
  5. operator fun get(name: String) = values.find { caseMappingProvider().areEquivalent(nameOf(it), name) }
  6. internal operator fun plusAssign(value: T) {
  7. require(get(nameOf(value)) == null) { "Value already registered: ${nameOf(value)}"}
  8. values.add(value)
  9. }
  10. internal operator fun minusAssign(name: String) {
  11. values.removeIf { caseMappingProvider().areEquivalent(nameOf(it), name) }
  12. }
  13. operator fun contains(name: String) = get(name) != null
  14. override fun iterator() = values.iterator().iterator()
  15. internal fun clear() = values.clear()
  16. internal fun removeIf(predicate: (T) -> Boolean) = values.removeIf(predicate)
  17. }
  18. class ChannelStateMap(caseMappingProvider: () -> CaseMapping) : CaseInsensitiveMap<ChannelState>(caseMappingProvider, ChannelState::name)
  19. class ChannelUserMap(caseMappingProvider: () -> CaseMapping) : CaseInsensitiveMap<ChannelUser>(caseMappingProvider, ChannelUser::nickname)
  20. class UserMap(caseMappingProvider: () -> CaseMapping) : CaseInsensitiveMap<KnownUser>(caseMappingProvider, { it.details.nickname })