private void readBorderLines(
      SearchRequest<RouteDataBorderLinePoint> req, TIntArrayList blocksToRead) throws IOException {
    while (true) {
      int t = codedIS.readTag();
      int tag = WireFormat.getTagFieldNumber(t);
      switch (tag) {
        case 0:
          return;
        case RouteBorderBox.BORDERLINES_FIELD_NUMBER:
          {
            int fp = codedIS.getTotalBytesRead();
            int length = codedIS.readRawVarint32();
            int old = codedIS.pushLimit(length);

            RouteBorderLine ln = readBorderLine();
            if (ln.hasTox() && req.intersects(ln.getX(), ln.getY(), ln.getTox(), ln.getY())) {
              blocksToRead.add(ln.getShiftToPointsBlock() + fp);
              // FIXME borders approach
              //				} else if(ln.hasToy() && req.intersects(ln.getX(), ln.getY(), ln.getX(),
              // ln.getToy())) {
              //					blocksToRead.add(ln.getShiftToPointsBlock() + fp);
            }
            codedIS.popLimit(old);
            break;
          }
        case RouteBorderBox.BLOCKS_FIELD_NUMBER:
          return;
        default:
          skipUnknownField(t);
          break;
      }
    }
  }
 public void initRouteTypesIfNeeded(SearchRequest<RouteDataObject> req, List<RouteSubregion> list)
     throws IOException {
   for (RouteSubregion rs : list) {
     if (req.intersects(rs.left, rs.top, rs.right, rs.bottom)) {
       initRouteRegion(rs.routeReg);
     }
   }
 }
  public List<RouteSubregion> loadInteresectedPoints(
      SearchRequest<RouteDataObject> req, List<RouteSubregion> list, List<RouteSubregion> toLoad)
      throws IOException {
    for (RouteSubregion rs : list) {
      if (req.intersects(rs.left, rs.top, rs.right, rs.bottom)) {
        if (rs.subregions == null) {
          codedIS.seek(rs.filePointer);
          int old = codedIS.pushLimit(rs.length);
          readRouteTree(
              rs, null, req.contains(rs.left, rs.top, rs.right, rs.bottom) ? -1 : 1, false);
          codedIS.popLimit(old);
        }
        searchRouteRegionTree(req, rs.subregions, toLoad);

        if (rs.shiftToData != 0) {
          toLoad.add(rs);
        }
      }
    }
    return toLoad;
  }