Files
dolt/types/package.go
T
2015-10-30 09:24:58 -07:00

60 lines
1.1 KiB
Go

package types
import "github.com/attic-labs/noms/ref"
type Package struct {
types []TypeRef
dependencies []ref.Ref
ref *ref.Ref
}
func NewPackage(types []TypeRef, deps []ref.Ref) Package {
return Package{types, deps, &ref.Ref{}}
}
func (p Package) Equals(other Value) bool {
if other, ok := other.(Package); ok {
return p.Ref() == other.Ref()
}
return false
}
func (p Package) Ref() ref.Ref {
return EnsureRef(p.ref, p)
}
func (p Package) Chunks() (chunks []ref.Ref) {
for _, t := range p.types {
chunks = append(chunks, t.Chunks()...)
}
for _, d := range p.dependencies {
chunks = append(chunks, d)
}
return
}
var typeRefForPackage = MakePrimitiveTypeRef(PackageKind)
func (p Package) TypeRef() TypeRef {
return typeRefForPackage
}
func (p Package) GetOrdinal(n string) (ordinal int64) {
for i, t := range p.types {
if t.Name() == n && t.Namespace() == "" {
return int64(i)
}
}
return -1
}
func (p Package) Dependencies() []ref.Ref {
// TODO: Change API to prevent mutations.
return p.dependencies
}
func (p Package) Types() []TypeRef {
// TODO: Change API to prevent mutations.
return p.types
}