aboutsummaryrefslogtreecommitdiffstats
path: root/calculator.go
blob: 08193b4829222cf7c741fdb5347e6339775c4a00 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import "strconv"

type Stack []float64

type Calculator struct {
	stack Stack
	buf   string
}

// add performs addition when the user inputs the '+' operator.
func (c *Calculator) add() {
	if len(c.stack) < 1 {
		return
	}
	if con := parseConstant(c.buf); con != nil {
		c.stack[len(c.stack)-1] += *con
	} else if f, err := strconv.ParseFloat(c.buf, 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.buf = ""
}