1
0
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:
Danila Fedorin 2017-09-01 23:52:11 -07:00
parent daffdb6b42
commit 146f3994ef
2 changed files with 84 additions and 0 deletions

View File

@ -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)
} }
/** /**

View File

@ -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()
}
}