add RemoveNode IndexNode method
This commit is contained in:
parent
9f8a971c2a
commit
88a20acf13
|
@ -1,7 +1,7 @@
|
||||||
package vbt
|
package vbt
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/474420502/focus/stack/listarraystack"
|
lastack "github.com/474420502/focus/stack/listarraystack"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Iterator struct {
|
type Iterator struct {
|
||||||
|
@ -112,6 +112,7 @@ func (iter *Iterator) Next() (result bool) {
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (iter *Iterator) GetPrev(cur *Node, idx int) *Node {
|
func (iter *Iterator) GetPrev(cur *Node, idx int) *Node {
|
||||||
|
|
||||||
// iter := NewIterator(cur)
|
// iter := NewIterator(cur)
|
||||||
|
|
|
@ -61,7 +61,7 @@ func (tree *Tree) Size() int {
|
||||||
return tree.root.size
|
return tree.root.size
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) indexNode(idx int) *Node {
|
func (tree *Tree) IndexNode(idx int) *Node {
|
||||||
cur := tree.root
|
cur := tree.root
|
||||||
if idx >= 0 {
|
if idx >= 0 {
|
||||||
for cur != nil {
|
for cur != nil {
|
||||||
|
@ -93,7 +93,7 @@ func (tree *Tree) indexNode(idx int) *Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) Index(idx int) (interface{}, bool) {
|
func (tree *Tree) Index(idx int) (interface{}, bool) {
|
||||||
n := tree.indexNode(idx)
|
n := tree.IndexNode(idx)
|
||||||
if n != nil {
|
if n != nil {
|
||||||
return n.value, true
|
return n.value, true
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ func (tree *Tree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { /
|
||||||
ok = false
|
ok = false
|
||||||
}
|
}
|
||||||
|
|
||||||
n := tree.indexNode(idx1)
|
n := tree.IndexNode(idx1)
|
||||||
tree.iter.SetNode(n)
|
tree.iter.SetNode(n)
|
||||||
iter := tree.iter
|
iter := tree.iter
|
||||||
result = make([]interface{}, 0, idx1-idx2)
|
result = make([]interface{}, 0, idx1-idx2)
|
||||||
|
@ -139,7 +139,7 @@ func (tree *Tree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { /
|
||||||
ok = false
|
ok = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if n := tree.indexNode(idx1); n != nil {
|
if n := tree.IndexNode(idx1); n != nil {
|
||||||
tree.iter.SetNode(n)
|
tree.iter.SetNode(n)
|
||||||
iter := tree.iter
|
iter := tree.iter
|
||||||
result = make([]interface{}, 0, idx2-idx1)
|
result = make([]interface{}, 0, idx2-idx1)
|
||||||
|
@ -161,15 +161,15 @@ func (tree *Tree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { /
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) RemoveIndex(idx int) (interface{}, bool) {
|
func (tree *Tree) RemoveIndex(idx int) (interface{}, bool) {
|
||||||
n := tree.indexNode(idx)
|
n := tree.IndexNode(idx)
|
||||||
if n != nil {
|
if n != nil {
|
||||||
tree.removeNode(n)
|
tree.RemoveNode(n)
|
||||||
return n.value, true
|
return n.value, true
|
||||||
}
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) removeNode(n *Node) {
|
func (tree *Tree) RemoveNode(n *Node) {
|
||||||
if tree.root.size == 1 {
|
if tree.root.size == 1 {
|
||||||
tree.root = nil
|
tree.root = nil
|
||||||
// return n
|
// return n
|
||||||
|
@ -230,7 +230,7 @@ func (tree *Tree) removeNode(n *Node) {
|
||||||
func (tree *Tree) Remove(key interface{}) (interface{}, bool) {
|
func (tree *Tree) Remove(key interface{}) (interface{}, bool) {
|
||||||
|
|
||||||
if n, ok := tree.GetNode(key); ok {
|
if n, ok := tree.GetNode(key); ok {
|
||||||
tree.removeNode(n)
|
tree.RemoveNode(n)
|
||||||
return n.value, true
|
return n.value, true
|
||||||
}
|
}
|
||||||
// return nil
|
// return nil
|
||||||
|
|
|
@ -62,7 +62,7 @@ func (tree *Tree) Size() int {
|
||||||
return tree.root.size
|
return tree.root.size
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) indexNode(idx int) *Node {
|
func (tree *Tree) IndexNode(idx int) *Node {
|
||||||
cur := tree.root
|
cur := tree.root
|
||||||
if idx >= 0 {
|
if idx >= 0 {
|
||||||
for cur != nil {
|
for cur != nil {
|
||||||
|
@ -94,7 +94,7 @@ func (tree *Tree) indexNode(idx int) *Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) Index(idx int) (interface{}, bool) {
|
func (tree *Tree) Index(idx int) (interface{}, bool) {
|
||||||
n := tree.indexNode(idx)
|
n := tree.IndexNode(idx)
|
||||||
if n != nil {
|
if n != nil {
|
||||||
return n.value, true
|
return n.value, true
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@ func (tree *Tree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { /
|
||||||
ok = false
|
ok = false
|
||||||
}
|
}
|
||||||
|
|
||||||
n := tree.indexNode(idx1)
|
n := tree.IndexNode(idx1)
|
||||||
tree.iter.SetNode(n)
|
tree.iter.SetNode(n)
|
||||||
iter := tree.iter
|
iter := tree.iter
|
||||||
result = make([]interface{}, 0, idx1-idx2)
|
result = make([]interface{}, 0, idx1-idx2)
|
||||||
|
@ -140,7 +140,7 @@ func (tree *Tree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { /
|
||||||
ok = false
|
ok = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if n := tree.indexNode(idx1); n != nil {
|
if n := tree.IndexNode(idx1); n != nil {
|
||||||
tree.iter.SetNode(n)
|
tree.iter.SetNode(n)
|
||||||
iter := tree.iter
|
iter := tree.iter
|
||||||
result = make([]interface{}, 0, idx2-idx1)
|
result = make([]interface{}, 0, idx2-idx1)
|
||||||
|
@ -162,15 +162,15 @@ func (tree *Tree) IndexRange(idx1, idx2 int) (result []interface{}, ok bool) { /
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) RemoveIndex(idx int) (interface{}, bool) {
|
func (tree *Tree) RemoveIndex(idx int) (interface{}, bool) {
|
||||||
n := tree.indexNode(idx)
|
n := tree.IndexNode(idx)
|
||||||
if n != nil {
|
if n != nil {
|
||||||
tree.removeNode(n)
|
tree.RemoveNode(n)
|
||||||
return n.value, true
|
return n.value, true
|
||||||
}
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tree *Tree) removeNode(n *Node) {
|
func (tree *Tree) RemoveNode(n *Node) {
|
||||||
if tree.root.size == 1 {
|
if tree.root.size == 1 {
|
||||||
tree.root = nil
|
tree.root = nil
|
||||||
// return n
|
// return n
|
||||||
|
@ -231,7 +231,7 @@ func (tree *Tree) removeNode(n *Node) {
|
||||||
func (tree *Tree) Remove(key interface{}) (interface{}, bool) {
|
func (tree *Tree) Remove(key interface{}) (interface{}, bool) {
|
||||||
|
|
||||||
if n, ok := tree.GetNode(key); ok {
|
if n, ok := tree.GetNode(key); ok {
|
||||||
tree.removeNode(n)
|
tree.RemoveNode(n)
|
||||||
return n.value, true
|
return n.value, true
|
||||||
}
|
}
|
||||||
// return nil
|
// return nil
|
||||||
|
|
|
@ -3,6 +3,7 @@ package utils
|
||||||
var bit = uint(32 << (^uint(0) >> 63))
|
var bit = uint(32 << (^uint(0) >> 63))
|
||||||
var bitsub1 = bit - 1
|
var bitsub1 = bit - 1
|
||||||
|
|
||||||
|
// AbsInt
|
||||||
func AbsInt(n int) uint {
|
func AbsInt(n int) uint {
|
||||||
y := n >> bitsub1
|
y := n >> bitsub1
|
||||||
return uint((n ^ y) - y)
|
return uint((n ^ y) - y)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user