1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package trie
- import "errors"
- var (
- ErrorOverMaxValue = errors.New("the value don't over max value")
- )
- type IpCidrNode struct {
- Mark bool
- child map[uint32]*IpCidrNode
- maxValue uint32
- }
- func NewIpCidrNode(mark bool, maxValue uint32) *IpCidrNode {
- ipCidrNode := &IpCidrNode{
- Mark: mark,
- child: map[uint32]*IpCidrNode{},
- maxValue: maxValue,
- }
- return ipCidrNode
- }
- func (n *IpCidrNode) addChild(value uint32) error {
- if value > n.maxValue {
- return ErrorOverMaxValue
- }
- n.child[value] = NewIpCidrNode(false, n.maxValue)
- return nil
- }
- func (n *IpCidrNode) hasChild(value uint32) bool {
- return n.getChild(value) != nil
- }
- func (n *IpCidrNode) getChild(value uint32) *IpCidrNode {
- if value <= n.maxValue {
- return n.child[value]
- }
- return nil
- }
|