trie year
This commit is contained in:
parent
886e2dc188
commit
a4b2a61e2c
@ -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()
|
||||
}
|
||||
|
71
trie_test.go
71
trie_test.go
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user