72 lines
1.3 KiB
Go
72 lines
1.3 KiB
Go
// Copyright 2015, Hu Keping. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/oofpgDLD/dtask/pkg/rbtree"
|
|
)
|
|
|
|
// Var is the node of a struct
|
|
type Var struct {
|
|
Expiry time.Time `json:"expiry,omitempty"`
|
|
ID string `json:"id,omitempty"`
|
|
}
|
|
|
|
// Less will order the node by `Time`
|
|
func (x Var) Less(than rbtree.Item) bool {
|
|
return x.Expiry.Before(than.(Var).Expiry)
|
|
}
|
|
|
|
func main() {
|
|
rbt := rbtree.New()
|
|
|
|
var1 := Var{
|
|
Expiry: time.Now().Add(time.Second * 10),
|
|
ID: "var1",
|
|
}
|
|
var2 := Var{
|
|
Expiry: time.Now().Add(time.Second * 20),
|
|
ID: "var2",
|
|
}
|
|
var3 := Var{
|
|
Expiry: var2.Expiry,
|
|
ID: "var2-dup",
|
|
}
|
|
var4 := Var{
|
|
Expiry: time.Now().Add(time.Second * 40),
|
|
ID: "var4",
|
|
}
|
|
var5 := Var{
|
|
Expiry: time.Now().Add(time.Second * 50),
|
|
ID: "var5",
|
|
}
|
|
|
|
rbt.Insert(var1)
|
|
rbt.Insert(var2)
|
|
rbt.Insert(var3)
|
|
rbt.Insert(var4)
|
|
rbt.Insert(var5)
|
|
|
|
tmp := Var{
|
|
Expiry: var4.Expiry,
|
|
ID: "This field is not the key factor",
|
|
}
|
|
|
|
// var4 and var5 were expected
|
|
rbt.Ascend(rbt.Get(tmp), print)
|
|
}
|
|
|
|
func print(item rbtree.Item) bool {
|
|
i, ok := item.(Var)
|
|
if !ok {
|
|
return false
|
|
}
|
|
fmt.Printf("%+v\n", i)
|
|
return true
|
|
}
|