package ledger import ( "slices" "time" ) type Register map[string]Balances func (register Register) WithBPIs(bpis BPIs) Register { result := make(Register) for d := range register { result[d] = register[d].WithBPIsAt(bpis, d) } return result } func (register Register) PushAll(other Register) { for date := range other { if _, ok := register[date]; !ok { register[date] = make(Balances) } register[date].PushAll(other[date]) } } func (register Register) Names() []string { names := map[string]int{} for _, v := range register { for name := range v { names[name] = 1 } } result := make([]string, 0, len(register)) for k := range names { result = append(result, k) } slices.Sort(result) return result } func (register Register) Dates() []string { result := make([]string, 0, len(register)) for k := range register { result = append(result, k) } slices.Sort(result) return result } func (register Register) Times() []time.Time { dates := register.Dates() result := make([]time.Time, len(dates)) for i := range dates { v, _ := dateToTime(dates[i]) result[i] = v } return result }