package net.woggioni.klevtree import net.woggioni.klevtree.node.CharNode import net.woggioni.klevtree.node.TrieNode open class CharTrie : Trie, Char, PAYLOAD>() { private class CaseInsensitiveKeyChecker : Keychecker { override fun check(key1: Char?, key2: Char?) = key1 == key2 } private class CaseSensitiveKeyChecker : Keychecker { override fun check(key1: Char?, key2: Char?) = key1?.lowercaseChar() == key2?.lowercaseChar() } override val root: TrieNode = CharNode(null) override val tails = mutableListOf>() override var keyChecker: Keychecker = CaseSensitiveKeyChecker() var caseSensitive : Boolean = true set(value) { if(value) { keyChecker = CaseSensitiveKeyChecker() } else { keyChecker = CaseInsensitiveKeyChecker() } field = value } fun add(word : String) = super.add(word.asIterable()) fun search(word : String) : TrieNode? = search(word.asIterable().toList()) fun remove(word : String) = remove(word.asIterable().toList()) }