aboutsummaryrefslogtreecommitdiffstats
path: root/core/types/block.go
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2018-09-20 14:37:53 +0800
committerGitHub <noreply@github.com>2018-09-20 14:37:53 +0800
commit2f1e71d9d298d1f6ade8d17a1db7a657b0223872 (patch)
tree7bcd6bedb41dda8daa2d8b102d961323bc7f45a6 /core/types/block.go
parent682de6408544b8d4073333e6659340b304f4399e (diff)
downloaddexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.tar
dexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.tar.gz
dexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.tar.bz2
dexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.tar.lz
dexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.tar.xz
dexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.tar.zst
dexon-consensus-2f1e71d9d298d1f6ade8d17a1db7a657b0223872.zip
core: add blockpool (#121)
core.blockPool is used to cache blocks arrived out-of-order. Our consensus should retry those blocks after their acking blocks added to lattice.
Diffstat (limited to 'core/types/block.go')
-rw-r--r--core/types/block.go27
1 files changed, 21 insertions, 6 deletions
diff --git a/core/types/block.go b/core/types/block.go
index 949876f..ddd0abd 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -125,14 +125,29 @@ func (b ByHash) Swap(i int, j int) {
// ByHeight is the helper type for sorting slice of blocks by height.
type ByHeight []*Block
-func (b ByHeight) Len() int {
- return len(b)
+// Len implements Len method in sort.Sort interface.
+func (bs ByHeight) Len() int {
+ return len(bs)
}
-func (b ByHeight) Less(i int, j int) bool {
- return b[i].Position.Height < b[j].Position.Height
+// Less implements Less method in sort.Sort interface.
+func (bs ByHeight) Less(i int, j int) bool {
+ return bs[i].Position.Height < bs[j].Position.Height
}
-func (b ByHeight) Swap(i int, j int) {
- b[i], b[j] = b[j], b[i]
+// Swap implements Swap method in sort.Sort interface.
+func (bs ByHeight) Swap(i int, j int) {
+ bs[i], bs[j] = bs[j], bs[i]
+}
+
+// Push implements Push method in heap interface.
+func (bs *ByHeight) Push(x interface{}) {
+ *bs = append(*bs, x.(*Block))
+}
+
+// Pop implements Pop method in heap interface.
+func (bs *ByHeight) Pop() (ret interface{}) {
+ n := len(*bs)
+ *bs, ret = (*bs)[0:n-1], (*bs)[n-1]
+ return
}