func NewIterator(roiName dvid.InstanceName, versionID dvid.VersionID, b dvid.Bounder) (*Iterator, error) { dataservice, err := datastore.GetDataByVersion(versionID, roiName) if err != nil { return nil, fmt.Errorf("Can't get ROI with name %q: %v", roiName, err) } data, ok := dataservice.(*Data) if !ok { return nil, fmt.Errorf("Data name %q was not of roi data type\n", roiName) } // Convert voxel extents to block Z extents minPt := b.StartPoint().(dvid.Chunkable) maxPt := b.EndPoint().(dvid.Chunkable) minBlockCoord := minPt.Chunk(data.BlockSize) maxBlockCoord := maxPt.Chunk(data.BlockSize) minIndex := minIndexByBlockZ(minBlockCoord.Value(2)) maxIndex := maxIndexByBlockZ(maxBlockCoord.Value(2)) ctx := datastore.NewVersionedCtx(data, versionID) it := new(Iterator) it.spans, err = getSpans(ctx, minIndex, maxIndex) return it, err }
// GetByVersion returns a pointer to labelblk data given a UUID and data name. func GetByVersion(v dvid.VersionID, name dvid.InstanceName) (*Data, error) { source, err := datastore.GetDataByVersion(v, name) if err != nil { return nil, err } data, ok := source.(*Data) if !ok { return nil, fmt.Errorf("Instance '%s' is not a labelblk datatype!", name) } return data, nil }