mirror of https://github.com/tidwall/tile38.git
Added NODWELL keyword
This commit is contained in:
parent
fa062453cd
commit
3a6f366955
|
@ -364,12 +364,13 @@ func fenceMatchRoam(
|
|||
return
|
||||
}
|
||||
p := obj.CalculatedPoint()
|
||||
var prevNearbys []roamMatch
|
||||
if fence.roam.nearbys != nil {
|
||||
prevNearbys = fence.roam.nearbys[tid]
|
||||
}
|
||||
prevNearbys := fence.roam.nearbys[tid]
|
||||
var newNearbys map[string]bool
|
||||
col.Nearby(0, p.Y, p.X, fence.roam.meters, math.Inf(-1), math.Inf(+1),
|
||||
func(id string, obj geojson.Object, fields []float64) bool {
|
||||
if c.hasExpired(fence.roam.key, id) {
|
||||
return true
|
||||
}
|
||||
var idMatch bool
|
||||
if id == tid {
|
||||
return true // skip self
|
||||
|
@ -382,34 +383,38 @@ func fenceMatchRoam(
|
|||
if !idMatch {
|
||||
return true
|
||||
}
|
||||
if newNearbys == nil {
|
||||
newNearbys = make(map[string]bool)
|
||||
}
|
||||
newNearbys[id] = true
|
||||
prev := prevNearbys[id]
|
||||
if prev {
|
||||
delete(prevNearbys, id)
|
||||
}
|
||||
|
||||
match := roamMatch{
|
||||
id: id,
|
||||
obj: obj,
|
||||
meters: obj.CalculatedPoint().DistanceTo(p),
|
||||
}
|
||||
for i := 0; i < len(prevNearbys); i++ {
|
||||
if prevNearbys[i].id == match.id {
|
||||
prevNearbys[i] = prevNearbys[len(prevNearbys)-1]
|
||||
prevNearbys = prevNearbys[:len(prevNearbys)-1]
|
||||
i--
|
||||
break
|
||||
}
|
||||
if !prev || !fence.nodwell {
|
||||
// brand new "nearby"
|
||||
nearbys = append(nearbys, match)
|
||||
}
|
||||
nearbys = append(nearbys, match)
|
||||
return true
|
||||
},
|
||||
)
|
||||
for i := 0; i < len(prevNearbys); i++ {
|
||||
obj, _, ok := col.Get(prevNearbys[i].id)
|
||||
if ok {
|
||||
for id := range prevNearbys {
|
||||
obj, _, ok := col.Get(id)
|
||||
if ok && !c.hasExpired(fence.roam.key, id) {
|
||||
faraways = append(faraways, roamMatch{
|
||||
id: prevNearbys[i].id,
|
||||
obj: obj,
|
||||
id: id, obj: obj,
|
||||
meters: obj.CalculatedPoint().DistanceTo(p),
|
||||
})
|
||||
}
|
||||
}
|
||||
if len(nearbys) == 0 {
|
||||
|
||||
if len(newNearbys) == 0 {
|
||||
if fence.roam.nearbys != nil {
|
||||
delete(fence.roam.nearbys, tid)
|
||||
if len(fence.roam.nearbys) == 0 {
|
||||
|
@ -418,9 +423,9 @@ func fenceMatchRoam(
|
|||
}
|
||||
} else {
|
||||
if fence.roam.nearbys == nil {
|
||||
fence.roam.nearbys = make(map[string][]roamMatch)
|
||||
fence.roam.nearbys = make(map[string]map[string]bool)
|
||||
}
|
||||
fence.roam.nearbys[tid] = nearbys
|
||||
fence.roam.nearbys[tid] = newNearbys
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ type roamSwitches struct {
|
|||
pattern bool
|
||||
meters float64
|
||||
scan string
|
||||
nearbys map[string][]roamMatch
|
||||
nearbys map[string]map[string]bool
|
||||
}
|
||||
|
||||
type roamMatch struct {
|
||||
|
|
|
@ -233,6 +233,7 @@ type searchScanBaseTokens struct {
|
|||
lineout string
|
||||
fence bool
|
||||
distance bool
|
||||
nodwell bool
|
||||
detect map[string]bool
|
||||
accept map[string]bool
|
||||
glob string
|
||||
|
@ -535,6 +536,14 @@ func (c *Controller) parseSearchScanBaseTokens(
|
|||
}
|
||||
}
|
||||
continue
|
||||
case "nodwell":
|
||||
vs = nvs
|
||||
if t.desc || asc {
|
||||
err = errDuplicateArgument(strings.ToUpper(wtok))
|
||||
return
|
||||
}
|
||||
t.nodwell = true
|
||||
continue
|
||||
case "desc":
|
||||
vs = nvs
|
||||
if t.desc || asc {
|
||||
|
|
Loading…
Reference in New Issue