mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-23 07:16:47 +00:00

* Rename reachabilityManager.data to dataForInsertion, and use it only during insertions * Make reachabilityData an interface * Fix db serialization of reachability data * Fix reachabilityDataStore * Fix all tests * Cleanup debugging code * Fix insertToFutureCoveringSet * Add comments * Rename to ReachabilityData and MutableReachabilityData
112 lines
3.0 KiB
Go
112 lines
3.0 KiB
Go
package reachabilitydata
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
)
|
|
|
|
type reachabilityData struct {
|
|
children []*externalapi.DomainHash
|
|
parent *externalapi.DomainHash
|
|
interval *model.ReachabilityInterval
|
|
futureCoveringSet model.FutureCoveringTreeNodeSet
|
|
}
|
|
|
|
// If this doesn't compile, it means the type definition has been changed, so it's
|
|
// an indication to update Equal and Clone accordingly.
|
|
var _ = &reachabilityData{
|
|
[]*externalapi.DomainHash{},
|
|
&externalapi.DomainHash{},
|
|
&model.ReachabilityInterval{},
|
|
model.FutureCoveringTreeNodeSet{},
|
|
}
|
|
|
|
// EmptyReachabilityData constructs an empty MutableReachabilityData object
|
|
func EmptyReachabilityData() model.MutableReachabilityData {
|
|
return &reachabilityData{}
|
|
}
|
|
|
|
// New constructs a ReachabilityData object filled with given fields
|
|
func New(children []*externalapi.DomainHash,
|
|
parent *externalapi.DomainHash,
|
|
interval *model.ReachabilityInterval,
|
|
futureCoveringSet model.FutureCoveringTreeNodeSet) model.ReachabilityData {
|
|
|
|
return &reachabilityData{
|
|
children: children,
|
|
parent: parent,
|
|
interval: interval,
|
|
futureCoveringSet: futureCoveringSet,
|
|
}
|
|
}
|
|
|
|
func (rd *reachabilityData) Children() []*externalapi.DomainHash {
|
|
return rd.children
|
|
}
|
|
|
|
func (rd *reachabilityData) Parent() *externalapi.DomainHash {
|
|
return rd.parent
|
|
}
|
|
|
|
func (rd *reachabilityData) Interval() *model.ReachabilityInterval {
|
|
return rd.interval
|
|
}
|
|
|
|
func (rd *reachabilityData) FutureCoveringSet() model.FutureCoveringTreeNodeSet {
|
|
return rd.futureCoveringSet
|
|
}
|
|
|
|
func (rd *reachabilityData) CloneMutable() model.MutableReachabilityData {
|
|
return &reachabilityData{
|
|
children: externalapi.CloneHashes(rd.children),
|
|
parent: rd.parent,
|
|
interval: rd.interval.Clone(),
|
|
futureCoveringSet: rd.futureCoveringSet.Clone(),
|
|
}
|
|
}
|
|
|
|
func (rd *reachabilityData) AddChild(child *externalapi.DomainHash) {
|
|
rd.children = append(rd.children, child)
|
|
}
|
|
|
|
func (rd *reachabilityData) SetParent(parent *externalapi.DomainHash) {
|
|
rd.parent = parent
|
|
}
|
|
|
|
func (rd *reachabilityData) SetInterval(interval *model.ReachabilityInterval) {
|
|
rd.interval = interval
|
|
}
|
|
|
|
func (rd *reachabilityData) SetFutureCoveringSet(futureCoveringSet model.FutureCoveringTreeNodeSet) {
|
|
rd.futureCoveringSet = futureCoveringSet
|
|
}
|
|
|
|
// Equal returns whether rd equals to other
|
|
func (rd *reachabilityData) Equal(other model.ReachabilityData) bool {
|
|
otherReachabilityData, ok := other.(*reachabilityData)
|
|
if !ok {
|
|
return false
|
|
}
|
|
if rd == nil || otherReachabilityData == nil {
|
|
return rd == otherReachabilityData
|
|
}
|
|
|
|
if !externalapi.HashesEqual(rd.children, otherReachabilityData.Children()) {
|
|
return false
|
|
}
|
|
|
|
if !rd.parent.Equal(otherReachabilityData.Parent()) {
|
|
return false
|
|
}
|
|
|
|
if !rd.interval.Equal(otherReachabilityData.Interval()) {
|
|
return false
|
|
}
|
|
|
|
if !rd.futureCoveringSet.Equal(otherReachabilityData.FutureCoveringSet()) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|