Files
dolt/nomdl/codegen/set.tmpl
2015-12-17 15:23:28 -05:00

150 lines
3.9 KiB
Cheetah

{{$typesPackage := .TypesPackage}}
// {{.Name}}
type {{.Name}} struct {
s {{$typesPackage}}Set
cs chunks.ChunkStore
ref *ref.Ref
}
func New{{.Name}}(cs chunks.ChunkStore) {{.Name}} {
return {{.Name}}{ {{$typesPackage}}NewTypedSet(cs, __typeFor{{.Name}}), cs, &ref.Ref{}}
}
{{if .CanUseDef}}
type {{.Name}}Def map[{{defType .ElemType}}]bool
func (def {{.Name}}Def) New(cs chunks.ChunkStore) {{.Name}} {
l := make([]{{$typesPackage}}Value, len(def))
i := 0
for d, _ := range def {
l[i] = {{defToValue "d" .ElemType}}
i++
}
return {{.Name}}{ {{$typesPackage}}NewTypedSet(cs, __typeFor{{.Name}}, l...), cs, &ref.Ref{}}
}
func (s {{.Name}}) Def() {{.Name}}Def {
def := make(map[{{defType .ElemType}}]bool, s.Len())
s.s.Iter(func(v {{$typesPackage}}Value) bool {
def[{{valueToDef "v" .ElemType}}] = true
return false
})
return def
}
{{end}}
func (s {{.Name}}) Equals(other {{$typesPackage}}Value) bool {
return other != nil && __typeFor{{.Name}}.Equals(other.Type()) && s.Ref() == other.Ref()
}
func (s {{.Name}}) Ref() ref.Ref {
return {{$typesPackage}}EnsureRef(s.ref, s)
}
func (s {{.Name}}) Chunks() (chunks []ref.Ref) {
chunks = append(chunks, s.Type().Chunks()...)
chunks = append(chunks, s.s.Chunks()...)
return
}
func (s {{.Name}}) ChildValues() []{{$typesPackage}}Value {
return append([]{{$typesPackage}}Value{}, s.s.ChildValues()...)
}
// A Noms Value that describes {{.Name}}.
var __typeFor{{.Name}} {{$typesPackage}}Type
func (m {{.Name}}) Type() {{$typesPackage}}Type {
return __typeFor{{.Name}}
}
func init() {
__typeFor{{.Name}} = {{toTypesType .Type .FileID .PackageName}}
{{$typesPackage}}RegisterValue(__typeFor{{.Name}}, builderFor{{.Name}}, readerFor{{.Name}})
}
func builderFor{{.Name}}(cs chunks.ChunkStore, v {{$typesPackage}}Value) {{$typesPackage}}Value {
return {{.Name}}{v.({{$typesPackage}}Set), cs, &ref.Ref{}}
}
func readerFor{{.Name}}(v {{$typesPackage}}Value) {{$typesPackage}}Value {
return v.({{.Name}}).s
}
func (s {{.Name}}) Empty() bool {
return s.s.Empty()
}
func (s {{.Name}}) Len() uint64 {
return s.s.Len()
}
func (s {{.Name}}) Has(p {{userType .ElemType}}) bool {
return s.s.Has({{userToValue "p" .ElemType}})
}
type {{.Name}}IterCallback func(p {{userType .ElemType}}) (stop bool)
func (s {{.Name}}) Iter(cb {{.Name}}IterCallback) {
s.s.Iter(func(v {{$typesPackage}}Value) bool {
return cb({{valueToUser "v" .ElemType}})
})
}
type {{.Name}}IterAllCallback func(p {{userType .ElemType}})
func (s {{.Name}}) IterAll(cb {{.Name}}IterAllCallback) {
s.s.IterAll(func(v {{$typesPackage}}Value) {
cb({{valueToUser "v" .ElemType}})
})
}
func (s {{.Name}}) IterAllP(concurrency int, cb {{.Name}}IterAllCallback) {
s.s.IterAllP(concurrency, func(v {{$typesPackage}}Value) {
cb({{valueToUser "v" .ElemType}})
})
}
type {{.Name}}FilterCallback func(p {{userType .ElemType}}) (keep bool)
func (s {{.Name}}) Filter(cb {{.Name}}FilterCallback) {{.Name}} {
out := s.s.Filter(func(v {{$typesPackage}}Value) bool {
return cb({{valueToUser "v" .ElemType}})
})
return {{.Name}}{out, s.cs, &ref.Ref{}}
}
func (s {{.Name}}) Insert(p ...{{userType .ElemType}}) {{.Name}} {
return {{.Name}}{s.s.Insert(s.fromElemSlice(p)...), s.cs, &ref.Ref{}}
}
func (s {{.Name}}) Remove(p ...{{userType .ElemType}}) {{.Name}} {
return {{.Name}}{s.s.Remove(s.fromElemSlice(p)...), s.cs, &ref.Ref{}}
}
func (s {{.Name}}) Union(others ...{{.Name}}) {{.Name}} {
return {{.Name}}{s.s.Union(s.fromStructSlice(others)...), s.cs, &ref.Ref{}}
}
func (s {{.Name}}) First() {{userType .ElemType}} {
return {{valueToUser "s.s.First()" .ElemType}}
}
func (s {{.Name}}) fromStructSlice(p []{{.Name}}) []{{$typesPackage}}Set {
r := make([]{{$typesPackage}}Set, len(p))
for i, v := range p {
r[i] = v.s
}
return r
}
func (s {{.Name}}) fromElemSlice(p []{{userType .ElemType}}) []{{$typesPackage}}Value {
r := make([]{{$typesPackage}}Value, len(p))
for i, v := range p {
r[i] = {{userToValue "v" .ElemType}}
}
return r
}