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 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 } type MonthNode struct { IsOK bool MaxDay int 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 } type TrieYear struct { Year int Month [13]*MonthNode } func CreateTrieYear(year int) *TrieYear { ty := TrieYear{} // ty.Month[0].IsOK = false for i := 1; i <= 12; i++ { ty.Month[i] = NewMonthNode(year, i) month := ty.Month[i] for begin := 1; begin <= month.MaxDay; begin++ { month.CreateDay(begin) for j := 0; j < 24; j++ { month.Day[begin].Hour[j] = NewHourNode() } } } return &ty }