aboutsummaryrefslogtreecommitdiffstats
path: root/calculator.go
diff options
context:
space:
mode:
Diffstat (limited to 'calculator.go')
-rw-r--r--calculator.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/calculator.go b/calculator.go
new file mode 100644
index 0000000..30cc7ec
--- /dev/null
+++ b/calculator.go
@@ -0,0 +1,26 @@
+package main
+
+import "strconv"
+
+type Stack []float64
+
+type Calculator struct {
+ stack Stack
+ buffer string
+}
+
+// add performs addition when the user inputs the '+' operator.
+func (c *Calculator) add() {
+ if len(c.stack) < 1 {
+ return
+ }
+ if con := parseConstant(c.buffer); con != nil {
+ c.stack[len(c.stack)-1] += *con
+ } else if f, err := strconv.ParseFloat(c.buffer, 64); err == nil {
+ c.stack[len(c.stack)-1] += f
+ } else if len(c.stack) > 1 {
+ c.stack[len(c.stack)-2] += c.stack[len(c.stack)-1]
+ c.stack = c.stack[:len(c.stack)-1]
+ }
+ c.buffer = ""
+}