curl2info/trie_test.go

91 lines
1.4 KiB
Go
Raw Normal View History

2018-12-03 19:22:43 +08:00
package curl2info
import "time"
type SecondNode int
type MinuteNode struct {
IsOK bool
// Second [60]SecondNode
}
type HourNode struct {
IsOK bool
Minute [60]MinuteNode
}
type DayNode struct {
IsOK bool
Week time.Weekday
2018-12-04 02:55:34 +08:00
Hour [24]*HourNode
}
func NewHourNode() *HourNode {
return &HourNode{}
}
func (hour *HourNode) CreateHour(IsOk bool) {
h := &HourNode{}
h.IsOK = IsOk
}
func NewDayNode(curday *time.Time) *DayNode {
day := &DayNode{}
week := curday.Weekday()
day.IsOK = true
day.Week = week
return day
2018-12-03 19:22:43 +08:00
}
type MonthNode struct {
IsOK bool
MaxDay int
2018-12-04 02:55:34 +08:00
First *time.Time
Day [32]*DayNode
}
func (month *MonthNode) CreateDay(nday int) {
day := month.First.AddDate(0, 0, nday-1)
month.Day[nday] = NewDayNode(&day)
}
func NewMonthNode(year, month int) *MonthNode {
Month := &MonthNode{}
First := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
Month.IsOK = false
Month.First = &First
Month.MaxDay = Month.First.AddDate(0, 1, -1).Day()
return Month
2018-12-03 19:22:43 +08:00
}
type TrieYear struct {
Year int
2018-12-04 02:55:34 +08:00
Month [13]*MonthNode
2018-12-03 19:22:43 +08:00
}
func CreateTrieYear(year int) *TrieYear {
ty := TrieYear{}
2018-12-04 02:55:34 +08:00
// ty.Month[0].IsOK = false
2018-12-03 19:22:43 +08:00
for i := 1; i <= 12; i++ {
2018-12-04 02:55:34 +08:00
ty.Month[i] = NewMonthNode(year, i)
month := ty.Month[i]
2018-12-03 19:22:43 +08:00
2018-12-04 02:55:34 +08:00
for begin := 1; begin <= month.MaxDay; begin++ {
2018-12-03 19:22:43 +08:00
2018-12-04 02:55:34 +08:00
month.CreateDay(begin)
2018-12-03 19:22:43 +08:00
for j := 0; j < 24; j++ {
2018-12-04 02:55:34 +08:00
month.Day[begin].Hour[j] = NewHourNode()
2018-12-03 19:22:43 +08:00
}
}
}
return &ty
}