refactor: log parser pointers

This commit is contained in:
Inanc Gumus
2019-04-27 20:35:50 +03:00
parent cc790d9c06
commit 5038ca9e3b
2 changed files with 15 additions and 17 deletions

View File

@ -20,7 +20,8 @@ func main() {
in := bufio.NewScanner(os.Stdin)
for in.Scan() {
update(p, parse(p, in.Text()))
parsed := parse(p, in.Text())
update(p, parsed)
}
summarize(p)
@ -35,8 +36,7 @@ func summarize(p *parser) {
fmt.Println(strings.Repeat("-", 45))
for _, domain := range p.domains {
parsed := p.sum[domain]
fmt.Printf("%-30s %10d\n", domain, parsed.visits)
fmt.Printf("%-30s %10d\n", domain, p.sum[domain].visits)
}
fmt.Printf("\n%-30s %10d\n", "TOTAL", p.total)
}

View File

@ -35,7 +35,7 @@ func newParser() *parser {
}
// parse parses a log line and returns the parsed result with an error
func parse(p *parser, line string) (parsed result) {
func parse(p *parser, line string) (r result) {
if p.lerr != nil {
return
}
@ -48,37 +48,35 @@ func parse(p *parser, line string) (parsed result) {
return
}
parsed.domain = fields[0]
var err error
parsed.visits, err = strconv.Atoi(fields[1])
if parsed.visits < 0 || err != nil {
r.domain = fields[0]
r.visits, err = strconv.Atoi(fields[1])
if r.visits < 0 || err != nil {
p.lerr = fmt.Errorf("wrong input: %q (line #%d)", fields[1], p.lines)
}
return
}
// update updates the errors for the given parsing result
func update(p *parser, parsed result) {
func update(p *parser, r result) {
if p.lerr != nil {
return
}
domain, visits := parsed.domain, parsed.visits
// Collect the unique domains
if _, ok := p.sum[domain]; !ok {
p.domains = append(p.domains, domain)
if _, ok := p.sum[r.domain]; !ok {
p.domains = append(p.domains, r.domain)
}
// Keep track of total and per domain visits
p.total += visits
p.total += r.visits
// create and assign a new copy of `visit`
p.sum[domain] = result{
domain: domain,
visits: visits + p.sum[domain].visits,
p.sum[r.domain] = result{
domain: r.domain,
visits: r.visits + p.sum[r.domain].visits,
}
}