refactor: log parser pointers
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user