trie year

This commit is contained in:
eson 2018-12-04 02:55:34 +08:00
parent 886e2dc188
commit a4b2a61e2c
2 changed files with 46 additions and 30 deletions

View File

@ -3,14 +3,12 @@ package curl2info
import (
"errors"
"fmt"
"log"
"regexp"
"runtime"
"strconv"
"strings"
"testing"
"time"
"unsafe"
"github.com/davecgh/go-spew/spew"
)
@ -237,7 +235,8 @@ func TestParseCrontab(t *testing.T) {
PrintMemUsage()
ty := CreateTrieYear(2018)
log.Println(unsafe.Sizeof(ty))
spew.Dump(ty)
PrintMemUsage()
}

View File

@ -16,54 +16,71 @@ type HourNode struct {
type DayNode struct {
IsOK bool
Week time.Weekday
Hour [24]HourNode
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
Day []DayNode
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
Month [13]*MonthNode
}
func CreateTrieYear(year int) *TrieYear {
ty := TrieYear{}
ty.Month[0].IsOK = false
// ty.Month[0].IsOK = false
for i := 1; i <= 12; i++ {
cur := time.Date(year, time.Month(i), 1, 0, 0, 0, 0, time.Local)
ty.Month[i] = NewMonthNode(year, i)
month := ty.Month[i]
month := &ty.Month[i]
month.IsOK = false
for begin := 1; begin <= month.MaxDay; begin++ {
last := cur.AddDate(0, 1, -1).Day()
month.MaxDay = last
for begin := 0; begin < last; begin++ {
month.Day = append(month.Day, DayNode{})
week := cur.AddDate(0, 0, begin).Weekday()
day := &month.Day[begin]
day.IsOK = false
day.Week = week
month.CreateDay(begin)
for j := 0; j < 24; j++ {
hour := &day.Hour[j]
hour.IsOK = false
for k := 0; k < 60; k++ {
min := &hour.Minute[k]
min.IsOK = false
// 还差一个秒
}
month.Day[begin].Hour[j] = NewHourNode()
}
}