private RouteDataObject readRouteDataObject(RouteRegion reg, int pleftx, int ptopy) throws IOException { RouteDataObject o = new RouteDataObject(reg); TIntArrayList pointsX = new TIntArrayList(); TIntArrayList pointsY = new TIntArrayList(); TIntArrayList types = new TIntArrayList(); List<TIntArrayList> globalpointTypes = new ArrayList<TIntArrayList>(); while (true) { int ts = codedIS.readTag(); int tags = WireFormat.getTagFieldNumber(ts); switch (tags) { case 0: o.pointsX = pointsX.toArray(); o.pointsY = pointsY.toArray(); o.types = types.toArray(); if (globalpointTypes.size() > 0) { o.pointTypes = new int[globalpointTypes.size()][]; for (int k = 0; k < o.pointTypes.length; k++) { TIntArrayList l = globalpointTypes.get(k); if (l != null) { o.pointTypes[k] = l.toArray(); } } } return o; case RouteData.TYPES_FIELD_NUMBER: int len = codedIS.readRawVarint32(); int oldLimit = codedIS.pushLimit(len); while (codedIS.getBytesUntilLimit() > 0) { types.add(codedIS.readRawVarint32()); } codedIS.popLimit(oldLimit); break; case RouteData.STRINGNAMES_FIELD_NUMBER: o.names = new TIntObjectHashMap<String>(); int sizeL = codedIS.readRawVarint32(); int old = codedIS.pushLimit(sizeL); while (codedIS.getBytesUntilLimit() > 0) { int stag = codedIS.readRawVarint32(); int pId = codedIS.readRawVarint32(); o.names.put(stag, ((char) pId) + ""); } codedIS.popLimit(old); break; case RouteData.POINTS_FIELD_NUMBER: len = codedIS.readRawVarint32(); oldLimit = codedIS.pushLimit(len); int px = pleftx >> SHIFT_COORDINATES; int py = ptopy >> SHIFT_COORDINATES; while (codedIS.getBytesUntilLimit() > 0) { int x = (codedIS.readSInt32()) + px; int y = (codedIS.readSInt32()) + py; pointsX.add(x << SHIFT_COORDINATES); pointsY.add(y << SHIFT_COORDINATES); px = x; py = y; } codedIS.popLimit(oldLimit); break; case RouteData.POINTTYPES_FIELD_NUMBER: len = codedIS.readRawVarint32(); oldLimit = codedIS.pushLimit(len); while (codedIS.getBytesUntilLimit() > 0) { int pointInd = codedIS.readRawVarint32(); TIntArrayList pointTypes = new TIntArrayList(); int lens = codedIS.readRawVarint32(); int oldLimits = codedIS.pushLimit(lens); while (codedIS.getBytesUntilLimit() > 0) { pointTypes.add(codedIS.readRawVarint32()); } codedIS.popLimit(oldLimits); while (pointInd >= globalpointTypes.size()) { globalpointTypes.add(null); } globalpointTypes.set(pointInd, pointTypes); } codedIS.popLimit(oldLimit); break; case RouteData.ROUTEID_FIELD_NUMBER: o.id = codedIS.readInt32(); break; default: skipUnknownField(ts); break; } } }