trie year
This commit is contained in:
parent
886e2dc188
commit
a4b2a61e2c
@ -3,14 +3,12 @@ package curl2info
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/davecgh/go-spew/spew"
|
"github.com/davecgh/go-spew/spew"
|
||||||
)
|
)
|
||||||
@ -237,7 +235,8 @@ func TestParseCrontab(t *testing.T) {
|
|||||||
PrintMemUsage()
|
PrintMemUsage()
|
||||||
|
|
||||||
ty := CreateTrieYear(2018)
|
ty := CreateTrieYear(2018)
|
||||||
log.Println(unsafe.Sizeof(ty))
|
|
||||||
|
spew.Dump(ty)
|
||||||
|
|
||||||
PrintMemUsage()
|
PrintMemUsage()
|
||||||
}
|
}
|
||||||
|
71
trie_test.go
71
trie_test.go
@ -16,54 +16,71 @@ type HourNode struct {
|
|||||||
|
|
||||||
type DayNode struct {
|
type DayNode struct {
|
||||||
IsOK bool
|
IsOK bool
|
||||||
|
|
||||||
Week time.Weekday
|
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 {
|
type MonthNode struct {
|
||||||
IsOK bool
|
IsOK bool
|
||||||
MaxDay int
|
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 {
|
type TrieYear struct {
|
||||||
Year int
|
Year int
|
||||||
Month [13]MonthNode
|
Month [13]*MonthNode
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateTrieYear(year int) *TrieYear {
|
func CreateTrieYear(year int) *TrieYear {
|
||||||
|
|
||||||
ty := TrieYear{}
|
ty := TrieYear{}
|
||||||
ty.Month[0].IsOK = false
|
// ty.Month[0].IsOK = false
|
||||||
|
|
||||||
for i := 1; i <= 12; i++ {
|
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]
|
for begin := 1; begin <= month.MaxDay; begin++ {
|
||||||
month.IsOK = false
|
|
||||||
|
|
||||||
last := cur.AddDate(0, 1, -1).Day()
|
month.CreateDay(begin)
|
||||||
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
|
|
||||||
|
|
||||||
for j := 0; j < 24; j++ {
|
for j := 0; j < 24; j++ {
|
||||||
hour := &day.Hour[j]
|
month.Day[begin].Hour[j] = NewHourNode()
|
||||||
hour.IsOK = false
|
|
||||||
|
|
||||||
for k := 0; k < 60; k++ {
|
|
||||||
min := &hour.Minute[k]
|
|
||||||
min.IsOK = false
|
|
||||||
// 还差一个秒
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user