mirror of
https://github.com/DanilaFe/abacus
synced 2024-12-22 15:30:09 -08:00
Add the variable database.
This commit is contained in:
parent
daffdb6b42
commit
146f3994ef
|
@ -48,6 +48,10 @@ class Abacus(val configuration: Configuration) {
|
||||||
* The promotion manager used to convert between number implementations.
|
* The promotion manager used to convert between number implementations.
|
||||||
*/
|
*/
|
||||||
val promotionManager = PromotionManager(this)
|
val promotionManager = PromotionManager(this)
|
||||||
|
/**
|
||||||
|
* The database of variable definitions.
|
||||||
|
*/
|
||||||
|
val variableDatabase = VariableDatabase(this)
|
||||||
/**
|
/**
|
||||||
* The number implementation used by default.
|
* The number implementation used by default.
|
||||||
*/
|
*/
|
||||||
|
@ -63,6 +67,7 @@ class Abacus(val configuration: Configuration) {
|
||||||
pluginManager.addListener(tokenizer)
|
pluginManager.addListener(tokenizer)
|
||||||
pluginManager.addListener(parser)
|
pluginManager.addListener(parser)
|
||||||
pluginManager.addListener(promotionManager)
|
pluginManager.addListener(promotionManager)
|
||||||
|
pluginManager.addListener(variableDatabase)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
package org.nwapw.abacus.variables
|
||||||
|
|
||||||
|
import org.nwapw.abacus.Abacus
|
||||||
|
import org.nwapw.abacus.number.NumberInterface
|
||||||
|
import org.nwapw.abacus.plugin.PluginListener
|
||||||
|
import org.nwapw.abacus.plugin.PluginManager
|
||||||
|
import javax.swing.tree.TreeNode
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A database for variables and definition.
|
||||||
|
*
|
||||||
|
* The variable database is used to keep track of
|
||||||
|
* variables and definitions throughout the calculator.
|
||||||
|
*
|
||||||
|
* @property abacus the Abacus instance.
|
||||||
|
*/
|
||||||
|
class VariableDatabase(val abacus: Abacus): PluginListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The variables that are stored in the database.
|
||||||
|
*/
|
||||||
|
private val variables = mutableMapOf<String, NumberInterface>()
|
||||||
|
/**
|
||||||
|
* The definitions that are stored in the database.
|
||||||
|
*/
|
||||||
|
private val definitions = mutableMapOf<String, TreeNode>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores a variable in the database.
|
||||||
|
*
|
||||||
|
* @param name the name of the variable.
|
||||||
|
* @param value the new value of the variable.
|
||||||
|
*/
|
||||||
|
fun storeVariable(name: String, value: NumberInterface) {
|
||||||
|
variables[name] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores a definition in the database
|
||||||
|
*
|
||||||
|
* @param name the name of the definition.
|
||||||
|
* @param value the new value of the definition.
|
||||||
|
*/
|
||||||
|
fun storeDefinition(name: String, value: TreeNode) {
|
||||||
|
definitions[name] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value of the variable, or 0 if
|
||||||
|
* it is not defined.
|
||||||
|
*
|
||||||
|
* @param name the name of the variable.
|
||||||
|
* @return the value of the variable.
|
||||||
|
*/
|
||||||
|
fun getVariableValue(name: String): NumberInterface {
|
||||||
|
return variables[name] ?:
|
||||||
|
abacus.numberImplementation.instanceForString("0")
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the definition.
|
||||||
|
*
|
||||||
|
* @param name the name of the definition.
|
||||||
|
* @return the value of the definition, or null if one doesn't exist.
|
||||||
|
*/
|
||||||
|
fun getDefinition(name: String): TreeNode? {
|
||||||
|
return definitions[name]
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoad(manager: PluginManager?) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUnload(manager: PluginManager?) {
|
||||||
|
variables.clear()
|
||||||
|
definitions.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user