All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lcml.LCMLArray.kt Maven / Gradle / Ivy

package lcml

class LCMLArray(lexer: LCMLLexer?,
                end: (LCMLLexer) -> Boolean): LCMLElement(lexer) {

    private val list = ArrayList()
    constructor(input: String) : this(LCMLLexer(input), { lexer -> lexer.finished })
    constructor() : this(null, { false })

    init {
        while (lexer!=null&&!end(lexer)) {
            var attributes: LCMLObject? = null

            var type = lexer.currentToken!!.type
            if (type == Token.Type.OPEN) {
                lexer.moveAhead()
                attributes = LCMLObject(lexer) { it.currentToken!!.type == Token.Type.CLOSE }

                type = lexer.moveAhead().type
            }

            list.add(when (type) {
                Token.Type.OPEN_BRACKET -> {
                    lexer.moveAhead()
                    parseObject().apply {
                        this.attributes = attributes
                    }
                }

                Token.Type.OPEN_SQUARE_BRACKET -> {
                    lexer.moveAhead()
                    parseArray().apply {
                        this.attributes = attributes
                    }
                }

                else -> {
                    if (attributes != null)
                        throw Exception()

                    parseValue()
                }
            })

            lexer.moveAhead()
        }
    }

    override fun toFullString(): String {
        return (if (attributes == null)
            "" else "($attributes)") + "[$this]"
    }

    override fun toString(): String {
        var response = ""
        for (value in list) {
            response += when (value) {
                is LCMLElement<*> -> value.toFullString()
                is String -> "\"$value\""
                else -> value.toString()
            }
        }

        return response
    }

    override fun get(key: Int, defaultValue: Any?): Any? {
        return list[key]?:defaultValue
    }

    override fun getArray(key: Int, defaultValue: LCMLArray?): LCMLArray? {
        return list[key]?.let {
            if(it is LCMLArray) it else defaultValue
        }?:defaultValue
    }

    override fun getObject(key: Int, defaultValue: LCMLObject?): LCMLObject? {
        return list[key]?.let {
            if(it is LCMLObject) it else defaultValue
        }?:defaultValue
    }

    override fun getString(key: Int, defaultValue: String?): String? {
        return list[key]?.let {
            if(it is String) it else defaultValue
        }?:defaultValue
    }

    override fun getInt(key: Int, defaultValue: Int?): Int? {
        return list[key]?.let {
            if(it is Int) it else defaultValue
        }?:defaultValue
    }

    override fun getLong(key: Int, defaultValue: Long?): Long? {
        return list[key]?.let {
            if(it is Long) it else defaultValue
        }?:defaultValue
    }

    override fun getDouble(key: Int, defaultValue: Double?): Double? {
        return list[key]?.let {
            if(it is Double) it else defaultValue
        }?:defaultValue
    }

    override fun getBoolean(key: Int, defaultValue: Boolean?): Boolean? {
        return list[key]?.let {
            if(it is Boolean) it else defaultValue
        }?:defaultValue
    }

    override fun getElementAttributes(key: Int): LCMLObject? {
        return list[key]?.let {
            if(it is LCMLElement<*>) it.attributes else null
        }
    }

    override fun put(key: Int, value: Any?): LCMLArray {
        list.add(key, value)
        return this
    }

    fun put(value: Any?): LCMLArray {
        list.add(value)
        return this
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy