Example #1
0
Tree.prototype.searchTree = function(bbox){
  var extents = this.extent(bbox).sort().map(function(v){
    return [v,this.next(v)];
  },this).reduce(function(a,b){
    if(!a.length){
      return [b];
    }
    if(a[a.length-1][1]===b[0]){
      a[a.length-1][1] = b[1];
    }else{
      a.push(b);
    }
    return a;
  },[]);
  var self = this;
  return all(extents.map(function(v){
    return self.findChildren(v[0],v[1]);
  })).then(function(children){
    var map = {};
    children.forEach(function(child){
      child.forEach(function(item){
        map[item] = true;
      });
    });
    return Object.keys(map);
  });
}
Example #2
0
 return use(array,function(arr){
     return all(qMap(arr,function(a,i){
         return resolve(a).then(function(b){
             return func(b,i);
         });
     }));
 });
Example #3
0
 return this.searchTree(bbox).then(function(results){
   return all(results.map(function(item){
     return this.fetch(item);
   },self)).then(function(results){
     return results.filter(function(item){
       return self.contains(bbox,item.bbox)||self.intersects(bbox, item.bbox);
     });
   });
 });
Example #4
0
function apply(){
    var args = qMap(arguments);
    var func = args.shift();
    if(args.length===0){
        return cast(func());
    }else if(args.length===1){
        return cast(args[0]).then(func);
    }
    return all(args).then(function(results){
        return func.apply(null,results);
    });
}
Example #5
0
Tree.prototype.load = function(array){
  if(!Array.isArray(array)&&array.features){
    array = array.features;
  }
  var self = this;
  var batch = [];
  var bboxen = {};
  var i = -1;
  var len = array.length;
  var extent;
  while(++i<len){
    if(!array[i].bbox){
      array[i].bbox = makeBbox(array[i]);
    }
    if(!array[i].id){
      array[i].id = makeID(array[i]);
    }
    array[i].bbox.id = array[i].id;
    batch[i] = {key:'z-'+array[i].id,value:array[i],type:'put'};
    extent = this.makeExtent(array[i]);
    batch[i].value.bboxen = extent;
    extent.forEach(function(value){
      if(!bboxen[value]){
        bboxen[value]=[];
      }
      if(~~bboxen[value].indexOf(array[i].id)){
        bboxen[value].push(array[i].id);
      }
    })
  };
  var things = [];
  Object.keys(bboxen).forEach(function(quad){
    var ids = bboxen[quad];
    things.push(this.has(quad).then(function(answer){
      if(answer){
        return self.get(quad);
      }else{
        return {features:[],id:quad}
      }
    }).then(function(v){
      v.features = v.features.concat(ids);
      return {type:'put',key:v.id,value:v}
    }))
  },this);
  return all(things).then(function(moreKeys){
    batch = batch.concat(moreKeys);
    return self.batch(batch);
  });
}
Example #6
0
 }).then(function(bboxen){
   return all(bboxen.map(function(bbox){
     return self.get(bbox).then(function(resp){
       if(resp.features.length===1){
         return {type:'del',key:resp.id}
       }else{
         resp.features = resp.features.filter(function(v){
           return v!==id;
         })
         return {type:'put',key:resp.id,value:resp};
       }
     });
   })).then(function(batch){
     return self.batch(batch);
   })
 });
Example #7
0
 return promise(function(yes,no){
     all(qMap(array,function(value){
         var cvalue = cast(value);
         if(hasfunc){
             cvalue = cvalue.then(func);
         }
         return cvalue.then(function(pValue){
             if(pValue){
                 yes(true);
             }else{
                 return false;
             }
         });
     })).then(function(){
         yes(false);
     },no);
 });
Example #8
0
function zip(){
        if(arguments.length===1){
            return map(arguments[0],function(a){
                return [a];
            });
        }
        return all(qMap(arguments)).then(function(args){
            var min = args[0].length;
            var shortest = 0;
            each(args,function(a,i){
                var len = a.length;
                if(len<min){
                    shortest = i;
                    min = len;
                }
            });
            return map(args[shortest],function(_,i){
                return map(args,function(value){
                    return value[i];
                });
            });
        });
}
Example #9
0
Tree.prototype.insertBbox =function(item){
  var extent = item.bboxen;
  var id = item.id;
  var self = this;
  if(!Array.isArray(id)){
    id = [id];
  }
  return all(extent.map(function(v){
    return this.has(v).then(function(answer){
      if(answer){
        return self.get(v);
      }else{
        return {features:[],id:v}
      }
    });
  },this)).then(function(answers){
    return self.batch(answers.map(function(v){
      v.features = v.features.concat(id);
      return {type:'put',key:v.id,value:v}
    })).then(function(){
      return extent;
    });
  });
}
Example #10
0
 it('should work when all are rejected including a nested one',function(){
      var a = some(resolve([resolve().then(function(){
         return reject(1);
     }),reject(3),reject(5),reject(7),reject(9)]));
     return all([a.should.be.rejected.and.eventually.include.members([1,3,5,7,9]),a.should.be.rejected.and.eventually.have.length(5)]);
 });
Example #11
0
 it('should work with very nested values',function(){
     var a = some(resolve([resolve().then(function(){
         return resolve(1);
     }),resolve(3),resolve(5),resolve(7),resolve(9)]));
     return all([a.should.eventually.include.members([1,3,5,7,9]),a.should.eventually.have.length(5)]);
 });
Example #12
0
 it('should work with a rejection',function(){
     var a = some(resolve([resolve(1),reject(3),resolve(5),resolve(7),resolve(9)]));
     return all([a.should.eventually.include.members([1,5,7,9]),a.should.eventually.have.length(4)]);
 });
Example #13
0
 it('should work mixed',function(){
     var a = some(resolve([resolve(1),3,resolve(5),resolve(7),resolve(9)]));
     return all([a.should.eventually.include.members([1,3,5,7,9]),a.should.eventually.have.length(5)]);
 });
Example #14
0
 it('should work when all are rejected',function(){
      var a = some([reject(1),reject(3),reject(5),reject(7),reject(9)]);
     return all([a.should.be.rejected.and.eventually.include.members([1,3,5,7,9]),a.should.be.rejected.and.eventually.have.length(5)]);
 });