override fun addStringUnsafe()

in src/main/kotlin/jetbrains/buildServer/server/querylang/indexing/SynchronizedCompressedTrie.kt [31:69]


    override fun addStringUnsafe(str: String, obj: T?) {
        var node = root
        var i = 0
        while (i < str.length) {
            val c = str[i]
            var nextNode = node.getNode(c)
            if (nextNode == null) {
                nextNode = Node(
                    str.substring(i)
                )
                node.addEdge(c, nextNode)
                i = str.length
                node = nextNode
                break
            }

            val prefix = findLargestPrefix(str, i, nextNode.str)

            if (nextNode.str.length <= str.length - i && prefix.length == nextNode.str.length) {
                i += prefix.length
                node = nextNode
            } else {
                val newNode1 =
                    Node<T>(prefix)

                node.addEdge(c, newNode1)
                nextNode.str = nextNode.str.drop(prefix.length)
                newNode1.addEdge(nextNode.str.first(), nextNode)
                i += prefix.length
                node = newNode1
            }
        }

        if (!node.isTerminal) {
            stringsTotal.incrementAndGet()
        }
        node.isTerminal = true
        node.obj = obj
    }