From 7bc162a878f3b998494506f02cbec47482dd384f Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 18 Apr 2013 23:35:02 +0200 Subject: [PATCH] Move OsmAnd java core project back to android repository for maintainance reasons --- OsmAnd-java/.classpath | 16 + OsmAnd-java/.gitignore | 1 + OsmAnd-java/.project | 30 + .../.settings/org.eclipse.jdt.core.prefs | 11 + OsmAnd-java/build.xml | 77 + OsmAnd-java/libs/bsh-core-2.0b4.jar | Bin 0 -> 143992 bytes OsmAnd-java/libs/bzip2-20090327.jar | Bin 0 -> 51712 bytes OsmAnd-java/libs/commons-logging-1.1.1.jar | Bin 0 -> 60686 bytes OsmAnd-java/libs/gnu-trove-osmand.jar | Bin 0 -> 327840 bytes OsmAnd-java/libs/icu4j-49_1.jar | Bin 0 -> 2807306 bytes OsmAnd-java/libs/json-20090211.jar | Bin 0 -> 45944 bytes OsmAnd-java/libs/junidecode-0.1.jar | Bin 0 -> 390574 bytes OsmAnd-java/libs/kxml2-2.3.0.jar | Bin 0 -> 43858 bytes OsmAnd-java/libs/simple-logging.jar | Bin 0 -> 2380 bytes OsmAnd-java/libs/tuprolog.jar | Bin 0 -> 115572 bytes .../com/google/protobuf/AbstractMessage.java | 714 + .../google/protobuf/AbstractMessageLite.java | 342 + .../google/protobuf/BlockingRpcChannel.java | 51 + .../com/google/protobuf/BlockingService.java | 64 + .../src/com/google/protobuf/ByteString.java | 391 + .../com/google/protobuf/CodedInputStream.java | 924 + .../google/protobuf/CodedInputStreamRAF.java | 825 + .../google/protobuf/CodedOutputStream.java | 1040 + .../com/google/protobuf/DescriptorProtos.java | 9411 ++++++ .../src/com/google/protobuf/Descriptors.java | 1930 ++ .../com/google/protobuf/DynamicMessage.java | 472 + .../google/protobuf/ExtensionRegistry.java | 266 + .../protobuf/ExtensionRegistryLite.java | 169 + .../src/com/google/protobuf/FieldSet.java | 715 + .../com/google/protobuf/GeneratedMessage.java | 1370 + .../google/protobuf/GeneratedMessageLite.java | 576 + .../src/com/google/protobuf/Internal.java | 121 + .../InvalidProtocolBufferException.java | 93 + .../src/com/google/protobuf/Message.java | 325 + .../src/com/google/protobuf/MessageLite.java | 335 + .../google/protobuf/ProtocolMessageEnum.java | 59 + .../src/com/google/protobuf/RpcCallback.java | 47 + .../src/com/google/protobuf/RpcChannel.java | 71 + .../com/google/protobuf/RpcController.java | 118 + .../src/com/google/protobuf/RpcUtil.java | 137 + .../src/com/google/protobuf/Service.java | 117 + .../com/google/protobuf/ServiceException.java | 44 + .../src/com/google/protobuf/TextFormat.java | 1352 + .../UninitializedMessageException.java | 99 + .../com/google/protobuf/UnknownFieldSet.java | 980 + .../src/com/google/protobuf/WireFormat.java | 166 + .../src/net/osmand/CallbackWithObject.java | 18 + OsmAnd-java/src/net/osmand/Collator.java | 11 + .../src/net/osmand/CollatorStringMatcher.java | 129 + OsmAnd-java/src/net/osmand/FloatMath.java | 38 + .../net/osmand/GeoidAltitudeCorrection.java | 77 + OsmAnd-java/src/net/osmand/IProgress.java | 57 + .../src/net/osmand/IndexConstants.java | 48 + OsmAnd-java/src/net/osmand/Location.java | 514 + OsmAnd-java/src/net/osmand/NativeLibrary.java | 289 + OsmAnd-java/src/net/osmand/PlatformUtil.java | 88 + .../src/net/osmand/RenderingContext.java | 69 + OsmAnd-java/src/net/osmand/Reshaper.java | 88 + OsmAnd-java/src/net/osmand/ResultMatcher.java | 20 + .../src/net/osmand/StateChangedListener.java | 10 + OsmAnd-java/src/net/osmand/StringMatcher.java | 17 + .../net/osmand/binary/BinaryIndexPart.java | 32 + .../net/osmand/binary/BinaryInspector.java | 667 + .../osmand/binary/BinaryInspectorNative.java | 52 + .../binary/BinaryMapAddressReaderAdapter.java | 593 + .../osmand/binary/BinaryMapDataObject.java | 166 + .../osmand/binary/BinaryMapIndexFilter.java | 171 + .../osmand/binary/BinaryMapIndexReader.java | 2109 ++ .../binary/BinaryMapPoiReaderAdapter.java | 718 + .../binary/BinaryMapRouteReaderAdapter.java | 927 + .../BinaryMapTransportReaderAdapter.java | 480 + .../osmand/binary/CachedOsmandIndexes.java | 327 + .../src/net/osmand/binary/OsmandIndex.java | 5262 ++++ .../src/net/osmand/binary/OsmandOdb.java | 24438 ++++++++++++++++ .../binary/RouteDataBorderLinePoint.java | 75 + .../net/osmand/binary/RouteDataObject.java | 269 + .../src/net/osmand/bridge/CoreOsmAnd.java | 56 + .../src/net/osmand/bridge/CoreOsmAndJNI.java | 37 + .../src/net/osmand/bridge/ObfInspector.java | 46 + .../src/net/osmand/bridge/StringVector.java | 84 + OsmAnd-java/src/net/osmand/data/Amenity.java | 72 + .../src/net/osmand/data/AmenityType.java | 59 + OsmAnd-java/src/net/osmand/data/Building.java | 144 + OsmAnd-java/src/net/osmand/data/City.java | 140 + .../src/net/osmand/data/DataTileManager.java | 205 + .../src/net/osmand/data/FavouritePoint.java | 67 + OsmAnd-java/src/net/osmand/data/LatLon.java | 54 + .../src/net/osmand/data/MapObject.java | 127 + .../src/net/osmand/data/QuadPoint.java | 24 + OsmAnd-java/src/net/osmand/data/QuadRect.java | 67 + OsmAnd-java/src/net/osmand/data/QuadTree.java | 102 + OsmAnd-java/src/net/osmand/data/Street.java | 102 + .../src/net/osmand/data/TransportRoute.java | 74 + .../src/net/osmand/data/TransportStop.java | 17 + .../net/osmand/map/IMapLocationListener.java | 5 + .../src/net/osmand/map/ITileSource.java | 24 + .../src/net/osmand/map/MapTileDownloader.java | 230 + .../src/net/osmand/map/OsmandRegionInfo.java | 1214 + .../src/net/osmand/map/RegionCountry.java | 110 + .../src/net/osmand/map/RegionRegistry.java | 44 + .../src/net/osmand/map/TileSourceManager.java | 482 + .../src/net/osmand/map/countries.reginfo | Bin 0 -> 331291 bytes .../src/net/osmand/osm/MapRenderingTypes.java | 319 + .../src/net/osmand/osm/edit/Entity.java | 238 + .../src/net/osmand/osm/edit/EntityInfo.java | 67 + .../src/net/osmand/osm/edit/EntityParser.java | 180 + OsmAnd-java/src/net/osmand/osm/edit/Node.java | 55 + .../src/net/osmand/osm/edit/OSMSettings.java | 109 + .../src/net/osmand/osm/edit/OsmMapUtils.java | 351 + .../osmand/osm/edit/OsmTransportRoute.java | 25 + .../src/net/osmand/osm/edit/Relation.java | 117 + OsmAnd-java/src/net/osmand/osm/edit/Way.java | 145 + OsmAnd-java/src/net/osmand/osm/io/Base64.java | 93 + .../net/osmand/osm/io/IOsmStorageFilter.java | 10 + .../src/net/osmand/osm/io/NetworkUtils.java | 154 + .../src/net/osmand/osm/io/OsmBaseStorage.java | 295 + .../src/net/osmand/osm/rendering_types.xml | 831 + .../src/net/osmand/plus/ApplicationMode.java | 23 + .../src/net/osmand/plus/ClientContext.java | 54 + .../osmand/plus/CurrentPositionHelper.java | 120 + .../net/osmand/plus/FavouritesDbHelper.java | 331 + .../src/net/osmand/plus/GPXUtilities.java | 566 + .../net/osmand/plus/NameFinderPoiFilter.java | 142 + .../src/net/osmand/plus/OsmAndFormatter.java | 203 + .../src/net/osmand/plus/OsmandSettings.java | 1492 + .../src/net/osmand/plus/PoiFilter.java | 322 + .../src/net/osmand/plus/PoiFiltersHelper.java | 488 + .../src/net/osmand/plus/RotatedTileBox.java | 174 + .../net/osmand/plus/SearchByNameFilter.java | 79 + .../net/osmand/plus/SearchHistoryHelper.java | 243 + .../src/net/osmand/plus/SpecialPhrases.java | 100 + .../net/osmand/plus/TargetPointsHelper.java | 197 + OsmAnd-java/src/net/osmand/plus/Version.java | 98 + .../osmand/plus/access/AccessibilityMode.java | 22 + .../plus/access/RelativeDirectionStyle.java | 21 + .../osmand/plus/api/ExternalServiceAPI.java | 24 + .../osmand/plus/api/InternalOsmAndAPI.java | 61 + .../net/osmand/plus/api/InternalToDoAPI.java | 17 + .../src/net/osmand/plus/api/RendererAPI.java | 9 + .../src/net/osmand/plus/api/SQLiteAPI.java | 81 + .../src/net/osmand/plus/api/SettingsAPI.java | 33 + .../net/osmand/plus/api/render/Canvas.java | 5 + .../src/net/osmand/plus/api/render/Color.java | 24 + .../src/net/osmand/plus/api/render/Paint.java | 56 + .../src/net/osmand/plus/api/render/Path.java | 5 + .../net/osmand/plus/api/render/Typeface.java | 5 + .../plus/download/DownloadActivityType.java | 5 + .../osmand/plus/download/DownloadEntry.java | 33 + .../plus/download/DownloadFileHelper.java | 320 + .../osmand/plus/download/DownloadTracker.java | 110 + .../osmand/plus/download/IndexFileList.java | 92 + .../net/osmand/plus/download/IndexItem.java | 272 + .../plus/download/IndexItemCategory.java | 93 + .../osmand/plus/download/SrtmIndexItem.java | 140 + .../osmand/plus/render/RendererRegistry.java | 165 + .../osmand/plus/render/TextRenderer.java.bak | 494 + .../net/osmand/plus/routing/AlarmInfo.java | 101 + .../plus/routing/RouteCalculationParams.java | 29 + .../plus/routing/RouteCalculationResult.java | 848 + .../plus/routing/RouteDirectionInfo.java | 83 + .../osmand/plus/routing/RouteProvider.java | 725 + .../osmand/plus/routing/RoutingHelper.java | 810 + .../net/osmand/plus/routing/VoiceRouter.java | 519 + .../voice/AbstractPrologCommandPlayer.java | 214 + .../net/osmand/plus/voice/CommandBuilder.java | 202 + .../net/osmand/plus/voice/CommandPlayer.java | 20 + .../plus/voice/CommandPlayerException.java | 22 + .../osmand/render/Depends-template.render.xml | 35 + .../render/High-contrast-roads.render.xml | 39 + .../src/net/osmand/render/RenderingRule.java | 163 + .../osmand/render/RenderingRuleProperty.java | 291 + .../render/RenderingRuleSearchRequest.java | 241 + .../RenderingRuleStorageProperties.java | 243 + .../osmand/render/RenderingRulesStorage.java | 495 + ...iew_(more-contrast-and-details).render.xml | 576 + .../osmand/render/Winter-and-ski.render.xml | 161 + .../src/net/osmand/render/default.render.xml | 1583 + .../net/osmand/router/BaseRouteResult.java | 35 + .../net/osmand/router/BinaryRoutePlanner.java | 854 + .../osmand/router/BinaryRoutePlannerOld.java | 585 + .../src/net/osmand/router/GeneralRouter.java | 349 + .../net/osmand/router/NewGeneralRouter.java | 414 + .../router/RouteCalculationProgress.java | 18 + .../osmand/router/RoutePlannerFrontEnd.java | 279 + .../osmand/router/RouteResultPreparation.java | 587 + .../net/osmand/router/RouteSegmentResult.java | 169 + .../osmand/router/RoutingConfiguration.java | 244 + .../src/net/osmand/router/RoutingContext.java | 901 + .../src/net/osmand/router/TestRouting.java | 332 + .../src/net/osmand/router/TurnType.java | 136 + .../src/net/osmand/router/VehicleRouter.java | 68 + OsmAnd-java/src/net/osmand/router/routing.xml | 651 + .../src/net/osmand/util/Algorithms.java | 323 + .../src/net/osmand/util/MapAlgorithms.java | 293 + OsmAnd-java/src/net/osmand/util/MapUtils.java | 438 + .../net/osmand/util/OpeningHoursParser.java | 600 + .../src/net/osmand/util/SunriseSunset.java | 783 + OsmAnd/.project | 2 +- OsmAnd/build.xml | 2 +- 199 files changed, 89973 insertions(+), 2 deletions(-) create mode 100644 OsmAnd-java/.classpath create mode 100644 OsmAnd-java/.gitignore create mode 100644 OsmAnd-java/.project create mode 100644 OsmAnd-java/.settings/org.eclipse.jdt.core.prefs create mode 100644 OsmAnd-java/build.xml create mode 100644 OsmAnd-java/libs/bsh-core-2.0b4.jar create mode 100644 OsmAnd-java/libs/bzip2-20090327.jar create mode 100644 OsmAnd-java/libs/commons-logging-1.1.1.jar create mode 100644 OsmAnd-java/libs/gnu-trove-osmand.jar create mode 100644 OsmAnd-java/libs/icu4j-49_1.jar create mode 100644 OsmAnd-java/libs/json-20090211.jar create mode 100644 OsmAnd-java/libs/junidecode-0.1.jar create mode 100644 OsmAnd-java/libs/kxml2-2.3.0.jar create mode 100644 OsmAnd-java/libs/simple-logging.jar create mode 100644 OsmAnd-java/libs/tuprolog.jar create mode 100644 OsmAnd-java/src/com/google/protobuf/AbstractMessage.java create mode 100644 OsmAnd-java/src/com/google/protobuf/AbstractMessageLite.java create mode 100644 OsmAnd-java/src/com/google/protobuf/BlockingRpcChannel.java create mode 100644 OsmAnd-java/src/com/google/protobuf/BlockingService.java create mode 100644 OsmAnd-java/src/com/google/protobuf/ByteString.java create mode 100644 OsmAnd-java/src/com/google/protobuf/CodedInputStream.java create mode 100644 OsmAnd-java/src/com/google/protobuf/CodedInputStreamRAF.java create mode 100644 OsmAnd-java/src/com/google/protobuf/CodedOutputStream.java create mode 100644 OsmAnd-java/src/com/google/protobuf/DescriptorProtos.java create mode 100644 OsmAnd-java/src/com/google/protobuf/Descriptors.java create mode 100644 OsmAnd-java/src/com/google/protobuf/DynamicMessage.java create mode 100644 OsmAnd-java/src/com/google/protobuf/ExtensionRegistry.java create mode 100644 OsmAnd-java/src/com/google/protobuf/ExtensionRegistryLite.java create mode 100644 OsmAnd-java/src/com/google/protobuf/FieldSet.java create mode 100644 OsmAnd-java/src/com/google/protobuf/GeneratedMessage.java create mode 100644 OsmAnd-java/src/com/google/protobuf/GeneratedMessageLite.java create mode 100644 OsmAnd-java/src/com/google/protobuf/Internal.java create mode 100644 OsmAnd-java/src/com/google/protobuf/InvalidProtocolBufferException.java create mode 100644 OsmAnd-java/src/com/google/protobuf/Message.java create mode 100644 OsmAnd-java/src/com/google/protobuf/MessageLite.java create mode 100644 OsmAnd-java/src/com/google/protobuf/ProtocolMessageEnum.java create mode 100644 OsmAnd-java/src/com/google/protobuf/RpcCallback.java create mode 100644 OsmAnd-java/src/com/google/protobuf/RpcChannel.java create mode 100644 OsmAnd-java/src/com/google/protobuf/RpcController.java create mode 100644 OsmAnd-java/src/com/google/protobuf/RpcUtil.java create mode 100644 OsmAnd-java/src/com/google/protobuf/Service.java create mode 100644 OsmAnd-java/src/com/google/protobuf/ServiceException.java create mode 100644 OsmAnd-java/src/com/google/protobuf/TextFormat.java create mode 100644 OsmAnd-java/src/com/google/protobuf/UninitializedMessageException.java create mode 100644 OsmAnd-java/src/com/google/protobuf/UnknownFieldSet.java create mode 100644 OsmAnd-java/src/com/google/protobuf/WireFormat.java create mode 100644 OsmAnd-java/src/net/osmand/CallbackWithObject.java create mode 100644 OsmAnd-java/src/net/osmand/Collator.java create mode 100644 OsmAnd-java/src/net/osmand/CollatorStringMatcher.java create mode 100644 OsmAnd-java/src/net/osmand/FloatMath.java create mode 100644 OsmAnd-java/src/net/osmand/GeoidAltitudeCorrection.java create mode 100644 OsmAnd-java/src/net/osmand/IProgress.java create mode 100644 OsmAnd-java/src/net/osmand/IndexConstants.java create mode 100644 OsmAnd-java/src/net/osmand/Location.java create mode 100644 OsmAnd-java/src/net/osmand/NativeLibrary.java create mode 100644 OsmAnd-java/src/net/osmand/PlatformUtil.java create mode 100644 OsmAnd-java/src/net/osmand/RenderingContext.java create mode 100644 OsmAnd-java/src/net/osmand/Reshaper.java create mode 100644 OsmAnd-java/src/net/osmand/ResultMatcher.java create mode 100644 OsmAnd-java/src/net/osmand/StateChangedListener.java create mode 100644 OsmAnd-java/src/net/osmand/StringMatcher.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryIndexPart.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryInspector.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryInspectorNative.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapAddressReaderAdapter.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapDataObject.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapIndexFilter.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapIndexReader.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapPoiReaderAdapter.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapRouteReaderAdapter.java create mode 100644 OsmAnd-java/src/net/osmand/binary/BinaryMapTransportReaderAdapter.java create mode 100644 OsmAnd-java/src/net/osmand/binary/CachedOsmandIndexes.java create mode 100644 OsmAnd-java/src/net/osmand/binary/OsmandIndex.java create mode 100644 OsmAnd-java/src/net/osmand/binary/OsmandOdb.java create mode 100644 OsmAnd-java/src/net/osmand/binary/RouteDataBorderLinePoint.java create mode 100644 OsmAnd-java/src/net/osmand/binary/RouteDataObject.java create mode 100644 OsmAnd-java/src/net/osmand/bridge/CoreOsmAnd.java create mode 100644 OsmAnd-java/src/net/osmand/bridge/CoreOsmAndJNI.java create mode 100644 OsmAnd-java/src/net/osmand/bridge/ObfInspector.java create mode 100644 OsmAnd-java/src/net/osmand/bridge/StringVector.java create mode 100644 OsmAnd-java/src/net/osmand/data/Amenity.java create mode 100644 OsmAnd-java/src/net/osmand/data/AmenityType.java create mode 100644 OsmAnd-java/src/net/osmand/data/Building.java create mode 100644 OsmAnd-java/src/net/osmand/data/City.java create mode 100644 OsmAnd-java/src/net/osmand/data/DataTileManager.java create mode 100644 OsmAnd-java/src/net/osmand/data/FavouritePoint.java create mode 100644 OsmAnd-java/src/net/osmand/data/LatLon.java create mode 100644 OsmAnd-java/src/net/osmand/data/MapObject.java create mode 100644 OsmAnd-java/src/net/osmand/data/QuadPoint.java create mode 100644 OsmAnd-java/src/net/osmand/data/QuadRect.java create mode 100644 OsmAnd-java/src/net/osmand/data/QuadTree.java create mode 100644 OsmAnd-java/src/net/osmand/data/Street.java create mode 100644 OsmAnd-java/src/net/osmand/data/TransportRoute.java create mode 100644 OsmAnd-java/src/net/osmand/data/TransportStop.java create mode 100644 OsmAnd-java/src/net/osmand/map/IMapLocationListener.java create mode 100644 OsmAnd-java/src/net/osmand/map/ITileSource.java create mode 100644 OsmAnd-java/src/net/osmand/map/MapTileDownloader.java create mode 100644 OsmAnd-java/src/net/osmand/map/OsmandRegionInfo.java create mode 100644 OsmAnd-java/src/net/osmand/map/RegionCountry.java create mode 100644 OsmAnd-java/src/net/osmand/map/RegionRegistry.java create mode 100644 OsmAnd-java/src/net/osmand/map/TileSourceManager.java create mode 100644 OsmAnd-java/src/net/osmand/map/countries.reginfo create mode 100644 OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/Entity.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/EntityInfo.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/EntityParser.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/Node.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/OSMSettings.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/OsmMapUtils.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/OsmTransportRoute.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/Relation.java create mode 100644 OsmAnd-java/src/net/osmand/osm/edit/Way.java create mode 100644 OsmAnd-java/src/net/osmand/osm/io/Base64.java create mode 100644 OsmAnd-java/src/net/osmand/osm/io/IOsmStorageFilter.java create mode 100644 OsmAnd-java/src/net/osmand/osm/io/NetworkUtils.java create mode 100644 OsmAnd-java/src/net/osmand/osm/io/OsmBaseStorage.java create mode 100644 OsmAnd-java/src/net/osmand/osm/rendering_types.xml create mode 100644 OsmAnd-java/src/net/osmand/plus/ApplicationMode.java create mode 100644 OsmAnd-java/src/net/osmand/plus/ClientContext.java create mode 100644 OsmAnd-java/src/net/osmand/plus/CurrentPositionHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/FavouritesDbHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/GPXUtilities.java create mode 100644 OsmAnd-java/src/net/osmand/plus/NameFinderPoiFilter.java create mode 100644 OsmAnd-java/src/net/osmand/plus/OsmAndFormatter.java create mode 100644 OsmAnd-java/src/net/osmand/plus/OsmandSettings.java create mode 100644 OsmAnd-java/src/net/osmand/plus/PoiFilter.java create mode 100644 OsmAnd-java/src/net/osmand/plus/PoiFiltersHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/RotatedTileBox.java create mode 100644 OsmAnd-java/src/net/osmand/plus/SearchByNameFilter.java create mode 100644 OsmAnd-java/src/net/osmand/plus/SearchHistoryHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/SpecialPhrases.java create mode 100644 OsmAnd-java/src/net/osmand/plus/TargetPointsHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/Version.java create mode 100644 OsmAnd-java/src/net/osmand/plus/access/AccessibilityMode.java create mode 100644 OsmAnd-java/src/net/osmand/plus/access/RelativeDirectionStyle.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/ExternalServiceAPI.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/InternalOsmAndAPI.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/InternalToDoAPI.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/RendererAPI.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/SQLiteAPI.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/SettingsAPI.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/render/Canvas.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/render/Color.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/render/Paint.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/render/Path.java create mode 100644 OsmAnd-java/src/net/osmand/plus/api/render/Typeface.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/DownloadActivityType.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/DownloadEntry.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/DownloadFileHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/DownloadTracker.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/IndexFileList.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/IndexItem.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/IndexItemCategory.java create mode 100644 OsmAnd-java/src/net/osmand/plus/download/SrtmIndexItem.java create mode 100644 OsmAnd-java/src/net/osmand/plus/render/RendererRegistry.java create mode 100644 OsmAnd-java/src/net/osmand/plus/render/TextRenderer.java.bak create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/AlarmInfo.java create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationParams.java create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationResult.java create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/RouteDirectionInfo.java create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/RouteProvider.java create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/RoutingHelper.java create mode 100644 OsmAnd-java/src/net/osmand/plus/routing/VoiceRouter.java create mode 100644 OsmAnd-java/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java create mode 100644 OsmAnd-java/src/net/osmand/plus/voice/CommandBuilder.java create mode 100644 OsmAnd-java/src/net/osmand/plus/voice/CommandPlayer.java create mode 100644 OsmAnd-java/src/net/osmand/plus/voice/CommandPlayerException.java create mode 100644 OsmAnd-java/src/net/osmand/render/Depends-template.render.xml create mode 100644 OsmAnd-java/src/net/osmand/render/High-contrast-roads.render.xml create mode 100644 OsmAnd-java/src/net/osmand/render/RenderingRule.java create mode 100644 OsmAnd-java/src/net/osmand/render/RenderingRuleProperty.java create mode 100644 OsmAnd-java/src/net/osmand/render/RenderingRuleSearchRequest.java create mode 100644 OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java create mode 100644 OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java create mode 100644 OsmAnd-java/src/net/osmand/render/Touring-view_(more-contrast-and-details).render.xml create mode 100644 OsmAnd-java/src/net/osmand/render/Winter-and-ski.render.xml create mode 100644 OsmAnd-java/src/net/osmand/render/default.render.xml create mode 100644 OsmAnd-java/src/net/osmand/router/BaseRouteResult.java create mode 100644 OsmAnd-java/src/net/osmand/router/BinaryRoutePlanner.java create mode 100644 OsmAnd-java/src/net/osmand/router/BinaryRoutePlannerOld.java create mode 100644 OsmAnd-java/src/net/osmand/router/GeneralRouter.java create mode 100644 OsmAnd-java/src/net/osmand/router/NewGeneralRouter.java create mode 100644 OsmAnd-java/src/net/osmand/router/RouteCalculationProgress.java create mode 100644 OsmAnd-java/src/net/osmand/router/RoutePlannerFrontEnd.java create mode 100644 OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java create mode 100644 OsmAnd-java/src/net/osmand/router/RouteSegmentResult.java create mode 100644 OsmAnd-java/src/net/osmand/router/RoutingConfiguration.java create mode 100644 OsmAnd-java/src/net/osmand/router/RoutingContext.java create mode 100644 OsmAnd-java/src/net/osmand/router/TestRouting.java create mode 100644 OsmAnd-java/src/net/osmand/router/TurnType.java create mode 100644 OsmAnd-java/src/net/osmand/router/VehicleRouter.java create mode 100644 OsmAnd-java/src/net/osmand/router/routing.xml create mode 100644 OsmAnd-java/src/net/osmand/util/Algorithms.java create mode 100644 OsmAnd-java/src/net/osmand/util/MapAlgorithms.java create mode 100644 OsmAnd-java/src/net/osmand/util/MapUtils.java create mode 100644 OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java create mode 100644 OsmAnd-java/src/net/osmand/util/SunriseSunset.java diff --git a/OsmAnd-java/.classpath b/OsmAnd-java/.classpath new file mode 100644 index 0000000000..7b0914ce10 --- /dev/null +++ b/OsmAnd-java/.classpath @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/OsmAnd-java/.gitignore b/OsmAnd-java/.gitignore new file mode 100644 index 0000000000..ba077a4031 --- /dev/null +++ b/OsmAnd-java/.gitignore @@ -0,0 +1 @@ +bin diff --git a/OsmAnd-java/.project b/OsmAnd-java/.project new file mode 100644 index 0000000000..e7cfa33984 --- /dev/null +++ b/OsmAnd-java/.project @@ -0,0 +1,30 @@ + + + OsmAnd-java + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + android + 2 + OSMAND_TRUNK/android/OsmAnd/gen + + + + + OSMAND_TRUNK + $%7BPARENT-2-PROJECT_LOC%7D + + + diff --git a/OsmAnd-java/.settings/org.eclipse.jdt.core.prefs b/OsmAnd-java/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..8000cd6ca6 --- /dev/null +++ b/OsmAnd-java/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/OsmAnd-java/build.xml b/OsmAnd-java/build.xml new file mode 100644 index 0000000000..a8876aae1f --- /dev/null +++ b/OsmAnd-java/build.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + list is ${lib.list} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd-java/libs/bsh-core-2.0b4.jar b/OsmAnd-java/libs/bsh-core-2.0b4.jar new file mode 100644 index 0000000000000000000000000000000000000000..a1b8e47288a8604f2cd456ed4af478a7e7eb459d GIT binary patch literal 143992 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

TN}#EbZQf&TIkS$+N6IzjPHI(xkW3P*Z7 zi`z{1^On=|Np0sGd-5R0`!Ftug)smZk=)fP`|4FO5w{B}?JZJ4FkFI6N`MO|p zTXJ4?csPcdIJxJoa! zbBNeDg`ydg#$E+KVg=B~@KQqX*hq;FCN!t;cY;ReUreb|v5cP|)g${_uAkdC4C}EK*Hl{Ast6!{ zK!1Y?{foP`to~>wetG?TNFX5Ge}c);&_e|9g{Qx){J$ZUt*WbzBZ}!8V%?BwN)?x2 zG!&~!0|$i|DZ%zAOh^@7q982@_&6nB?;9{f;lP3Zbx`3~z~SjROy?-It06y3GkZ6p z?H7FV0#S8i9R>yEIX`G<=DK5^xt{>b zKrh`k@cY?=WjGU%KEQ&T7FRBLe_Ro!iL@$GMCwggh(R!MDyTK$GButy3J3owF(4~f zN4S>~B#I^dlE#tS2CE~iG}Hi#)+)Lce_I|j`~LW=J&XafC`xU`&L-J8WalxXC4X3E zS}S}yO{<-E+*gT*6=oni&UcC?9EeUj)OIk2+MXceI`lWm?Z;1&#C3w{gmE- zyG_5&-JB>aOLNR(<++l-ba-f{#=yl^eXw`3t8f};3>|`~h$t#Dqzi`43~P=(2R6!H zm3$_}U%QDbFoHN|t-Yz_v8NhJU8|>rW)go8T|*d)23E<4nkB5!&q+_IG02?_mfB>1 zDpkUNf?l61FTFmOZHiv%EZ#q72-GQiK(I4?dAK)TVfo$3~|7;It43k z4ruOG3-3Si83e5~aZD5X-BHHRhBZ3~TE`!>%8RtQLiWrmSF-G<#HWwbto;c*F8y{Bl&hv0AA>g?f^Lr= zWr7F#6P@Q|FLbn>%v{XPmKh~&Ft!y|pSE-pud^+*lliavS29N>Yg>NKE;;GW<*aZ? zc?2&xN^zeVQ?352l$-HZp3S7^{eIihcwx25A%d_BH2X)uYWru{8rxHv^we%C-$F<8 zepSm-yYG*oDfUiXZr_0pYQds0 z{bIKGJ(m`2C>#Jwn@1~1ic zpR!ah^+G5*a+nH6;8!4$JX$IIJRiqBj3>Sk$35mm?Wu3T&e3;5-k)Bz55V_rX4Pk|fhcSI=cief|fc(Z;d zS9s=oN)yIkT4V{TQQ*_!4< z8DOsw4=B1sn+S#RVY_z03W|G1v_z|&wj;rPW|#H~oJ4BNYMge&hoq&nKNp{Mb-g== zU%qyG5AVHwtB=_KM`y(NA~PFDg#4i|GV}eKP~!a;nMv9LoB@W`08dlLe>KQ#HEpLw zG1NcoJrXI&ps?Ve`IHKMsXCtdRH~FV$ltLe{JvohxFL&lk?xuz zQIIIV~?jSn^LClYO zha`NTbfobI5aKR3I~$*Fk0Hx^oMFh4H6}~9loCn-yP5MVdg0gnuBw~&Vx=c}bm40` zn(;Jd3tTBLZ)2TN%DW;s;9hLJ>MiAB33KLHONZRLPz`4}7pi$w|7q*jBuC|O(Mdc0 zpag}Zxz2CBS1v3MRLqXochchZ?>x-M9wV~JlZIF=E|ZT-riCTkH5~>^GRvhtq3)-n z%&@eOl;avfRK`%I`y>5k)l$psr69o1_u+Tz55Q$RLndpBMVuF2Da!czx?0S9@ZD1i zOLzq)bQQ|Bm4x?&cQnm}m|MZCojg|GM)<>{mU9|Pvx231rZknyvjdtBz4m-bp zcK8$71WO00A5Ymqw~-wvdy^l4b&c8AK_OFeTy*BFBQt>UT6(uA_DANZ5-C}!gwNgu z|JY>i5fSZEXYM(^`8n1WXoux`CO2NKBDo00Q&m#JjJx07oU)~BS@gD4D9-kdJ{`z1 zuh(DapLs-Zb;_0CW;!fj{p7~GPi8`W9O&amSo zlX`YH@6=x=k(c7$qFDU^Ll8Mkyh(%3Oe#P)eEifz^Wn%c zT+67O65sAa(OoVsM8u)J7B=`}$@)gP z{kTOXUJ-ZK=G361R#GF~I$@7n?a1{k->T$Upm7y9(PYYe*&7##xP<|DAqec5zrox? z#@=B(K|I;vZj{(#^v>X*wTnShjO*dL2mR?BgXI3#LZ}#=j>o&m1_6VG<)GM&}XG6jR_5VLuwSg{V%Y5Li8>LXY8?824N&s&l4G-npriQQz$ z!pn>pzDdNpZwmo?_FJ{rsfQ~L6$J#pRZta7PWL5Yqq6w5nam$2miuXvCNHZX>&mHm z`=x@_H>ljD8Y@$ZkK|+5R7jsW>H1X^2guOS%`i7IA5|=!b3wI(1DOZKu6>r+ss)9_ z%PQPq4*fuWVltUeq%e`{5cCP6HQHlsysR|v3y-E5%K^BLw42OfH@7Dr$|}+ZP0>Pc zVTHRaVdTA6(-yEl7G%7V)5U%zHlk&TZAAc3I6KA6;ijo9T8yp6(GDg{c&a_PyBI_0 zrb|GUh5E~Gt!v8KB3fUK^@iEHloxMWiriaHi{L8 za=56Q#2aNS18vLQQw!rQnNh#jHtb!P;(YTa8wVb(ht1a7YA2qQyFl|va9$;3Qprx= z4c0j^xW**Lors=dI~QKwm0Y8eBS}t=1wO_*7aMRf28I`JBd*}x+F zS%2qp__3M{g9B8 zJ&Q*Y?Pyg-LQDs*XXA64M-b&nEGyqUyK;Y^gAGw_piYO~+EU1pZ_bC9=d%6zEbz15E9ObzyW?WTLqy z8x%}F2?_E>ucR&V`!A%XxkdYlZIj4MVA`*!MI`lMt9I6X4p{?OZ_CWHQ{S-tm8{-QKLl27C_rBE2L1*1Z+@R-Fa0^u2X=6T~Or8Db$zSv-dv zdO_wvvQ)l|WA!Eam|Nmq@t&x|HeW#0_?gPHlLs2cJ7D?F!Wt=-ZhN%lPLwyt`$r9S z2SB8C^>zraVcu3)5~(v7MAERLXlU27g{O^f+|Bbo8}2nx=nta&wirgeZfkw~n(ciu zYL9DaS9elt>its}rxf$@2b$-#z4))D0tcyxxU1r>0w~YkP?KlheWUn$c1lBh)vQZ! z^q|R~|4F_EN|Q^OU*v1{MZW*go4;$5DTEhpa-y+40WVg-Pm_r$R%<{1pX59CE*!;atXB}Ea+O`eWmK}qUm zRTmFSH!CpG?q$h1RkZOD7vi6I{5~S2ud`Pf5!Fdx3YqNk4sISLlNqxZMoZCg$*1ih z-&4ivwAUSggQ|#vT!@;vT_ycASt}(c!Wl}60!f1xLNF>phhV}9A~KW7kvwi031SGRMhVNME)cVkzf>P$!i8V`E-)F?|J>kA%=( zhQsBAQ!|2`XT$=#jvR{I5~hMEkAhp~sRKe~5YuI8$~w1GCL_k|#5&sdH#hZVY>|0W zlra2ZekK;($!SVD#$4XX?S_fD2 zc%>UPR4rAVgV6UPOBz$I(kc(92HeCS+X$*kDV3~crhH_ZE!JQjoX{}_Iet0Hbw5_Y ztWOGK&z-o0r4?gPaYbtb%aESMzFzi&f19z1YB_A`q&X}( zT4ANB%GNS59&CAKxhda8Y-__sjFxAi$KWjS3Q3rvp$y#XMecjoL=cx9W)Qh;8=_tc zQPLn1anQMjt6h<9|MQFBcWo~bj&RDBWRlbv^l{`F$8eD-s~Us8Cd*2!P$<>-(4}{s z3{jrQDMD#at(lHFEO> zWE=I#O{!fCis>0Owq_$-)m$Kp9fH$c(cJS_EG1a^LrcYbhK~GQ;Ranu*#=D_IqCY} z;6H0!>2x9Bmb)nlCCDQwtYi40l_x{isQ^uwa3kgNj+4FTnfvr__mQhGIM;; zZi1%)H2M@$8wcKslNhENJ{xoyqj0Te;sg$r*2$ybcAX zvv3hoNX}JCv0yLw2c7K?Owa135RQtYVhMrQ)16?y+VUuY*6YpKSh!9a>Ru<*a31@d z7ca!ji%R8pFCy`W3H7C#Jkj4zN(EQ(t8+_h$rmc~xe%?iMR(QJg?Bq+i<f081)LSG8gK6XuQ zLZnsz{i%@?5jj;+ozss;_BX5lwc2`1bQwzelG2S|uYa=oSKP^pRL;)CR19G4{J#?go?mvW z{NUi=eBidO;Ows8a$?{!Q~PyO`%^_(Dq`Sv00*Rcg!VuX&Rl(ac4-XA7?@E|=kRqHS-Q9~z7Yif)zE?Fa`EH^PNwdN)_ zDLF&un~J|RA`S@%2?z=ZBx3_3Gb2mg4-Ht{?+KB>q@xpkGb2#{nD+klI8sqj`n+Fj z1KqDih5WZe5c=zJ{=GI(*0x)eK>btVaOr-D>IpUMJelIPk2+BehMPCn^u4G;RD`;~ z&bF>hdo|oznSS;i%Kd=q7TkivLU5n@N|;RV1?4vb`izW{7CmwVv-xq>gU>^@)5yhV zuP4YZB)wBny}UTVlam&F*il}H@IW?3XaGEpXbckWihWR^u?lWX#2Qn&O&-B0Th{4! zc}vVi#+g3z3yyAS-#B-qKusuN25JafTrVc!Rs!{#;O62o{I}=sOjv7wLB5MnU&kE5 zadqeilL?XUBic?NA&IZ)!|s5lOK?Fp2P+yfkE$S%pJBXO(!uGbZqs;hTemBxTl)>_ z(o#i6Z?@A`q`rJnY*|K_zv-q27(ATwjhM?;)iBNcW{LO`muZme{TfkvkpTk(^e7-} zfPDnmOwMSQCE|XCU+Osi6uZQ%CPoNPmi979_G*J%C?`z)b2JPn9Mc_@dd+()y!{^i zL!vSnl*SW7tn^H<&MMrV^=FI>Z4S3&_&Q0{A-&F_~mBn1!j! zIV1o*gDr~GrccLy_TwigKOLz2UP{;GZ*y99);BAa91j(Rm0pE{ORh&Bd@mWmiyCWX zo468`41ot9PZuA_=3&r5in4|LGAObk031K)-+)8-UXZ8cKB8+*et^#LQjsRSK_wAq z)<=?*qbtptjMz$!+?Gz^T_4uWxnMOoO(|aX&iz8)>1n=s;RGrsBZ; z1yT=RkIouVNsu|lg{>*=)j6E&EB44P*H2^#fwEwm40LzDfvgcR8 zWz?`1bX!{8<)HmV1}jdZr3G{Rs|8sWAS4-W>Z#aL~ny{gh^Z${9N|UyW-%u2Db$YPrY=eLQ0>-0gppwYY2Ok4h3%OxNXpY zH&(pfyFZVo``C+Fu!CYOtdP-g&9TKTGEfeYeEfUJJcQrnlbF(>CjIGS=H}onF8zu1>OWO8Qtaw2*HkD>vsf33Y#+23UTmnR<#uK0Izd@|5N@#N>{4|D4AOnGi81{D z%PF)yF=^L)fgbrxHS734N!ou;sa0&8ltoc}TRheepIVyYn{?`t zCn6=a%I`~d42t3MK^K0MsA#Kn$#U$aWO}i1aKQSSzazZK_C6-EFb)>Q;DLRNy^y?< z^{vZ7+pxqGj$h_-?1k>S0S$w`H*IxIr8O zExgu@9YC~myKX7tRNZ>d3C2~6UV$Rir^!?QU>kWtKU!PM$19fe%Z>=C3`Glu%0k?w(09{A};^n zvRHWnj=ra2}k88xrmr^&cMcnQyM(|1NOk31CAT_a) z=8TYJ#4TI~idmG|hJGy!QB9yvNpOZs&QfC*3AClqoS9P(u!bn=z1*X#6NeV>y5$EP z{rMTTNbo|#Iyq(k#01_G8lUZsXoMG(Lu@S;HMZmofz*uk0k;(uG$YR8PzVtriO4}b zUe=FRN8Bs#hWH7bZeu~SiK(+5kb`+{u(liP@WaF?s03cDQCVAp*8|aXyzKGML1ZpP z176o1idX{*94;%9(^5PpFnCK8FY{hOz9j@L^*7K_n(IXroe zLQv)lh~EMZd{zk(d9+xdUa+2CjN*IL;R}3sYk2(Q7TJ>m88id%e|7*oKfB|PuXPmO z*E;GSVR=zo3qxCDQxh>eM`dS2XVbqYv)O9fZYZLtpK!7b<7SCTLj7pNqJ76O)B&o> zA~uwWvLMKmExx<#+3cIPt_NmXeK$9Dd_5`VF&?*ITv;ktT;CXYU-tb-ch-Z1GS9g( zoXpHlc6gruTzB`bPZRikJn{Vac+nFD3RU3^Cqe`87ViSu`3nh4iGvLF-R+d@HAGQo zCqTpx=TC^;@fj#Fp-5^AFvL}(_S3RrXgKo=2!a{)k}jmFBQO)?$+)tU*h>%3Qb`V9 zol#A*6z$c5{R5(y=u4fT^`MM}hVf;n-Pry9+`A%zJwC88G-+)BsU`!HlP_Y@j9m&@RfWjEnwB%rlRdS_JSO-p7c1(E>|rP=T&53MAq;n_Cu;zDbY6-Z?g6Lr3jG5dxS#tx zj&o;IWy);X(7F7_o=2UghHJ#lr82eseB9E%97PI29FjR;`39<$vrHz;=PY@`Y3JLy z9I_(4mm9)ymyrfqBh`Nuf!Sz6nPGH79IjXDxFjJWUew9}hrg@QT16E5;z z9_@4(p-ShAF9NP8+$S0>Q|i!n_cw4DyWo387H%TdUU|&8 zk7-M7ZHt>Y5HGSPT+2ySDw!6_&`lo7PY$`)eE`adzPeQQV^yo|!qsE8K)lOjmdaTL zk2TNZh$$MT?crqO(VlVJkmCZOkT9)u`OKu9S7XF-NH@pSq_5AmnEe!wd@S6Um;#!d zQdiogM8Sg$5x?%#emZwYvqP1R@^D1#y@-A2<$AW(?q~2^DHBS~+`P*E>HHa!DfyXa zf7AI%@)`JJn9WXEGuK1fF*v1k>(Nas`wX#no+w!Nw93YLPu$EPA24Gk~2(yeqGI$kOdT$ zZhN=_`DTEU6oeL}bmDhEPIoY`g?@BmM*?f3&Ke1aU1*~PnP0;+VREPWrWWlIVzEt# zJf#ptmF{xO%T^NaVMEZK6mRUMER(05cQ7r71)eJE+H0OzUPYE*A1IS+E3MtZ5Jft6 zd;RFHO;?*G2uDp;?wlA_`{zBIYvtk#tMyK~H6Ib;m}&-duex-+8$&BC6@~fEZXESI z7^??vftSUE3jyc?Vlc7Wr&tje{hOGJfi}BPd=4-m(wtQkwnn?$2?B~X2y>_T`LDV_ zEpubeIc{g+I<$_$MLYnMSPZ}5*k1%x5e1YC zG;HLDNZw-$X(TOa=F)Y5PW8R~?z}X--qL^pAUPNV;SXiKIr0t!0-ydf$2K3!cK7d- zo9A4hkh=X4JS2<`#?z9clprEokyl4;Mjf2v$!ue%AgjXBV_l9Bd-(w$j*Z(NI7~Tg z*8`mR9Zdd`P_a6m8 z1vMd;Y>N9Bu~A=9r1ImMleWxs(x|qT;J5=<+$p>Bt!d^13VLH^YHiE7BK3*d6O|{? zxBHS9>5PF^O?AXtqe#s#wPtoSM^qoj+6JDz+R=Bl2v*IQC<+Pqkd>IfG;3h$s2rM9 z`*f6&N~0-R>HRwZYc?+40Ywn%ff@Z)XP_X8R*%u$eX79H2FtUcNL#F&&=~4*%{88u zN4$7CXGyFMri&lEU3uPlvM9x#T~bvNTWs9GVq>k&OqHg-2CXb=T7^$B(-Vcad3#Dt zkrR{p*8nb)sJ#zV9RD#2#Eup@`oU2lVT+-dZOjJ-ilUQ-K*^v#WUW zp&Ssh@`%OntFmyZV|k^5#On>zGFF6q$R-WDC~^DV^x?*Bk#d!pA%|u}Woe7y0|D#H z2`Ki+laIOUfq{jz-W?>YYmM=7xvV{C?jU&4P~3uB=rVB{LAu_7_zfEt#R@yLz>gCE zM?c`ZDdLU**LfQ<=cJJj%*Vm>BFE>6;lNOi;jQ0y_V-7E)Wp=tr_F=|9TpQFY{z$`u`_#$x7N^d2>v@MY`>V?SM||Fn2*z07f18 zi`sr*u?32fWCSTM{A7{!wk<~^$-KZ|WvzQr=9V#SaiSd{IgS=@YI)Y&2TTF>+wq zgi6r*Sw;d2nRSDav_GIHbXmK6)J0$fdosv69NA2?1yML{>FUoC=XMc3-%S^AeZT!D z;_1g}sH(mq(mj8v@Bio?Ux@$z82R5=tFo^Aq5`JxjB7{3{2dc5XZmid_GlVG*hDG; zWSA!TI3&|uMU-GYA!Sg#(ZCh~A^pMCP8pa>U?qBL>O0a?u2gY#v`OvF1+VZi<6HKPQr+ zAec+AjNrECtwg)c+F*t4U{rn7XSF+Y$5VMnn`jzK<9;E)0ZTdyq0?=7G@Hu> zZ&)Yi|0Fqu8KmPe8?59}iJnStIiq8|eY7+S95C{kG*FP)+;)g!+jfYi3$fRF+(#SK zzF14lm~q}#4Y0p34^~?UmUZLlEz?#TU!1%#`*2=FgM0{3Smi zGkU(7sakjmHJP%L8XaQ3VxvAH43^4RVE~DN$~#~TM$$IMXs@Q)4{LE%r{J#V*{R*z6omREu=`D;s3f3Ez<3q&jM88QSdhS09RdxDc#zhYD7eWQSL&h)1j5@WY3IXJ zaZ9fmVbv;kBKFYSEF(8dnvXDB1n{wK?dI+#n_`a7c!({6tk?l_)*W2j?zRT7lb~Bz)i2b7Yt-os#$>j_L zd4x_u-xU_MAUXP}PV@=U1|EK6t|-xo#1LULmTw_>N_i2bApeN%^|M?j7XoG&VaSgyng5R(w;u{=XT;LyJRkh4dT{0(@tdSa* za3x+1P})dLqXz4I$tUwbsV5as&7Td7p;KWWiwonVBs%by>Jl!l#mqVWjk&6_Bh-r+ z??^2#wH}TR9y71LaUgT#KjB8VD#D9lvGo|*Zx8bV@}Dq|F4DA<_=0)!7Zqau4RcAe z|MHc=O44?V-x2?`c&s>Nk_U-Xp+3lEl~6VDl9Is7!iYpHRK!!yXC~5C2O5jdkO$-@ z@C3kw4)lu>3bx-DA~x1YssyQMKV46G^Zevs`F-)cdIOYlry&Tcj+!;N42pi_Nyk{E zo!EI{csatV)Rx{?4Qfl_AnqU03Eh4Vg^D^QC|{7)hb;Ua{$=#2gjx0JE*F#>HnY(A zS#3g^y{p#+DAi>)Z6On&-9sX&r*2R(rVu(RvN96 zdgbdqkw&`78T^}3mXsNDGh$_X&I<3klBgz?N%vjBTLdaABT#AQ32!hM}hR5ONF2#lD4swZyuAfE>FJgs<_KJf_7Saw@!qpCK6) z56&vU2fjZ%iiV30H+9hvEwUQ{FNW~*r(zq{i;V7&e88PgUPkHh4qV1AFe&jbATx0Y zMNDxKq{jl2dVPBhh4|-B2mWfrijcA4m0#!!_##>Sf1uCC-p#kwdR=-2Pp$FQpkM-@)K-zYHQ zeho`p7Jj#v<2CF1m9G7G`dGvOYFt}ljHtw}+4DpsY0KXuFHzZAn2SzJ8X}Xl5J{je zVY5h!XK$od>P}lk9I=tdBAxD9qLpaC9KzdDb&wzS38_=H9%a$v2EM7ZQHhOb!_X2ZQJQ|Y}*}m zj3*s-l1|>NYw!2$wbwZx<{!B0o;9mRjWOy+w&-g6Xj4M&bo;<9JRa>Y{5ch4Y`%$e zvNl_Q!w`qL5`2KFMrmie4sZ{)KrEVsIG6GPE7s3@!ZlW*#QvNLPyu>Cr+9nG56Z$5 zp5#2+%66i(uO<4Yqw3j4QGi;ZQWMRteEd?|GdyM9{*P=aTPSUAoI|TFJlqF|@m%y< z7n03_Sk^Jx>yRX8leeZmdi_e}`G>8zV{afK!dD_HBPDh zjy(Ov>pr#T%#n)kl$IP3Wqk}N4>buQYh$4=lhk{Xd2}vld3L@tW==XU0;Fp_a)&Bv zWo4^(??+<(z}e48?i2q7{by{^GRPj0B~#O1=o&{75&51_jELne-*z9nKS@h0EkQJe z8TgMRD}5E8W&4?6w?8}4znnt;GR63mTglseR+%RD|3c{l)C}CvEIv{CjTy=^D%wg_`cZ0v1lLXN(V`3mMIAA6d zem>g6WQ|0wCU6|;8u}ftj*9hQs8f(z5zN6HQ;dg8x`azPyn;Ab#=c6 zdE^AI_^Kl`ATTxlNpMQliX9Sedr1ZCz~nkK)ErcYHMJ8g_b}9$t+mq|4Oe4iX?Kt4 zEg||6z*z1Z3D5L<^?GU?v27y!oR^hCbUGb3l^r|^7C-O%u5d&KC4%Xjlhe+`e*xdT z?6%W;`135+i=bQQx~w-L5!htB=FaYHu%55#A~r_qc&Lwi!6vnvg*D)a>BdnVldd*uWfCp7sncnp>X0d z)|N5I5~gyFFQIQ(OzfM|%1f~2M{MG&y=15&!B9!aoEZ5abX;Z3x7fH9u61Q?g1^kd z#j->v(yEl(bnf23>p&G1@ijy2=8?0zsYxcsq!aCxm*t>+W>Jk`>SnXobzE%H5gkt@ zD&4z5v$)J^%yzJZgz%R; zUh)}aLe=xj84vR2u}iM*t>J!P_MQ&ypQz*?&i+WzZ35$VVANUWMAgbq$>(GOL60?^ ze~?XkB~qgAIbAx#Tw1C4CD^%M4Xl4AsW!DGDUF=?`a32$CUMFNWsG0+R6NX zKS7$m)zGy*p`ttsfJuK4X)((NIQvx40Rh-(sMrWGt_pm%c!WjJz)sf8G`%gO0{c_I zn7)Q)S&R`2gdD9VO_i*T#(Ux$9?OoCB?>@;&YtDZ@x$7V(Uad!PvFPvn8Fvl+t`?y zQ@SBa{F5=5bizNqyj6P;05DUj0UAKXPzILHU5a;BU~g?Py45qwc!L$TDbQA00(A&h zeiuhYC04~SzN(SAey=u0Dw$Rc*Yk8o1w~3y0>@Bge~_*uy@9yKSaifUH+G+Y3NFr@ zBVz6Orw7IbP!is0)LCVK0>Viq$$`v4w(=T>i!u(7W|G)`|GVBIv0bLpT|ww#bBxJ+ z+R!RfdCD)Mw+Zmr7dm!~0j|atVORR?i)u#XrPp?AGVdhq5|=?@kcAixl@DjX#<9y) zuhe8U%GAT#p;^7#?1eOrPNJ|X7fxB8iQO#Emv$0(7f@WDF9$JK zmU_ox1Mod3MbVw>G4&K#y_$Y&s+&|I@!9vdF-$rHB>gxnnYW#Ia5c<$-lSADpiiWC z#I8dD#!_FgrLGAYs_nvmarzlxh8Df4vh@9=dFei-KK+(JYw$gi*T`2oeq^@JRwb%% zmm_+#IFiaO2DSZ9!*Bw8e2z>(&D3hKGwM0fb%-qPU0zT{7)CVdCC8;$PsF#v6-55J zeFy#3d00g|m_UTB#ynZy0=myR=5BH!L$3|4=K&5v-sxf^5fpoG>}Leb5+lgCtM>%{ zN~|y#gX4I7_Ah3$jS&XkfU1B>6S#KTXX&A_XYwQW!46de^(e+Q4}FABDj!6F-7~0> zYKjRk;EcqM{lfg4A!)@v9by3XH`u;aAVS{?kf0B#WVR=zvAI$3Y9kqC$%4`V)sxbj z?Q9GQg;vqQgmYABeaMp4qVw2!+gYl`X6f-zFuj^5e`2kSqkfpYO`Yw`Io17AL- zPV<2ezS)hC-1@EYjmRO)k6Vi2k?%IAjxF zw@?M14%aomFlLJRH_>5|RC4eyA-zdkOVfWl6^LcbbXK|MgPZ-TCVXOOunGG@H*UOJ z%y8tq+_ngCQb304`jGar`f5LWgQk2-z>+JiHD7uZ7K5G3Pt;3&RrQv1a*(3(a7Loh_v7k|Po>$Q)nEFU?4avbJGnVO>5&;;It_4;_4hzhEr-5H%mUt`;Q)UAs*gNS>YT zR+*hr4*o{`XDV%gH)V$#{diH>k99)BXNfOLRxS880>8Rq(0HzhsYCGmb}w4N_vi`o*rD;urH76T^qk5)Z%ppKY+D(SMw%|kbpQaz!5mmn|glRvnMB9F)6#Ck*arh*cF)~ zh1y?ugZl5}ov=E6K>XP|eEF0f{|%)1SMru|^!&G@*uN^Qa1A>(JPquxif$X`ZkvnJ zvSb=+ZJb!N8Z@@5HNs705kUyyqTd)yWH{}c&#oyYYBc{~-6P%8@#a}bT7rLn9>5WL zHOqDJSMnsGh#s#hnNKi!{mo$NVqA;g78?&Z=1q$P#tA5lTn7QkOfhgnGPYQV;Vx@ zM5bjjk@nSseT zn-FE?n49Ze=Ct2!H6*EGJ1A{ybh~WW83ty$LeMNXTp^$e(AcMDvUNKcP=D1hNLXRZ zwP&ft)MGi6wIHxL23fk;G$+n_f+YUWuH^Vwas^9@DJcM5tGl|v~O+{&l6i6`eCa~UyELCmr zDV7RnF%m20bj2>`lqe;?ue(#zgB@|>`(6sGPD}CR9uo{~NACEYY&m9Db&oc_b91?c z!e$7GQXQsv>0(Eu8r*vQBH_6v#PnjssV591ynfaArZ1X(oN7G_@^R=(_6D)3-BSEf>5+q zpo1T2>w~ZO8{*q5bSG(CeV2+UOmZM`Fxng6A+feJUsCh?6ryM#F$)7aAmUN&MUi$iv`dZ)UNuQ%}v!k-cAxrc->}cm%G_ zjEp={XzoDM&uRbuH~Z6|KPkpg_`UMI_S}T7Kv~VlM5%*cH`v>QjX}{2F(SKCg9G8W z<7(gmhsg%yfW!UH+}UALK5vgi_aU3f(+7d>1goYnzk_Cq=csy3kdNXm^v*>_-Wg8d zKZL-%Fi|rVpECmUPk4gpKRuhWiJ6^=mBs%m3@ub{KF0*e0b7Iue&1rytI>f_w7w3( zqr*ysB*}}`spU!fgHKmYGK2Gs{E}1wsi>uHIStiZA~3_Py@6unh*6d-3rdjQq<6?8+Sr?oF`*5u3fh zwDLVM7y7{{I>&lrZ)?|J{EFmLtECKuLNQogS&En1(GDhacSRl5>@#Nbz*$3S z^YIIE3+>xua$II*uf$_vIvgaY9{Tat(CGO)6P)VZ4+_gI3tV0muin~; zsuZ)TpUeD18!}IsCS6`k*Je5SYr#A`%q@n^7QbkZPN3o9XKswSa6%tLEn>3Y_y#Ek z^CZ7UY%?9b&fwG{Y0hlEMwH>eb_hLc@psNn5-nJ%q+;y-&5H6b_$dLP`%(WH-`@X* zpOjr~9R3f*O`f{KU+|MaV%F@k$)r@7X_fRJ;mtEF+QRnAh4NrZ1r8hXg`F>AS(~#- zXK8!8b#e;lvz^9zTn@$2gR4XbbILb4q|n*c)@(PsPuD&tJ6^M`M&AS9;ECg3Vb$en zph;*CQ{tw+>Z=eR&>CeQ4{t!$YmHSWWi!uxpxpy zTdT7@Ua+0fc5{Q5HL;pmcU9Q3WqsD~Y1KE8euKg?B4JjU9?Q==u*NuHt|yI)h5rSD zBNk)@(XBk-VjpQj-k`_ksP4o$Q;p$qMgPN7Z3O>VgMJTl2>ZuvWAocO3tsnK@#5w> zvzPkzC_w~?VNGUyUAM|(>kGu!d2NmwhMpDr3k0zd2>I%9(-4!lVIP(5FSlhrC1|v+ z+UD3l$(8h5zOGlq^bi}(5;>JMiseL)xAS`?pjUP#*l4`c5_n|rk&t$HH)^_Nz;k`K zSzVLC|Fr|=<7``M#L$6D*w1oGOoGY8`n-14hYT;*B-ADpZzO)c`6qX=dcXek0W*XB zQ43gT_hETxe`%D#K)@y#N&QDs9hfMM^o^D{fCkPqs4u8g!q=FHAN=rmp0*(o#jx;n zElj*QGB_bJ%A0@MZ~PL>9#t?=pgNkcJ$Ew_h&fb1EQs*ZDvq?6u}m12iVyZyC$M*l z5?OHIr*JAd8>5T$4pGoad_`ItUdlLoDFPFlY+fBZQ2VTEN`fgtb`;v#Rzb5cL7=()?#* zEkzGDnR{e*VECH1*a!7@BPgMN@W`SpXt{hoIb>C6|24n;_n)rjVQFdO{jVx1Ps_(2 zUxVO7u_Y%fPkzyJtJOg7ta6^Rhle`+3tnxx%_ev%JEskW#E6V%ihK)S%k*q{d}UNj z2k~wd6`?q?JBK~ifGe_Mc@nwYLhmT)&q>Eph>8PL<}WyM#=FpUBrhw<6wI;e>b4qqT*nFM4TozadL<>{8`6Qi*G6+Qc%42aQC!iTB7^a)oQE^4 z>f6JBUWq|Hi`GL2*4>0pr&X$53KP*`6`Y$aDB??hm69Ume z7Lwd^R2)L5#31>_pUN=3jbAxrod`s!E_~O<0z?@=7#xUgntg0OS1dZ-+4_K#HgvLK zHVPBn!HPGEYXI}mz0%Y(yrMJP)QrqA{|IYAI*N@1S%v**-K6f@1p^k_~CMEYpK1Vps=COIY&8%Tc^uSKS{v64dp>nQH5G;^tS|u%pr05@6*f(R!|HYODcXr-I{b| zOQtk6Tte*TNwWeRQ|W}4_~Y^H?Y3v`4J8N(oIOK`OAA-Eb!uDsc;->tp61GP%_BUz z+!h{oIJ(uQ+FrctZvg(fRm{fC4NNyG-*|b>I@oZ?Dlq&JDqxT-Pwj6sfFAy0{kDYHUUB!iWw3qGPBhpfNg*hXi{sC}SjH-@ zw%>Vdbt7j|d=R^46$AA8X#wjMNM$gT1%5k=y<0M>-7}y+idtI*EM?&|tb$9c_j;ZQ zxqfH?!QPaGO$|fm6eQzyLLFb8Y&gs2^&MffCn%p=@*!&Qy-Lq1C?SLf6E}hisJ&6x zWye|_5&6hqzs9_ZzsV2G-NK=KR|nF)=?dGcAaiW3j%q0NBY7t}n8S}@FG*}S>~THU zg+Mt=4&R`^5e6y)rT8oNNZuyKBFQX}PT0E7lv&?!0#$%oZwmdCYlbV#D{89ipYrwkCG0_Fe5aX5_N{}wv@s9Mte!|p&gGE9MiYSL+h-Q(7g*65d zz^Q8E;V;t!w7kzAg3qQ-k_?fTnPodzgV`8R7=2^s+EG=0U591I{mqP)AeSoJ|F|ev z!L8P<+9*w(I>&RFRPJlvTb@k1hd>+a3C5?w2wO}lEh>&;zFh&05mF4DE~<@E4J5`$ zO4%%xJ@wK{yALIEi?}tnd2+$De)O(#HPmkDJz%WUkh4X~*qfA41D(XDll$~bS^fDl zekW%I(u1~=^k=JFC?(BVfU(A}^SxpLwHQ9BSp_KCa}E)n zX4eUHi@anvxQJK*8-wq?+^_f0G&lEC=7kFG$_;|<;~OP>JHO>GqLLLiy3fw9fO8rj z`acBlq8*0AlGDc#kN zs%~~QH?l^6*UPW7%)okjvfHVFaSt0Eru7~NxONrwTW?0scH|Ai`=#-Z|AwRbv?aHp4YY&3Re*VN zV#re4Au`|!e`uLt&fyHz{y@)1-O(N{*Y1p}z;sElvTyc>v<ayXcG1e#g?EsC&2oL+FX%dA(r@I^mEu-((^=8NqX6kvWf*| zU?48sZ8PbtP_zT%D3)?mCNkWZ=)lK*V7zssDhJyo2AJm@~3anzdsitX2E39C=L>jKIwC2XB?%O|( zL|YM_(3Y_ZXRf?TwyvH~^ZZhEuLY55!wEDVe5Ps`S6h7*fvF$E*ct#N1gJy6O0bkwX-^|-D0q4T?ljmn$IFcSo8@{8{; zH_qp;(3d>cWh5JPQGYI|rZt6*_U0VqW}pWF%9+FKY#}xNM4toEJuxeDBQLh=FMtj2esA1W>qOx76s8XOGY&c{1cA1@!vxoIA!9r))y9#O>! z2tL?Q2$QA^{r{I>n5pyJxJQVlvUrdO*Q%vQ1p(a_}pQuJ;!puwu(6UB%LDA&q zALuu2<8)MYGyUfb+A$`&E?mGI$=ABRhvphW(-ZzpHTsvS9(HcXbKhs%dG~q#M!5T{ zVEZ(o^0ZL*asIa<>VF7#AdHZhkc5h#tUE(bNI_4?uYa-bCPO}Tqay!d-36TF4j-8Q zjdX|m|4DbC>XZ5Tx~QP5X5f-FMq5wY%6<=>H?Oq3VO(G==ao zyVrcPf(t+Y0JjIcenL_t3x439Nq9vhY9h9e{s>yFEPoy9^K|I2TQnA`9q3Or2VYQ9 zl*-;E$)2Y$2$}Vwviv7>2HP}CP^XY%6&KZ-3Y}F?nOAPp|N8e$c0YSOi@nIpN02=*`QgL1(-m^K#!%xVnP$7Ue0s9S=b$k6o6 zewEu<91q*vIaY%H(~Yv!jf0nwk0)DT_tX`Tlia}+l!&T&)N*UE8Ms=|)6AQNhPbQ8 zfZ^AGCz-C*jl!?RE%_Rfh3H}C!+-QFL6-zv%@*l|nBObhj30#g1WW^YUniu3yN(HR z5gnl>J`&h(IPoJ1YJ)$bCRL%Y6Z>3aLTZcs^F3qJ*i@r6nMfG>#TqrjSU)hAO23FN zV5=E5;ir#M{}K7Ua=}ur_k%dFaPbA=H^ob|U(W(X^$#jsIdpv=oag^p4FUb-uWox3 zrqHndGq^3E!Tp=J(7%HFpZ_^r#Xt%7({+?AE!_e{q)7KAoQQ#*8Yy7-nYfGr#s-&# z{H1*mJkl{^=34r`;+bh4TmEJKzU!0XVWmSSqtKn2_v+z#lI!=e{pStB7)pZxruJ<9 zR#c2c@$o0AVbyb60`%_iEvCfJI=l7x#tCG!uU_OY@Ryk(2K&%mW5^6`lLoBuDg|uh zkots%oo{x?WpY0sqXTufZv0gyc*Q7d1CPGWq1EI2z!%7ZRGMsfO6h*Pc_6muN%5;6 zJFD-ATwSl;0I*ehlv3r2e0y_>AsHD11oZ#RI;rHs7JTct^Dl^S_$}DBkaHq%Ez9ES zkDv#sDvjqI`Bdtt7zY9-lP$3(45kA#9Fe^{ehK?mJ2r_?L3>$RyG>bp^L$gyM`Sivopd z8q@UiNAyiF{z!h0>;W?O_rW$h`iN(m1GeY8Aj%X4%|Amt`FY6y1DgHM z&HayRRo=$!-(FH0$_h$@!pH$|a2WK@(J@iJ;Owp}+1f)Q!+qPr3TSL z{Xz#5HNO4Bp|_Vrw?>sME3rA#)3Z4nTz8L$7Y_*ih@6XinKDEDwVrN}#~jT`gQTvI z0PK{=#f<9FemT!Bg(AUA7+BLwU-%x13N%BFi~5tcw5@OL#mkTB(2~K#PU(4le4aJ= z7e<;nd3~p}u_Qa4S24*cVnXbV_NK5jXmsN_+7iJeH8Q%c%)f?l6xdi0min`!Nmp@J zJsv7OWWmz0p^Z2kZ8Wh_bI8O-k`@pUHXBgDhk{J%e`ryO=Iy|rYb{v&W^-F;v?n*6fHCw>TrX|BKMKm$#eH|+OOw(pwW*nippLlW_59> zs|Jui1|&!AdDltPRxVX{W33#Z-KD7Ws>HM0LUv9$oOnDa$tGlG!zpt)Uxqe1cTjXA zCB+j(3?EU+mTYKoLM??b-4<3!eXM`Lo8e>y?RgrJ@o?CtOyk@8Q4c-r8IKGhdcw5X z%T(r<>mq8;ghtX1%&o@)dHq!=ai2z%n}cm7JvZdI6sTy5P{)pCvuCx>P`ozWuBr9V zj0=qH?y!)dYFIFzrw`&V>iz5Ca^>p2Db4dG{jhMcY7(t9W}Yzqx~ma-sfERVd#_Zlk+Lh{o6D4uMhk`m*L-di@Kf`-lvrsB0O7` z2{B39Vw0vCQzjgRp{-qN46gK+HEjA9*j-*2C~RK&gQKwazAivuh+q{{?|qS{M|izw z9j2kaTwplT``x~T;(KIXWSCi+y!Pz z1{(yY2p|9i!>Qx)=9Jlal{gsy@X|YW3tmMT^&trT)Q~}hx=Y5?Cd7LG=;s!k2Np#n z!fTI*Gm|`&4o^fn%P=zHaR<}k!r}^ADl_rsla1n}d6Tdx*%o&X%iJPtS#aYq0WNCJ zV75Hu2J5%SA*Vv9I*smlChUtlEuGeF)*dw%mws{>qUb=91=bAO4OaPjL^#iQtrG0p z1K&CjwkW2`o)-!c0f^%iR^N_)(a5soXtUqa8nWHO#8B3o#uRKp=3xTYH!HwGnV4f4CHtg*CQGxFuXIDDvxZ@bZn zAcazyU&tm)V>>0I8_SAzfwspsMS&mu&aHTGkyjuUvziM#i3k?xd+0uQE-;yqz_vJ- zd8bP0mqpLMs;GUka^8i1 zCBkc|!w#N|0Pzf)1vm|;(KK*WgPgpa*3ai=AlxVk8s8U#PVX2EtVBCE?dMr2*=)nj z2#fP9Bq6(S9*taE0WazdGJdRF0bg^oUd=X=mlFTm^B{x~&jx>B`3DPc+ljnF!k zTT{q(q?}l@!H~cb2+HQ~LU@EbN}R}%(d_!b@|~A^nKMT-INUi&J4*T$I+%UB8=P|1 z-Scpth6C!!TJ{MJ&D{n{f_1&wv=^wY&d){3nEPO(&r({@JG%w9+_HAG2 zh`!L{4&2)la`zR_M@HI6&e3GSErIB zWT%L&UtrQ34vE}{#|d5T z%PM-iXU5&@rL^o=N}g_1xF{%&Zrm=Wm1}bqm-3%f>5Qc}5YG1v|Gpu$!Lx z8LBv1N?REb7s-^rkwjJ$7<9Ym5KJ38#i&C&Aa%=dA2Ry+_=(|sXCxpu{1>Ul%wxX+L%e^#G=^U_eac6IXlM@kM?`Bz0k zH*Z^2yvOx*87;<|iIUKkUpguqo8MTTA9G#Ujz*z}^c~|P97~=ZrT3*Iu7v~Ta74k= z%F6ObPF4p|0h800$EGrp;MxdwSK8yUmO@jNkwtO<2er0JQ?&`K4~8B5Wbz^3K_*F8 zK%bjJ`L=^AYp<0bJk%D}L!|@2VXg+I$Hi{sx{JvhJ1kex?qsmdul;P}>r`)TPcI2Q zWZj|@P?+05XtBslcZ`=4+mgKV*c~)ct12b|-V(>vEQAPqsMTMuh?3T19RWu+T~H&A zR2DbE30<7;au+LZ)_^>Ym+Na%gg102efLCCGQO7Q`T?nBvPr0kNQ9EDl~zi~C~EIe zz(A6xfy<;s*Oj+|ZP0yGMS7iX6Z)Z~9jW`=Jl5WArmlPpl&-jEYH1 zuT$-_;22(7y|@Sp?90*~fU$PZGYo}>qWZpZlkYdiA=gAY4<{M|h%63dgkHRbC`&N^ zT%K|>fw7w7!_WUpi$lXsV?G*djH|;=c0pB=la}QkG0aZ}*2ZD-k4?_q{Q^y8lAX6` zbsffxla>CR3|K%6b@<%&2E`1bHdq?A1lku+Zo&Hs(c84Uin7`5W)sS3raK3H8T}BC zNy*#&Aa6OppjLs#xM9Z=k=KEsi&htq`qH|ayij+Wa9ENmIVl4@E?}i5xy$0FDKbFF zUrQWX8#Fj-5GvKp+Jzoo@5NAo&$h%O>dBMi!2rQ?gwYGGSJ-9hOl@WLFdgK0p@T>p zyvb~FEmsHtdsGgk-ESXRcbbeQEEBF+^-@J!P+2Kn*A>{bp(+Hwj>vA>AF5a5N4oT+ew;FRV z*z6=^ub$_YU_#J2HyYqyxj`81P00eN;H@UxyWIe0C#&TG`yp3~Z{Umq zdDj!_{!*rRw`0d`cE)tdsg(SR$lDM8yN%SgueL+1^sB}`9ID(^{)|d8BeYrdaU@N% z3$l~QvmC9ZIEr9T-mPb$+vO17iH9GQG;b|smHl2eQ* zE@n@|MT=cMG)+QrrCg@0Etz`+gnssc;jv!n@vRPbXM|KBJ3CQIFwL*4`hJR<$QwIk zmpDtczTqYgr9zLbB7_Xd4E+(C2+j{xXEn=ct$ygp-@7&}N7><=;&PH|`&E4q6W>*M z?{GNu;iO+*Cfj9qU46l?ijew7i8Xtw?&dBwgV%pL__d$2rQA&Mj!n?DH)9j!TyIE; zSeB?}XYU8)%Mu(yup)1Gv}Hnr!xaB;VtvG(7NC>-M=OCKJKDt!rxHw#WB=0kFHWw6 z9NAt!m6tR_8kVToC$`R*Ok>YA%23JM${7v{9%517#FN<%5}*6T%){}dZ5I{BGXNjR zy29xI;u_T7YoMa3;h5;zs7xg5Iz4Q=h9Si?5|?Y|%e)GRYc@rs?M%et`xh(9FbMn1 z45ho;qH5ftC#czN$Ximj-;Lf|pc84`zI27n=qe*Hn&>qh|u~e+8 zZ~L_R${q;TnSe0Jw3!fYwKdwg5w?yzzzCTR$l| z8o?zH)TcW+1T_rR({sFy6A~udF1&%bw#;Hi13JqwlnbPudxi^imLn3IOwm&Zw800} z&%s_V0ER?F*!^?KEDPte69OBfwA+(h9y*5bI*>GClcKfqazj_ySDVqWvqbGhs1}p z=j!qDW606^F! zEsEaJdk+{V<^Z)(J?|VapU4a^iCpyC{4YiY*{hF@2d~)lI8qFEajN<@tYr&SQamy zQZK}JSDyRaa8I{OY1>y*5 z0US7gUE1UBpX?~1wj>!aG@LPwqMvmKxSj!=)Io0J z$V<{cL?C+RtBB($QGU=o6ADE=s|@(Kt7@Lm|B(L{l#XIXj-piGVr!}nGld_m!{Ldv zru~SKbDJ7ca2p#11A!&%f$S@xPmYRmOP7p^k}BRUE+0LP+95a0p6rRjCax>-CRwUC zOaYORtl|t|h5k0{#o(C&sPS!MD1*8Rxl&0z53;OJIJc3Lvt91&14Rdq$qS3QCdWNQ0rp?(U>LEMFz*IqHa`>C}^86Rw>eL z`zkPT)xqgqqcqNH?~zZ7&)f$84Nic7B|>dfIz?UslXXRINmQYX9kTX2g;5tFX`%(3 z5;e4%9K|xWk0EB9IPB&aF!fLkQ`Wjzx_8o=CsQ!nI-r7cufd6jaSR54cwn@j=Jz^|}wmR>6<{NXII_4?UZr-dfEclNGgi1f;_xVfkNZI59^x_7LLwsH3q ztvrd!Ixx-=IcZzDLz$h#Svc>caVW!>KOC!@0YF*s;rkB+TjVq zTV?MT=E>c|xP|h1qI|{Z%1QJaT|jjgj&rq&qPPpWm)T%4UV-TPJjmXayoIu?1H?4y zX%Y*c`)~32_!g2wp)t^PSgv-U6$af11S!#q=zC3+`tPWQUDUz(*N7Ddxxi>HXNiZJ z`J)dSy#g?0wc(>coG>X&3XlPyeczQWz|K#dWwa-eMQ4TKp9gn?+zBW^CYszT-+5!e zc5%|;$-HrX3M>I%>6*21fdGy)4oel8-as4%9rY$rF~LefB)6P8b|iz=jU17OTG1eo z>x~vP!=gpGC-=N>w@TD|`5{!o(I}00Q1fzu9^4{5(ykjk{4hwp;)$uFzw|=@TQKLf z9ZPD2)fM;VO{TCbIB893J$w_FN9>%;U8Ipa;x%B`IJNM8q996`9ZDuXkim_wtg?P@ z97WwWwJ&7D)VzD!DLH%&f#@pOJEsE#=rU=7j@7C!kA+KB9y}`bZIKUF7rj`ou=qW* zd}ByI+ft`&sDl0PRP*epq60$+=6QNzgVl;+J1_8i-&fFv>r5OO+%7WVShc3~qq=yH zSJ|}Y^ugTXryY#19gnX~9Ld~rxSO7M)8kiNb~p<{RL4BNIpODbN55fK>TOfDJbiju zY<%^KyzSF^`3E>WaxIgm{fUavf1+X(|NU5)Ynr&)n3&rCZ(e1dx}Msnui-l&!ZC-D z)Oz>}?e3PS1d58@t!S4Lg2^;alV3> z$h-@CmbuqlzFVJLpMYQApXW}5Jy=Y2cjD>;a8rC2p2uqFLZw+$e63yrj6a>UR%`0c z@L^|O0`gNL7+lQ5E@~2VjxO7XBvr)-Rm|7M+Am#GE{TVNVx8KI+H>?vRjjRw3>sQ5 z6fKh=_*%qk$ z8z#?8))-f3Qe<MvEG+)5-;95M9OhH0 zzlX}mmb-!FzHjVoE>=Oo;i}nW`uY<^$H0S1p6i?G2E<^6=&#Py9C6O4iSnci-wiAY zr4^P59b(+6XBMtXsw%zuq&_20of7L~T1i7+Kjc4Us2>;4>8L#B)6r{Fr-q@etr9>da>AxPNBAZ#spfAR7v{ zBxtni+r@`yVOp}5^u!mEC>2F!%R)U+NHVS9%!J&lFf4WFSYBBdXO!O7BN;o96j16c zz4uAdNt$sJRu-MXf$CKXS&e(7R=B2gr-+tB1qP)k+&`|&>#y<36^I@?u&d6zGNzK- z0qR%{OE}Bmy*#i4gROcZ(-f>>6wVljIm#mDv4Gp%gY0E?W+#5d*U1ZQU8jeABupr{ zSG%}_IxzX_?jxZ}oT*M6IPmbd3h-wlpEFi5-^xBbnFuuBQ-QGE+Q`G31=XQsg;sJ6 zgZR{%l7cm!rB1@_-SywHzwC>@eTy*5f$kl;Wf&wZ+!9p0!qFa9W9s8m8AOH@rOcD3_WbdrQ0Gt->$!9tkB&n-r*^jX9`YXa zo**b-g$f93RT4V-RAlqqY#itM-HrX=`U<8TDFK7%-s6l+MXu{BzC9NSC4MhUJtzYc zaB4L{qv@aI1x5- zWL%4V=pWTw1_P5GB{Pq5vSZeZjXIf(Z1RibECeZ)lrSSou?u-`NGJLfjj@x3X5m+9 zn5}!PcMOPaA`InOkKV2YA}gVS7uVv z>hYaLi@3FCxN4N?FO{gV%LUlDYD1RFLCc&Nnuq1(W7K175NVQ9XaOuE+xUhE+ z_DVU|ysLQl({|=&tWZr;9foyeOzwW$^OWprIqFI{vbpr;d>IQNNpVBmq=yK-GWFak zh7P2J8a*@tIFZf`L3Ps(X9BBYqtLsY5;Rn(obL?13OQ@3x=}-Gmw#vTgq9ShyPS6!K-5 zjXvpHdAZoC6F`^8&R~H@`U-mEscORp8|x-%Ial+rHa#GVPE+juN=D6o`YnuL`YjG4 z4A8p`TVr~@DkP@LSIT{;X3HYo1*f1TIyUzNi?lE87NZZ~0-m3*`n5~KPBpZ))W<|^EO!AMX&9rt_AH$a7W+L zY`aoT6 z9>FC>O=NsSJ3YA{D#b(R%B-Y?rdMI*dQ9UPF`3Z{!YmMr4dSWGWsXL>8w{$IUy}oI zp5C}1ESBbkv)%iSJWpax3FrjS{B^QkI&m*Dl}XXnf1f>Q$80Vyy>3@(v3r)rcCdyG zOnd2Dn75hp-n;XNs!V3`Tj8{4#TBXK&MQ2W=HpO;@ZBv_IO)(vEUw91&**in3Lj4v zc|-k1z&?@%*s|OSiDYR*i{C^a9tkVq1^*Ji0k*9>#WZj!h{{hEvyXNi@7T@U<)&UK zM!2(<`iG72VWqA(JVFQ;dP26bjSJY%1u)u9>8iij5^K{9>Ds;Qms#zA1QXtZ>Yfo4 z3Za4uVTkA5mt=&_*0t7<$AcDAygOim2kv{I>x0>Q_`*vM%aWPLndH3>`k*roEL;_Y zy4?XO#vdiW!7E*%#(?&mkZ|(75kfh{Fm$TE>mJM0S`?A5Tmre@f_>~eWdH{E??mO_ zG5x6d%llPcT-L{=Wp7kQ{h-6|xuDjCV&j*n8Mj)4X3R@kw~TU{b;aiT70A-!FFE_pgV_N?268wrMN|Pp1 zUdA9DZW`ks?Ax)_L_ltUvZCa5qq9{E#L5!3xg`gS7bj0m=XE_T<4f?S&SiH$KxeQZ9K@aYs{Ws*6Q|MJku>NIJ;~FOWW{9NT zymUwa=5;fKLVMu^CVR5+_wb&H)8OD{OSpj?p02}x%!*@X^420hA#>YLiNxPzF#oLA zoc{ktJhi{vve4fn9D6K!g3!U?3~9Y>cQcUv@>Y(TOLY<0ZNbjEDju9wtVSI6CluZ<`H6Py+ISxylW4mqbsycv6X`< zd^Kez0p{5CZME^84>u7!5cyWvd^5D)Te@gUn=!{_*Etv&`W$16E4TDrJ17n*W2m#Z z6IswQoU=$ghg;VEA6@ShUiq?p4X0zF~8O4{P)@W zocH-I>T+GwZ_QaXXN@t(NH4&Fd(3oDcgqU3o!m(nFoYyYG7XEczln=vS{{;a^5QCG za;m{Bv4vuvRMFy!^9_Xs&z?+tQLGSO*ua4ix^UpIZx?E`FZQ5sUTnC*(}nD&iYp z7E1g{_{F-YzAOO>R!#)x%zMvr21#L(2u%> zrH$$T;0B>ey8p5~2I-`+Nv9HBx(HXRMMu|KVvGH<2tip%QesPDncR~>8{>A`lwkVx z1NF3+alb#^3fszu0h>VPO>u>Llk6ZlJExubc;=m}x!2GC8QK7=noA{vi;NMk*i`J& zjCBgk%}3Eudhi0%W$LUgxRY^fFevO58=qk)_fo8r%%)#^3kB9DpYV3+2DfphpoBV8 zm#Ne(ICeCO?QSP3_A{yW4ubrEzaADNT{!c_lr`xIt!F?rNcfBEyB%HbR zV4VtmA~l)J4e<#C$yO-T@BD~jG3S}ALKeAbDrczsU&?4rL4V>b1sR2kM~vli4b|{i zeBmwc64%*@0_VeOMaMcQt^5F8=T)9Q5{p3lcCEFv)FVu=7b#izLP^F4YHJXQNQMa- zoj^hZ?$6U;U_~xWlG0*9#gzc1oWh63$>(oQwZ3JJIeKi*Pw0nC(jll|QIp;GKj-D! z+4Id5AlCc=)%1V3HGjM@{y5kxI~W@OA8RuB6v(~vjuTIH@8IWKa&26HO% z$TK_BUYmYnMH;Fe)9aW;xA_>0C~`ooHc3;_{W+^L&4aCdW>1@ejZ^sRXUmYRHuGIp z2(EC$$c5|j!cr_%Eg4Fvt*idDifVU`W;3lUz4`2v&)V7%DYrHabT~-Klxpn4Or_6D z?+>B#&jE~OUpb{P3k=n!F$RsJhp0mKM-5flx=ogJ3Adq`)OyyQutj~L&$YzkW6Tn1^fk{L+8E( zO~{8}LlRJrI^b7fq{ky)SmH+jO^gNvGbqZYe+{M$vAO_O5)VnBCZ{WM5e}GDk z2Jam}8;}Ov9c2GMyHN&sV;TY&%BIq$p8qCw*(&ndFDjt&(zjZ#W+eH6LRwk`f+Mf8 zD3O<>!MjuyFsM|4()e2DAE;EqG)6DQ783Usz!(W=c6?XU&FcN$t+}klHPAyCG zslRG}+;Yy_jo;M=2SVTLYzx6Dc2GEAm@b^!Cu29$nKBv~v7JE^qhh;+&e*iYf{Ec@ zPqjDcrY$z}O-=BS?304mr~D<`)m3nMSxK_B>q+&9Dw~6~Cc#x(A&DYKap>UcAO2z_ zYhcoj){=x42(et~I(TO|zCo5LyNb1pO|MdqV3PfYHbdvLvZlH@u5=L^PPz4)Ay5(l zpU!*Ccxw=|j=^nOY*|d!pcN_nUi?Qg>xwB!b`|sYc`Gp{&XbDKUkZKP>UE-tzfL^S zyxZc61U|ZY9@?JuiFq^net<=}kiu_68Z1bg^&@C5XZoDUkQZ9aafbqf)-9-maZXdd z*GAkXw6`a3BCVA=t)lb-qhNb~X5&J|Q(Jx-3VdJY8B$luwq|{S6R1*KR7J24^+fCTd zX7P^>v!A@i0}I>lWb%pc$*%~y8bmO8Dg@>aA}4)n1Xg^4DtuE3%AY@)wLHdPdP`F9 zFYT+}XLq^&&hi#l;3xmB+~N^|=`C^0pJ+Ls=oaOhSCGsnGviw+bl@k|;I7FN_xMvd z=%>n8@J}TJ^0#a?dFpEdaE}1SNZN!ro&MqvsF>QC5of1YbreU#> zdGc0jQy4d_*S01!w#t<6eTml_ABd2f=nljk4NoiyD`%HbhT2OYTP#4HL0%+QWR7j< z#4e+FuzgqWNX_GNWj$L zm5H)3Xeh_k#=Nvx#*7zaHXpapGcUax3}@l6u5pAQ=;f5kFUd16DV zX>maH8)!Sg{|@9#AqpB!ww!8qJMIFibC0D8!^?o-RtG4X*jeT3r$_+RX&~=S# z-PL!cR&NtS$=d!L8PnmaXkuIL3rCqe@YysaC*J{#n9TymP9T9S{eh zZzuSJc*qLY8Ab%A=M2u^N^Ck$PWKvVmZ@!vg$0E-H-sRSl`LrXQFY48VGR|JxGRhJ z`lZT-H=G;D^3g?`VSwdFQOfi7BG|#Cr^r`HJI+Q~rBqZYHwoZ>KVhlCOemOI+ zq7)t+m7mlw%Q-C1ToR*jXC>!Fp@7wsVW2PSYjR5!)xb&1rl71FnB4n`99>nDTRYnD zh-O_)O6#oStOrY*DfJs()+oL5+^H>JP&t#`C_q`xxN9AasxwJ9v|YmNXR@3r&YBm` zY@L|mz;Tx0hE`Hi*c1g)sSvnb>Y7-pEzyPkmwJ_bP@ak=_*Tu(&b?A9nZ9PcSy5>o z_SiQYm`<@!mY8ZA>drJl=S&O<;oWXqx>VQZ3*%m4(zE<6C_5}5~!3(M_;Xz>sab$!?r=2T5PO&(wiOq(>iRt`$suu1dOax?~aQH9&W}#=52{{aGU)M5 zo)u{*b8XW`?`BDB@)X9(aG)ZuRSZw-a1q`*g+yD2sY@iT-Fp;MvUc3Z@Fhu=pQFyU zrYx=hN~%|VrVDt>{6XZ~q*d34LK_*lDBLM@y&pHrnf^JhRB2AJ0ZW8&|Hl2(={JoV#s% zi@&YZY_3kRHzI$6ymm){5{xJAGDhe4Y&?CoY!z{qsj#3_nnY=9&MO{V=&6-Ob?{(5 ztE@a5M%IZrD-!Nfu+CV2iUa?&rHrjzBqE~u*=a0iir!4)`prjKeWzb(LgKpEJLxye zqJ?tlVpE!qjH9X{DN7#(5XBRLK8+4-!770{e|I3quB2~LhOPTd`)@;czJnR@VVcE7 zNLV|Nm+#o>YeD-@I&avZ1a&}eVRC||7T_iO%3t$Css@xOX{uqQTN-pUG*)mih^qEH zuYJ@5Vy#{sdPo(#v46$&w+eJ;u!92|>B%!ki?&8dL!SvCHrL238aF0F9RJ1X=^e70dAmN zVgMF)Al3oLg&!a+WGsF_R4=(YiQrYxu+}5#$X-*gp-zfs4=>w0 z_f;?3K}XVwd=8;b_`s`qdhOlcdU)o7quIza~{S$z#}WRc^hwk$xVmT_dR;>=VfjJ;DK^8<3SkIrSM~J>rBbit8$#_}Cb)S7>d^ zU>$QeTpPNFlp9x+9pwpD6@WkTf#U()nML);*0L(c$+eSQUyH51w6xZSwvtL;jiQYT=j49x<6SR;uH9{|A7WC_5Ox`1g!J0{0cBjU?rmt-4wz_b7}1~) z@`JJ3*%(_8%ZX;6v>v*rA1fjvQSk0h*>A@N!j5P?dFE zJsVh;pK4|9oen*vY4#k@_zZVKji4T8LJ-5>hj4|2iz`Fh^=sE(p61z z9j4<(?=-I`RsA!vAcWVLxMIr$MB${f4D`wRL%-a4=*ab)U=D(+nqeUCY?|=0|NoGw z!!8HwtN|@;AYh^W-P%h25hZr{>p}nT>0*GBhnpKXJYc4{>t9YDNN}?Mm@57(sag7g z3>YhZh#4~CZvZxfo2C#0{{Xnv`j#KS&L%At4JEx1iGhD{(Y1+zje(Vc{n|GKyfoT3 z&<9kaiM1vm^gkXQ3Eb$O?f^Ji104tmAX@Wp&17ebe@pxQyJMz0H#2u* zYHyX?q@>*zl4A2_Q7CA|5s`#Mv=O%1_-4twW=#Ki`{CCilq+piG#`7jhbi#6{Abf0_TSx)-LKwP7lZOU-mraSNVj`jI7fd_l2539=dmwE9-&*7{QXhqWuC1?!!d-qD{opWxj`D)jQ=%zUdH&|HtsW%Nlh$%KIHUGDX-j70C<0j125Y23)Y zNFAuZ)4^Iy#x+?mnr%KXwsjFdya|+H!N~ezOoX-iN&!I?z5e>S*HzyH){5a38B@37 z!IJx%Fx;YYbK?6#i%5w`k?RZQg#yf^il8?AR#5Y4~Ol|s>~rY3W`J}L!zn;dR5_>vSKM& zDzn6FT9lXDo2?jv5Ja-gc7tj7)M)Yvzal+}agG^j}{jvo;aMlUd z_LYu|D_>WUh!4$wlpm9)@IY(j&go70YunxJ-NH?V>!-V@a!T~G3?YsNiuvjaX~HP_ zkkXGS6)}RFOtl(ZIJU+i|9LnG0-2!^WwQZ}l6Z-y?@_D!_f&a9%2cV6g6=_~=QEf$ zM9JBcN+auh#oSpIlTQ+O`Z4sFrwKD6D2&_eQhpTZDe6LizX7fOXT(x!30@_+&X3Pq z6%@z|LNa5%s-J^i6XtO*V_%X{yoi!phZG81Q!64f$58tGcap;@CIDsQ7OOljkpoZF`Z**PsjW;&wkNVSbUA5|h?tsTP_J5;hW zvalJZ>~$xAGfZnf&d|cAYJ*xXStN_*r%-NPNINNyGRnM1Prbvmehch`9re3taF`O0ut!+C^u~Gh z`_`5k{VHsFWt2-vYsG=W+C@_qH_Nqt%PRD6kI{vjc(Np~;JI+Bi&m5A>h~F@TWH{k zvDqq?)D+hArkz3f_NUYEOkEY_x;-8bGQHOfOrD(Eden6kDK<{fa5#Os_KJc)gp1Qci46!8vt3BhmKxg)a&YA(~ znxRtSQCKsZDIT7_5GYxAOZHy6I2G`l%3xv{N2R#J=`DEsT|!9u^)8;)iw3sT1K0zm zZJFBNeey2?F1FmD;jj6-L2$imQ+RwOm-6O;)t#7l<%SDAILdW%B|v8$)Uo%XemCEO z9!F)42Zxr>Zg!wtQqyMa0Cieakl&S% zXx8{J;gLnQ3~m*71APrHdTla#HDC1A(5Cz`3=0(gki>722s5#)@Miux!F>^z>q$YF zB6^WHi40Ek2ZYV5mer9%7#Y6@$pK-7Cwf$Cd;+o1T9hrvxYlDK+Uh>|mV~~$@t4u@ z%R`Sbt>|~}Cn)i>v>;_ID|lfz^F~%8dE;rGR?Vpl8~DVCn(>sI-1A17naZ7m%n{?P zrGxdZi0WWk{FhxD-;TJ0c96w3h9XoLo>g=WY0$ePU;N->jFjuVQAVYv6RLTM?BU_X3iC_!D-0T) zLnK;!x4jGbmTya2pz<2Y&1zOl;le*6@Q^}JUWi&^Qcmxac!`RvCf-l@V+3V6R7R)c;?eYIjE5p=AK8`L8-v*wDrXKrAq}{&$_~ zs-o?V0vPd^V?LD`fGRD7GmwRv6S6~W_aN4QBQ;fB|d%j{JpzY`#8?u2%;@DLGY8(Gei9qR@R=Zt6S#zB142ltQyr)~0g zdQ7{yK_I(6)>GE8DBk0`-cf|T3k{UWX3x3@O+t-*mi*L0+U_^0=&F5gJxzlrtwp;R zX5d5{J4JzPS2Z-j=KItKvD3J9C78N(1=9ynoHQohfi~?6IOuCUbpw{{v*09i-RCJq z?!INS)p?r>ppS^j5Up2;LhwZh$HU~qDpiTN*aM7NWkD&x7PElDzm8Z&K4q*yr1hKL{^7|wU<=+yOR z9Mvf7w%QD@X@(hJmOjF-m8n&)hQa9*o?;Ism%>&TNAXLC;JfUpJBEpq!B`v~Yc9H` z_0XsYMg$BO%UxR#2+uq4<>^1ys(P7&IbI5779b$K=9g@~NzG+>C5<$HlNK&UW60VK z9J?~IpzH`9%b)WD=`d90zz~o}afvum;b+l5`HFqe%=?QmD|2J)^Gj{;K4Kz3!3Xh_ zX#`6#!lfV_^Vb4UG6`ri?D4og56s)081N_RbLQcbNKf#Z@<}i8N6a%B7snkkQ%qaH zLQhR1gLR@oB*U3^cg-<~X?cdqD^{c~uAWrf`QF&B30AE$#i=B^&`We1YDgZ`Njw-P zIwJ-?gCZ=*Ng#nvd2uf|q?hFvBPI^xq~$lTby;~)g0s?cc1(k-d0I=B-L2uL1$d=< zp<4}z(JSSX$o8=*`V2bIydT^q^kwv}42eGJX?P`APs$=C(e!yApY)^>;couDSbss(!iElpMwT`JaV=A45&-ep z&Ct^3&qTt%Q&?B76B-~=lM~B$gCq*Zjnh8>k%6FK6BKGd-q^c`Bp(;O1@<{9)c}x+ zq;Leo*$%}rThH7+KKlS-5bq3x9zeWDL?YCnDxN?qK$q-1NUU8mnTf{D<9bhtia7s%!vOLj;U%`IW8lic00D>@b-{sZ_DAV{<#sU^ZT$bO=nL2{fxl@ z5U@~-O&*AAqMMDw=pe;F!&b$@?Qqc3DV*q3CK|*56{u1MkvvJk^%}cI9 z0cL@hrhWDZT>Wh)(NLI8qloE^I@&r$5hY~=tRfh_NS0yhBj%nL?~Fj8BnFerOIkT0 z+5U9h{`V$JNkNb#PInb2|31-l>MSpkMQiD7^m^z`XUcEvOI_bAA%xV@ekp9I@Duan zTC0sX>~jn-E>||Ep{$hbHOA#Th8lK7w;V)f>rK<*RTy%3OK9E*EfCSOOZHqnbNThx zbI~2Jd-{wx2;H(X2c9b)&G^Vd&Mx1;^_X%{7RJb=-gvI>r;Tm>?gsoGgJIm^QnziJ zCVZFHE+O~_YVgDtpI*z~W!81h{?C@nh8)5n=RumRgYcU?68M@`%Hl8ldfY=UGKN`Z zE)_-V(s=2PqN6Ao05Or+Bem&rRJ>a3OZ-8fTAd@l(C)`#^-)(;!|~#h;7K*VsFXM+ zi+&^4@8}M<>IUDjH(T~dzISe^fyrWB)ZM#IXMW@~9oJ{bQwF!rh~_OR!eD_bD__wq zdb=g8tQ4$?%0-|2R?3TxQZHI6uB;rzyIW~!lFdmPp0Y~qBn^uu(Ab(Gn{k=XPJPGF zMbmrLk57;Z8%G%Wt|L;v65;oZ`SK|xu(}1honH{GlAJ9opOr(Usd|ZtxghW~@`GR4 zJZuMijH!utu`{9@7Ru4Yu@Vf25ON6C6yaAi`o}Y)M;FNF0nnBG{=BV)?VYrbsCthG zSkWCQ59d3sl?lX#baDE^TcDmW`73UuFA4O>Xy=J{ckBoI2{ZVE0jk@azIY4|T#iPy zF%7xpD<;*s(Hh5kANeV`9IJ!Yh^VQSk|Ta|Tb$s_#;Ov6Cvr)sT}0Y~sFhC0d8uuT z47&qax?k}8DQ|-go>Whq#EU%%q%=-3T#jxrJE@j9%WcqstJR@_MkJO0rkZPViu?;~ z=1=(rOv;416FM)waNWov@}W)Rb}xpM#5sh!@w{{6m|xht{SwYRu;UJ`O#x6;)F0^o zeG1GRy8!nC_-P^k;HUkInj`*)kMsAtU#!Ze9KiPWqb$Wv8=dlJ0R=Rq1&jn5TIjHH zqZNp%aVTiJqgI)z;rjMD-7@*LYS(>2z`RH|^G#vQrwzd>4s;T>m}#>%fWv#}uE;h*&R&!AI zP^AUU9@8}%`M6$l3N`8msz|$zEYMGDCB#m>Qa5(BIY24pDCe=cfGBUF0$GD6(@TdXvLFaEEz>@|iqW zf48PCT~~b~+#97gR4J@9!*)s0X^sPpu4qU+UuU@5}H*Eh`gRR~i z-1cH9ccWQSrQLOqpv9@x-cpSu()(IaEB~5~pI5I6a*Ayms)8q#8lrUGe&cup zpEr=0URe!81t~P*b^(S>a2?wH;=)YB*~Q(9s~Hv`iCU%i!DR?3o2?8`h0LE4D*U>& z<6Uqx*;9jgs;MliYLi0@b9A3x4lz4rnBA&(@De}^waJ$u;zb}s_Y31CF24}ZiGR=s z3Fe6PsUIWWEyLs^K83b>jADSQm%-0HqZH0Uc8!iru!pes5H>kRSah8MQCW5(IQ&B7 z4)VVv$C&eyhjIT=QDiKrur-yg+e6?|RGUkUrN-Hawg^KR3Ek(>=86Q6-_`AJ$J+!W^112` z^O2w*khQuG7mgZ;p(^w4>_bN#p^~233i_H4j)o>^o2Y&8WM)$LeVrr4v4%y zmM)~?6SAvP>A4o}bL)t^lbb?yQ(RSO&I#=a!+G52u=ztUW-~*kbnZKr({1w$)+Z!% zV#F3M5aZ5&_M~aUWgAMLf~AAz>hDYONU1#C%YMKejHhu}<&Y;HWE|-tA>jvTW(Qb> zUqy5QEBk@3V~N*R@u_(W|1bq_?#1%y1BRya73$3YniUNeL2U(;+YBV85v>3BfrAP7 z@^6Zi8}Wd0BNwp#8ZGe{eBy zMYz8qhrjH@ry0b+(U0F!RPX`nr)py0jejtQKO(0G0Ygc!t5H9ef|91*cmN`(2_hDf zW^vYL}2#;DwR1MA+|OqD@om7pSZgn_UEKTM0xKZ?!;AdS=Fc&2{bHMnmey9rn)pg zU)~SN16;eR28WZPxjk&kS~JtmJc7^;d0F*F` zzQMv~kySkX!ITTh6pK8XN>*c<>nP1iZzkH$0xp zi*yA2ZUN#SDhBQnQH1q~>toZrfWdvmZFN-?z_?|hHqo6LeB*ikr;qZV=%|wHibnxN z#wXxjrTMG6{(quF$k5r+SjgGpzcIF070rKnE2n|xaFvOB%{ygQb4Xfp3@18$BNRC4 zSA;C_by~DVHaQ>LDY%_N*lYg`3?~vKsu08v8qm=C|J6RMO)EcRg|5Mazbi& zGBn_B5@ia*aq6a=rnMwfC1F4c52CazL)%hw5bxIw&Qke^NAYZ@E~VTHb9XI2MJgPS4#+z9qK4o85W=>6>}R29}?&4pSmQ zffBZZ=bt$FihXG;Hb`@XI%Vwv6pX6>P?ecutQk_E?ObN7*5-YS3xfGA$kv(Nd>ooL z^J3pkC4WE2!P-r9keJ5|^Vgj`yP7)ZPn|xLutV;0unASh+R9cSe~aQ{V82b;ephnD zNzLWqGp208DXffAknZ!2lQMcrF+7<8FjOh#C^BGlg4PgZj6RIZ~771 zOMbG!h?}dKDAl&>VUv^HW!;`+AYME=tM6ItKRb@B!_G#|KNF|IX2o?l+N(}mi$!C9 zD8*4B%Lx=W?{5CExSaCJ-K2&+G~D`h0*lYP2)N2?XYkO0*X2`4bSWUrcGk)Jq&+jB zaK|m~trlLY2tS4430V!Nb$kD7ZS zd&hfaN1`QtXl<~keutajGCHkSV6!057SDNTB0It;p7) z6mn&s7d|biUUg@kUv;x3Qrr-+uMGVd55*JC8z8yL0dH)74e49=2%~= zGJ<87%P6CWVg~Qa9p}8)oOJJ*kLOpwu}i@>aUwDVL0_adWCD9whw*5#H3~wAFXch9 z-xz{~#YCjXgLGDbXe<;n=@DhlgclEaqcZ>lg~GJKKxrryMnE5$0dNDEV;QHVWwo>& zv1OgLWu7e_NlV zF|?IWeVdp|Q@n7t2%Fj43l+J~az&O_B9D47FpBm+V9dqITvKw2zBUd%gM|}$*PnY| z4v5QUW^no{Z(qKY;~-V($zmONEFo#b?8$s)BUZ(rddOF9bbSQvw&kF4R5#>Ast5Lc zu6B>CqoQO0n|3V=pEg~7fEuhhg85EyV1B8R(5r6f#zrokq1*r;3JgZ01X;ZsCTzv& zYdNd&b$ZLBn;tV$a%e2v7Xk{*g9+ePtU1{{cokP(Y=wr9RiQ4$YxGIv9ZHXQG_ZF} zgA>~3(NmAGGZX+cSdIOVi3nZ=zNNlCR%BC6ZW$3ZY}Vdl8T}Q_r!OnWHN*ml>P(hu z^vmo`NttykSy%xb>4>41cC$@&5q13Jo{Oom=2;8^+-z8;{twNTB0>2X5-NBFgk`K> z$8Cn|TN05-&}sm)>AcBGu`I(AFT!g z5P9FSXiVrT<|n{VWW6w^ziwZUe#uko6Dy)55CF zo8wzkkJ$Z+_X{BOUs1^4a0kcQ%eZjB74QlZrp*IUk&A#vh}Zv$$I5*og)5}DDXtr> zB;wl^5k`cKF!v24-TB)Gq8<}FO2&h?$gY6mUElGL8;&n&`1X$(QES}@4lT9qPMA7f zfRG5XrE4DxI4JU-TTs-APq>9P%vG`PtmGa%uN`pf0t$~QdM0!O`5VlKF2oqcs>1k| zp3^xDK|jBW$fzC^@`wV|0eL{S+IpZ!RGV8+JK?u)t%?b&`>+3SRs3_8pHspj4@Qngu{N=@b9Wyf_j31hW!Xyc|VyNpoMF2 zpDyNZ2eW><*(9F#7j&p`(-3IYrmNx`!X~y}gnPFhJJ2wUl|b3vQgQa6^cYBBETX)C)f%;qd`%4o)Q#w&m?Ff|Xv-JzSLbFY3c6tKSg6LmI+fQkKQ!ZJ8;s85 zyLBe{Db7P_NBO_9gFUj;5S1E&Nn>9g1_p&=(-BT5_-yjgq=3vezlkm1TsXqOS}*2N z`8A^?rP_KP<^+jv8AogLtz3i3qwy>%h(sECR&6+L&DqILBbS@i%hfZ)#%bk7LcbBc zJSQ>?&5A`ZJ1@##%sreiEpzH7vzboGUUNnZlINiHlx4nSkR63sUdqPl{8DD3TF0(i zP>!5;BP~H3Mdk&`y~4(T)X(XM8kl6}kR-P?DKYU8bg4tqD$Nnt6=h}zWiGu!>@j-l zu`o|LDA|Ux9DM^9yhP6Y?b0Hzfh$mzez%sMylbg@VHE6KLU-WRXfh#kCP*;v9g#ug zyZD~?`BIWPSuBNvQ6Z@aa$$!w4i)9a%8bJB zO-YD_gfs;On57Yw(`bm&ns*xz6JP&>clBqFQUabDXMoho20X<6g&2vt8QO?CIsL`D z3RRJI-c-TljUq@wBehN8gDe!Jq#up5E(k>)l`SL;4KT)+1EG{3PP1igB{3zTsqJ{j2&Rw=hwer$)@r@#gKksctmrkzYr7@Mhu54F0C)BkR_foCT* zqqY6L+wXe8b+;y2o%Bj;sAU6(X@qz8mZqE#7yHP-N<&0(5XM7sBrS{!8(U9MZJ@ol zzPEAFhUx1x1(w;aK@6#IaA;XfS{PehlVLbit1$}{G5MBYpq}BiBMuncZ<~C2EK{qd zLmTc(-qDjb*JR34DCw#&uo>zbC9%Xig}7UqvVf!!V}xCyIGJa)lLBTIm$}q^3lF$@ zYlr=L4pp^~WrnPtP1X*z-U~L&1$Uq5*){!vN#qd^DQfp=IRQ4sx0Fzi%YGR)5xW{@ zWX)FCD2_$wjb#8tq#p`du+ zBU93fSqYxR5=wlz9zm7p`1>U6J{XZhePfQGK}ZOQ?-?l4G$@Ns#Hp|g-@~_vNgf*S zxEHeJzn)D1VY$H-z%x`?H*$)R`|_~K&sz%Um+F?>M?yam)bO6-w-5sF4Jy&bjAIzhjYfNqtI6WtZmOk?S!Ca!aC6f}^?t(;Y@Zo)sx` zrIRxe0q;aWWgz|ZlIW}OSjqFF6S^m>i`s%Aaz9Y0dolPCDB*kNzY%wFdR*KJ<9Im> z$}rq)@B$w(X8v$j86cgtu|d~*4B^o#MVv!N3KM_5MZbn?_5@6enu7!@Px{!%fP1Vc zM;Z=3F2*CqRz$eKJNx-EEB_2>L>a~*(}Way`s#)}E+*lW#Lr0Nmn$-LGx-eoDo*hr zMIp}ajM+Hg)G4MR5eH`fbff=s^|qWd(oO@U7Dxfi$G@&#Q4heuXJ=^hzZ1j&JL63? zMBY{UK-wKdhQKsXWE&`{&2N@bix7xeb4KApU%_6GH5iEo+)OhCUi^Cf1pNei$e3+$ zC%%>DGc6JeC^X z+%dc1iN^47k9ChmqS@~VaUV!v98LPkpw@uh-{}$WdL{i7pwE|5aPx}2StAY5cA!3Jx3EZpd7k`=_62y#&QrAG|#`Ttg5e=!$1&rH`jy#G( z8QN?t?FL%nY)RbTLwgEh-*Xvk8$Emrf~sxeJq3tMbQfrZwV5e>cpln3;(q+vDC@B! zS5w2p%G=Rg{oR^4i4K|-wT>;Wiyw!%lvSy9LkMGotzXMdHW8OGWAjrsP!OS<+A+K# zig2F`%3V^QomE<1eF!W(Yx%IOHsyEAw$HNM-mO0~gQ-<$5Cm!5u?d~+7K2Om9&Ssb z=juhQj+VjLB(*RZ4323w6Nz$Y&SOB$is=DH@3sd>bfBuA`V`D|M8#bj*xQ$!mO_?Moh4N=RQhfDNECr4Whnie)i|kBL%V33W z?aN&IW!%jH$tJyIB6x2GamvElEO2LmBL7n+8F%hPa!7sbq^##mV>ON+IZ=FkhI1Wq zh{yRlVP0mYq4UV-A+7Xh^|T|G8n+;iC1k4NkC4mMJ}`urya9ed@LHRKO_@a1}{roSGiN2s|(vW2-^ZH0t zU-L#eG3LeO-LO^s1W)p+{l3t5{7O!Vj%QW`?N5bBK)s(scp^*Af_p_QA()d&eC-4# zWtltrf<2jraWXrOu#kV*b=I}(x>Hs`8p8R-6#vOt1DN;MrYi(1V!WNAo$!;4*NqqO3xSyf;NC_| zbhLLWjb#q6^Jj%miY3>yVCsb`=$-yA>w;ca%0|QiNkHK{ymx9Mh^s)~=|4Tz@+YR| zP5-jcrhp{(7kJ_lT>nVTh05VE{C$6Wpw0=)(h&H@`~P;P|7V9}E{qGl^|K2k`H@@y zZ&T3!+5R~?oBezXN&i=5m6MmV`5DUlC0p)G%vm#B)bj_u< zL#^4JCY%i?@AebyCLmjYM8h=Qn{Q8bdvFuP{|Y~0-7UrW|B zfgYC-q|!m%fsStC#@)9}oxXjOM?AVo`ro8Vz5h}`{_{o-7eLfketrn!-2bmv|G(bI z|7ahz-cX)8!?!O}(sw>d2EJnrD2J+jq|v@YkWfnSk~yHbzMvaYj-1HD{;jEFNs0e( zn@cx24(a6z6zj0H3%JZ6K%f*QWf;~|ic^GTWD3L5($ew-16ba-0cKb)J>TDx>051G zEKM%g7ZbAqcdN<26m9N13(&5WZ|uQ(_ke?*+xxv5HD{=k^;`cd-_e*!jn2d6!-jyQ z3gEBZklPSkNW4Cxq8TV(R4}Fn^O^oB<$ZKSGu-Wx+3O!2p`iuz=k!cW_Nv~pp#_xg zpHue~?$@h*#6>$aqWf3xUaR`b4DZmquq$*I?-F3$qpnaD^I|>yGszIu) zq8d>|i3Y*2!-yeO5$DiHLJouZaZ0{JVQ_>|*O7dMl|?)8(mO{PD-}g5r#r?li^Xb) zb->W~`KT%NpQETUCHf=~lXvVIGi9!#sOTD3WsCp-9knbTwbVycxz>tG!Ff1@j$2Iz{Gq3%Ut3bdtk0m zDel2xUT6gEDbTBokx+RapEx zG{tBLhN@E?wu@BQe(JfM9tt`sSbTB$nuilr%Z)S$EJF2^^(ll{K zLbdVwcH7JumW$ZT$^M@kQ&F_@%26Lxr&btzvwvRuxN14o(f6L$a8;{g;c!*PC<#1j z^TQ^&+4lC{s`J&+zp2@i6PlE}Hp#B-F=?;9B!g^yVnPHVh zPv(|v(6o0XweX6dX>iRG)u|7&Rkf=lt#r%@S%sF>9Usv|w+kV0bj}SY%R8Y+Ov-F_ z*FS+sAWXp_ z6`Ai`5@irleKaIcqKmnXqVLmHj{G4?nlsq~$1)d6KoqYG{Vns!#7AU>He3wS zAn#`u>C{;aDevb)IghM0--s-<)CN9Cmv{poI)GRV#)DE=+pJ;K&Cyw_mVgk7;uH$i zuSwfptjw%E&R)rCJHS(RsY(DpqQy7UikB!_p9krNY!f4#sAvo&+{>Ub)qOO^)4?y{ zR9u34N!zqSyn0@&M=A~Y9?i|XNct(Nk?lL4bQt6H@f!Jc$d;X;qoMob7{zDKOWneb zBVR9((V3}6k_{*5^z(9G@NP7e_G^;xs{YF`_NBeY!_(WNS2(tOg8o-Zc=|5xF1BIr z2mV}qMTQf5il8!Mq0~GkjxLM9c_v${e8dr>h zK@&-01$uoAx_EYz{{!LKX2bvBo^;&n`?PrpzN4!iivh$fBd~f9VvZo(N%tR)4HxiD_f>stH3gs{Q-+ z1T#{yj;)f1We71I=d#}`?v%J0E}J76oJ%6xsmWTc%L%!eEEoztj~T>TgmOXP_bOug z+srSD#z)uPk_*G*1IZCiJln86%RkjEc`BS?k<|hjCw2*Ukb4;ocoDXfjH0%@c&3Gz zPBJ6qTXdVm@_4iwCMkHJMhlctacEYR`}ioGRG3gtj4z$x#;~^@R4`Z=weJ5*GHD;+>r_ zWy%nr&8)#pOMT#zf+h?^Q5vH~exK&{dWrmsTIF_`5*A7dGonHi=T*$3y>~<1ZaGyk z+=F+BOG9n9@}Lgzk}j+b%-o2l(xpns#Bd9^se+S__8^gfpGLD099G*tNRDc@oR}qS z`a$ajvCi;9w%f>XialO2-m0kU$SrL8zQAypTTeI)r>30SvzK#JUbVsV8)LZoej7I3 zXnwJa`62y=gsHq#X|5kbL*(i8iX(rXtiL=V_S3;n1`KsGtF75K{a#tLSM`|MN@LKK zy}PJ`PlduWd6B-l3MD4IUV)E@RRE+Xo0A}E2iC$6V~oBZ43bpAFjzZv7wqlW zHcL+$4voE~63;uT`aP#CPD*@$BYd9Z*CfEM5%m!}qLV`{iJ7a|y#*XOo|%ngN#gx2 zIFbJP)VqCWqs~DAv#R#8l&REXe3Bhl9b#;`C53>MDVQ}cr_k)L3n9An#n=sPO{r{O zyVjDiRGk^?ZM)|{;8d(^a+qOFM2!!9o&+M-OpOsl`kmS7Y3y|MLKD+p9$9U|eVyW5 zA$@y_D%@!DX7W7L2uXRVrJKM(NR_|3gP!jXq7KcI*(Y(Q8{M5@!gYA!>*m(xZ&N6G zWW3jLqA1(;`cR&7LUQo2Al}A07PLPxsx1&scc@`ep4z-7+^{P^p2%o&un6*f|Xl=Gf;p~SI0%VETN^L9>hz8btT_!DC-I**#V#%l@{d_lCDStjWd zD3Far$nz%3dfb^tL7wp-50GBTNN`zqtmzzWgzuHmf9tM}Qgyb&ZGWD96DQqW!F)rCzBOJXDdjTD17lSCJ-aEmkISMB zUcFeOs}{QHxNnoyWL%EXS=wp8B+jtVDo^>-i=4|}wrx3{?&=UI2N%g}fX4|_eZtJD z%4vX|sKS(a+X;J|8Ud`zJo?4v0CTI&{%E^4lEC~B4DI=4j`rIhoxvDR6n~`NlE{4P zeT)4Ha({Y#QvVE5or?PW&**D%NvTh=88MvU$t+JX+|ra}6C42Bgy%8m^~GhBSX(0a z+SS7ET258>{rD1+#g6K|~!p+U5q3dclpe=*wVl@2eEjqw%bOn#AU zG4ZoD+!%Q1TN^kxWGUY1j9#RK-<6~uiH4k)0Vro@-8RIz{Xu!#p&nxEYgA1d_H%5v zSssOZJi(^RYeLK1CkZPz{fOj8GLpU!@YXApDqP*-<(lt7e#&A#6)hTKOgl1w*9hj+z| zG?}MHws3juZO{vjRU(#*4`+g}xa9N^AG@>qa9Gw0PsI0-VyHF5R(1KkbTiNHR=d)m zy!?~#GOe61>7+-)=R=meKgUD@`F-q1ndESz(d$vdu+A8XBnKgU)bmPlB}(uj2iv2bkN!1arcaLO%OLr2wd zI@ik4cG2e96KQUw#*G;Z1Fm0T2f6e9{O+fobw>b0!u}H0?i{@uVmd4gN&Vt8ct!Bp zuH9@Fp5Jc3ZO_UBM$_?8PQ)fDw2i!L?SC1RYyqqruJC0=Q(0>q+08Rr@0>{w-dHwT zQ2fTWZ2UWe66RuMqo$P>f;^_=6!Trh4dz~mcP%wi38Sad18t#7&vz|rW-(e4smjBH z7%+8|*}{8{l=KWn)sdok)$k45QsHtZYsp6-3P-7?HQ7l!=^jMia$SV0JM|Kjw$%bF zE z{$(b$d2%>p=(U@5%bWV_4B&RuYJ@hB0fZBe2sJ83L=2sJkxE^|TXFgiZfgndy~ol4 zn#4WyDJOUbmnMEk+0I97Oy}#FJ^{3>@wQq$Nxj3a&NsE(29epOYSDA|nfyk&a1u?f zPm~#tnP&~r<|f5q>SYs6;yvcPM?|z^#rI7DTd~NgxlF@mZtL1g4*jy3xj&* zSV^DS!e6LFA#{h;5wShs&I_8XS&Y`?)81JnNWCepa1Zlg=5?>i)=L(}1X1@ct77^R zKe$uiVpD*JqyTcAot38j-<|R+k65|ogLD!J3rz&&-HrFs_QRe>uN^vQ6YgF&$pl7y zCfFScFf5w8O^)=-57}7-3T8!V06ZCin`a#*PpK4pk<*s1zZ73-h7p}Z;8nYq(70|M z&oYTkr?Or~vF>(WB{sTKHu`vA`C)sD?$M-P>IsuxID5ysps5b+YW_X+o0Wg5GCC_s z^4LR!8KcI_+4+6dU&0y*Z_H&Zf>l%w6}_+oW<`EWF>hg+XN#s};Y@)vU;)7AqMFPK zeXWC5PjCP@cIm)?DC>c<=LaR*5q2rlIrn({Mt51myst8o!mwgao%5%!16$sMXXnzG zP{YHy##6s>Vbdr@QCxZ3yxNCLD9$Y6jqpKBq5M9YqB8X3zb}5nGZR03JhUW|S~eRV zuU7x~a%ja6=&O>nugP_YOyiea->s{Jp|72_mnehj9u;q}emyg+w;o>~!(c^$I zw-G=uRnlF$J+T^sV?52?^P(XsHk8t*c>1jVtBu0hB~!6&%ARsonv+(Fbdli@rIT{V zqMPqx6B&`m=~jP`V-efq9283dR%-|x%`ImR)ZuQw)(Oba+AqR61bKg#Vh4&H4^so0 z_v)9w3ErvKK#ln!6w)~z&Y#5oj3xLlMhfv5hJsHpWZPmN&Xg+{2gqyr!Q~VFl_eA} zcuC$oy?@62J1)QsOb`8OZdv#5T}Oh%9+m>DEBHdhBl>|3Dt4|3f`NN4e^L6s11Wxz z>|Ru01Fry4;)2`toYiyxI`~+EC>S$v`4#}Vuz0lN+mD2vdeOZC_~+TM~Xly zW5x&l3hY`wgBzHIJA4=Oxk0L;hO$QSkrX#QG;@&ACLtxF)QYt<6O&kOS0s&Bpi!d&qJy9H%fw%l~k9=0(d+rMn zMgb@a9nu-uOC^&lrjX0VzH4|y8j5!~_~bux4vv|jV&GM~9!4mSMC)7fpLQk3!*QlS zt#YY8P?_Q8@_V9Q z4t?p28dV6S>}DPMANOLO8SOzaX^ZqH*cZk1fR_J8j`(--(|gn{#igEtph@zMzTLsK zktH_h(ufMloNWBcg6@I-wDFSa65=6g4%Q!^3k9KbdCR9&1QDA@#%8#I#=yY?NK{W; zh5oEu#+d_7Sev9j?23ZsExew1UVldOLYp@6KE(Q+(Yc(Fmy@l*_of4LyZeIqMuS@j z^Po7H(`FCMB&;(9I4(ko5&Au?MoDdPL$f{aQAf%)=}dsgOgduHQ)3U=+vM3@Jtzt- zC}drp?+8gDN=g27m@wF41v?%PA|}$sk<6_y0VB;|&J&%aS5>q7X6e3s9A%LXJt+>c z4PY}n@X!Ws7-8hly@xo~UF?JrKA#ZZH(hc&^1ae!yK`y9gWQ@vbR9fV6toPsVjxQt ztnx9!>hL@X86!$Aie~#^wz8=SK$I>?8gB5|s@X}cHpp|sW1Q-;nHB+)-UA5 zytQ0}n6@Le7Yu%e5xwjaJuT!i_FsP~Bh%}0Kps%4_vD1ejA@cMGQD4v5Ve=gw|dTv zq)82wD&MBV51N5n7v?LkA4;_cchX>}xTqo5^}y7z_0(~}uCPzS9@jV-q=%l{R8dCu zApcPz-4V>=vIDih_*3J8qE$Y@ID@$98~J&S{=|IOtMfEidy(j~*9uWEbNxl_Gd(`k zf63E--UjJQcj(=$R@!_k22Q{e_c^3|=Argl8neShdBj@o*ej38He`i-)#!Mg7E5Eg z?C__itIx*n(I%{zWMFK=7cC}aYyV-Jnh{R;BlQCPJwV=$>FT$#lO4~~355 zun1sipY#3*RPGGa~;h_=SB!@;_eDD;c*c z8mI^f!VKdtszEC1Eromi=C{}e6c|3x9X?db2UPOCHIm&s)JE;Rd(@+%AMoYh4cN8W z9audCD@$Vwsc%B|HH%c7)K75jUDAgT{dlexX+2yli^UDn?0kwv^zi)Pg{9*o8+1rJyClH1*uqQ$JSl+0G67eq6GjC5C zGH^o2@vRaxD87q=2~#pMXq?&X0bB~D=M-N;eL3Pj)1#}`I>URh@Sgq@D#zHPE0rPW z8aWFs#R6_bsd;GWy9Mf9*L|Ok5$`DMLFO8g*CJ;%OS z6ob-T4R$DWG9h5!ihPyU0Ty+MLRDwuuPhDjaXsTI11$p9aQiMn{giUYHma+?T2yr? z@!rx%Rg%+@1hT(Y#wdUox^ySuI)IY z{P-@5S%&dpMwQVE+-(cSc5{mNFg{8(Lzr8)7fmHADZ^g;m42@o($*A2)FaQ83b5A; zf|cxr^?I__oisvLW4eru2#G_3TCLxTPE}-?@3km1QTh;It*hPf!%u}RLJLK0>)Nr0 zAXtEOFCl{Tm6$thXXXxkw-<*wGs7Z@J6vJJ!-K<&{N{O~9Ol?TB;a3-(D=+NCd=BI zAnOaipZFtE58_AVxM^W#%8NzkpbUNTjX#{z8%CXawVl)p4aSmlm;}L`-h740PNmVz zE4d~xjL|sd@gk~jW>A9opa!;Y{2rp0QB2H@yK5yb&~IE2llKhW>Dicu z5Z<}IRU_xpY;c=KTD9pk>oT0{-jkPUUevE#c?Tecn=X%?e zL;yti{^1rAIESWZJxdDfeKdH)bU~)@Rs_sH@JAav>RNzHS zSn4xMY?N~{Mod8UDM(X$nr36sncp3g686poSfYt80{fi$Egi+#(!bJ z4aAN-@JL{xTbR|SprRNxc5je;YdS2@bD&ft8x&V1X&N7PR^OZ{xl0>cA#bT$_l8%6 zZnhPULkKod>Pood=Dwj>i7LKYxVm_S%8v4T_+X_aPCxZ$lTPtd(hc4YYW5&>n`sgW z;4=(DeFULQ&WZfCc*zGD7Klv--`iwiMq^x46g*=(Ord?09p}E1^peZ01}t!`DC4uV z{X!q-XaM`8-#Gxh8n05CW6+NyD^!-@e8;5vmE*c`w`In;wXhoJse&I@g6hq(opjw$ zJEnY6`??ZS%Q3QXQ(fk;oPB;jUZj6u`S8}Ez^8}}auDZ?DE)Z{W>#pxUq~x$Q3Fg2 z7$15;7@nG@k=rNxV$Mkng&7BUaHQ=qb(M>v<$6f27J2P_-W{WcWm9| z^W4a*tY?~^bbSs6cHxZYa*uUC5jkQ;P1p}5ynfZ~uc+i{(65ZYZ#n#4fjek8+8!Vx z6I!(``1r4Q?f*DLILJ$f|HIRi{9M>Sm$8c_!+%Wz|I0-7{|il%_#c{Pw)-c)E4WCN z@Kjqh#b9WRFl-J}HA^EYGy67m#j@{HCr~OkkFr1io3Xy!)QxX@l?2TZ%y39=ToSIvr1rAjrCeedKMF zCd#AmjBI0jDYr@sdmT>$U!f@o^k^vAT@k4((#S8#g@n<9o2ZPW3^S&DX*aPcJ(z0r zW!NF?=_-31$+`>9gq)8ajq2kSzVb$&kQTntEi<|Wdn`t2*e7>5%F~y+ed|$xn*Rk`n9ox`P8m zD$A+AkY}xW6PoHiU9CrmqpB*j{q+0%%5KU*YNxwyWt~PA-Cm&`>_1S}4ey)5Kt-t( zZ~Q&{eheTG$xJP#sR((RQ|zZ+!mRVKk@I-27w<^`IT3! z_(w8u3IdCD1LWwaJ)pzRW6{Q1MlzN?1Kk5F?PWJ{CG|3I;OMY9C})R<@6WhxwR-XY zZfPyv7i|#SUBl9IT_5%D6X_SvJj&wVY{>N>GPr! zoCUzi0p;iiE#Yl@i_a}L&OWYI-*vUQcn)ze`!a^jb$s{{A-A85bgI?Em)g146f-rH zK7+VB*JfXy#=h6OzltL-`kr+|uIoedCJQt^j=}qz7_|jckbXBN7_QDDQV|fnftm}% zuCbCB*X$sD{0(Fb2`d=;q-^ z@bOuVM_ztq}9zYv#aFA&7B1LC9L zf2=!(3%5W^z6lo8yqB84q~QZ!z(wZ5Zhk=p`=(ky>u+Dg^$Nzu=5q^fUhQt0W4uq^ z_KKjm&EBim^FaU{da36uGAL!vk@RnVj+m>de$i4OTib0;bQgaoyBJSlM7SX`lC;#1 z*Sz_IFFvMJbR&(+Y}Fn3_`f0y%3)W#FJf9>L2vmVd5BtM&M-d_SOknxRRJ>Pmb%Ds zVlL~jYGu<}2IgtZG6@Oa{8TP|qb$wEmImJe|1YlhpLN;ySXvP9)2^O_`d{nvCk#Qv z(&%SdI-42U{jb+R{o6%F3r(QjYg}ew<*DU&S`s>RwTxGayU|*tqI)5jJ4hJyPBU0b z{kV;kRB}eiR%7QFb*KM#V<&Z|JxtL&TV271t3<{jhDCtpH*A3Gq7&{YmIbQ7@%D2P zyPcrL$6lV#HP>;T%hjvU&<8yeyEfgQ-1R;E)eg)r z=ne)(H+I|p5&hM$J(IgW*nR?%I#$aHD_&nfAp~!yYyzK=>Gcp+2-D2RKOxR>_Mlc2 zTmPmLur?P?D1_F<1ePia=4Vl%kM7j@k$AG2$(X26L%L8Q&XSK$$HbCn8@Oo}D zqhz@u;wyx)**k_{T7`jZmZeE+Z%LQ?eczIDvHwt@P>m9}1#=X;PJ~po8Q{Zcc27I1Uz^qiFU8J8p4qK&{BFd!<7cGBS9sh9?+vM)6n@B1j1syOE-Kc!fCA zSjDYEs_0f-5tD9l*bmcBn`#E6Jifo7REmCCg=u$H^Wn!q$IoGdj@0XfVcf~DDM6}I z>JmxN1i6LT*NB89Dvk>x8tu6E~|JJPe()3Z6M>&VM>ZEj@PS7JO%Y>yUStV{m;VEY2^p zaOIYqZ3hnJv!FKz%uYI6RT(CjHl5bUi%B?9P&g??sEuCt4%NKLFy`gO_ zpTgTDB-a9dvEUjzW;uy;b1NLXzA@%5oHB~JVw>J5mF1ZYK*pW92Fnw-FU4a!o|((A zhIva4bzSIAO|0rMnHHfA@bT=a}I z$qgOH4>e@gXwu-u0xL2PM5+P&bWCQc$CfZzANUU!=GNuql)>AdKo@704C<1y_QyGG z##bIkAjaxk7Q?=CnFw4jKo;WUQLlekNSKCWH&I;{GZVNzMsvL+r?Ra;j`3`@a@C-y*~Y7=Og%lX{gM^$nK3Fal$8i=&87 zlFWPvjAp&@iM5>2y+v!!8?gF{iO^tcf<}w~v0TJ}`)kRH8aGljui7m$F^0Ufg>n1( z`-XS|2GK1plP`mqpdno8p6-tI-RdImS=0-QS4-L zo91&=43M3c=i&(zUPUA9H@U70y)$0?JD9ZhTC%W*(*GQ+xv-V``-y?V93i zG&qhMh_G~XKhx5xN{uvo7{79w({dsbn8o`!s*%#At!Wo)dRR0keV-~q{hIj8TvTam zIi;@kG97d+PIYSKhv@iJS@Q)PF%ov^+_TFCV!lpu9qo1uC)x?250!4gU-+hHbaH;u z3LUJ$6i)b^5^oi>smH5Vo&nfY12Ku$YovAVDPmSTYGDBQcKmsBBAN$d>yqkEZ}4wz zn4w{S7an-}ITWw7QhmV97h|Od^J|8;icv_BKZ*w0kwIfo+M1KggYEuyHWNq1n3J%h?idv-xcF zw3OM?j!~V9AhsI;UY7WU2O>r$;7(VH^%XFN$zpvG1_$fGT2-`LcIFUO1MP~miudF2 zkLa;(h{6*s+@&|Whrlzc0~D%QEcXas7uE>9ayqbn@l@S+vwCi6+Fovtsfk}r!ja^; zpZ}!nu{^A3pr0Gko>N8TThmT%)9jqLM$YYPWSVocr6K6|;V`D**?Ok>9Fa;Nh_{NL z5p&-k>N36ycuOy8sg1(u=SFkxY}}}cPe$4`mS;zEDFck<>7PTZR2&Vh+H4^Y@wWqOCCp+ z*8xmgJ<7QkkR7%Imd7Ku%MICk>Ctp8_G(3W&?>b$bS48BJ4WmOHmioaWq2gqX_c<6 zImm3@8tVsG^#JL9XaM{|w_!GGE4q0Uv@&h&bf(f9Z>ch?1<@HDd4;F#0yz(>mB{xl zr+Ftg+bH)PcWfE7h>wxL_}2X-%%M)hs&x&25}y_{?ZCEMZNGd#Iq0?c3u@ z+pmA^L(*@nl{K56PorblQ?>?X7c;ogm0&!*(*y8>P@5yqqCEMK@+peEi2W5v6$|t> z4TO7c93y#@2umL0qt;e%5?&6gNKi3x;9p6CZ1l!1!>Eisg4fa0hzm|}&sq()>tj4PW?jhE?GCgGYOY_yYXoR&L?YOPXK z19GF4I)*S%REY#P?O>x*#@5VCk|9E^20|@dEuS$$Lv5)?!-Q}tT$zOOrJm2~dynmR z@YkF|zJ>XdAr{Khede=Y{&yk*rLn6$rhSCE* z9RV5H&rUAN;w)umQ@fwU{DdYr_=&edzLEnGUUwwK@=~6vLlR`ZvLo>3e-Q|dk5Gv5 zO<cIB4_WoJ8rpn`{(`i2QWx|l?KvHeX$Jo%=5A-))q9# zcn>r4`vJu0rrp2^l4CNODSw8%6{KIXLM=#Xn?93&hOqlM#PTtkNQySr$!~_@GAF>; z2gPeqGd%-C_&`aC@|Gii%%KqD5xF+`5YM+U5|FV_6nB!@n_A7+2eT3Z)s_N;1#g11 z*gLbKg21035pTsHA|$d71;d&OjDp|w! zkdPw@Rw~-%g_+|sLL1VVQcu(-r7Tz8kDk&TBcRPGw_0!Qg%lSvAl;%DY^U=kqV?+T zW0}QEXDM7|`Gj>iD&`YCQhjKJ(3s1ebL_HpPbH&cL3kKP`~w%Yh3SvK(|Lq#{CMj7 zX6|89xH^X;SVmx!l|4M<1yw4h5pcM?i3=?*Q0-WNO3a!nOHLi$BI~igG`*D~m3JB`e98n#V=ORR)M+#^##f1A>lahLJ zj2_BW%4&6ne}S@6aO%|R4lIwV`Z1d*RNsb_D4CcYV4~j2f$a>miTO(OYvrii=<$~C zdig2@YX7J^uzZzRTT!8T(`l7ELspL2xy(f>S$km(rOf+&9k))o=)rth9RPJYJsg!> z*ehi;UxNQ*47U9z`XSk$aEk(jqjejY{VQG{OyKYl1N8&eLQ=y(d-@0&g*qR4tFc^b zW%d>ZD0|Y8j%$6+PHVlniVMiKvYE}6aKzG#HkZjIHysi$b+$OzU|$TZcOa&jX==lv zlw8H#I$C{UEb^r#cxSf_+CO3k;APzKJ6M2FBBQO+d|jO_bs{uZy1l_2k6NgPhE z1yDz)Hk6O{0T!Tk!{PpU{Spxzux|jIVjq#c#Qd9KZwJ)W$RUC?20ji#QE#SuP?ms$ zOKhv13wV5~H$7Yx?p(D#g$w1;x?!EWdCXfXp1tGl!BhO5jiy>Bj9bP$3wK1d(?zjO zIV-UoCVR$-}h%A^DDH2IH@+5b=GdmLqnk8S^^BvwZVppt?weife`z6K z2@f@nsdCR64^L5OK?*fk#`W&%oC-V?+qQ@^omaCy3rab})Y4RrfmgJG0#>K-p06Bg zB*8FX99F0FA4}k#qNBy<8_3PIc(#PSPH6VJ5gY&J#4D3aNb(HoEFWHRD-4!htao=9 z>3JO_{7#`W7ae0D`6ww^5P4De78sq6@%E0Lznr+{>T#&tiUxvJ=EB*xz_lmwZja@c zeYiAxfSi|@I9WmZd}DrtTU;=^Iw`N-JY}md@7g>)HTHOOil|TPAtjd-i5ABwhW;?L zg=7%c90^Y}Tp|XhaSZr@mtNd|*Zz8>o5HBm7Ib@A09y?8pc90ZKqutWLhTqtQIawR zd6bKn3=|6mTV!t2-Dl^$f}c&ioWkRZcr#m!15FiMtZ#2bO519Yc6Y{WTsmxoBhzxh zYh)8!TLxq8Yy{o`pkhq+i2imAwHQ<=epCACqnoEVYH-Rc2W~nk(l4uLPmsHXMDYSm z|Kr8q6MK|sW{agYB-UT+1-z`)#hD<3KHoX8ztq&8CU$D0IZ%3kD~X>@Cq$Rty_srT zP$%1Hj*g_z=mfQ)fzuW2NkS$wxyppx?To~u0U06V$W|wWQko-wDjX1YgK2(hfOup6 zr6DxW0k9xCCno$zKN3At=z9#=mGNF8-7j%E4CnhITfa-1DuAt*~kGu=>0~HNQ(VMbroPbkSVDozZvvObIx56)Z04 z@57FOK<2>ra>tfAB3CG%2Dx?_Peo5m4xZ1ctk?pLR*yV$%9xXm@OPLpAKrqQ{lrBZ0~n0>_gP795gX#@Zi>+=sbo0n90vbwg>-RKiwD<`;hn zgrMh6cfD?X-w{xhuLD&Xy;vq~TPbyj- zOU98nqd!-uJJ;MaWv+9;dpU& z(!)+*d0$xf`(X9pMRN2Vm%zn$z^U&x@IWPgmXrVZCHO!_?|}wnKyX_ys4&3p-JX85 zj~RB*CjQcU;OQw$EtQBEE_g9T?}x*);mW{9dvgp7t>#P(ftQMBre zil&8ZGl}9ZO;+WN&Wz@oUBuGfKcA@k2$gK`Hzj(L5cA-0M{K?w)H`MBJ@o{?w9SK} zR6CxgZ5_lJ(4eNAW)&rG$Ej-L0u7f~_y02WsiUW}`4OQu=GcE;`H&Ro~~0>@@3|oJ3*P@nSo4 zm0jgtgyakDVm>}-MqSeD_#vnMHW<=qqv{B3Xgv(n(vu=wot|;zy8rYhC_OvnK2c)a zkfWIa2ZYIZDf98)E>`BZ}L+ulfQxhjEu_QIxH29(X~(3=t?){ ztX-@l`~(+0GRAWE83n#-@^U?s?Md_U!D6?l@D(wH^6(jzID{n(0T-HIq)<;9AQpfJ z!V@#=_y{}FkHzVS7b|{-DZNlJXlwYAFc;@Y%&j~MvtzQ`#V8{x(RE~U=|zkCg*4bH z&sqf__qV>&3jIDWW)eEUj`J$=*-Lq0W%P#*(XA27v)2~n7gK1G&$^QHFN}|wH4Ifi zg6D&F*R+Rm2}^2WG>JMXJ&A$Sl@~Rzej5dHErrX4Dge!l?AZ*}hx%A5b11E8RVfQj z$@l`n=3l!3P;~9OI)J=DrOS+GXt)w_3Xv9KD{>&!<}7<4up9N!v8v&mTjC(@wX~EZ=cJn$Jv!g8s)O zU=~P_?u+ObLcb61M{Gp?{S6EreBb-WIY@4}!QBlFzJG1M1L%i31fIO*4G$i9-#f7X z?5x1ejl}l7hwSS!?}x}Q^*({S&HR_gS>BIi@Ne9}fS>@h8wYN_Z@ypTzJ$91pdS=X zFAU^w4nW_mt zl_E+Vg(Fy;lKRH6<&iK=#Z|!M0S&O_5SGud%9s|+1S-3buCqUv zOy3~z>`^`qXx`v#WM3-qIcObnyY{HdEpLzwXdRm7?BvfA3;5$?A*YZ&7*<vs13K8gRPYR9HN^PqIbK001oG|$Su$+4%^0pV7ruFGy`E|Q+$ z2pYF;Xpb92vvD4;IyJ*=K^eoYK6vtLR7@1lmOee;18#StV5?-{F0B_fZrlOX*%B~w z&?n1wok2eAE3|fnQJY(CJox=l*6utnKiyq8UGLDEUhhj3_rO;qhy=evs&3NyVtF!|1~xqM=lL5Tk_`3i0XLMHg&S( zLaqubVau(c?63}`)bKe+x60Zb5@fGuv&_rZxD}_K%C;iyrlht?Mwb^k(*(EiuZcT; zxHX8WK^Uf?}~)@Sb3rqshl#ipLgYq8eV(3U0i_&d;0As+c&NIRO^(M_;UBD^v~KT^}XN=Kw7BJJG?Lmv8cG!oXe z$SQ{|FGf!g_a9D@;xJf>S71lHdxb|@r6b8)$X_+)Xm&Rj1$z4w!ViP8j;`Lyp>_}F zlH<3m3J24kd>g@<)q|p z3s(z+`@;)3^zq!(0e!}vvUzR=B4M)Kz<5>zDco$f?QVc~134sO!$u^8g|}h7h;`!` z$&mmy`|T1rmN1_u zn-uyRCy(uh#_~Rj8&uPXzS=Z)6*_YxixEWpsSY zy7zj9O4gVk28GFm21hTla~^!<>s;OpCev{dK*Wt`o(O1P11Zg3syUH7iq?f0zw%GB zMPjY=X^cukohEr}c8b0pfgJ73Z@(JLaM|J`k=s>z8dSN^B<2EZ5o8}G+7~v@s5518 z@WB;0-p~lR?g(P+>(F%AZj5UYP2)+z8apEC{9Ds3zlMxwTJmF+%#s{z=~f=#D{d3qg?Cj~dk(~R7mNe&%5RF!$r@G!}k#m2pi zXaz&cruq%$KLpn-yFNF5Ao+bHDOUi#Em!0lDfsRv%5_xQf3n==&mHh#=9<_T|gj$RX$^^ zsBm6n%~Y9O`LpiJOiO3E?HNq&PcF__wX2B=t_|=rv(PZZ5oJ}hqeJ(o4G#c5&2dnP zBN*IFFxXAQ97_VJBncg_{RiI#*S00>m=TwxOJJPR*qju=jA^c=x%sZsM_SO%$n|ej zuYam3%psYL&}5OdhhqsIWi~c8a3A#Xn4A+qKV22z{s_GeebqP6E3q7GzVm(QHxS@G zu>!0&Xdg%`oXWmWS+XN%XEUZ4@I2^R+G1j4K8?qynekG`$EI?@W*kU`;MO$S#jTTd zW5{Ljd2}&h?c)h4P)fLD&wu#FQ+bz%J#lsh|-KhD- z-TAl!P@Sj~r0LiSfrImg>O`Fpykya#)Xl7gXoi|#Vy4XVht!DR?cfYJZbn~FKz0PF z3s^`yip{24!h#(3Ho%{DdBA&O1jvMWa`wk9vuWGM>*_3pCmuJPD;1A(p`zD6)a94b zYlOL4wvSTu@Y#H4`||f@xt;l) zbzfvY&=7jrZ#Z6bKrr^8Kmsg!zw{sJpK9&1LJ4H(ty(Fo_8V-t8Y?950n({4WF|r- z(yyA>lQgk&<91MQ104}ozAlVhp}@2jxE~Ob;q{tWXHB` z+qP}nwrwXnwr%b>J2rQA_;Sv@_nmX^d-dv7^;|Wpx~qGRp1o@I8si)PPk}wxN6k^T zIl88@p-|Nu^6ed8d;#{9z6_&=y3-@o+zAK$Lc9$j+}%vV zPb#mYjc<)DPc}Pmm-S6ecrK7lx$v$UE~EL;c5CJZEAaG}V|3Til5=hdq({%D80nI6 z^KE0uA#pfO!l1n;7dK!;E+$C3CKB9Y$3I+LRYezg4;3oM)kBNe5IWcT;Lu&q7hu(K z|G-GCZn=c=yXW;`Q|{rq->-A;x#u9ihkq9-PAMvrn>OscU#v7()^jwp&Nes9_62(E zbl^W5=vg@lDnIA)?M_1`r{zM~Z3zsYoE=3OnQiDDdVPoSRMRjR1@`gT(XVWM%$O%? z@{Da8lak7%^QzdS)5oMf*Pp&j8Tp>8sD&&r(?<{AB)Ao&(s^F0L5_^NZk(xhqa3x` zB!qOI*)vj@bTaYkpQ=2aTYGC58b9Dx>GbH0T{PFbD!1z#R8D=+;O?;`{#?pXOUs;e z7hP+erjdN=O3ujauN{# z2~t5c3rw=Zmm$z~>;+DQc!%7Sw2F)2i20aia7KtZm%ZZ?M)v+!L9n)%lb(03 z0xNXMV~Ih=0xKkPKoW$ZBkB{rAN6<;8dNhd$pMa1&-j66U%rTq<>q29T*(U_8FubR zjRA`=!xLb6mKU(^fY$R??V03~gMOFUOQP@$kTLX5!wozuvqv<0e28|3G!yfgHVtVh z9&=>y-iJSM`h}FS0@I8e(F~P$*31Y$fU9knnPl=>g6mH(ox+@l(a!_zY`H^yBHNdu zPoYWYq>*>r06SY8hy^Dg(a7%mQ|dvsFG%VDe&WM9=cD{rmz0hI=AHN4A_MWO0T6wP zWlgTZY#C+%7%kElB;xp@iKa+4 zv*d`2*MdXcCf0fc;aVI6X{UMkL9DrlYm(bUh(aUGS<=o@x+|t^biB=@V23nfdT+#I z^JZS|_+>M1T(!sJ#c$6(muN4?V%vC85X8ur?TBR=+IAmAA|0(e zfkc%#Dhx^BmUCmCB#7PKb6_~AaITh_+lh0C{rCYU)ObXREDUjHWqiK~mO0l*W(ZvB zMgzTr8#vBA>iB9dT7I^*tLg1tD5qN6l{5vDM`FtjmW_YYF@WWHFvw72VGu>Q!4WZw zSZnsuGAV@Y;8Y$Lg4&1LXh@108@z+Nl<7rBUnm2NuwLvcXSNfJqQ=JQwJFKApJeTsnW}5Il6TED$FXJnMXCq`WHu8>8Rc@~^c_MH zOhT2;AvXJ%7ZiEgWOG_(PL)F;aXTF(48a8A`%K8AeYlh#DP|V>(OcyYy|z5O(6%ub zR9c&K>A)*Fi0lh*NB7%=S5r!L29)SX zUUQSmCQA7M$-nKrdz&UHWomVlss?Gr2QIc7W35gBEgPL2-L%>6{LS^o&*ms^ZWCqX zFtaf{X~wWzxDKT&WZBi{e5%# z>;3cHw-l#`jLOTo{hIcN-hi*$0Nmt~H-Kev>w$_gw}Ljd23y;Tkp z{|t_m#fiB`G|e+-=xMWEmz%TNOtReSL=!{>@kP_4`n}ybO&Mpd=q>t+==fr#x-RxR zuDWXOuzI49@a^Bvt)kb^ts<-QN#jz(=0{AdFqXnat28PY)8cMcgzRh+mwPc!`UlX=nq0^5OVWBh z51z`#?ODsNfa~*gc#K(euQw;se(&+~fqD*a;NtmEqzxAEn`d5_9$I`GyE`N1==sbX zTrTpU&IrviITr{mp0aqz>TEp6A&2?aS@lwcjv)UTwU}pw!8OS(M~-Fb`aq1m1eg?a z?+J3AU((IO4(<9y-Qtm{&+Y2?VD#H|*ae9)IUyJOVqQC<>_cN`7Sn^F?c*~(KBVwU zg8p!N>K%S@omaB(@^yFtZ&L7;hc>&^U|-b`q8%c-JLn3s~}4+7uSHb&x8D2un}zg}3u z{$rn7cVFcQ|MA)ZsRd3z-x1VHj(*}FO!o07^{I=lSCA>}_(YX3s3?cBiG z{^?OL&^^4hy!XCX^jqa5X1M!t8C4A25H9~8_%wfeOsg3tHwXqvFh^BGl)Ravq?Mi( z5(x-I(8OUTL`kkQa&)wEG!_=DlXHOB#T$ibDS0{r(`_O4(CB#oc>gc}IEE$$ zb{dw35FG>};kOZBqLHbg*%A2PP=J4gadTobT=gBo^Y{2hIRA-<|0|6Dxq3Y}a5^{e z?-=mKz~S?!50aLdMo^TM1f+r(wJDoj+p)b6_m_(P&Tlau&@GI!GS102FLrMNjm~qm=T*B{*Ty#WB$fke#7Eq z9RCtd{by_r|63Kdl?%$_JJ)%#HT}CsMh_Vil0m>lAkD-q>4$U*s3N2`11KpZ_*U2i zs2Dl3quC&Ft;Wcvl{I^pKx>z*wJnZC=KMjB+Q8aDi*qbjyFz3#6Kl@+8khW8g>Np6EieD~1&0%fKkF+s=)WkZ2 z`>vO7ZMXVziQE}$-7Q|^!n&i0ZdPx3`78!R$aZ3Hj_Uv1t-bxd0NKL*eT-P_myqq9 zG1$ZRj_8-s$2T}5?s;I0_Tu;+68GotZ8FC&&If8R|IEzCmQR=>!Cw6w)1NuVhd}6e z9{A?va8{m!V7Tr9dWSDjF`h|gPdsrKp3!`LqrLPF&bs|zzKnQ;zqf`yAw(1z@5MEp zV=oufG|z`yJOe|?d={h1TznHB>K&d@+4YVOu4+&0F7IXWul9})jNty-V>hQSEH}Tq zruV#I-+SZu=kLN{eZm6yjSl9TD*dOE-a|}ZDTn;Z_UEwfVF*5vAFw|sA=(b=JyH7h z>vyeQauDpsb{V@)Sl@dPuKWG)zWP6GW%j_xzr^i6hqGUq{d>k|q_=pA52v_3L(M;{ z_IF+0xuYKu>^>)EsAC@K%O0o@zG@HsH6#vh_3`wV?po*q%)ritPK#tP@bNu;i*zhn zR8CC{6$@bq5U5-YPm7}Xt6dd~qa8aj>tXun$WM)m=&W2BBPl4Xji4n-f%zC!We&|c z>CSx)a2@HC5twFSWv7>iJv%c-iZ`+{iX%I+D%M0mf_lx)%1W;;(&_~&&bHFF7q-x@ z;@uHMjPKY&?p4ylAwOp?io1$tCM>MHo!#k@C2UVN0xih%CW%xoqs)*OY$rU>3s;A6 zr^%9Ls*5-9IKxnyRte^=B>o_a$rkw&=1z=w|4Lr4Nn49)CcG$a%w4#Gz2_dci5hb{ zlgS3D=iS~VkVQk%ZoBdlB9UkXJDU}Cj>Hr?3XojcibOK5vo59#GSSf4d1$(fbA!mx zP(5-ZZNfS5b=)+JN&8E>BL=)!!Y*2pp-S_e(_qG{>~&G^Om7&Ktg%ZX#4?B6KaafB z>Tm|#60(voA)`Q+hBkuY+$l7O>}QgQiBn<2NM+)PHLy!h@IkKR#r`FTiK5YP{b)dr zej{Vze5b-QWMp>O;YQIM`9!vb%|_(0IU}oa3O3vNR9fRX(tbr&fpUSPGosT-fle?^ zwn&Lw;p0f0I!-H?p~^pbB()v05pu3u`#Y|?BIJ0Ze#PRVEF1M|J+g6o@W)OC9%@p^ z@?ps9!j1t-!h;{N!U3HrORPg7jCO&S{IvTKo0$vPLT*R$&pMR~rE}E6ZwAK@)y(ndEW5lM{ZQp~J0l5kTZ1KPWJ|w_B$w1NWh`f*S-2f#)oi4c)n(mSu2KKI z70k`g)@885gX5uMK%R8en{LpE zXt5`*(#9*(O%HpsqsbNDrTyVhsD@DPVqORwWHVdEC~k)yy=!#55eV#@W~s*@Ff+m< z+47k>H2Kg-nWYR-{lX!leA;xeFQOOp?44mMaNU~5rjA7AQK#F`(`cGEomgFLE*k#Q zp0(OeTMSJ-Hmr>srgAQ+0=)g8&w0+lT81nMtQh6qiJNxRXgk5V$$HRDRX*e58_9vW1lBU zirV`ZL?TGr#D=R$M0<3#<=jgcJM7XzsVvo=%1n*eLdk_VU2_srx|kz%wp@@xoMF&e z1TVmy!Gzgt7DX~VD3rPuxewDIYB__$xei}q=(1i2A|(a5(W+EFM%;d;E|c1Izc1?L z{+=kAz+)NFw9=X6g0@M>&-L}}rsv8~F;h23tM(S=$(Fk|O3q<6+hfQ>^DF7h;4$Pz zITty{uwI2K(J&*a8>ZKT{FZcv*3z|O3g=P%xcPF)*XficZCQD=18ounz3>dRd zKIHMDVC9a15ZcT@uS_R@MrurOBg=-JeBDGq-yk)rLh*DZq#SnboN2JHNH+Suic;8! z9JT>VTZd0;ru5-z0TFRgVm3Jl_nzwUUj&d(sCrBexN;m0ta8jE%^drF_I+*ecVIuu z{ZMS#$801y)|%RFW47&9@&nCBdhWBv;h+)3tgf! z5>8BZh6rZZMuirIb?psSiC+>n@=wXG+QE=PM}3HTM~C65h*Mx|h#v<09j?L-m9bOM z1Ts%m2mNNlq_F1qWpEMEu#FNe*dCm6tRmSOGJ5=4OJVIAG>i?%a3H-?T~$<4y^eG=I0@Dr%d5QcUb9YijABXD1OojVIIY3y361fqGOM^O8%3#9{Z0GF2VFmZ?l6I0Ns7i?W(qvY|H zd05RcmAsB^nDszw)RyHtUEe}fhoT75i@?t?%!XvFJOcYdgy0RTcvJKd> z-0ChYZv=Mljt(TEJtbkA2m@4#DqQLd>17f{%YvKhb3YN{HbvCA+L9D6fAOu{ta`(O6?#RU z!QCqkf(9oUR1?{WS?vtpIYhUw^p}2b8-K&OnzK-Ki#-w3ZSYgc2RJaq#fq~ONZ>$# zextANfY(E9WZ+@YlNn3KS*oBPjEU(m_~OXizNIWK!>}#x_jcp49?X={W!vatuTOJ! zgayXs$Z+PbG?Y_zWutDP?uss0?EQ_=I?Eu$yRV?^rFD>eLmJL%)!*R4K_3Prq7lKJQ1tk zn+U(fQylt8-E*fHI0wz7beF(a~cZ^I>&Tqx7C=ew7?#`Bk{u+gd|`qP2!5 z9>UR|Vhiq(B69~95FP2^IJ_4Bto|Y$j!Ih@X&$#aJ#8QTv3^I04 zwrVoAF5jTzbPH3h?aRO86GJkS7!Z?@8sAzv0_JF9$u|6!#PkfTvYP&X>~IFHnkp7Nve2v)ujokB7|zhW#y$inLbS6e3H$eOR( zT};(?5^ZVQMS+lG>XGXr&ZM1Gwb8q=(F)9qN_N5`MPNGM(kwho;V-D$P8uk&_x zq;C)@fXQ_sSguxelxfP;yIx}3pjR;W>}u0(u+o_SO(E-&m4Kg(J3p%K>&vs!(VwB7 zZnS7x8s``zrEcKUHb>mFGv$UHMMqC!`lKy(A*Pi4yNo@QtN^YbTE1tk00Y$P1{|=* z4%qP5jy;p3f4iC78Ny)ZEVItM^sjg|SNS4Y;io>^8g$p_Ry>Q>KXhBF6oN;)C=GT9?Usp~G-cJdIXxLw30is~kvHaK-KB{k%t-$LECinscl;#RAIjV?q%7 zfuQPHfghM9PTJEa0jKy}!e2F;3P6EU6YIf;HZ}nr&D_E|ydlHHq#Jz+AG9Fk(Nmmyx4Jp%{v)~i-nXa9%Ae=8^E3S?m!*c~ z(e5ol+fg!Y?FWWlb175$+QR)r*(!PSYFQ4ct#W#JKLb2&e3U6gn^P2`*@@9VAa4y8I8^%Ic@z`&&cBX~1b4($<#K zG}M?~(`Z-=#R&+(VqZX8(%z7HLFe<18G>y2o~S{I%9jXU@n1Y_UO%Q|%v-%cc9I_M>$2cm(;y}#BW@ib zpF&7DfLX9MWJc|HWQ^DcgxV#lhASEBZ9lOl{aU*dlNsW;iRVioCAthat)P9;iJCdf zGu~FG@Pm%`5fSbkJ|T4qXd*i=qC98O9-`D$3hXb@9%|8G#0&~Mgl?y@wHhTl{0<#0 zi12jV-5{%o_vr^jAw4xj2x=k2<@!Wsm&CTZh*5E)acG%THEPF6$Im7!`#J@VjgqC* z4~rST2vzPUMTHsK?m$~wye74}g&FveZu@PR}rCep1N%e288r zUfttJhs-vTjTi6B%B!SdnTWv-=5Cr#+E1`S`wU^;*FPAB@Y8GIEtq}|kd{aC`{4td zh94^JX_Ht#A_?tV+9XFUOV14Al?iQ8#&87LvTGjte7{f9F!=o=s}}NrRU-&BMb?gF zz$$MiOEgVe19PYvl2nXrzeH6uw@O(Rl7N~O$`4yYdsPvw%bJjd$_I|k=@=TU9&%Pe zlvm(h6EbYt$Xe`H3O}J*4ww{IExdJsKB1efPmk5x+aI%PHOSU#fa=1QpJ+Je8LuQm zu*PDTfNjG@v(u#@G&#g;x-BCJp#;sbuxgXSR&uhZL31U~D|hP?bJSCUT$pdbD!e#t zZoV{fZYZ#ZeBVEV0A-URpg`)xNuBFOWaIRBan!i7z+N!7T}cq4j_ZFVnwOZIk`~Pj zc9sOyLoQ^5P`Tx>DF`^Xds_AS5e2MQ?{AD>S0M5WvtWLMg=)#DhiL`ZMq%0>NLOi7 zHOpRjpNV^b&fFy=cXL|H@fXY%vp*^?HtHYaKJ7$RGp>4xV%q%uxWs2Nvg@x4qn#oqof^6mUPapbsU z2qQJ;5<`nh2qYU767Gs{2wP+8GAWXcQu`dzwD?E!xQ?ti>0C`E_wWjWV`tS$aEVM- zXDk^f6uagx2GtyR4}ws1u4G_6xgae8<|Q0FVeEXJXi73Ki!J3*$cL`K9$qg*?VYOB z)(hbVLITw*AV;lSWDnMz2&d!4;gq^!z?+QiKTC^#3i)9AgeWr35$zWmL7j2;JBt77ASj(ek);gx#%l8{5p7;HOhKo=xx5_V}@phGU$<0;|Bv=GGOo5tf?e3TjfAUoGzifWL$OwR-S0YPNoD1*j$lxh|2nh@S%Z7Te7EM^eeyQAJleNxM2gNd#^OEkes&(+7 zDZE34qhsE{zM6iI8|nyX_ZH~pOzVcX9HeYXHCs*`yJMlsAXj_^=z?kt;CEHm6>EVDD+peGFi6lk`hEa6V+Y;5uj`gIk=EjKd z{OGO=xbD`W$!|8)Wnk0>A2+Q=PrjkjbZ3jA z!(=}r=qq1eDU^mQG(SaTk+L&)M-g>xZ;lV0OhZI?CI04mBzN`XTcv8&lK$x!nK&b4 zj7LpE+0`Ha*f0pk4#$x+%n6bo#J)BuBhJ?@L1&(J={a7&8bCQH==$X{d>@dWbM3Ot zTi!Q0JQMJ-Czv5~ofYmaL#iKv_h`q4l*D)<4C7;vf=@@pThM8l^<)XQM1t*IOZBGo zwyIM9ZrI6%%GE*K&2FP-u-YVwE?$FdOG&3(U8nM=K+cuu&|87SXgipAl~+Qyx6|Y2 zLYA$|v{t(FvE^SY?m8u%<0@qb>_VT4)4f+j;X$|7p!ech-QtXN+}uAo;Rxxg%y`eq zL*5ZUhdXwee@Q&Cz>?(>^ThXxg&DdGh9qse;~9ZxZvTwQl4MC&v@Cq&V*=NI@uA#G zg2QqGB-}B-%5edHzwZ1uff31+=a?Pg^vc+nC9&o)28$i|ZC{v0e+|gJYDep`xplNe z#b4-_P)~u32s(ui>yY^N36kd>!e(5mLDj-W(vjEo!slAy|#XzoEBEe#oh>A;rB2 zm}kU@iQxMQ@Dwnx|GHKwXBgvVB*1#kXNXkWOI<%K8WX3@)3!m=tx{k`uFEBj*1O{8>Y|qX7IhFoc}cBe|5kHuyL)6g9??5))w_JOgQzt%RfTm(<}%)0=5YQN>TC|8X$kJ{Q^O(s}C8E*KP_bn*TK0haL zc`x8fykOfImCy3Zs+1C#F1&s}>K@tyI&bgu>))y_|FGw96mwTy{;sz0e;bzkZvflg z>+sW?kh12H&wN*2*a6sD5cSNwON0HDam*g_WJMp#{9HfQ?s`y<-3Ntw&$w6zd{afp-VNuhR zgPD3Cwht3GC)wa$T5nJj>V#D0)e+xb%0qha7xGTxZCwZq@=o$?ZwLaZ&*>N{U(zk( znD5}Z@@U8SxX1}JJs-y2oaw!o4tIu>HSjkbd9K+?S$jTF=C>qqHo>;f1>{!4|X9-NjE&lgtRt?6aR<*2BRwWsYaGx7_{h1>zML#Rc zvZ$#no4ag2_{oB=O<$O`N*yX*pr4HKl{7y!XomE&m5dxAj|g+elk)H2yT%5vMI<9(Eh0O*-G|cgyTV zdm5`U7O>99=xnpqW+yoi_taMBiup%nq>a`^sbA|Z_p(dpuFBz|TDodFY3^L+Ca5dQ zwr_sogjJZQUjMaId;FR{K5O>MV@SZMv1^I%RLY4qHUby^wv~V*&xinUYZP=!-Pb^M3o&;Mw{C|qbzH>gn2Iq$I#CWh5bG3??y{(4Ui9~Cm{>j1EoJ4i zj75H=6HIVMwC=}!k%q`VYHo?{`XE5XqF5$|N9F;~B|nuUHs!IXrup}wsY|B8;}UL5 z+Cx*F%5x-!aYFt9P#+S)bADobElLdHWrjMeITDDaAMOZE5c38nf~klMbGBoO$B3N# zD0YO;^OmL*&q;Yo8H{iexuX+^YX4!$Sv5{A)G%#rTq1~wz8C$&?*K!Q3hghS+DxI9 z=*|LJZ&dJgWc%^m@HUx$+f{u9sZOL!bPK^6D^*{>c~?~1*vhpP5=^_ExSP9xjh{m} zB$u>P2Ta6gToww9LeYbUEPnhUT)Xj%iQ;NPmUw~rBrWLH$aLlif3E2QF}cx_hB|O* zjVrSHpn9XVE|M}TFfj>Y!TB)d#g#xHNU)m$H3qu*ok{iB$^q@3OFwsPK{BFC`n-)R z1aEUiPnbewdfSl|ofv9^acD9#+jMaqY9N)YXJ|m1o!Q-a6c>&y2RU@xWnodPV`E*bu?7vZNQu(T-Nhd(vtNx`gFq9nuXkr%aQK-)2C6 ziYD2LSTqEPszR<-W-6Mt^>pK?ki1+4>(^BvmPX=PEB)OCFcxTC@qF3pdynn1UGgl2X^o-)Ro-BMyNq8D>-a9cVPB3QmV zYqGx;RED0AUvu`gPkd;o((OMnC{B+`p+3;)E~;4%t(>oD2{oqFdjlcr7ByRCRUvV5 z+`gpmp3$?lT8O_N6Qc=>frA%BnCt0TB|6I)IXYS~k^~E=8EF>z$rSJe9Ay_ zpb&?GR;G{87Bx+wWqdhX?D&$#$?ony@b8lzwb3eQn#hCVk_Dn3y@qfPK6J`t=7*+9 zKc=W+-&8-u>rA>6Ub#P+$k{J_tVJN}NIKtx!i70HdJ{eg2OtJR6q3Q#%g;5WWNee5*|S+g|+#Q*x#2ZlE%< zn(zH*XWK;60ID!VK?ngyNK#11LMl~3h&~!R!~`nP1V!mb5phJ1dobA4Qfom_QVllR z6Xo;sBkx6Xo4NOE-WBWLV|MrF>#gmM?2((wU4ncMf92~;X7kw`PGvW@he!E8{34K8 z`;VnbEMtP{hlcEM1d?P`hl>3-i9WD5`0mxgxZwbK!oMZjGj2R!9@w`sQHPpshn!;% zbYn1f2d>?xPTe6z{($bBbB~cb@!`+kZr$e|aE)uqD>`F1dynKs_CTLGRp{J1VwZU7 zhq~#9yzCQB-T4PEfc@}*cqLqdat=PhM`iZ26AvWVPhh`%AU=6VpM5uEL1L-!3ZMpQQbHa^b)~OqEltif|vC^cA4LWimfJdNLn%W_m z84hX`0IfWcsfA=@tgF?SoioQJf)k!|M`s(9tphti=hhvV6B!^GPz(?UAqOb~lmV9k zm4TSGw-|4kAVl3TM$Lhy0L*~QK#l>&z*0aDfCnHL3r5>QY3<+S?wG*zZkEzpCi#gP z&>F{!X;VS`jFOJud-emGlNZ~ZpRy7G{thEM?j)7jQa zSGyz&&mR!k=4SKMsg@>%w?5fbJ;4Q7WkDoYN-hM^)vn6wfnG&x;aRYEws^67f^pVc zz>Qm$tXRm>*(yi<#9E-G+*BKP0@kw=z8qG;=7wraM*4NVDCd}r02}Gv-jZu~-CC$Ap%g5d{SHO5BGdv5N6Z@MpA{T}O!GUiNxIZ)?8h`;p2c!et4(q_V2i>0< zVAgNfuNqJdwAS8Yy&Ywy(gWdux98Ol7k~rQ2eJj)j)e%k1>BD2kS*P{U0b3!q_Ehc zNM~EGeP+hc4dPHP-8EHfvgaE1bFTEtow}#+u4`LL-{g7a+R+kXOUl1kM!ITI-x@3= zu^XfDO=t7Nj_enqg|uo@D+Ho9;%$O7_ou4v2NM+@cO#~{s3-3_y9hTFOav4dnocL3H2Koy|+{=$q`c?04CH|SpbX(r~y*}UInTGTmaz! zRsygE5EWo5Kx{ylL9hX_0p$JU{bv2>fShtaV8E<0KN8@iG9Pvwo&&4_qyYucRykyQ zUJfJ&kpmPkx4h5%)C_c+$>mc9pIbSKz0z9 zuGOM0ilw`Os!MNnrcHhnGGBD*z43KmPakw2c5UZNH-g7N={pBy)SZ9s%Fs3pwWRtm zCf-h!At+FpC?Pf9>>m==Hc8BRe)1&||?T+WitE%ciXW6JKTuW9H zc5_~ntf}%^>Vj2*G?eS85)t0I^(a_Ji$_DEq~s7>%QJFlyJb;fH;sn+F9TAG2W(9t zb0{i(R$Ft`1}CPhssvP2$mQwGY04j_1cJW>8?_42+$|wl=wd88(t3>6m9S-MYYSqp zt$x_)=@M#4F{7uhtuAcEZNxA-jRtdU7i4Ma{z60?=URr43Q~UA3wPc8)W@oP-A6ni=_%0VWsyM|n{S)`|jF#jx%% zIQH6#n#NAa3_bO(z|2(AMrlb|-Ot_ysrHtd-YOf}R!L25d9Vl*Ax~A)6;%pQi#m5F zU*8QiYxEUKSxr`36;0WKM5tX(^5~xqcWN%>*;!J`zVi|;Ir{pl!dSM@w~xQGSXEPH zTV>%&TQFP2K%J|wVMWs$>?*6v&Bj99rS&()A=>g}uw2DPGHia&l#-C!#7*}jgFS2d2-8ku=XHWW6}Xy9kG zttRy_DCnZoyPt?&RIRdUWysZ47(lnM7}YN)pEdYmI z8R;!JM*JdX4imSuJ@lyx=ujOX-+aI;SHdvvgtD@Gu*Sh&Q?o_lbODadSO5z{B*|D~ zI8E9s+jO!k!{fwCjd6-8!(gp7wOq@gva&W^X$hljZCwd$D#%6H4O?ZQ1~IAVSk~ zVS|Kr$w@Kvl+`&_3(T*?Xww=xs~Z313akrG9I7g-OllqMlABspRfP~auxu5YG=8!? zTME7~NJ3k+!H_jtSAH9`sEu&N8XZrPu(n`IMb}qS7u*$sS=NuzIu#1nC21v49Gwj- zM|A3>-NdHRSJ%fWu@hIZD<5HTZeA}Kc`AZtBs;Ffjp(&pC|9tdniho)d6D9OH zs0tQh#imS{Kb2x<7Q+;`{53A#Fdh}tj6rUK2~9E%dG|@~_DI3P)5eX3?uL0N+7Mm1 z46;ZyE>?=iLy1L)M1!sgUHuKSEJVA&7Ket-Or>S0n4+6lN$z4v%8X5mXLlc|Sdor67!Gs}_xAqZZ@nF%hXq*|<1*MGL`DQ84mQ z$!r3=Yhcs7ej@r!(-BW0>S0C7pK^#D-)|tJt{{_Vp(b<^6Qw2CxGq1afbQ$0sN!o3 z>KPgpbw5oW?TgV$1#?lcjUkRkid`vz>k47S9*-`oFkeo_zey5gB^n$xegC%_bT^N} zW4?P~5EE@$aGVZROvQ27DM~h+Zj~I?Y#?5Q);dL@eqC*WVK@zvDIVDb-CL{WuCa(H z^C3lmMvcm&uv;-GNYopNwm{>w*(mXwON?-?ESPRI;s$-7jLM1+E#{yBJBtp9L+r>d zql{@~JW!!~=~X1JJuNHhp`>$@`85%ZEi9O#VqsI*FpkIx`Alemz+C4ngr++$Uqt++7sG$M&Gp_7PPT4p4;dw&(^tMkrHwE*hJOXSJP9qA<2${stS7;H{Pp- zD|1m(KAI=)4X+meS4^{&JaHed&d`qHsuIrq-i4jxrTjMw`t$lFmn+7) zuhRG*2(MH4tOa#z%EmGhq{-l*N&Rjd`{#ib=v$A9*I1`553ic(kB!K-oBll~yE*AS2$vs!dTBVAAp*G5% z=JpBvu1@@u`Pm_^D;D`g|47gKsy?r~RzYL)1$lUT>aSYK_$R7YYh8rBjJ3#%TU=i* z9Qo{YKWQ|#-*XvcUK|8Xur?T1zq%PUX<))M+!;yD(cA^UHMD85uP}D$3;cz$m*Cez@t5$|Lh091>DN^0*RRqq3MqR|%EyX7 zg>aLQ@t?_`Vd6amLbjoxzlJA^#Y6C)e7bpo)SNKYoQO|}C-reF+VUI}L7b4|y^<=% zC{-C*&L<2y@Eo8GAPgw>RQl=qEd!Q-%pWCA?rCLSIV&UC-53y- zc6sFB=H&Ly(Q|DcDNkWrsexK%#<4{etBH?YqIvaCKr&%nT{TmDn9!1Lt_q3`l=`jM zg_CZIwZmLxJ%!CXOE=51y!GAG{MSy)7UeyZd3ytnzRNp@cW)Q0oES2}5K=*$m)>RMY{&1*#XA8>^a4bd=*Vsb=Z?=KFHzl%xOHOS zxlb`GhnL~Vy2VP6uG>NQ(?xn)8wANKR}%05&yqtEiU#~A(Z_xPj`sBVy#f%|}X zfPFg`Y(cj}Iq(vKuESS=(tz3sMDi25VeG;8+Xn0c*#RzrCZ-~`q1GV`9u5eQenq$G zgTRCEL3BfVfY>_&ih)GOy-^w+BYJ|@7Xl^%T*ti;8oh@3gltd@aQ0At`vQC5O*{ap z6aJ;>*9X!E?gjXOzrgG%3sA~9;O`le@`L&SJP2;-_H6s}f$V|wK)l%r(I)JXaG)wg z@9hJ=0KMY)-zk{>KEM~iCme$p0G;G7E(5{=L>GWDk2H@r50?Nh0pbGg0_^eK76t;y z41g8D2tb%em`78990!I4g9U;Gh6VWzJPNo6N(O)hKm{Ou>pOl1^akt%g4)prvH4r-1*H+m_*wiUIQj#JgEXv;geytj< zO+ne!e$Ym>>%=S1<~uA38k3MQ#S!J=AJ(1vLCGiwX7sZN+7bMg(L=Z;W`6VT#icI$ za#aMjz821!vbi*4J<7vqcdGBfYho2i-~x7OXa>g+$~);ar}+H0-*cIO&X+5WI{ zmRh6gdoB5}3TU;#HKq+WN9Y!ohEmsJX*=e;2j8;WbT7V~;4^{qTLnv55S`3%n-_yt z{N~RBYjBf$@GKQAB<+$vzh@X{HB@cSOUhwYY5H0>RpvrVI|O_VY%nXp&rs5(^cVf3 zz(FP|_-}?_bWKmk@@2Jk8B^LYf z0$uw0`Wt%`XUvwSst(G3mwOXJK+V4@+s4MFgGl6Bs-pSXo8vfZu_bq=ebK;^gZs8+ zLkNs&XK1RN04Z*jx(jvCB1>21&;)d~wupMY%ZY&+s=P&s^wC7bN@Dw>h#PH=x)8Q= z2?hggUFwe~cmQ;@Sivh8i50$NIENoA6z65v?S*IiQu=%SrXARnm2CD=DPpbNG_ zZPxEkt;88X__6SP0CicgX!Ykg8GkwJhE1IHYK-8LbkobX4jzf>a1e!sC9>jTy(J@1 zf+gDy<%LjA#3KI>n-S3B)HyY`fS|uGgGR*xW2A4Dhc_(D>B}ILj7)mk$N;BQEweka zNAoXTVH;MvNXaLx!wZvkctc*@r+xnLw%Jb@uWiO-gTj|4wLNnptzhd6#EhT>AacWD z1%FLTw%Q)c7Bz?M;S~%@$OlPr*wr_O=EP(xNeYrwsntv62Zzw%jPEcgF^nQ$Za?x< zoEgC7se$GT@f8HMHN~C+0jy2_a{VQ-aIq15;(A(TYIE%wGMgn-Yr#LUx5c`A^{=`Z zfJ$p(b8qbib1vDb1+$@LVG>%V%s^*$V5(r!rnV$fFmD!;pCH2H1F!S@?y#oMDOFSa zQfnrth_d5)zi&xF5ub%-p8Sc)jS_xwZetflBDD32ppg4P>&|rOcvEitM@d}20tB{9 zo>D2K&>IMNwNiQEa*l}an|fBRQ@x{FTR7=DXOFxnOV2Q#EmGiC0Nv9m8P+LDD6SXY zX5Mhc(H#T2YfYf>O9#p0&PYK&SdazHLC;IDBi0kKh`rkVp~l7`Ull8J25@pN*XOmM zc5|euvB`ADw)q(B6-^|F;Jy?td*F6F;Ta@0(%3w8ld7+u&G#9LFiYMyCnhxAQ0WP# zGhn;Ss8ov~JQktXs8Ywkmj`N;QL+CnA=;}ePx(-n%=-aym@f&GMbacn?` zBz|Mhf^_Gh@vq+jR(Jqg>1AE*BT?azx9if$eKYN*W87ntwd-=S>k`IeQ~tWc?YiUf zy2I|?!zsVwr^T&D7;ZfxpIr?y^_|CE%nDN;`+WH1y+;^MeL0_905bK1$1rw%0$=TV zIO2ncICi~Eo?8?0nc+p+R;OPF!z0{WK}>WhuxoBZhV7%As5$X%Mm}brg>YyzT}{cI z!HrNcnRZNctR#MWF6(T8YAY*E8A86qzz3J|RyhcZTRaPvUO=`6%hxD-T96t`-?Gfo zJp7sX1+>?196!B28_zd>j32ELyCg(Dz&doCBbTINjJp-o4mACj@!W;|TRO&txJ_2- zkJoCKj$e_EpWfwPA>OjAEumPkSv95%)+8z`_49e0FqFzdh!mne|y zPMm6(w3eQiWnPuLr(7CCBX&|n{hirNIfOOxwCY~fCcN45ERLDDJu_h9ZfQ+c$_xF# zDVq&#is$TUYBx|?lj*?jpqm^usm{VAPFu66jg7;N&O-+Q2m0xF&ZqkMc<=`LiFoiv z`wa;UxpW2ZdHLmnHJr@J5Uhi7#=O4LFxnZ&#L>wdgoipI;>R^DnKO8( zboQk;NkPfa*_PHU+7MXBR1ktS;_?$Nz8j5c`d*rHVPl-IjZGf4A6l`DiA~%Z4D$%1OqQ0gx}l-Aa@d+5$@mT~EXB8=qnyn_}0A zbIURK_QMvwUXJMTr({5{W^MsKG49X1Fo||uTJak$Xsq1f__4ozq5K>*bziQ}TOZE0 zeq4?GIqP{-=kjJbCn6MF<@i!uvmtWlMc-8&Ehruoy~jMM+-j7f7)nvCWL{sttb}K; zSJ@n^_{n5qqgwgd{#_&|4W=~yQKgymaIAmLEcne-MHw9dXEwA~dW{5q5& znI!0J)7A3=)n5(F#PT5%V%Lf|=B)mBk99pwT-?m{ju@*C!&#{K36u<4bSSd)(-Vi&Bs>BLj=9s;t_UpIsXH77h274UIFyPkfyTeZ^C@)SeoEiTm zaDis+nmV-(W`x!<^UPTd4WJTUmk8OGKAsWi3YcnQRA_o6ekpb&(fya^g7DN}3#PwB zyEEPa<*nK3FQ4^aU#4jDD|EB|OfJeQSmU%<8s=4ft&?lVw9l+6GPwoZf)$3hT|(-F z2V^BA2-Q?u<`wSW@^*YJNm6|2b9R>o%hR%WD#K+*54j`^fh};hR#i|(FivyoRUYC$t;t8}ZuKEdE&5Vss!Froet3!zG zKK$kodgM>sw*5B4*5|H4*YRa&;oUQ`(iem?5ZLYSd7$7e64idu0R@JZ%bNKqh*Jw1 zM*VeNqG)@aNG3CJsT>?adY3Dw-^G(}*&?PunQVKeJaNe7g?Jgru2bgrtWYiz=9VN& zYwQ&Mc5>%hPqfkpt9S3gz53JI1hSg%N&+_!6$@a(cl8T5&?Y*6_88w#*q)d~q9?klS@V%XgMCfQWNQFxQNYf{ih4Nh!$gGxFW zTyNewxDHQjO(EwUAP z$F#&}o~M2Mddk=Xr%zAO4Ihsm3zEZ$M|$W!P}mI`o=?8`u0GH}ZF*W>=s+ybEehG{ z!J`$Y9>II-LhPI+&n*eLi22Esq-FM)7Z9%c(nWz=zwfh!8nZ&IkLehRoFiGp9epB# zvuPo6XAV*!;Yt>B!=Bw@@yrC#r1%IhQXGF94S(cZm#OqlA++5Rp1k0}9d<=`vmS@z zhSHnTU9-$vwo`HMA-vm%Lh<6;@9oBLXh}o}X&xbNh{lt*aYNP=WZ=b@&y;*)aVZ2E zvTkk2r*NutM4|Y`FU4WOtW*N$v-nJ4GxXCqjf-X^3S`LXnOBZ=W$#(Sa=g;8>z_!T zqSi(ReeI4J+Kp@2;AHWCu>N3I6R+9jvS~F!nNtoclGh$7Nk97`A9MN_X&Jf5BzY!5 z%9bK*L|G-aY~+rn>GX&ccT*=d*>=f(Gnp{pKLNKx)9AExLykS|U95w1Rg682q9n_* zCM%O}I!`xenaUKu6)p0X>*tv1NB?fWh%^{oA{ym)U&N8^D3N$u!`2_t?@QkB{|!gHvp;x0YTd1_&O!KJ4=}z zv{X3^igd(rYdHu~sfCJxLj0P#$* zE(6t*&e>V3sMUEHp~<$cnJ% zJIyd5ZnMkdOe6Kf@zgl)6@1B(8A`7%u;7tpjugornN6He_mkb(WjDCh^iVX$^TCX*l1E9tE*Eh7l5e zZehE5A_lcrW`JU2OYakA2U7ptomc%9=fen@ySaO$|Hyd9KHz!4o?bm*q+0TDZvNEB z_MBor-g|8GB(NrVecNhcSf%IO=w0{4WeBg`cX-B?PT=GjAlvz{M)C(9<<9Ji``v`5 z%^u?7=n2-CNVnr^n%g`9Gp&z%WBU=A}s{bHiC8ofjx^GxUY^*jWf6GAvp(l9a^6gzi@8jEqO5bkZ(yX_-ccmK2XUT|Ycngo?Y zc~Ymdk_TzmizpT0C)?sZnvOK4M!`8ss~q;Nmo<#AvG)NuEvi9_3M2*UZfo03YI(Fe zxiaOOake2c7_oG8|OJ*GI<5@S@XoaIogoXvqjZ>x4XPa?>KxH%UqE#l;-LU$;z zG9(n($inKwmP~#v7Yyt*O7CeHWbip;%ySDo-}*!MDrW%wzAQzsNToG;g^;tEy>-ev zARENFoUn`C(eM4d!ogb>!*gjz6846@@IB9*Og?l}nf3q}e=Gh#F5H{OGcT2km~^ah z32>m(KaiS0s5btkfsJVhkMzWa@D z4C)ySeym7+ppn-$7~*?xQMS0zu5{~r=2YV!= zgJOwMU#`m0#mPbYN@OIIF8uiDcJcJ1%Lg7MvL1>a8C^9U3tN`_w_KwNj}>l>2-9xm zekB;btuM5F>Bz1T&x1>c-o*9m7f08uOyr4R-h274%fu`i>t}ZlLdBa`&3cw{I>4?T zv^+Pg$bruLapR^z$F=dv=1;U9yQ_6EzUzIT>TGN8^}}P`VSRkAH|MTrJ&T$@rq|VH{%p7P+v_AU zd(_AK&1mT!M)r+fIQ)+lS6)ZFD@60=N(I@bruWRoFapOUkc=i({bqgGaz{-mr+>W_AdP9GMY6ESxWTg$|^&aczr{F8e*7mf+Nx9Bi6u z>*q|(9NHYh&)(}w83&#OOlf>9f8Y5TSNI zP=DFO-Q30-96E(;h}hwtU;ip`W>`&w2=+bOFu7d^2M1J@gbvtJ;ZJ~8 zX)XfLs-?u|jd5m9;jiY0>8 z+ZL6cuI{Pgi#|V5Sn-0&eYjfovW_2J)p<>nn{Qhab#uHu)gGY*!?}B~7}QtQTiyXP z8CWoEPw*np+CbwOJ|IB0+wAUZSvFDT57QZtdH2301;C(8*UwZG;>w`A>{7in$c|on zd4;9ujryHgW#k8L=|C0vw7LFiC&ll(4{@H&8z6+B{4#8L^FeM8q&!u+6mUS{LxI={l3L#P$J(&YqGk6g8$H>bv~WO%=^7}okYnWXNJB8Y+oFfNdl3( ztCGY^(|qyYl?-B&BcjemDd^toH8jQd1_#ToHbB3NHDsZ4`cDsm8zMzKElpF)5qTqP z?cGunsktnBk}o`S1)UB`|1Ky z4O(IEufGiyc!xOlO-$k(xF;oEo*sGkioQwSLo(M2##+>A{{@&n>S)CoG=NyYLHlB8}- zhbs{30lqkIpYI^QuDoQTld^)@BzB{z7gj!)IVWdtI7Vf{0+{k3f@=0((GCYhPNNtH zgx8an$_?+%lLgako)*Oj@Dbwrod>o0i$OQ5JjZe(xWXScL%&$rCae*{O<= zb>MI1#Gz+LxW#aymXRUxqqF~F`YVp}UirqLP0pEdZn)GN#3OXQ|1C_zd~wp|==7Pj z$CGcS^x(N0qED*lpk~BP{5A-z?-*h`%aXvZl#3sz4}+jMDDA-D``*5m_!Zj#@~^?41VED#V~wkp$MP!#)*JJ zic7g1QydYpgt6fuLVNO}Z!Ng|sf2LJ61SFi7sro)()4HG)9>xs?_qy>F=E05k~vNP zNqBZSxpg(H(5_SKm%R}TA4G@D7)Huvu;v|)A!nI@Z(-Z4otP%HP+?m@yr-OO6>d#Zk8 ze}jj47Sq%fKAzgpFdKkz^cWu(m{Qy`9#g42~Rr~SGBn!dGl}a=f1Jo&IoA)r{*`#qmIQNY#(m3odNF$9iLb-0^mn2|Dy*8Il6qf`iKq4JAQu_k(Q6twc zAR9H311EqgKs?c79Gp{7>0F z_-!zgIXo%NC7HJ#JT3H?S_^U~lABx8j+&#JNYk$-G5#O=o;x=J%s|wL+Clj6Ve0DU zUSf2IoRpI|a>XB*^@L;~h9WuWoy&&J3 zM-Npk?iVo#SQ}3DnGud|5wPCtP2yCp?z3j=P@0yWJ2ac(G4FR_<_ba0C zL-y@q*n6IpngumtdG1z_7`W9mTghxbMJ2%dhSFZLi)Co)M}FxDoN5s}>4?lKk*gIp zmza|BLm_2$P0cRqYO}_a6W($@Hce2yXldMI$wsSIyWcM|E`SuMAlW=C<%C4rr>fd@LJfmZ`iyf_3KXG2NTCICXpkYylWMnXb^MGS#vltH#_;gu>sMp+gXnH!m|4J1}iSPJ!!CEy_6^ z_L@#R_RI%^0+W1qgDtDkE|AVbhejR~6)d@LXfW3%@)e?!$Bci4j#mA>36{t3)U(?% zh4SsLTYJKPz~=i9bSShnPLXrh#*`kf7hF?2BFfn67tnc{GfJlR%272eapiL+lvsIO zh^4EUl%5#nNRP!6xiuUeN!ydi?ubW~H68zuwnvf8lZ?*qRh?a-Sb?Tc#hz2tUhHIF z1haGBvpYCNCu1sixq%9nE#FI^9E5>hjVfUDDY8IUZK(^46^YfIm zU%t+|MkOCN;p_KE<%+siWG`jbVtFJPsr%2L<1}2+cUP$Ny`un{2fM}FRjj?V-TewjY;_f}ptWZy(fa?^T;mE3z5@Ut`8lIyTVvMRee6iV`0$f?Zt zc;PBp@rq8xzn5-maup^WLN4!B*|w1)RqwIs+!TdMAc@<7C)=i>XnR*EPS15WaFA$#4C)ScXO~iFMDYB$m~;b$NOxs zEvO7~!JAWZk~0+XC0(&4qS&gi_tg6z2KNqS zbzk+7hR->w8sTfm;_znQ={|v=4@_0_V=|m39))qJiVv+?q22@j3YEmqmeesBxxg)^ z1_K9UpIGM#XHW{;g&wscKjo~fT4B`#&w-EH%SQvbYz(TszwywHWw*Y9Rn}nIMErAN zKm&Z)fGUT?QtXxxca^l;@Xo{9yMKyrxFmnZd>laB(3Eg8S~+7!dB2j7%1X5hcRJP9 zM$3Bhg8|6moF_VtG}d(9NC-V2^5Hq6r5mexilt}C!)F+6;}SeCI7$WFT?wf$a#vDb zCW$Dm(J99vsAEVcSMG<^Y{kPL_A8cTOS;SZ#kuIYfHu2wkF|uJz;&5C&RCJ7>8q;~ zG21YBjWue>VT*b`lC=5>?)5sI#+8(Qs4U1NVpJ@$)E!zhvqj)Xzp`(%q$JuPm`P7q z+X(I{&t0zS-p1GFAj=(!?cu38j1Ip^mz2m% z%OkoL%%woX67RH2078Q&ii}9p_w#=EVe1U~n^gi5&Z80XI3UWhS!#OL09;v7Qx0dj z5#G9oX+%-`3p_DbCcS%>I+WdA<_vbNcKc*nd4YmLKd#yf6iSRZrVJdE{%_9A@GG~` zLaPLo1Usz=42sqrZDQT)ZWHZCrKFxjtJjskGddT37z?ki#hh0f5?jr5s(oW#v+}?9 zh8G)*-&Svp*=l_$XJ6F{(I5JsAPOu9wWRU0CN8fyC}+jh3inNP**WB>sgoFkRFw+j zszoYIY)N+425GcRF?1)R=!TZnioXogqFQ`YDYbuT@{_n!CB#e-Jb(_FUOpa*+WU(2 zr@VaSijVn`)mZZ2sWW?F`Hq+Y!`^fnW0*@?;G3;lBLYXQ4J}J5OMA7oZmX>&70fWuYS2f-N>(nmHL16soZP+b z4i)WgR{*#(#zuKvto#ycS_y9aUiMZ#q&v}81Z{u1OiVcvg{IiS`HGzxR z8ROs%KN=<1*44Em*hZn9THBU(tU!{NtYnR+M-N?mgaxxu#hT9JpL$5z7u-ABLNIT` zTBneW3pQN~&0RfsYW<>JJ-ak6RPu)nDyZ_*RN{t>B{w3tM3mmC9 zqsq3ar_;(sG}ZX{%WF0bL4n2G^i!Vl$%y2d%PAV-VQ$#cY4)6H4GZqMOk>Bl$-5M< zH!3ZQ86U>z$E3>H^<6Ig>-D6oKMst6BOKObYjk7{TLezohA6ZLrx^i+sGLGJPEIP4 z8()`cqkas>dC0s5D(D%wTNW4*zBp5pK5EX3`4x&}l|QVCgUpQ9gg+{85hrlRA!Kwm~oDf(mJe3@Opz%qF|D%OTSxr2kxPnUa)6 zr*hVo&LPPvTKti^3UtqK$fiD9^Z#Wr0kYR)3fl2bGDl1^rS#3ATzxi7U33aomEYq| ziba@sDZPD(bkD18Y#XDBf?8P9{ujbjt+HZuNL;RFn977Hjo4F^a)LssNI^YY(!$oW zG}kBfilJxfO6O9+=wEIeOY7)e?}4VOFo6Wz3rGhmBc3)$o1AToZahI~5EOW8JoirCQQl%gt(W zdBxH!BxH~(Kop5O%Bo}yXgez>pW*r-QO(^y_Rf`bLNoPFO1EP;erpk7^4v62*eZ(A zjc+x(?(hY679gpD+3qSs-A||K3EOx!u6ZfvB9)SE8mbFgW#Cou#;ZpAwlRt*e;11h z=0gdinTh50NvNrsPN!`u;!A*oHgggmDL#mCd|aD!USH$FEP;yJR@J%EIPEt`b|a(k zJof4*AO|wKCx1UdG0^m!PvXy)C&L78nIC(e@&_5 zDi+0;f@^r^%*0R&YyQbD`~21eF@Ue;q_wcik|8Y}XHL}ZZHa*0lBez(r>XhXs%6st zTV%DVg2V^LTrks8ReUhjY`a@kTzutR{ryuq<1SXQfBD(451gja9n~dyb*U+6{a5dOjvlxI>yXfkI)Ck`6n;5`e$3Rz*;2 zs@s5_)`O7{J92S;nm^&&w(kO{|5c255;YYEMRl5?=0tcfO(gS)Z_1RuzQH6%XhHSt zh%j4p%g6UTRiMI7Xg#;)3OScvJ1{XD&rH+>V0W*Ch%KNM_^Tn_7ng8`N(UZmC068K@(q--$ z5WOh_n$DXXorE~Ii?Uu(a zuPYz+*PaaOKBCyqCsW`5pf}H7!t%e3Kp=6(HqPs+i%%PRvdufC=Z=GTN{^Yl{edAe z^oE{{^U~>hV<4u|H0JI=V2Vtwp(pFSRl43dh^us&xjO(DBV%Xi$vm%}zBT4dIKQ5L zY39j2&z-(C3Zg4@W9|+Ef|Wipb;kh(OT*H)ra@q(NK8KAz%RRSgO}g)!|8leAh=R_ zCf*4UWvM)~&)2=SOrFsT&pc*&&j^UDl%Clq1XwAfZ}h@7&z{~h3ZgBwWA+IHcFJrU zz3|N=rTdP6NJVz5*y+C+a?aL3eNJcS#@H#nqC0lU zChKy*;wq+;15use9%lQ;vAB{V^?@G96owbuR5~{*v2d&7c&ddOk&YRGTSZ~!YBd*i z&OGxie2BO_Il$v!!tz3XJ^84JAg0*bC%_@HxF`o2BQtbLVr~IfR+u=qp&vFBs`%YK z?xGo%XXdC`Jid5$@Sx2GPFY(>&PKbijO)1s_GB%%-j8AnV0NDV(;6?y0&S{ ziWjgW4)qS?-3~E_;i|05%7!vU=k6k%Vp3yXSz?&5(ObBR9B69K$bONlmCw?$pGKJl z$@KCb&@>N!d$i2w4ghmL(<42&ccIu@1d7^EPLvO&WMqg^bKXtP5rsF184T7lm6t~? zn@&mL{3YXCsm3SOV__w$hO{_YdZD-$ zHes{QH$4;)kQCWj=R{dM9!GBfGls~P-a=h{Kmh!8KD91(6E-U9%1xv8y$u$D`pwHIRgtc12@KIecY zw_Rd>^Q(tubia8u*3GE4A`aJ7my%!_;|(=K5wAit%y5_qHKWwKlwmEoBH1xS(R-JJ zCwUs(5#77elFbgt8fWf+wS_=<76pMhByIF2bawMH0gqn;DN6ZUEU?hu&{yL#Q6P2%P*v4B*%9RK3`>1{y=Y10N7c9+jE>;pW>KP9Whfeyn*EW& zY_;-pEQcdwI(Gzv%7mM#PNM>n_Cb7Ip@qW`;sAa~$8OB}i>`=foI;NwW-}~QnwT}B zH7(>i*MdHDCn!e2EIjN$6X;3Fo=_j98s}M`h+knGW)qy0?qoZnCcQf5PN{Kms}YYB z7B4&4GA-Jij9U?%{rxe%Is(Ljsbcp!*y=1k0G+VV-%~p@($#HJ%}Zdx0R#V6(2NIvOPY zk9li3efLw{mg9#+aqOj#-3-a*@WoBFR_#rT=2gom-OlbJbm?9HTQHkC&)HLg%FgpyE87;)w$&P%uEw&ef)Y!t z942d6yy-loK8&FCUW=s7vhIw&xw2Rwe8a58{GLV2q(#|>;B)*5RdT1pbAg$5 za$}+CEVgwbOCj-U+wXJVVd$REB~0>pQgPvGETyG?)+OWOXSGa+ZnDs1Sz--8wQ#&zCCU%4AzW7)EOly)wABzhQT zqfdQu$PaD%$b+>{eFlEY-zWp*mEWANnbG)B-)IJ>q4~vcoB-3xZ{F7kXuUt*hzIGR zdqr-f0rbjmj@Q&^y(n)~gSF7TVmDTRTIDy-Yh1KmqkW>k zu@Cyed2YLq8-I3te(&(PWZk12DJ z^zz+_+7#>kF)8)F>lM0Fx@YVi?x07i2dY!*A?g*m)4J#E-R~eq3h#`g>HpaJ>yG*a zKbQs3Mze#mQ|`j=626hMPuimfs8jafc*pEn0hTFy2)u*#Z~^R;TTolo9N%r#Ho&)v z-03+A+tBe;H=rNTT7$UJ+yZ?D*@GS_V*@(Th5>Mcn>+83Nju4VEN$Wr^iTeKeD=M2 zK|8{cNI`MG`QQl@yb(Bx+<)>EyJKam@_-Yl@<2~f@}a3Jv&w0)za;)CNWX@jJr zuJIp6m-nYY&x6iW^v3X(yYaY&8pH&&QuQEuckXfjbEE1(@NV7n`X{gOCUV^!nFpzM z#mkHRhBoN_DcSoOdeh&>_{ls0a`p@r2FVPUuO3bWPL{8(o^0IZ3%|4OmA;rs%2xQb zOi0}?kDaUd-)|9FGf~fLjF9 zp#`vw5&s=AJR#Nu*QJpzkT%A4E~g2jOG2MHY(VJ{QWI1kvpk{FgwUn6DzGxfcdo7q zt4Ttfxkm}KjUUe^YRB`;unyLv%gV<+gg+r){oXCqBEUYbc7m}Ay-BrRux-NDxVaze)aw(Cgt( zP(EHLK_baazayHb2z0*qA;yWnaenK_FBTHv8A0sOACeecG$b=s(L& z*&(?JPBV>;1fFtq0@LH7Cs6I^o{F|XTU4!OFSt4D2S1cI=-e{*ezcFHxs7d>wn<+y z4sPBCFT78oUOAoje*QPPuKze3?QxAAagl%f2B!Dz8{Ypo9I4n@nb^u2*czDqKZCSM zZv=PM!RBk8DLykf$Ha5vyx@3|#BV|zaFF1T!LR}TIFNzhh5{kNj<7I7D7QOA;DR?c zKI>FeBE>Or3ot+Hs%u*wOuDP9?^~8zme$hlEvtRjtf<|pR~yZ)a+WVX{oZ@L?tHAO zGgz&bw3r)BC(nJRM#uBKZ#;xX(0sWjmg?xSqZtDIpzA-6R-xdtqnV!`-2wxraT41B zrhbk`;gh~o68v|gZhB9v+Yy3rIa)E1#IK(p16|{l;eZa!`+!P)($JL|*^21$0a!G> zd&o`}@Q|)R4K+Hnkv&8hIA@4hY!YIBUlEB^O8=l(NjW+eNlYlodW2HV1N)}O21=-G zPl8#5ldUMq^YL?PjTg)C?%?y<(Onnn(OTS1%M~&Ic>kguTm~$0J66UEA@+J%rcFqp zzKnK%8j%Pz$0H`oyMKpW( z(p-N5H-A@Y{ouW14q1d^RM#2KmI|nPBRF9-N5^K|O;Lq!Y(pW;tKSg>%U-QdVT(D$s6?9B*-I+q8_5h z0A4ofEsu0CFnK6HBbAl*WT=%B$R${<3DJ7+Rp40#D>``z8WbsMh-*v*JCLYQ`+lV4 zR$4SqY6>o(fJ1OTRP4j{&|*5bSX9(3PW>w{TEv%XRz6V+u|=19aAxEd`@VO8Po%v7 zd(OJHBUaeBw0XG!3C@uKT@1^u3wv=yoz9a?FUV`ETwW$Rl^&pefo7d?dXrnNQ49~J zE%sb#ihS{wg%T}sZ)ven2b~L?h+-Mh!R#$6rT)bZem8;JrqL(WwBx4Oj3Zrxf|hGd z(a8})e120wlzz7V_|u1Q)+*fB|HMV)^U_%gu!e;E4m<1j%M)TY4*4B&Rvx)K;>0X` zO9b3w4hKxPO?5||@FRXijC)SUmrZ66 z<|%%}P>ifz+5cFB;NPDR2&M9$7*>J?WkufAFF=Oyx)MQBEZu*zY?jGci>&iE=oQlX z{1zhFY3*9hw+1J%ZD5aTR|=GdMnIM2w2& z1ShIbK1TRmi3F&un?n5LmI+_4-36hsK5t6&J<&i+1U|KEhrl?@H){X|ET7^v3V;HR z0JTfynh8LGz$bd`2q=T+lf8xqlp*j5UuOiW!}CdBuLkCkJmCS3;q}O#+5@Liy?b^R z1L=Qy7woVG(xZ6S?;OMV_UvH7>QO(T0O--Y%Xh{h_37MmcBmnHC9b2O^eLaH0O|<7 z5j$3py(-t9fMxg|x$AMrUY%=dNPYSzXuy7;9a@**wHN?3&<>?b@_I6m0&1K1Nez$% zwN36GwNo9~3fH51?F!(Ayh7`ezQzx{Li0}B>4fT4y5p?W2+v!HrKujS!mCc04yN(AHX6Pibb`r}*+} z;onfvy2i_0!k#vXeC5OaG7}eu28L=%Q*tgMp4g-s(rhEH!qX_U$JLuCw7F~^bfo&U zTdZYV^%Bj~rQoz%2l~^GDCHlM&D_VBc@L%JJyOfQn>ibgr=||jG2mRuIOpeRNj0=s z15d2=GtXt3hO?|%2eax1wahwK@$4+9U>J9&B#O9WiZzGQH!BQT^O zQ`K!{TLAth^|Z6`(dp)}{w5U9P!@K4yVyvg!THF9S&f7Z4;+DFMUIKDlnztBx2q-56_6^-ufeuBwpwehuCAHN$7lA5X6>CBAPSQ; zOQ+Igs8CM^vR~wkUxcc3P6x^XgB6vuql7qXW-^VBO}#=CcwoVm3_+>1<63T{&}*5I zLS4p?5f&{thm#CK=)cj#3K9-Wi#8Z+n8nPqIEAziVQm_}-gt%9IagBICxT`0%N^Dv zV$exgsGY$VN;Z+ADF4c2^W=dZHUxt#-h! zPjZo1V-|K>>j(2r{SaAUTSD2(i@5fB_CapR5gcmCKG)Q4bypWItY%(aLorZqv?4y| za`g#zF>1wKi9v25Y~Bbi$wJ-?JW&p}6?MifTu0svIFS=^BkIW7L^a4017V9i5_cfY z5{W#Lcz&A=3jfhag1i)TLL?%N%o}}zRjAfN+2^_!zE;-+Aq_|4lj=j)C)e-+>lMw5 zV$dBrC^7ncDL;p|+Cycocd#;E5 zq~Tf~U=x2j&X0M#6(@dEbhQcQhemvJpt&~y-f4J(OUoMqDQS3P66`a1QNQjJB4D}0 z5h)zPwe5*B!EStg!E?c9jwq!j0w99_McD;M33q`_-^5f`PeyQv6xAc|`B2Y<9=XE| zxc=F<<#~cYyorT$yipjg=wib{tfs}E(fxKI)8ZT;BC(0R1HJ&uO|-JI)?AN`PMXP0 zY5@$K=ZDn^Ml%jC+dk$~vqb#8-ET|`_cWKdAcx|U#N)po#l?xWPfq5f+;<=8sbu%OHzO%g;#`#pyx!1)bU zv|?ASi+MFcgFb}vuf!saifHXO4%`@Z17#;eR2@Th3U-5)iL5aAwItar*0^b5(-uQl z03KU2DUM5=63B_E5UbEp1a(Su@Q*KVFk|?>gntS+i36v4{=urhJNlGR>M$}bWJ|&5 zEm!e6_?@v4AU@Wje5P>lm{z0PSv8oHzHZ`X;KuG&m_s&Q)wBUo%4$qc7RGbG zQgeO~4c+cC5ca74Ym6A9n@t2b{z_mD=JaR_by0(6tz%bZ#J}*6pZ=%zEI>3R?>q)W z6~0_7+Zfsq7Ix7mqTFC&(E!DMFV>oU$+FnQ=4Jz-U5?w`jApL4F=sv=iXum8*oa?l z-$z>}VKa6k5%wNmT2bC32+1zg1GMaagUI-4=JJ2II;ZH$g7(dyI31nX?ASIt>Daby z+qP}nHc!V+I!VX2(J`iHzFBML`>(a%ySmu>y{M}FR6Wm+enTJnO&>y8Bx)7cjk>TV zF9sUH9nu4KW|&oRffil2{sdZdKgv#}<;T33=q>=72X~f8GCApJ?}g-4O*ESvaR&p^ z0+aA4sZA1hU>#NETJGQEfweY5g}LDXHEhd|7Ud>sN?5P$6ZV>tJqhNWPk{N(66 zUC-yAOB=9nJJsSGtY6HP#lpSB66BBJa25NG0i3Xfh5@Vp@)he~JWzMSpJ{-vv6J6^ zep@H%dlNuqGk?Mml@wA#*b1lrv6K`=FRb>R+1XK0l6mwmvq>3Eq@#vpa_W3zG8w5u zNXdFqqmbaZ!!KF&AqR2sEom?Q!e2U)u+3u`hp9Uk-<~>?RbPUbqxk4`Ih0cuG8M z(mcBw1Tf^@avi=KOK9|Y&qfX3MLU6W4=$Qm`5AyLS*8<1*PD~3g9m=iDl8a7Sx^ww z1XPg1JlT?Ss`rNGpG*u7j7BM&cnN0COAk4N|6z1XGlpG&8mH(qDN})b;?zd@iU_$m zr1uAU&3a7v?f=CrX!u}B?}NDU&K4JJ5{w?W>j%HF6=a3Ei2{^WIk68w0cZgnfR^1p z=nk-*nJ*Y#aWDgm3$6imKp*f%I^gNk)%bi~l6C5EwCcwYm1Y^64vjZ>J%bd3QctPWIg7S+^jYh| zGAemBNX{~rVd;EMzF`538I_=v}WqxdX@23*53 zXuJM|03fdNau3i4e@+v>3LjQn2&IHyM}g14bNmQsR(8S-T&&>gCO+mn)O`j)-y=M+!frs80LLP z7fLz9S2h@2Hn)od~DnQ&v z)?Ya*%cOB{t95URci0st_b#5`XYz#;`$)$n@`u#=mlXP!IQo~-U1}Ey=*RBCxhxm4 zUpD#gHk_#?)zu)x3o%z$s_>FTB)0wzhc8ojXJPJ<&q=dTq=S;9kirBnVxK1xYy`$B zW~ZTwv2^XGqmp6p;W=uIVhKuZg8K^&q--rRo&7NOa0n1l4FOhR(cq(9GAK9=l@*3uil6vO{U>F@DU-O@P0^tPLH!4OB1RIC@X#AJXI(<&GVVdloCx zRSeSGbHh^YKo&N0-L|bOQ;dzLD}=1q&r?0LycoeC@-`3;XqVWm8hsbCZG#U@63T|a z`+lQ@Q$Bf(k5+txFL0MLzK~OX&YK0T)zb~&Q*xF4H7P_Ib+n$HDZHcHv9bsOu!ne` zw=?gIl7kHBW~zo6h;>V?jwVoa_xPiL@Y)14?U*D@_!X3SP#~k%fs$k4DbKL~Hp8;E z1bkltZdM5tEExT`$LFN^Ith^uzE7#Cv2o}9)O43wnZH$^o}BCHx7?zd=B@B-RzU~5 zH|E6Mb{0FdQLt?M@szdmkR&W$$!`U`Ci{AHvc7Sj?jM^ zO@p$ufMM8mE2;uY=PCZNNA{e^$CcIUo-~ zbrVJ~owArvTCB@lWTjV7Rqt)tn2=cxvh6;acEutcU7@cKm2qF1xz*>$^{beLL*@P`GEc!?2kHcP09kna)j_=d0BNS3`TDOIT{$(`K3Y$Ytx0 zv-aJ%RU*x;Ui*H=$%C!N^RTY!obOHE^CQY0*`;Up52X19EB`))`gy^K+~DreBPKzc zDvgb_7{dC_jUnEGAuXSww7$Aww7mpp^{btzJ@_-rK=mWHun2&g#=pPLfMEbNzzcZo z>Pp>(v-8b=q=?)pilTE~JE-|9Da+DOZke`8{JyMfUh{0qHd0WpBn{{ikKY^i$P020 zs5$6RGV$^MpUwN&PQax3BfXcsD5@haGWgJ~A9-TY3UMZeV?%H>K z*VQtqsdnjdrw!Vhb4Yxkrc62+bt9YKj=`2JEF>Kdl0fB2l9_D{-YWh6ttk9L@vk;| zufAf+d#ElU>;bS!Mm5EAeHOX{xxf|RpZ`@+%=$4&TivoyyJy7v#%wX-l48;^rR45p z{`MdQ`&PB$xuo<$EM+H#SlK6Y%KQ;yZQA0VYMHu*uXKi?PQ&waXMJS*5r@&C8@+C~{5Ud}CR+4Wv zbi}nS%%yE?nSY(v>9R9Hm&)11S(=4WVOD=Ucuu}DhgVm)N8&!BVdk@s(olegSB4C$<; zM+mp9<1w4+47Hz(A7i8cuh4H6s6wOzHUSi^hz@n@zDSItW7N*yDVK8Uh(Jr0y1^T@ zdDKovj-5FPEat*I2O%Y1l#u2Ap84lz1>ZU+Gm*I}hMa^6aXp2V#4-|oH{>Nmv;@Ajtz}eZ0<&^C@n+I#0hz2tlG) zw(;5G_C|R47)Y`ihj8td<;J^t?nVw!E>thri1pO%8T(ce{ckku*zoLoGHW(RPxR^9 za7>|@TW^+T2YVu%yP2-Kx~JJ9^?r`X>OBA0rT3R)`(n8JKOem<(xF@Os4XRNm5#W& zH@@yAJW>UB7fh#bzS~=e)7wpgojJmFTjl1=Lszd;z>5{a+Xef)mbAm zGYW14|0*k_{V$TsFT=wxS&>(Jq-+1ON5RSSFCUCKNsKvq2nes(skE7F8CKe49pkqw z?wI-~YkeSCaBxk(!B`6 z8BBFlPNlyjkZ+3|7+vAl9L=!&WXT__k1+)8Mg}+>A_|(GIQh7p}RcxxWJ;i&p4phVQT2B zn?*?*DK0@?UgFqdZMwZMj6LQW5l1xa0U5tH35a_n+=h#B1fDN)#sUx9-IdZU)cpDA7M!6}#zIWMh?*NU6= zDX$B9R&-x%vcKQ}+`{peh0Mf3!kWyLNG2&mf*nmW8c~u$apc;Q6T$`{^!T&UTt>t) zA_|iCO!rsW9u{QQe} zj1O?rvpMR4x5F3$d4J)B>;m({-J!V(1k$>Z3lLW!$SV%+CnZaPGR{PB0S9cD3nKz< zYzTv3(vhb`PDBHU06o@UKqzLo0(1kg0V@FhHCTXmv5Rxuhv-($MFI|=7(g}52w$x> zoe#TITg6%{CVOzPr89klIK7}})Xx@5-gDhcviuII@2Le@w@ZCwXt284Jtw-gT`{^$B77-ZxTu7BJDQnqyuyw@-0eXO#8X@mEl zRT8Jndd;i#e=h1J-L&FwF9Hlh&b(s9bGU{3V?;z`lO5+Y4XK-rB{C7MbYs~6)nT9B z(p)vJx2kcy4y!y8d074OMIri#LujFXTz&q{UujO(IjtQa4GVbxQX+~6t5mm*Zs3Xm zj)MA*src1of!S{30M>LU6KNotVwZBHz+MDlp-o@33%l=Wnmk$@04;DE@ExX5--1MgKt>e=B zrd?ZQV>2<7)_q z2$wUnwhj*nR#pSWoI3R#k{*?J zbe^$2eClPVyJG08}5U)%rrzbB6Sm5f;s=>-Tz0 zL-7nM>zz__dQYg+di57Qv&YuI{jfP89>uQ(GxHDsCsSCvtzM zdhveM-f?YaXBsoK4#M6#@8opdajcf=1Cyy7yP1Th_^u651}hEu6GOVU$W)H$Oxi}T zqF4A{TX4+-4Nj^1sU_KY*o2VD?al@XqobEdy!+FUg?oBwH{M9xhd=sblNGm~qiN|F zrrFKJgae#H%on=1a?Wb_MnpH`!iI0)tTFo4+FdW_Cx89p7-QrIfPlq<64)iQz*qm<{HmCmCu|(YAMM4!AZa{^?0y75 zLg`oV1usB(==6l>7~a29{v!&}(Ji2F8LVu%`?kSKXz@FzzzohD+jwj`Gej2j=&XLT z$c>Ljh(_ZDavzZPgc9ct=Z-kI8^gAuo^6V}@dCgn!NIny4(%18xZ^$bb+g4?1Rz{o zbT8FU_RIB=nFaYb6c8;!+_b>OpL#wPe?k5|iT7W2^s@iq8AsACPcicpyoMa5C6Dn^NDo+y%qz%1^srYi;a53t~4$~lC1e{?2XTVu9`kL}!$2W(=MjrTKOd zrb*q64a_5Nr;0y;`|^6UdCOXHK(A0muPnl7jGUr;*AO`iW%9GupFikE96v6J2o}N> zIje@%;bzt&lWX+<(m)OWsb(^ppZ&Yo(OFW3l_zz}A0z60es>NLs|w_?|1r0LERb6i z|Lnt4s-HTgETDP-6PKj$31Kpnep38bzbJkwzbsz6 zn2t!N%@yjVUyDjNJ7usHd4_s+ZeLouaZX+yznrpBrLm^v0`KM~Zcy&c&~xJTv{I?t zt1DliI7TRdrtIw(O#1|tM$7$;0x~&(K?g%Z!bI}N<|BpVF$xP#c zszDAuQGFc&oGD+=J7uQWJ9QWQ@-MazDN}%Na<*IiyW>rmO$HqNl8Ldhm~p`^`p22$ zE9%6LGe-GDsIm96>2~oK$JbVp(ixjnB_t5!X&!`aahr<649T zZW29e6}^FUObjrGqV%b3G^Bw+bXY!_Aw&H6o#@`>mC{KEu$ff!bZIiC8d*xd{vu!@=Y(5CvlGH5t_ZD%} zdi5YaNv4TvZv9Gcweyx&3fU2Cfe2Rc)oC!QlR*Bq1phyL$Ezt`c6qw$L`;;wm+;Ii zb$#dPs;hyShpvBzaM+yV5?NIMmpP+aSP6f{USDZm7~GFUtZX~2ESypLs(P!`uD9VDL^ zE)5$cI0K6`084tj@uZ$xj)zarX@=t%BF{h#BF};WQpbn^ns1yB=rGj-aH!0L?wFE+ z;aiOX&oeTEVBi!7%d^4+y<=M%BBgEqdm}ez}sb?tzW?9O?@@&<9=N80f z9&{a_`2Ti}7)t#M*44BHfCUc$Kn6r&pjnsIgrN-T`9erkiTWdu8O`SdB%4p<1530Y zWQiRPJ`o};=i38Jv>uLyn&@6RkSB}!0jRAfjDaTF59&frbg$OL#dNQD#GRPFFk=?c zpO_MPqT5j5tB-<#=o%0F#O9h0zQo3Kue`*em>&R%L{WcW$)6%3a2)G-K>&{VydXG^ z{k$L;_j-{(G|OO-KN!n=kw27@(R_S>Ow-ABfKbpYBXKF_2ew3}=ogYnljs+iNtCD{ zn3CN*t5BI%3?S2tIVT-1nwj|D<-EsoR$OfUM0SPRZY!N{cV{~w^<7tcD*S$|p*~#5G$$Ub3WWa>CocEoi zyQHoc&%PIPcXP8JLH=J)qxwHx&^~Yr%W?QYCz@ij%wBo(@G*KO52(fIIK4wBs$%ub zUb*vlFe2p%Z1XeCF4jd90W|lLw6AdK_QS ziMH4_^K0HbFvjnqIQc<2#4m1+5l(a_uhrR-zc8VQmJPjL^*m4+(Miq|bSa!zGKa0S z7iOjT4UwqK>iks2f*LLsBxUtz#52Epsbm4JCl;HpjMakFEKT=2IkUym-DA_pP>$V| z-OQ$5CcAKzG)hrcdHS4sb6HiSzkt0)&v3eYy2Q$)0n*g63_}Yg^jVJ9CF5j!#=Hgj zjR{atxvI&!1oudbj>yaWmkepjvi3P3qIx`|FG1G47QGE|KiCK@Mp|EjyfuXYI{fD- z7e{H9=cUic@15wlaM43%-*WcvG_zMOMR2iUD@9sv-OMy{aFd&j5z)!NLQgAoc>4Gs z|KVDVGE;N&S7yU+9YbGHI9*cea1Bj_3kOFC=uALYxM*9ob0*lVF-K{a$8u2|xGQOM zjWley@a5=6hSwVI3o`T(c^Bzv*1!DlHk!HRH}CAp)x39%ID4B(iyPuAztD9B&G}5%a~&cm z(b(<0x;|{82**Ay^Hg1PZW@5<;jky3^`P)osaSmH-%Q zb^5OF^p_J|*WU@%uwy-Q3lnY3O}MUpLvS2MuT+tjYdNT|fs}Ux)OoI(6;BV`)>>Z?>j~8; zuA~Gu8D3f^?@l?67KeVU6;=On=+w&sO|R%~KkBysEvsth?>aqXZ%5uSbx5iMx$kkw zF8+0a&@0Bz**+UemikUvdxf4}bDY4!WNiXt$@kYkYv$ZFjvr zqZ8sD^{M83Mu)|{IX_5yfD;~qE%891w-;iU0N@Xp7bcg8c%g7lbe+0=)fq_4u9Y0ag&2en5^T-vLUV&~ zfpda-ku8ZmQ#9$|B+E1+&!YI9oGX|v*;5chlmuRwGbTFRAf;MdwW^fwbtxCE#)7LO zYg0~qqwYziYyw{R@|o=W@3&}PNhWW}t{Gkn!^r`G!MBy^z{oNP7+GO&hP3YzqHaV8 z`<*gU!sfY3(FSzRYSrc_Q2lo%%g;Ah9bMCm>6saL<+O9~ zRZR0+DL_q~&?h9@F5ydzztgq1q{o-cYg4#x27{l_|J_OCP;gBtbO3;p82~{0pPl?q z2bXv}eN>i~juRx0rVqeKkcElA%_0*|A^a$6A}a_3;KB}~Vg_U8kR_YAu%MZPIc{s! z>TW`D>I75~8_$uY!qpYDF|@k1`$@a6*Vnpzy#B4`Ki=ZC-|F!+=ob|9>wMbuZu7q8 zKF;&LBGCI9Z59U<5NNyyv!sHDqcT^cp zAuzHT)Z&?Y8RDy1b4B+zcUJ9N#f8raaK82`gn^aio{xAj$_#qi@h!nCJNDt>^(aJ^ zciy`EJNd@3)7gQ7!0K{L#IkZ|#KY@Vh?d1=n0KfQGrwyPzS1P*!^`e$jUjLEaO@1D z?P*D(K~(R$#ShDyRILuHX49FT=HRSzH0}6inT>G{3 zg6nn%&SC8VHhU?IC^+rBS+uK`w=Rkc&3>_W>Sq0?*f2u<_xXqbV-1L&t|(s{%W-LX zDbxDZ3Qcfi=UB2f?4p+7oPs*_N6 zL`1`-fEQHzVw17#kOf`h>Xq#xE$<%c=ng)pJGo+Le^~+Pl@Xl(Ep<&!b@xMdJzKGy z79Pc6`G&vE*?S~G+3fE*VeJ;roO>LV zAx)Mc5rPW4b$Pq9V?fnM!4;vf?B?j8?Vv}46F0@nnQR zpv8V`tu9(*Q&PBVjkBedB*y++>S30bk&qCU611K%+3IL}?i6xoM_8T4ZJpWdrb&nS z4XPLxjc)H(NW}PJBWczJkQ}rLn|#ORPG*T|>gFKsPnY+zq5-7+8hmTu&Vufq@za_O z=ge4Ui`cf&A|FIdOWH_`$g+y0Pbi(3giIj?NnNz;XFbwA zXph}pVo%?-j2nw<9520z{yc?88@q`8&%RQoQ#~TbmJ{W*Rc>=;nQWN=wd--zJkqD-^D2Ta80(U`Q@nk`TDT(WcjB((Hi`!U-T1wO%Sg?Znv4N0zaTl3*F1 z^BbNxC-zXxnXFw~0-~7k3QQH)K*Y!d5{x!_mD$XAlsJl{LW6jeb9NcoWl`nCF?@pl zu-P+@jOuz2&^0HZv_<<8UN`OR5+f5E$YDt2puHkw(+NW|BlFp1j-pC{@vn9#=pBWTxqrAH zWaj9>?XvqJ!ffnMhM^V%793n`8Qk#a65nYKTNT51eJVob+UKoO?<$E$cn z{DoT%Y`;Z(ZkZ^1!9+aFgd%pheS#tyx$z{!uLs;+pV{A`3zImLn33fWAd@#grs!9V zZoNPS*j6qu#fmIG>SGe*7SQXUaX*ppr(OP#s+zN`eMq96o31d3}4ytN!!63;6}%UtU>WWGHoHfqB5q@A>l?wNHk1bLZ!;(Q?rZf6z9S0GCo&sk+v$ zzJI_cdiueWi;~0>;1dO+r^$k)>N%Bg5j|?$el^Fpy$HF4S~D&wWQ*v4m7Bl#<>|*| zNc}-TryUkpC5dn1-wOqt=vV|{P~0>~DH2|gVwkqY@>qOVhLZOidENtpfbU3t^`P*Z zL?r(J!Lu96=Vm1T!2a)SY~r!V-Ek=AS8~Jqg@kug_f!>gfXyFSGAzG0i4c_+B}$-S zs9k<1pDtHHC8JR34I2lyI3|%4rxWXD!f*X%h>FG`T~%&%5`)uTXI920U9u8aWs+K* zip#d)X+*(DWUFe*a^e-1RS*|~BQxHy=fNC+;lV7@93wMrQLrl;Essda5?&e@;E0zC_P5bQj8sp?gta|@=^f3Ra%2Kk;k3GmJ}XV zyy+4Ox44Q{`eV=co0&@hN5?H9!S(^*H7(AbG}OL6qWSyJvu7lw7()AOzIhW+Mcnm} za|$obml7lZ*?*3Qp0z)ej+Wi1@}vw_iM z@`3eqRqPRUBB0IA#%{eKs7*7wSYgKXh1}x&b>?1e3=6*1G3pPKVw3X@T9cr4-ft69 zcL_$@gESjcQf>iq3?~YKa7FrrzaO`M+-?CQw0|8+{-G95&eZ5Y3YcP84D}IOn#h~0 ze47UVO$m7BFtoH^y#WtDRBCv(*8U}8TT{j+4QXZZE~9Z5FNb=O?zK?Gj_g6$j3!LE zgw~qny-yhSJ$QHkE9eSu531FXT}8*n8=p}|c?LzlhL-jrouq~$Re!GLNQAr%*KaTJBzB?%sXwUUg@$dQGptzl$F7&+L`#(K;;h z0M)*v3I~En#=zk2W)(cJS;a48kEa2?SM=*Zo-d}8VkS2%71m)x>=kbCe*$!vA-JJb zxZ(Ha=l9uxlJZ|nd}DZ432^LV8rz0c=Q$kU$>Ifk(vM{jtLPNfVwz^%<5f;$eTPD7(Qetc3V92A$rckHJT>^77W)>2hDsK*TriP;j# zSUli|4d<4|V&tJ%@bI|9rr}efNQ>`I&4@IZ5TT=(Fsi6_;4^y{bO?KcO}O0^;quU0 z08`6pTi7Zcf%qXL8b7mMnK7__oLMUO<~>CemPvP@USK6|{s}Lr%}umxIMr_9)U2jPg;^X>sWnb2YGSeK zA}!Q$Sr`m`OrYsq57XsvG1C+-Rg0!vNmKX`PSsB7(2eF;NwZ!`A(aYC?~pnf{<>qf z%_)q32e5t!=-vi%tB0UdkB0^Yq0g{fCX^DiwZPC_O4DCvyKC^O|9dofRy5XDG}k!C zI5O{bqPhLS1yzsmQ{y7u#&c>fB5KP>_jECx36;o=XS$u>b5n)pWz)7R?i>YjHKi(5 zly4O^g~;nBmZ}np_gQEzt8COt)1&XM!tV(_=Y0}DZ60Jq4|9~Zc~;Q6KS$NeHjOQx zwAWCiz2_GCrWX1(7Wx(z`qmcyMRoP*wT(wr)2Y4Vyz3CatyIZolF`=biK^-J{@F;; zmTRJJKS)Efo1mwpdXzo=X}p=j9lFG4F15@5C@a~}eVLtP_$WKx^RHa~Rl|m?=46B2 z1RTqyfb<)xG_RQ@rAc;>Hy(_;VeCKQtH$sX>qdH!!O6W*cTGJ>cMYraQ~!^tS?4)J zw=S$(`6dHG^LnV~rJEs7w=Q;?bvkaCtD;i6<&)MLmiC&WG%v%tNqTFU?u>KGWc?0= z>pMsFuWJOJ0a|xqYI|0mU$o)7$~}v)Jf>J4r>yMJI-Cdu;F)Uc*DL4;B^~ZdmY-Gj z=*#tG50<`ow{`2^VBYtd(^pp%!W!!Mg>XcU!LcOsX`R9~eQwg4qNfSM5D$!O-wb%& zA)30qh#t`7W5<<~4=WAxVq1LnEO+gM+#-)%_LyY|Crr(#2!lO2<_m@R_B-(sHkU$Y z2VZib`r_o$`$>~sKe67`OclNqXy3=oB{_LnPtBkkG!HYeY6{QTltkWi5*=g@LTnkx zbr!{Thftnfyz0g}u~lRX=;3u1rMw6sXIqly>@@JPgKE7E@$XYQ?Fa&+7a+f7C9I1V zM3Zb%9JHaFNKPKXhAcP@W-=q<25eL?(z~XEtsrLX5e3<;@FVJ**);C z`6r8%?22&J(Kv9yjxT!tqg`YCanmEviC<$ z2-EPZWL1PzCs{}(?f}@KV zKu|hOJ2hY+1=Fhrv#-OjB4JlTjF3faIt<)ESB4-(>@u_>JpJ3+;MPgj+7gBjVK{Z1 z0`@pYjml{nQ(NVi?Yxy>qqHGEpgyfo4wQn_+Vg%YYz}r^!h{xtP{Y2MBbf5{!+|fp zbdf)va@mdNG9ae8Fk#;TX=lDq$e@@WAS?ZxQ2h0k1lx(9-vz5ii_%>nvvn~t9-VVX z#Qx^5phO<7Cna*9bj+%sEr>VzZia82JTJaKkSuWPrSSf(u$3$+R4!3{NU0As$-|Rq zvrUi{(XUD!|Iq4nILXXgQnR1z?nb%qdsb;g*@VF$=SB{m1w|PuuxkpwN&0!xWg8_* z#uiGNTJMF{Hx;qiL31?LxM9KlpfFzW!5kaDQGz*7j&SNz@tBuE%;=FF%KR#LK`6Dp zYEWMk)y-u?BS4jIw>_{1vi(pqpp_~4YR=D*^Qlx4+ZV!;2gF!@jv5Y6q%Sm`X?>!2 zVH@R}c#WM)^0QyMX<@Ja53MFV7i^W-m^u@Jdf9qNxgI$m#&{tFQ+f<2saKqjuVsM2IxYG6#|D#aQ)|a&_u5P#QB0DiF|I13DhOr7$7SH+gHi zhi?#X@1wgx2)1U=jAp7zujJ!WCTI~;tdRPc_2_{uxu>+4W!f0Y4k4NsKyQO0Zc;&G zdtR$3XQ%~JhOR!DeVEL3_uP=CpB=`cyHp#40+!7|;a~m1O&Jkw7i9k?_Zl!mS`Zyq9zml#An;)xG(#wncwZ{PJK zk5;+CF?wQyz}ZrNbc-3_22DMpl^!ol;B@>!=}C1+5-J{A#BFQT<3&BF)Sj$l$~IjM~bE}&9Dd;O=gj40ToH& zP^=lwmmr{BHdrWyMY?IQQ3ucW*oF^Cdp{yWnv`p}_++-9p;Yxg_=YXi8Qy%N{kQZO zX$Ln{fe8SxvjYGq|5ticGBvX?HFo)r@K~$$%?EFI$=}}fLQ8Kn4xdud2!@;FSDFcB zNJ4UQ1~QeIV`{4+HhL2jbq-O+VXH z-yiZ)*U{I#tD2VNwlOb#N%`(>#~#;$*Lf)UU$Y750I+G2qw$ z&3zVe;2%SX=w1~8ssI|xq9Y+ZTh(UX0R^aw8~`2$@h2);Ri|h#6wKlmG-A4wH;Q1| zZ81IIhYipGvKV*7LslHo*X3^A=}NC~Zjd_wmM@QSkM-QDoR0%7FChKwMDJ&GE_3Zyjx**Mna0v9d!S1c57{4LS$+;1>v| z+#HZVzyMlhC@@zRj(b3R3>pB!nM!v_5bX~%t2HvnV%d=H&BKUR0S|`VVWhZQ=mFIp z9T?6sT=j-OK#GV!Ymc9xVq8M_o#|&CLhrn=+2cp3jeB84{a-|k%Qxg3eJMnv5DwV- zWqXsIzM)a|2W^4kc7|>Bd+qA?>($t_~=&k-kS&46p{PQKSB?}6~YdeU%oGPbw)*u*?k&eRC+|A+4?8wX)7SB#t7EV8d5%aBurU7G5YmFB+%h1LlAGdZG)DN-WAl>#*V#XVwlI?r5=8MO&N3# z&C$1Ufc(m3oQ{OD%;?*pSJW8usnKlb=v>T`jub;o8HBIh^ivoatemwEhO*JOBx>kz z?4&bK4+u&5rC#+HIUo`{iwwM$!;`m6Sy>3wgPJ3E9;;souu*u-q2px()6yci0!Zlc zNy<=Dd5ZQnmX;QWxERMj>fUU|GGA<78$8(&B}4GcnxClpUcw~N+J4-gzAtn6!Ju^V0kE3AlORA&c zNM_a-NxJ*GAye8swj{F!>>?+!BcGblZIFR9S%y3|2tma&WSZ4*ski@Qz@_9E2{)94 zl``^*4XwD-=ZvXyh@G|A?r$un(&?dhgae29dQ$U0;GqOXG%xW*_j=inzh67b`2{vg zW3dz_V^y#!%K~P&Em%!a-c2vUf|`C-#HlAuk><`hR8>nSZPcUR)dij7NJGkZshtN) zzpzF&OU|Sg+NRxR6ADyjTgq^&OcwHSr?5lkbH*j7LgihtjF%8mMw>eIj5}D?C9*RF zqQ)6QJVnH|7Ea=H+6-wsn>dUy)>Zhi=@jdV_wx`qOKTzBNZ7IrO?D=*EwUt0wSaSv27nl?*&I zrV!dQGlj1-y!mR1fge1du>LiB@-FYxpD_{Yf8q^fs%l!ori&pUE?OE@cx;hyPa6{P z@X70`Lf}mMhwuPiDWW%XK%6IpG)KVhejo+o<%T-R&H0G@j@gp6pRCqL&7D= zM~I(@j)qtm6Z~=gtM{*Oo_Ib3e}&2K5K(WW3%O}m)PUD{uzi0~Sp$E;D_xLjLv9Ny znbsbqyk*AtD%sD!WrP*jnr9*SirOx2-f42s8SUTQKK)}#B)Vs~U>9RH|HiYmC#dpX z9_K!o?(&YsXhj={=J=!L43GW+(Z&qMG03Kcy+1m{N{dTV?W?R16=O7r=ZE4I@yy

m1r_*fKe$78Z-R$OXywJ613jhqsYdqB-SHIxdJtEeI$&pXCv8Ax#FoX3aA!oG?R z5?Nw+5=bQY&hwso%wJMbRg_2vo2mqA(oor3yIc%{xMUrqR|DYk7K}slGxH@+&{gGKq^Ml|#RV>5| z-e-m_!Zr##EKxFp{L>i((RtC(YfLi;cQg-vZ5LO^M(ylsn#Uroe$xEIa9pfJHnsyk%wLRG>%xiNnJhWO7Kz@~oLxP1ic32YE;8m8pJXAlv3g@-jN z3U|_6awO^LZnqz;yUM%z&~6V|T)l`bCar2xP|w;m=Xpn`YN5*yJfV|Na;qpRqotqt zjw2UC5Z==cER!Ao78|n+tGZp4JZl0DmQDTDve zELqs;F%INX17|KOytw;x15-6zh1QECKa}rc8tT+oSEIt9n5x?4RN17ZzD$*VI&mnK zvj-QdOz??-K7US|c0QqX2p0lR0}*D5j&w?0*;7@snEDqklnQ8@tMoU5PVN#}#z}{G zh=W(r(Ln*di|^#yJsNV+lG-0#nGBZqbPdK;#hLIEtT3me#0JY*L*umyn}yVAbQlyx zl5KLiiNJFgk0?2Csr07MhE#-sxCWdBsKanM)zvE6^%Po^ceS7MyUjP;QBlK}WG03a zj5?Wja$1*)nFE_gzr*57;6!Tf_$-G;|2Yq?U3Xn`cxsyr3AlavmlZeCBs;%LtZm7F zjor};5Qioo1u$nZa1n%ThL=yf%h28vjTpmlA+fjOXIc|1fq6pvV?;Af^ioSLkgoP* z9>C4inP%(Im@<4Ibv}GyG5BxVkDk$1C;+#exa@4HvfEm_^^P^3Ds|O#>}{NRlYV11 zA#vAOR70w|j!-4zquh{B2Nwq)qbw7ipR|L<<}G6e?ky$pYu2iL@e9RL=9W{0hQ_+L zWmSmaYyV!kgZzw5ejTu?O(E*5rmMcy)n;5dy(lv4(wfu~HgdP4l`(Y^bpCdzBEE|K zUu1n_bZy2HeE z2WBPwzRb^N$b}?b{M4Jfbg^l!DaE*4Xn`EDQ9bvh^f4@3@nX?$)wS3P^pD*7^TdS} zO>zxNbr6MKuqS3upEms@p^ic5)4XXr%qE_HXg;Lmu8WucgUHL5t}V0%R-eFkvLbC^q)wmF*_U~ z95#OU9%_eRMITKX1()@P6!TR0_bB%w%@vUo#VSo`Gl@TuY~z_@9iU7q@b=w`F5~$| zj$cD@@taC@Qf-x&1_hBKr_}u|0>Ohe64mXrM6=?B)sdwY2fsJi`ark;V76M`7kc3% zAlf=a&U2TRT|)|H%14xaeO5BJaAZnnf+lb7XurEy6%(MX>b;j!&YmQbJSkY^(UjgZ zIxistUW|l+^bK6lvNajHb1p1C3vtYt=pqEoe0w^(y1wIr4+hGCeduz1@&M-+367MW zTC+Ag9RTPaA@6k?2*7w@^8SiI#|2LA0emBZ^JfHwDp1_x0E~_Y;}0L<6xfNIWrElV zk8#X9U@yZ-+>3lCO5BUBB=8lB7BbACkUP{6iySKXof-CCzKM1(Bd|w(rwzQhC(*yB z|F+ootJ)6sIuDmqOAH(>0MBb_25v>hA2-~fYH*Udn}E)RUK+5YsV8K`(o30g^*c$W zaw#V=``7dXz|s@2DMQ-Z8phixNga%Rt!c9@_OUbbUjyl$WCA*#u+ht}L*AkqrW^Nj z)x$Z=m+X+ep2fMg8{{bnR_TGQI9tSH>46VLcuq+<)JIS>k+SMoA#wO=d)+Zn>YKon zw%9i6h=-X^MZ11rMGG1Q4XGqEF9@Ra0H`ynwx#oquraXIWCjZ^$xVw8=el@S4{#fQ z)p(2Qt9SDvW$>HGTaxy_hI_@n0IS zbK_#3GJ_G`^@?_P>pEmdl4k0n7)8Z(m@9n_^ELs=#&Ig}MRbEihzrt1aD2@?MS;pZ z@xe=4oUoZ5>55>E5uSgan5%Y1T^!aa+O!_uC;{1n9q7t&^H5C?JZ(;p&~3Q1^SnTM zDD$TX*2%5d5uy@$4oMUb)>#J9dO&qk8(ZhCjvE&4gFRdVVh1!3_fe3j8^o3dnLS>! zKa94~mxRi+`49{hZG%u5UsfRBFui{DP@J(LIhX9h>(gV2Jz}XpW>(0X-_pFcXf@{! zjaRm)mmPbo+;L)QK2WSt_c5?W8U>lTpvc=`1ai(}@qlR36hY+$9;t*g_pNp(oJC9889 zF6?*S@`Rfsi2KvQs?7JVLkxNct2 zvRvG9Z7~$E>I|1^lWj^JXsl4WBmekqqZhjMOzEHIZSlRc2222FKME)s8v4rpo-x*5 zipvG#{Vuk>st&Y5LH8(+tM_n8b+`m};7T@rrgFYq#)DfJ=0bK8+UlchFT1MApl@@_ z@oZwF*9#L*gO!9-fJ5M$XbTCeU?Ml$?-8n&>1CJ)f^@hCMVbzd6$>6%LPDA%W0yz# z9H()OSS?V_7m_PhloSNKfHd!Dwbk$4&mS`la|C+L1qeu!qFT^LHELNdgo|2*lkSIsr%#hrKMJ-2;m222RI$WM7#`yw3 zUS4)(%6n@2(arzqKof^S7T9sj%MBSEdJ)^&6hIL&f{cmbPn*Lf%9wgLNl^Ob&DZ)W zjW-+lE(UW*A6j&wOCjpu8T(!zJ^*EWG`gO(o`M^qPSDIwaMV1{4H_%S>`iP9tEx>n zSsNqga>5y;Kr6og*Kls)2F5hQHqlS`gqsdCXk^y@!EkX{pGzc<5vd5>NH^gIu-Pez60`inLR+nt@Teq}xG;{D9G&5M zZsD8|%E)A}W_N(}v}GnH#H8ROniX3AYckJa9qqMifqQcHqwZCh9_1`}k4Ts0!DsUa zE>e!5ZY`27Qq%b0Ew>wi^%H6YaO-^HW~{u}@iRfZO}22@NUxySU)|r{Sp}FJT|GY9 zKf_qcP(SC7lUulb;e6u~Qzs*g#gir)H9fg6M#~i}!&|Ddg4iDMUi6?+4Q1^BUq%ug z?vQRp+ueTA{L#2eI3I>Fuy1N}Yi=E<@-LewwM7_Dyd@LATnEmWHVJjzX4eYup0KEt ziV_J16c+H2U~Y}>|A-0Ar#(8UNa_J1@U=~}ZB|u-X?zETdC%-3i=|qt+PPc$oDet9 z^9|`0lR-lwgB_MEu4vTUZ?h5W5yV$WPw-!J>^9}AD|Kn*4tA^!;1>sgj zhFHk>GDO_vUHd`|_O-_~+386kMb`nh<6H{uO6JK!790s&F5wPV?9XC{(L8l@BTQ1KQGh0c660j&3DW}(f?JbCd@;@$k<1uLgB-e z&ek9)=hU({`bl0<9;cgyWA=;F(=vM23$+1=pNzLo^NUYOG)To76K6uh%jIj zqJkj0?l;YJ-iWaX4Sa7x*_dcS- z>{jq&rbW8(n(&0s^?YB9m>Q*g=sM)80HAUoFN1hfC17A!J#l#DgkwAk3s!1C{03&h zCZ|d8F;BIoOPI7^{}f{vhFB{mpLjQJb#or? zDX8lxU(rrBD)whA;a;eE9}>z&PpifzHk%~U^&v#XAS$vNVZQ=1J(}{HB?z@YTPsRW{Z6&Y`CRAAo|8qhnU(#1TiChM>@`m!vsvV` zQFwHdQAjiS@5VGp$<(r{Nn_TG{SUL(3A5Pl;r++&;S_FrM)o4vlTl2@OeXD9>=$YB zzPy;7)fl(E|Aw{y(IL*gZDJ_+fwRYco*#7kzqrZ&g0+Pm9Bdu_8{6i3vR&l`1qI~+ z)u9DN1(kvCAD-!(p6MGL>oZAAPgOS<9qX&g#~2ywJIKmSm>9#a*iTGWODW4uOiQi7 z(^5!EPqnGW7#ZxF=mRBWN5=q8h+ujQR9JLSNR-ryjJS_P#|T2u(4tCEgpy!H znSY*2xnh*EQFRG=X;VR}u~ea%U`eFFyJh3HweO7gmFLM@3%HBWAHZ2UOXC+9Wj=tW z7&ywJC1s1EV%bay;QBdsIWg~Ueehhm$b(LJ?kd>iPJrKwh$?81?qHF=FBZ{n`pqfJ<{uouqanHT$uJU(xAxyC%zhAOJ<&Bk)Nu(+5F|LStniM!Za|?jhdqUQVt(M3rv*;(a z{%eI-dEt9kEp;y#Dqp`aFZuO_d^~2qQz~^T-%XlYaLtYEWd3&cgJ52wf08k~IcS-o z6tPIdtw%ORCYT=m@UZoA@pJ1gS%JPzAjf|lt@0AxB30Jc8v^GVbD@9x&!GYD81{Gp zIo|;9cN3Y_i-Em4fFa>%u@4-%LcWQu3kqch3z*Zsyi)Sl;I9V`jZb1O8A{1tpMv#9 zFUrXzkU3V2gBMiV-jTDB*f zlTJH&^lDX-xk{U<|6yI3akqFbAeMUBe2 zmD~d;1@bflXP!rdUn6t!`p74gaX7TfVQ_3sntP~kZwhX}rpjWj!3Q3k2l~~+1VkXx zH}Uj=bp(;jRODdrMqruQ3TOeo{yt7d&Os+HIYJU})FAZgZ}IgX2NUJTR(DTk3gAC> za{qb$$K5EJTiaO~%h(zj6Epm)3nI2&W{@5}#Fs1|f<#&p!a#4lFOD9b0jXX{0J5S3 zxW04=m}s;-0r^f2nx25+7JwW1Kp_ekvE}mNbJy4Pe)MFM%Ma-it{!Bzf35#V-xnrV zKMtIv!x5Bfs=yM`y!!~cFu~Qm+s5WKI4u$BUPqX-+XC!pI38+sGng11EMQ(q?9 z6vlPW;?&#>T{a{7i-Oq~^5yipzIi;G?%z)BAKTsP3AkGPwC@T3wD0}&K>U}h{#j)3=-<+bE~JYTNlt*~{dH;!MfnZj29XK^{d#E3#uQ5KBGL!Ah=`9*rA%ijh>NV>&W>MGne1WamuM?|SAJMBZR z_R=20KuqlW8~z%f{}qUs5lSjy>bWSApJqy=lJX>OMt;u9gac6#2~nNEVR_UDEM~^7 z47G%z4xtcnni!((Fj8fndZ?h~&z|3Q{Oej{k%Ip{eKAKtZf_)?fi`M~W zIe)zYfC+&!W|GLw3qfTu)3JipJqTn&n2K6Vq8hB>WhT$6>OLwu5p2Zbf5i7k(w>^m z2%`FEo-zD1Vy9L+1$`<7N*Ka=@{S_ttw5WVLYm)2XI66UEI4iH;cru+Y00}5gE8k6 z?MBp!u!sm*iP{JO(fQsmG!!``_fdl#tfDm=I!EIdfDp)sarjoxyj+jZ~5DUT%(Y zD;T^zK^O|`m0JYfV_VtrSE0dD^pcclGxUMFknTJcOYMXJ{>_%L6KPTDRULoKP-CJL z90sXwwWjI<>r>cBsRWTh(^st#G|Zl(6qg4synb33Lv|^dm(*$V#ST3YQVJ^MJD1D2 zyX25c?o-P(;T)^vyXFwv+v(CILxG2bGB(>pfb;z%b4D(4M`Z&Nn@4#V zhN1ADCI=;OpF#X&9bjca@!2G7l{~;@Yt7towP6g1`qR&4S(-wJQbU&BOwh`qONPvP zVwTXtOquaatn1q_ojemWj^@iEMcQ=n#>IzT&TT5HY$!G3h{|aqbd?(f0h|N+?%!sU zj20HXgsJx>Y3ex~yp7E&S|r+a4&f6Q+H`SpPn{#X>NE82v5Qd{AUvZ#29$FB#ihFP zP)zbbv9RWyaJ*1d|2wE>c3Ww~V+{PxV8K=@E;hJx(Ws4U8uAsdIll7-nadfwn#L)| z!+(W`xVbRq3y_5sj$*|g$(gTH3nDgO)-FRU9T)HX+cu0;__w~jqad{p5+I&0&^vHX zgo{rTFKcL@Ga#H^uU{zn82;5eIP4C;V-=IzvFp;VkR7TfXZ!sMoZ1bAXdAj1u+~+r z5d%Lnt<%V2kNz8XSf*x>A)~32)r&OTK^}e+gaG-9y#EIoa;^ioEaU{|{s-kO7Y9Am zaPwDU-U3?jF{=#Bb{^D;oGOc0E++pvIdlu%Z=76F!!95i6@DaZl&agmk0gj6h2U-N z;@f=_=<%6UIYh1XWOc5n_H2(=N3UWBtSh7zHZY;xTvTT53S{BTJD;1f3u4W6`uom; zQWbg2qoVdfkJz$tzW_JbsPn9~(7{_heQIm;qD@V3;Xd|py*I3-AZF(hYewqJgje1~ zMk>lB!>DcX`Br!OF?T3h>wom*wLoxI2eVf>j!RF?ntxXxkk?Lha8$iqI8=GG^Ov{- zmj=HGW^r&w3f|>#aEpE6op`b<^oLl=9oihnyuh0u#;zR*WNMWSdhbfzsLsy2-u;aqk$qFF@X-e5SkL)ib(msqNk!l4O3|cHpt`$See1r8(C@h<9D_dQR)*-x@P4p%$rqs$?m{OVFAq@Sd z4qH~s8`}02%A-BXC&Tx&gT;sSX}~3_?V1jdpPxoW@`zL@mGfy)$W7TE%N0qzhdGNK z%Ei3dY%xexhOnj>G9F;kty=19NA9cTOhP%CZ#}Nrw(Zg!=Y%HGqNo>~HU}v&n{9=L zzg$Dvi6ES|21{bzUj;@{aZlaC=$yTRYn{CUMLDUD&<8{dQ!JQIdUoC4+bAo8WcVteVBk#9bx4G@$a)8f~ zi$CF1JlQlJozbxA87ePg5;5UcCnY+EX3l6I(OVi6A!VwM<*igXWZiamKs;km{83_= zx#1i%WvH8{Z=X&?%LWPhC~Tzbc^QoJvjM=R2z7N)x;&75wC)XQ#@coX~s)LL9d+ujX@L*=cBROYW-2ZGl(7F&y56k7bMAeUIIk%yL9>mf*odOI$!;5( z!uqsVurT|eyOcaC-FJ3~d1ljuV$meD^2ss(bItx=|I38WdTUNe6Q5F_q3-KFPN21A| z6P<8gq%APD(d31q$>C8e`L$q%GQcl%IG|)z^v*iEx-ypOEyHs?y=VON9`4dYg* z5r?mWZ+IWSaWdH%3!f@|2Ye4+x3)9a=9;n@nA+(&PqI$7PIzCgb-zEJx%{YMl}_F0 zqRgivN$~~(Bt8oQHYq`GdjjB;g6u^5QijYpg5W?5gr!mjUcp_59}NN3VD@t&Wa~-{ za4HK3BmiFo*WlA+1z)B5OCrR#Aoe3pTZJBe_qPPhqIe+;#6(PzQ@$qX_pxMYUo#4= zK1UM~nPNQK*jUb%^Ds)F&N7*mXwz#wgwd^1X8EIpH|lMacxLYFd~ht3T%9SH=F0xF(Jq!=A3eLgNqkZ#13gAm!tR+-pM3U(={(CGc~4c-Xg%V!FJ6d-5p5oYTq7t8B)b4I-(sd*o+$#fZHxn!(Weo{R

7ulU0B0r2h1zKM3!_ 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 literal 0 HcmV?d00001 diff --git a/OsmAnd-java/libs/bzip2-20090327.jar b/OsmAnd-java/libs/bzip2-20090327.jar new file mode 100644 index 0000000000000000000000000000000000000000..5a0f290a0766465fb95bf37c25d677dfa6ba4fb2 GIT binary patch literal 51712 zcmb5U1B|Fa(cG8vZ_kF6X(@Axz zpDG1uU=S1l000Pps-jG;e**xZ|A>DL53R`ib`t)!e7{m&!-05E{U{{}Ag)j<>g z2mDX}&l3MHSXNL@QcP6&51p*oqwMsQj5ICX0<1JG)$H_KlM=%+^Zv0Tos=w%r0jxA zB?x5tIp#1n7KJ%T+6m>GDH-}Px*A$q@d+BW`w8i##e?I$BjA4-hWcj$0HB*!`oDJh zUz2|Vf+~j`&rvHC{i2pm#+0M?|>3@L-{g3nc zhx)IE{!jkL^8Z-(zu|_S7WPd4rS#v2`X41zmcD~WNC1H5e+H=k&q_j?|5SzTY@M79 zY@MCxjI0fuoK)5!vtw8A!0#UU!I_Ocd|yaY6gpEPB5frZV@jsF4aXHqGZ-x}n4=R4 zDXyd1X*XLGER>}pgsN0&HJj0|)he3l)m~q@=eACn)8k);)lB2P>Y6&>ZcD0pzvhp}f^NrO73HO|?r&%#LJMH~_UC-x$pPMqK zXlXEcn3z3>DO#{ItXSS|sXKO09HFE`(NLqKf7kte=0n6$VW`LHCx_X=V_4QI?Vs)v zr!jmjCCHTjFx9u06ZrPFbcD8qFqh3ToQ^#LI)0|8si>;0KC`2HUa^PnjMrt1hgmUJ zH+BZ*QCF4IQqfi&a?6UXOjpy^Vf?8Os|q-xDtrF9Pg8X{T6ME6+}|ZYTQs2?WVua zdzr(k!`5vrimlJx0xc;Esm8E?oOF$1a@C<28CVb#3T}Xpw%?e2_f~LK!lq_ zA&)_TBjL2yOVEDfD`woLFNPfCHfDcgmr!n(EylDawun^_((G?d0{LMEYR@Sq9TYA` z-PS5*{Q@tB9dutrOC`MC&m+4&C`*L9`<5ItrqJUa&=YeF^GkCM?U8-)Z_8I>Jj@1sOR6nzmanU5CY{y z(0x6Jtdl+&s3Qa~VLt=ii+U1E7k~@xi^Bo>48noB6#3|HP3W~ZOBzCWA^iwNi7z_1B?LxbVFNxWOZsZg8tcy!hDwy`g$wM8f(c#w z0~0VuDvX$#V06$H?>DeZKD5tDJY>)*LAVW-7|`b*9bV+C&6HI~ytIJ{x|fJDu$s64 zQ8a<^w({4#eQ#WSoog@!ZJZ+*)R@N`-4W;u%#mnt#TaPNSP5v!J2zNCTFQVwk?Ad= z7{`|=1ES8LN?=|^E>wAqd|*dPPH-MYmB^e^CKO+;v>&@7&_}wI=t{Ekz?P8pjy&E1 z;&Q_Ijjb3>&WQoIHGFyCBq`(kDHn=Aby~<=PA+JMv}_1HVWXbZ7;by#FU%X*Uzv3p zCUo5<2KZ5005`NjArH3dmh8Ob2&etmq|-s#l+%I3&(k42a(aPwSzQP%I{LtvRP?df zA)P?`#%`1w}cnNI;+vIklXC!HZvx!ss zkAH3IWglGEQy$>n@{S#Y2Oi{tH6G~R(2sW{d)vW%8@t)L+o|_;6JH5wQeTPxOr}7@ z90NNb_VYsc#cPMuYw``}PKF(TPp;f$9TQ86RSTYxt&x#Oh#Ra;j_v2AT_W5hTprM; zU?bS3#SwQCQQ8iZnBAKKQ)2-8e&2(tHR`X#Stp!`n zBs34h40`q5AX3H0D0;Pu5LvRLUHZ1E*>96Bz4hJ*jnZk2IR~{uKb_bdIvnFBa8AQT z+)aZqNWt8~eM!55sjD>gB6v!MF@(*zMqL6}B|QO%*6?nj+%WuP_WMsjVq!Y9UeMd?Nh#f`c1 z#{t0i8YtH#c|2%gjxp$wMeC98c1x3LB;I6G|m?PCc%6cO(+x)&Rs`o1TDhU?Ml^ z@`5_mQN6eW&dN5A+d>I;f30j@-~99D-e$QD+en6IqQCUUlQ@Bg?rh_#HzQFgg6rLV zA)_nFv~#3BXGoe{Ho}Z>_2ix($as)~z!tVdI42<;o0Cx=&g(qlY{ zPj^aeop5?5_pr@^f6W7u;>n#iK}#>;v`8m&s6!{Uv`Hrx-qQ)fhZZ1>Xjq5d&zGEL zV%HZh{qG-iF5@xknybePWyV9*-xLV($*M&4L^R^zunsJPm~JrNjPBGD1>G@&;t!P(tCob9e)Jy=M#7L5XR%JNi7YCze*q}E?TK4WsJvWQ(KtK4{*Wlcd0{h z@otTG5~bafJv*>{ea6#v$*-k5dI1P)l*&I89{k;b3#yIfQl;M2VDN*7`?ZEW3GgF9 zd{+loz8X2Tm*V?%iB^m84J{CLlj4YciP7&<$DMB}0Ihh0tJSdQm?L;$zfyby#cA?H z9PcRJI4xxdsN^p)p2bZu8;b6!$I5(ZxUeT*mx-Kvy1n5Db+1ZDr?$x6G*9%z!-Afm zKiU)dYZG(2Q>qm+5wRjKTy5dr#9LeJP56FMUV^p(x72$lcH?dwwhuc`%Lcb2b@E@G z{i4+T<9st==aTb$hnOn9(FovP)IvC4Hg`^c$v5^sS+q#`qzylOa%(j7hMhRBq;tPX zlK57I$b4YJuX(yB>Y9Q+WL-aRC5F~}O@ySxd}z-1$a_ZQ-qcZjCEUK_Hp1Q^32(CU zn%sUv!ssT7_elMWR1*8j7Hp$G+82LBFvx$icI3Md3_-u4eQi$!&8UymZg`*lh?YBg zy?3a6NpBzc|7VQtSeVHLDKL?r0|5X4j|>1n_5V9|v@~!va8c8-+Y&?bfsg-X7@s23 zSs@F1+;EOc!Rrt2#mw`2 z{>pfh3cvJDL3L?GlcmhGAsY>I7WG3r_HmM`lF?2XGt6Q0&@83j^S9bevsuFF<>cqjku#$t z_f=KRdaRv&v=VY}P50g*!@t@^@2akaZ2!f5j0EWOLO2g-)GBdHex&0KP$-Qa5$MRK z66#%#7TKvJh0ntyR3Ygy$Kqw7yXVeWpKMZNdpf8P5w10ebes}%xrS!$y+m1Gy zIyWXfVLx=_^J3PKJ7xClL^|34zaMgbF(qLNj3YA1gGa5*|KlW(RijnQ?crh}z~x>G zzd_YEr}js`fwMGA#(Gj-Lq&iyta|g5)x4H+!o|LM>eXWitLj&GM+5xy{n2bLF9+N> zjUZS34dV9ck*-GgfWa8IZh;10jpbrt$MAHmcNk9T_o$jil5?A`|&0k)*-7(_+$5 zEpO*L7ys|2f-=QLU?f77j+FY)rOt*mCm+fT41&I44lm!sYBij7H?7+xmey;2U*%$$ z=P(#+ybdH5g~j^&^+6Xo%wyq1<)`xq1zxOM@k}iV7B$H-ZjEZ#10$Sg*>39Cj;8gJ zJZ4KFh30!9@nb2hBVHi_Sj}3Q1bUy+ahiy0(qcA}9{{j3#2J8~d%9k!Dn=G7v%{5i1b`Z_~YtIm6{L#?cUC; zACbJ>>ErSBNZ2umE0gDr0WwRVyfluoOcLqNHJ+wWq#uHBMt-izcgV~UY)t#Y?@{s_ z(ILJYzh;71ZE0V3miH3;>Y^N>yE$Iv7cwj0i4ggN>-hpK;)IRt5zUyu>;i60oKHt7 zA!6tuA8E+n;|92yrN}U!Z2rKfyx&Mm*X=csY5Z%gkM#Ap;FJZ4;l2Me`p)4@zpURH*k#kO}oLh4Dpoko=yAvbNCyC_Szl4X#}~mdZkjhWq+q zUui2atI@61EH+?e;sdlxL?KR;a}tIiJ@;m@Kz7l zVt}Gx927&++N1UTg-+k)VC6t46w2s+|8RnxV2u$i&>YV@YRHaWUkhr42*OQ}KxTyw zc??ZY83iP>qwr{QX-F(hhd@9QiUSaqctE8QtW#8&TR)}1Q}l8*^nN?wB~AVbzo{+UPx7eY!%>ZB1*^xbz7H=W~1P-g65i%kZ_|4 z@J9%w1RhpJTnsmN5N${|R%sC+cU+&1y;UY5qz$1Go<0SuGo;a|QyD!-IW1=>5x7B* z;4m&yc-gI&GErvVh2nU8BfKE&AREa1ms}Na08R^u<*i=F9wi$!jgZ*{9sWSgpnD`> z0rZdFy+Q_O4x;X$P^4TC3E4-6P%V-nW($tk>{F=%UEq9yFhy-4q=zCSaKk$u#t%b< z?bc|}q$yBIzG44ABwNg(*WlowZMDZsG=uczdiU)iIH;bK2lrvX17bn0iu363w(~~z zWE!g>X*J}RTQ9~7&oUWT_F#<`9^V4m4Pmn*R5Rr35%>6-`X8C{Ay?Hs{5>IzJX=86Ke!l zSs&_Q2Mho(FyAA049SbM(Gn zZzgXp?;G@g208yB$Si&Z##jE)j++0-Jm&v%kR$wG44I^@y^FK5v!jWD4T*?>v%!B8 zWid+9^2mx9yh~aX$%2}}ku~GWlqE_7=v0Nx;i?s6O3{NrWyeaP&CD)b@%^JYwJuiP z!^3akbHk&-1l%zW1rhv%c?Ms-1sF)|be^-XJ6<>McsX``Yis~8`+?{)9Dkz7a7;M{ z?UN5MhT_3(rpGYl7_yBqOgTmv4h7*KEkc=rCa=eEVwi?`F&_7`1F3e>sU$&bGb})N z6T36m%3z52BB;wLC%UIMOH1-?sbw}Ep?IW6FS=_?)YC|^x^?GmKn+8g-NcOK-4r!J z6VaTFgs@1JOxW{4oEGs|Pn1p?WwMS^E!K^gtY#-RQcz!{Deg8J6|!gO%vZ}zEU1H= zVp(-SXfkwMmpc=rtunf4X3+jU8wj!gEh!Na z)0`DXYW#PuF)ou0^2!T&mr7J~kxeAQlD9xZB zVXFGW{UQ&&W0YC5Adyu}1}m%?(XC1)xfu}m8FkD`jNX;4QOqC3hI9fO{JVw+etu+L zT2}|ihnGNvFMn=dKUe^@)DE{a4A-XCUNo4K@>vVD1cXzH%YozS-7js=arl?+Oa7pgLw+75FCQLjbM!6$S~MQrA!*wyQ> zB>33nN$x0*(^#h&5(pz4K@{Bxsi3Y*SKI*d^9UcJzet`^+ zkS5nqfM+P&JvQnPv^FBGolsX0z0M$ly`6OTFjjp`=RN|*u=#T)L)_d{5GUHZfA-H4 zv}F-?0r|3q`HmN_%ING_S6>VELFuNRB57}t;Fmzuo8%{!{R>C9gCRX-R(!t($nXC` zxBtgWG_d+)0x$poi2l6;=>9LfjVS+>kiH{&70xl4V3|$oBgfb?KgUK-RJ&6 zN_O3(7Z*Ug_IqWEy(fJh-@{QY+pp=EwjKAe5I5fRXl2LwInXbmetOWa$rwFo)Z32x z-sV1sqc+F!+wHd=Y(E5|ABxK#lKnZLAENy_TW^BvJ>vlauSlHX6i3SI0c{hAQ4+OD z!hT98IzU@MOr}f3gZMtV6iSXdf10+*Qu}2NKt4duMiw=JT$nNGxx`%%Kx9xEqK2Aij&EN+`Bw$ z&ADeDJ#{F8bIIpnyOc(GN-($6VM;1tZ0Jn56K!ge29{<^$UrIL-kRG+HK1nKk?sl- z#^|Q92V*tO@2vE+knZ9ZndU6+Fh=PbxUG^DcA?^2warMia4$JUbcVh?xLev48pvjk z9vHG)yvn@1C|&bxS+`u5e-XE6w?xcP*vO#{6-hNAFU-0VNdj3RMYNl@n16WYs^Qv| z0F2fUJ-h7S&Mb%s7kA`f$ji!0H#2XDl_XWhj@O=DNRW5UzS}gk{uK(56g6YP`&4+* zyv81`k783>S(Tb2Jj2XRMILWuX{GTHWLf1}M$Kpy7p09&eQ95>T-a_&-HNE z#-vy&J@Z^CCEA2(HV1COHc-AEBR%t432Iq@9_G-eMynLnV;NETV2Iz@;|>8&f#U59 z@Nj7K){d?=xv2%}4fNUb284Ha_~;(|!(y%YJajTPzGR||)?8DN(ngWFhvH@7Mbesc zvW9hCaVxiKS5>&y;u^Ebu)uEfWBZz{xN9N#4F}b--yiI)bx|~TS1bq%7 zXb$SF)BjXNYQyDzpQ6EQ1qx9>PFCE^aV{N_hX#42Lb1Mv8Y7B4h_c2yikyo`GBj^e zzqyQgb5PfQGuC22Ld{-FtB@Mgx>Oz{t1D^XdYf7Htr)n%0*d)J>}XRd8svI;Y2**e z)1jl{deLCN8i+SyoY%eGU}PQVVx}hMwjg{QSvN<7cz3%j8_a$?I`4Xs!bcyJM&Su` zk9($CMGBDWM1tFRLL2lOI-q!Pyb(}s{DH3X(rKsB(4hVw$k8^?u0 z`F%!uK4P;vMRbpQlH7;N7Rwwp)^f2rO?rJ`z#m+_2g5e)yI`7Lb+~nkOSXy`U2n{> zFh|#T-&_gjv2M$#&fzGMwsL8c1JxCh-gLGjjx}epkwo~30yiiQihVl3JT&_{|2ilm zJ!Jc~Y?OqgOwi_V+9t1+ndPNrFc>;GdLGDa*fA#iWj+6fw5u!%3RFbWk zERW=>BHC6eDoQQ8)ab3jS zb|Qja#Y68P3hmKcH2%a*MeTW8dil0!D%UP{-rhl5C(^O?BOeQ%r05-8i#TX|RIQLI z8*TcrJRH{E&?7%A*51@3KRnjn*rQAF7`y$qQN^Pyj-Tc7`x%@)CQEPsKCLC^om5*p z`8K!WEkDUNx6-Yy#p|8(7yZs2@*Q8Uo!u;3_!2EJ@Gg^5)5|dNL((yLM`t>%_cR9- zDmDDD`*NMRS7gtt3Wn`=fL|)o_T~3sMx{pbEczfo@U4ylBZjzv2C5YzWgeXQ-X@$uj zYnl<9W&3C0H|xw7mu_8&Y$Pr~w=)tZwp@QRfDA%j0K0J<0o8JMfQ@WicE<$`d&FHS zTQ(ycB5$lV;=DrsC`0}*BK(6tlB2SEs3$6s*C3AR-!OLEfO|va2~CXbuOJV(IDEX= z5B2R?ZaBfgcMWAebS{~bgmUHXboTJ2*~4!!L&&$5M|gy zvq5*LTCuuejoEE13O=dC^WbSWVNpG+VPT*MVrU27#&-}duLP0dI)X_W!aX{&fZAg~ zw`?cXUFuBRL&@I|&_QGO>lnbFU-j#H`qWrAgekl4AR6!+t5~8Jc@PcSy*1&84{gDH zs9!6OZ2^7KtSKxRha9I91*u;$=i-Q272oMRP+qqDjvLu)anpp=e!+EAnxyK09O<8@ z`;?j&YT;gB=#7z8Lyzqc^o5A@2Zr9zvTtyj4p3Y7K39WN;RoW;8vK|;N9duvcdUoQ z<~It3k>E>}>134%!wx7rIis@p10g4$KHP8ymHS~Rx-umn@HpaGCp z(f)Qfh}pcJ${Fer)>xYOcQfX=0-U6bL46s-vC5K1V7g^ty@I#i$bj9Vbw1c8?%=5I zY1_Y8Y5Tm*2R>qpd(2or35d7y&NcjT2VV<>vn$Qb*gR8FrZedE0{udO21}uE*j(Se z5k3@Cr^ZXj&G|^glmo``zL(v?VhguFK<4~pA4+~T8m*#P(Ik7 z3=vavm%?yqbw^B7=UeXKn`~fQV9%q>LJw6svgDi8JMwg*nvf zqh#*0MSGk0Tm1l{gt6lg?MGB_ctS}V4I6q4?=7g&CLQm$Wp&RY3e8WUR#TQ)xwqGEwRCYr&ejRG_H2(AOw`e7T72i?9{3p zBZ-qOa@mJxk`3c7C5cpZt)~7t5QXGe0%+(l1Z;wakWcg{DmMxO;}2Ov=6=(`1Sdg2O5nLm=ABJ8s&ycCLF3bikVLO$8WH`u~N_~{l%K^9hyVcxc# zX8{S1Ie}_wF&l1<95FN!X17ktpAw#xO}{cdOYl9W%LRBIz@?G+NVf>3cUn_0UD5Sh zhGgCNBVrswll9qQ2lOpWR5WV%)c8|7m#V5_K6YT#dF-A#!F%_zFkPNHL8+Iz6V-G@ zd?fjPcWGklBSr51D%zGERMVxjCZ@_gJ?FT)f2@-ybb2GgFjuy>HC9nlM;*&nyHm)- zO(h~_|4@RPDr>A8bX=&b3d*nB-2SwhWXiGuZlmq9)iP>H`fm_} zx0c?x`wVLtRg)LkineybCM{n#cX1;a`hhtZxFD!p;B9V~Db{_|EAE6*Z0TG;yi|hQ zw|FA_PXClGo7wjn>Xh+C0X{SImg54cTZ5U)~B%%%~t{@?`Efe|?9OGj0@kv41j}!hL!21f!i3G){3GBz9Tz8tOWo zxY*#t*hZhFX<;%8>rp-F88=G%&8lg__GAXPkSz&4wi##d7|Y^%txBG%l!Cu)WukpG z(8fTjg7up1Xnk_%eEWr(Zn9H*@Eb%=<+uI#Zq|l3zOQo2Gd{L8~;YSK^Iwx$w{~ z>-d47x)HW@S zVUOT0@r_hl$#PfgiP@`gLs{;ctnjU6TA@!V@h$nf;6?p&TV-)!qf+TxW?IEx33?%K zS@F@NS@BbdwW7Cz_8f5WC#W*)$S3=DrLwC3UD0GR7$^+!8FZ)+@`Bt*wPX!{_F@LBxe?A#s&{R&vR);@Bbd~c zttG|A18z%4{&ye#F=spB7HJ=i06hHu4Sz@zODyzQ5;QA__(B~%iti{y*o;uwj95Hw zNaR|$V0Hi{Ck%-fkGVNy!xM<=S!DT4QoZD{K@MF%2(CVrPNazsTM>6S2y>o}xyD8~mc&;Y$n0B;1Dd^Q`_^{cYiI3o zj(`}0Jd#HH*ngL8E!?RhhX!RGrhF7Wf7RmTT)e4}Zz&5hfDtwwF}1{47xfW+L3Cn$~?;Ksh42s9W`ba@38uYTal3YxZ9Iyh2L4BFNaqXc#Wh% zUy4Jn0inXK2hRjthn+vS19(FwJ}5z3<* zCDIkNr7dnvG3cZfY0ve)dy<`;Yp55R8Fke5Tl(;=UV@r0KsQL!3n{4`IO@buKPhR~ zSlQ?3hGsoGZWpNS)9FMJe+YT2)(tE6KV z_0417dG&z$Eu`ry=v6j8sj}*_Q})G{J2^K|E!0$M+o?4@)2UQ!tr+eUSUStBT()ag zajO)`mDhA?xm@gAIPMhHE_-1lzgAv8p>lHOS2lg!Nl|?_>dj8`RMz`d44*j&_*}+%7 zb~fZ0)T_sSN!+RRdRg@({Gs_>->b+!n3J~@_H_Cj^Z|{-TN!s=^Z_|o_6+&W>Z8<` z|EuGt?`f3(O1@IYW^LaP|#=l_xv;(^238Tzt14MNROfP96cuE zgS1Ge3tZ%Vze&xmHFEL!ZFw@AZpFZ==@tLrH)dg_UK^!Q`U2x%cLEEmsPEYnrz zBVJ@@MR>zJgx};NG3kQVDK#hcf~JY)3P!^<;IPrCcq=xo8XJ=$r*(r1^-?&~CL+B? zd@_M&m7hgx?#EuN?vtg-r75~_!&KdN%UXwJEB?3@mL&*`>OHPaD-mK%VocHqucDpZ z0I24L^`v~wqQg!<@P~4C)vi#YZ)E$4Irw=iy>4%W>Dy`fLN8zU7b)grZM}F;xXKrQ z>)Ebe`8QVeQ(W^pFTLnz66YDvb}7iH_&Mdk4&gGR;cvl9&@%R(H_J2RBNDgHecOmN zSFE&JS$&Ml2pF_WSKls0>TOmui|KlD;kJR_ZFinZM^U<6kzj%;p{F3 zU4$>?WQ z-whF2v)B?&ao!hgHm+WYrO7mvrN0`T-n?d2uur3gId-hsA|SpWTGlD^NMi|?{BXKH z7-Ivie(%T`KD%NWaWlYxD;1+F#2~4nm8O{|6|9ntk{E$!My;E%PmiRCqc3Bi?VA|E z+pwMPEsBtQMtN`;Pmc6rKv5108HGMJ?@ptW&gV9}#Dbj{#GxnXr?crQmeL<%j%~fi zX^)s2+Z7_!iy~=MlSWF68^D%gOwz4r#9JDGsG~KPG0_*l)E32550s2pHEM_0itxB& zqDJeVrt5d17vb-Y2EqKe;SwOi5DX$ow?;kV6mT07FkXJFX8V1$_ z%N-zHvC|Cm5DQM5_r;1(!J{c|*jf(&jlfg-lJJ_LfyKr!B6zv2LGY!ettro=?$;bJ zlo!Pa8U!s5(WsQmV9GJE-CmU1jITcgb#w&Q`?UX9+>K~=wupqfz){9O5IH8=1NqT`ZQeUhKa85Y*( zBwR>yuBob7YD=rVC@-z*H`-lcdgfr4wz6D{6`7LjG-w}{brW8~5D`PY4H3T6?+h?w z3#WdPO|<1ZZ3%SP7r|_W3hpUom~F)>9H31+{2RMd8oOf}yNzIM=7fLXUSXXDf4WN< z&>ct=?)Ls?%Fq8_T@yl4WoIuo0KiEQ008a(O)}#@rA^nox60cbjeBjDzu-2tmdqd+ z7)Xth`t6{pR}XB^lmu>eafXz0(fZl$R~lQum~8KRdT!E2aWy-Z-XLY?A!-)B($ik?C!b(6Ln`5uUS>*S=spyiI;&_CAtH?(#5)`0v`Qjhfp$jGnfsalw*Sd=W{~Y zItW;dOJMk?ZlQ4C>($lENCgQL$7xOoh*B{K)&bDK7`~XlCgbMv8G3b%h%+%L$7nT3ss-(9k9@qXldd%8a@K^^t;nMe3#m##w- zu!^icB;Z()>PEt#;C|)EzB6<~h0PDVd7^1Mx#n!&v4~A%JUAnna!g|)a3X~l+9REi z7-j5q)f%2|w(WU;&SdUiVZ!l54}uTF`N0LsIO70H#)_BI_224wqz^u_ADE*AL|^M3 ze;E~623vgstGqMzt8LhzgP4PhAGv1B1ZR(OW|dBO@l7|-o=s-!lnKt(nIgJig%ip! z#0$a=vLJ~74@8O}ppvqBB#LOb*`v#`x7LgIFOke_eD0H-g-W{F1smw+7;%%mmk1H%E~#b^K!M_Y~v7H3h3Cfv%s$&aAWLJbXhA_fkS z4A2+=fzi(`5R&6a@A5z&^-3*xL5_t9j}WuQ5J60MT8mS}@YDCh7Ly$1mX`VX#mo<| zC8Cg4pd6-g0iu)s& zNO*@c_W*HmR^yG4h9Lx=vg{345_;D>+yUo?d@ ztVoD-8Y?RnQ8>ZE{`DaoXK5ZR`vVvNicQ;EfiA9McicxUT#wTQ23)4tm?4-7iWJ%J zIU3<5)IdOJ{c0wZ3RH$R{NMwyiFU{&%nTNTL|MGJLB)t0=iFoO#gNp_V8+1GkPQD> zD-iviIh9z%DzX9aA1#I%e@QIyTA?RqFn!bj(o^(&gj)d#j7wxv9s6Jbg!_$DP~ZnB z0LTZ@3JF(kguyImm(l46L71LC#at-Q|zp{gScapAp1er z5EsA=5BCP+-a(~B``WgSZg0SLZi!zc=oVj}Rmg%`2!`^SA+-(~7@kyef<@x={bG9H zqV%K?u{9ukn0`kefz!e-&`m#Z*eB6rlT~G=Fwf#R!iQigoA<2{)0eCFtf|*Efad^Y@snz3#g0gS0s|I zwph^0`0TN!3I8&eW`rk70O0+wfAO?*18R$0e}QCw*8y=Ap26fx|A|e9Za3hPh6kYt zjtca1m%Jr>AD6V;wh&jfTBuJ{PJE*DCk2U5>t+*`q!IaBDp|Vz(8^IapNiCiJWPtz#fUS3#TydEFV-arV2@^+Z~!Y_fzLAz~j~<7cYmD zpFG#i%r0sAo2qRu-X~PeP0pzeTCVm90uU5Lq#p$XrJkg-rHCOth#1f>m@znB5QHp> zBZ}WbpG%sL+l*6UCr=;Dgd>K_f@qB*2X=rRD%hZrr+UkQ11D=BeX%-{ynW)2AAC<%r_ z+4|(cX2adBIul4%q6_VpcoT(ZR=#)XO{hJHf5E=VutLgc0aetXQ5#7GadaMM6066? zhV|r9>^WQ#cL+;(h61nH^Vzy@RX$jXYA_cpY$1L*)|;I3;sdHOgM)?4+iDbAg~})~ z#-o%=Tw7fzw9)ngF|e#KK1`X%aFe%amU?1UmCP^hy}RV8j`ArY9?r2#)tV;zyl^nU z+nXgka(2clW$+CT&}q^%P{SVxIEwrER=@IxP z-N6k{qi}d>q03NN`gsWr&yu$PXWqcFes3+P`Qog;<}$PL2fsNLo=m4oQWC zecdppaFcCc%W%(cjw=VSU&00CCIGst*~A6tU>3C=u^rYsSz44n>k4`?b$xGOz_hNJ zz3MQ8-deS@YuDUg%2x1lF{A8$;md0X$CN>B5N2nAI-$(mUO(J}-u_LGQ#J#Q7A1w2 z{xL<3Lf^9+j>xhZC5{xkhECOB%|5J`kOd@>eJid)M) z`7Bp9rvdiJ)*d++F;rGSrcaOm^*jbgru4mAgCpPCMV8%H6&e zTBMrsr^}Sn-*@i869yfz6j3k%&9T1X%})w;01$u1DYqN9{=91_dQ_A?gqC-|E2;eS zls+gcdK`6Be)-5An;|_atGqXtK9~xERTT{y5K`S>jl;f~Y1Lef6JShOw~y!WSR#iA zd6~*7NM0CZYc0825KkI&tni;dnJ+T&iqV)DN}@`6EbeiouR;4hiuZrQ4K zylfm!V3FEI9EndnIF|gd&bb{e*iFFlOY4?NX8#U5ED4TSqJY3I8K{whGS{LZURlnZ z8^-7d*$&wT1-3D76|P9#w1;c?o1dLpMO#g~z)$4sgdRpCFsX!EO%vDvb^+Cj6B(7j z+Av0yL{|*Df?LU$lNb$Iw}-Y`m~ta-vc2djPt+x~?zfYAIMNt>gQoRn-4& z=+xA`v|@49a9I=UQYU^qb;s_dCy_3?j z-dN?shVO$WnK>@$ZGZENwW{s4#rk$V>QHh{CymcN|>dEAmXFu*ntC8=EoWpg`w)%k%4Px zHDt_ReOGVv1(x&z1SGkD4=xr|HRbbCNJZRE1@4qGbG zp$4FfVq~GO_yQ1=3|^hq3r~VUnPIdzMS_ zONp^rh4MxHl}hZX8i90*kC-!8|dNK#3Zgv$W;AcBfj6C}{-%cxCjU(TpD zk!aC;S}=hx>kplhLG}Kz5{pe-hGE*NFLeEFl5omsh@(s9%`8BYi%%|8dy`xLUUWyE zb#iASoCNjA^OG+j>nB}{q|(L6Sb$d#KS&;1{yuyjIEEMh)zKSSpse6~Y&<_e@4Ne` z{UCELIEopwYP@qVJkkhjE?PE$7n80V*?7<=FTguI7}W*1FK2)KgsS%b*~eG(WVYAY zHV*64r3!Uluf4&Q2MpAryuRz7+vA^mdGItlxY*Y93(Ij=f6pi|l#a(cp{;{bD9NVp z$-TmD*~^NdvgVSgx{aQyI4%_=aHLhiRg{yz{_vjk8_FRpv;yUX&$)uMG$ zWUgF^a3ua>u9CwQ>#$Y;mPs^}_`B*Soij)d4NcOsQR>Y$OIj-*FQeAgdPL=WS-i51 ziHKn7I{{M`iSKvDJcrHjlY>ROEP_9&dL9G^vL+iu=swrHZERt6yawdn;|r9CpFO3@ z+Z)-+a1wLaolm`LO%dHs+B>aEi;s{bD57N5;dazP;$7<#v(GxAa@R&-nQDT@(H2FL zRhOFLi154J1iq4Q`m?#IYy>1fVG#Gz1`j$-aES+5wwjKegRuDq83#|p56+{w#u6_q zJP$GQ9wdW_dPc3PR8(=mG)*y;>UaTkORjvBD;borB_`jTvZhNiWXE}(TQTy`G)x|S z7Ng{Jm=pm#jSA5z@7)kmR%6FKDWG-r>dIyoHY02~uY8TsSx56!3lqFYks3M`K3OaMJy?m_M22s_Javutct7N+u3Qlz?W!)b z%eGz9GxIRJ5gReF51ILpuNj#c=YHqhy;|JpW_P_t9Y!-TIJqgvjkBmW$Xqe#-{Hh# ztd2h&3Qtw*M71v97>md;(7#agUCak3BkU2=*cpXRlQ4eeok9D(j_VK{OiBCs9_HVp zD;Z-^KCUmu(T(XuW8`T-lb6FLMSeWJJ52X@9K5qmU3uyM_J!6cw zlQn#fqtR>@`vMtYx{f?D=P|owcj!e0%`?s5`K%Hlp&#rQ*{tZ~JQR$3YWW^Sf=dHBTJTUP~l7 zdQ2H>ia0pVtI8%QDmPDlhSL7P$JmP_-yK5%I@v4R%9$;6_a$I!BN;kOD+M}Cp*0*{ zpJ{0>rgkj;qzZSM{ET|N3f?i55nJ+jb*hP7PZ4-e6Jwa9HG!y#qzEp2TG{~<$nzFj z$rGB^2-e{|tY7J1h^Gl5IQJLGy2ha#NS0+yBO&#P6R)iOJVI-%vMY_Ns9K`mr00tvDa+Z(>CoV%-)#lKo7TEtjZYylFb`nvz=snhV z&vlYFkLz<86%jw&m50ldOve+2xSPb`S89s;quGmZqU@(iaZj`F%3!mauS}(q0#14> zE9zm>8}V%dyf^i$BO5hpgE#ldeP)dA^jN2nW0NDXGQnw`vpgo=tLd_p>IUXadTol` zsMOhmwbGN$lB(A9$WN2mf9^Cy?(_)8X7g5*+}{1%@2@R2Y@OH%uHTxq3d3p*_ym;4 z1@& z5b30JlYvCJmO)^Kdm@}dKbrKtXb}0EkVE|c>RoPx1&{R59M0ZEn^47d2l&Jx0Jhc} z7fGu%do5LBqbmI~gxhwrP8pxe{hC-|K+_}E7*tzN(P&mpDuEZ>s_$CwH2jocdo(jVB;T5dWEcp*W$m~&9MxB1j*RoGlA&Bj; zwQyE|(itcyS8tPn(SLWLBspIL3CfOPP!eT5wq3m|M;JC&W0*q@7*#X)8O7q|4xV2^ z9eGL%cvl#V`o>&0qE=|!vQN08e*o051$v0%RL}h0-(8oF_lC1!V{4I#=dvTQjpcBE zsdgG*$fraNS-|UqZBXHw2i8Gvv!ReppbnimF=ovd#Vo|yzcSamxgJlC;xd@SQC6Wr zaM71e@qnIjOB@pB%TKj^G;bDCn==t5aG2$hw*re6ao=u<7bUc9nT-2Sa0@9_K z8Agh;a*VEm=|AqmZ(tv{01_yb81hozh`~dy+6Q^DE8IYi@!}W}Cw#0MV zk-&1ZSuXfy)@9JvV3yiWjh0)1cPafXf;x)=vBT?K1>@{(=eMWvPXHv233jsycGuo+ zlGjKvYL~|wU+?I8Jd#XZe6(t)?X-R;A8&B_Z3%R6#+V(0ImIsi=L!wLm|$RwzL`CQ z&7$e>jeqKBFf*t9@Qi3)cO+E}0F>2|E0C$JxGAxvy4BL6#AuY2{fmB?zX`SSSv0;f zgAJA^kZ?UMGGhmMx+}SS_$??IdG(++^o2pZf z)EJzy{Uzora)$xx_fNsG0bB@!p)xLK@(%3w?B~jB!yaWjiK#~%Dc{de*_uG?NB0(Q zFi?m~g|TySM@>AqERdJ83e#N#k$O5PR~$*3(7@(ZewNaMDk=;(9*xYz$LL#RmY&&W zuWnmX%5TK*1UB8gb?&^2so^Y>jiFg7-VDOc#q4>CTp<^JRdt*YAxe>Nr3DJyK|9>> zq2-CyPw8x7%%i>#@I2R}q0NeN)ZE0$+`8-NhH7`x*tdWC15MRhI@-y_>|O)N^Yz&y zY0A<_aWWJzEMs)4uJF<=f6cme-j;G!7pwHs5Gn621KQ}TkRE1cSH`mo22RT*TBO|V zVQ<1HvPhh3(4+Ln9pSKQ*{GhNs6&t6$IR@pLu^|A%%A-D z_Oyzf1fjmxNT*)F&qttFkGgy0U48SIDRu9<0!a-M{nQ&Eb*R6zu|4&0e`wIzKEPUU z7z9D&=2+;vb<%Lax@V{Ld(kWfSX4Cd@bomi`;5pmcwX_0OwG7?P#2~q2-tG9!tZ)H zaM(LwXSAC|0DZJF9D(*jKHyI1gBxVZsr_1(@- z-_o6@w^#&O$OPXdsy*+L`*(r8zV8}GTV#G{s@*?tWcs$%Wq!X4o`ztfy?dM9K8<78 zFf0?Gmnw9#^JZESPEqalasY5#+V`y{x{^w*A**${_`kW<1bFzl>THx+7k!#~dl$;_ zy!=K)T1(=Jot~~yp1HvQQQfrRQm9d;9`y1}je+ujd3Zc-W05zFrkgQA<4d4F?Yo>e zB=ho4Q9FArDt%A(y~k!Ub3P2) zCF*>E?`@k(5E^~fJR3!NHF@bnrLED+35Z|#))w#5QLja2DrL049iJuf$4z#0QW;KM z)*02FCW_CIMB&)33}u#67Gx#p)UfB`%{cD}k-Na=UB-Xqc}CFpl;SQ!qr$QcgBRMXbhJC;}^7Ltsia_ ze&%OixEM)G$@a0gzgz}IqRFV74{hwrbiDEn=Jj@ECdM}aBc!B;s6=3xXnF?f3=x_i z7;=vsoZsvFE}J=8k?%=-B9dHHj-ZjeQ+J1nZw11GIENY#58!YnV}4Wd^UwlB4?JL! zga=2jauyz#5`{HJOw+Eqj2G&6W3^Aq#JY9u_7FeU%zN2*Xp_rY_tkH;*)eewfzjVQW{bK#!3V{l4uK!Q-Uy7U}jv3~^ zLT%`!jHdLUMw=m09kdKlnDT~lAzhJbE2^EcYGt_GJ-OD}W%#xnp7+E4Knjb#&+Yy) zmc_K|s1Ys${^RLFjE2Q;ue%bHu@f!!1$g{iS^uA(ho)wvkUMO`{2zjk0 zif=lgyR_Z68E8%$Bz3yN8CG3ta>ADr^}lxog(g$n&k9n>?7$Z6dY%3*qP64lhFU+S z?o`;A9rW_1({ks}iJ1MAD08pyr!?^72MbBRUme==bACMH7EEzO`*=-RZ(6t6$&i78 zuno1g#9y3jhuh`2n+?%PZ3uht7`UFh?waz@XQrWzl}j0`SuLRr|IIKjlV%ya2$wNY zEV{%2dk2F~SJ^sf9QDK7NfHOJunzbSQFelRjA6)bK4w%p*xLD~kfP+aoTOV#ZN_N} zb#av#Dv>9-VcRR!XXEBh(>i25WyOUXIJ|28O%u1XUhQzO>;RG(is3BTBl}&uhZbvv zX;HyKj%mSEWdv;nchbQfhXr@Sm3wp!*6SV*gMpQSnSu2XOQWl2*gmdltZSxwVAIf| zBQ8D!%}i|#U5?wH%ziH3M7`L1psC+=8wjpIQ1CMyy@%uaO|r0J>wU+ZzUP(fzeh?y zZ-?bh)}ypm_L8zw#iYOb`qL|b=brlA(T|w?o6uQmN2##2TyShi6TyvGRa>jDwM}p? z?5nj~a4zC)z41rb^QW`%#<(&=xCi&#w^C#9JB(2u){SbZrbr*=CV(&2YBi`Hw0iyp zTwTgR`If2pF$j5)Kxjb)8s0=s6qqDCGC2yDJUjBNYMCeZ%reWfMq)X|>HHm?_>ZUs zjilnd7?442lRNvu*UdhZ{GTH}Z{~?P+4HK?xvf0wtex~T7<{qvJ~MFb6!_#Qr{mK6 zXwc)VbT9QAz7cNLB_3V9r3e$AiEljreV2E}6NL-Bq2-}?a&gx$nON4lPmBR~eKP)j zE5TTz^6zl_ClA=_07KC)6q9ok*_r?&eZSxw;PEKP>nKWT;&4Btu^`2}pwnRq;vfZ4 z4E$(&Uvl|fmxT}s;xGqMhF%oES0UJ4iJ}7vrXYi1txsz5J55zgK&AxpAk%>{ieLT$%Ex=~>B!5U&XlxQmqJ{4E=Ks^>6L#bZK?1}<^$)+2bWU;3o z1tJZ51>oQqnyj<4&yRvH1P*{YTlVT2+e5NNAm1*&ra9O_rYwE_vbZjiO`<76v+^RIx{u=gQ7dftD+?2pVDsEkemw z_=kZ;S5CnKvs8J32eCk*qS&Jct%DvTUef}*K&2v5iroQ``~rUzMEoYK)uLhfH8^(V z$dn`Tb&Nte=07q9i+F7S>u83{Ryfy*kW)KonnteEFBnT_Lu;~2U0GLGNuZ*)GOxJM z-_KWOXgzT{5yX@N4P$O#;5F&P>?TBO&Q=VHION2gya@C;ze) zNJeaL``ua$h35zlKFb2UNRbwc!&Xkon5Vdn=_$_uE6YGlMT^a5t}K;Ga^RwCHn7AL z2K#EO8__SuPMqTQqy|&YwnAd^PXCJ9Tl6kx*A77MoX{Qe$16h@)Yq<|lGcIXW7hO}6Gb>rma$P-%zT z(g=&yy2`OEUtg&=-+?%0bDYTTR$Y^&p{Ao$uXAU%yzDkLb*!clYp(|{uU+59bIRa_ z%Lfx9sB(~8J~}x19^IVHZ;CM9uCyBJODdP=K;qaNh3=R&C&EjO@6H<~F|1M`=p0256AYQ?Qz2NY9ybS(HFMwQFdxN<+$L6kU z_&W@%T7|8zrnAhM9Mt}|fJL?h?~UeIgVw56n8rNu9Ru%)*V)TYt)#p@hkZMDM>R(I ztO6-bt<7wCJa9sh1X@Q8PBZDD=0b9@xw$K9BREsINwLUlGzqQkXu%p*eQar&wyMF> zQZRoW6kV0oT@zbAjD|%?H)(`sW`vM+HS9rrFA=Pb)L1vVvUBO z)RpA}>Cdlk9~hc(L57Se?DPyep{hp`nfOd+xqnAR@Ck>{+jZ1($%0h()C-sO?o4&= zD(YJT;WiaUKa2vCwAI@|sBoxM+Q+aH2Jk1*2WkuArCSq4 z=h%2^j}Aj;K)q{M?4JM?L;=MMqL5{q29sYtDg&BNc8fbf_R+UUDfIw_@mp>eKQ})w zE_IFTwi(79iNgSKuWxbDeC;}zBZ=%a)X`zyw1)>00QhYTmW-epUvE=Q=WyC6simQ{ zK97JQ1B{a@hx0GW4q%7H*X%7?-9*~yC6~6o%*{>`Zef}dU?cC-Dt)GITou-TFpkWV zQRhBzwe&lrzk7I#$a4`dm(y>7#nOBsv>2%*>B7R8iq)Yq(P!{nmP;$XGLo*GBZ` zZxqiS=Z3KxP5mOfVla7Jai(19boS_^(-RsdFEaN_Rl}0zWtfkO?}9 zWo0v0qm3xVE@o!3&a11(XKs?p%DT+1N=sKwL&`<=y@{{V>`eAJym%;<8E*i)-4By7 zpj~SqFQME4ys6=CX#mFG(Iw(T23U2oY#4lghrfbb>n#`g(6%*LE%M_7IGoP+B5mUE zv~n2vxI{e5B}y9!uQJ_VIOotGSUt?!#kP0ZMgbh+_{VzW+8q-1Zz9t@#HYH8kK#{X z^A?`B7o0U(e^Y4h;Lth!T_C&G(KH7J8|WFo3;DIr%IIXin=s;Z*GQru3XMgTI_CgB z(`aTNeywknRm?iY+`MPKDR&ZDs2h5rnx1DD6D$HJh1RD7IdEk zkjPEff9wtiZ=l0&h(eFxE#H}bJ|4jBVh0mD zzQ4^mOlnPC+au(qI0D4RHsq+ zk*ow!5tdaOf5a&0Iui7ZW3YbySorxWKrtFU1anGiwBmyR8c)ZifxliLv=H6g%&tZ(d|wg8PrSYtEZ-%>+6?EV1vu|4DDNEU?_pWbu=QOx^9T>jV=`Ls_(o06 z$^9(TsA+KzrB?yCpMrkhT7ipMXDtQx*eBx>Er;}kHKiWXUS@aN1a@J42K z$i+fjS&Q&yx9Nn=Ax3wWDHA$d(C(NxQ;!yvb$|9~z97|n6O%OpTjmp6=nPwGk0vYL z^t@S=HP`$}XfFlzVTdLyU(TF~hxII9=A01_TY7<%wA=OC)Qmo9 zEs?=c_3Oym3AFmqYKwMn)bbrVAoRvi<_+IgU>f@kXay8rx~h1=lvJ7zsAQt#i{Mu} z1=2ll*!(!l;uoNh&UT$LwXjo(vZ*ZsS;vR6NedA7$vfmA^Rfx&dSQtwWGF5S^{&bt zhP>$P%p4fW2HKi75jjGAPbOBUZZl%tx^7-~gA}|qQ6&;35`i35AM;Gsx-cp_4;)a2MA z#;g|Ko;3O{C-xfgJR7ixq~HRP%#|Wiq6ZWul8lI5PS70T$(Yb&O#U47ni0qp;mE7+ z#Hn%fO~d6+@3h(|Bgn);O`$6iO~Yj(8ddPJ9R;VF`?15xFx|t*0BqEJ+FL`QJI{Ja z3mZesZcOne8AIA`*wL0Y#w0y>AYLrgCK@Aje9+?qu0rUCZ)@2P9L7C^_^NMfcfMK^ zj()jI@s2dRV7#>(es>n$aX^2GEe-Dwz=+ps)Uz4yKnmvfi100bHweFxhcWN^1m|Yh z-66ku(+5-b<-loEhFPN@CK>+d=`Eyqhy)WdZ}{DzQ!Ir-W7VaV`f$Ec%X$l@g1%wR zn#{jtpk%5BQ(?z2XD#Ov{n^8v#|PqIqWeX2BOj7mGPO5V5av3>{23@Lf{VT(g0Jz|JY@%!58Qwj={X|q3n{= zU}W$U7@jxMZ^e0_;W+v4IGV#Td0)!rE6Cc;Sl%bnH89U*L91Yd9hmy<-Pyx#BJ#yGxF-Gu*q)b=3QvLI zy`k6FP`<>|O%QcoWc6pkdwof+-G|+spOc>7S3S&r-9&6GHXNmUw!QA`E{sYb{`inP zFvf3$l7}G!Qw)LjpTd|E48cvG#*`;EMbQTEZJ*GUCmQbB@c5-AQ&?DNV%EnXiSCHG zSynzoe4y7~^L3oPANr?Gg?=lZxCp*@&=!2N-f**?dJxsQ^;E>F3%YQyFTVl^m-B}f z5udHYhct&{1?PRv10f0%6j0w*KEMDbU&uw97887q!DKhFza_QHPr&GG3BJMi62PD3 zQp(aPCuLE}x{E9z=^e(-vZHy^k}B9jr&RRO&VtIK)6Gi@q93OaCIupCWW>impAc#7 z7XE}F9D0))#~?`gjx{Uk9W4LgbEl42FH;cclJ>xp?(+BM2Nqs~9?k5OaeFNegCI}h&bb5^@2z7X4xg`le_dlK+xcLl&_eOCoL2V0% z^)?f6kYIihB&R2?@k3%Nh5V+@-m)<~XlO^`jO?@6fYc2m%Tm!F&J9m?Zx58ZkK~jT z75rksT4xR3A-a{dcQ7mJbYjiBo+qe!i~#Dow0v|ZdFugT`qV=`@Sz+H5X253=z2gX zLimAXejS@9xZu(x7!|lOeVhY0aRKWLm!a+b5g9Snc3#29obNp(P2}9O;M_ae-Io{` z>JwD>s76^h*@!$AjT*JI)`DR2SO;0x>p9VB4Zi80?URssZAy9J{VQ%&KDy@wJ2cgA zOq$V!0bb+;V?PhJ2|76LpI)ok$8NlcV>6|9!sp~Rw0Yk>oYMdfB1fTzQ%9g z{_r*&Pj(21eh4l~9M+Y?xTqoNmq@H=?)?Y=tQSXb_k4OhSHvTvpqk4VOi1CyWws&= z%>-}r8^+_JnW8JY10%ynx!j@=eV7t1hV8P($cQIg{5mY92@`;%nMYH3gL0N@LmILu8RR+ylNFBO9P2vH=Dklvh9iy%Vid~+2^~9t$mnbso&?hZCos(s zK0r)@fE~Nn_=gj2mQCCZ`Ci73Mn9CSj+0_BrBa#U1tlr;6$G?JrSFq#Ri3kyi~?u@ZN6Fwwv5FU4U;P38HW%go8y<8D{+tjlq z>IL6k8fA;Yfuna`-=YVKof63gpfagWXQ}Gnu!8v0{fHHo@Nd2=%P{BL0R9#zW9xG3 z$E-EwlWuFe5}C-#kFu9|YsDj?>$}zJ81rUs@fDhNwi<#CSf#J9b=*%r4rY`tOi%*< ziuGa~pp38*2dibOHmqxctY@<}tWkpDi6zTpeYV~l^|Wy{;f-;p>qQ$aSHkAW)wbH) z1!bPqRN{tt`QYT-DRxU+$Oj2^&72xX)tr+Rv4u=#W&=A%!iq`Q$a)UJ$+G{IvjE8? zjzWqxwJU1EWr{^(nAn8OvgKmb(S$9Iby9?-54jk}#yHkd3Gx8nRTEGBVQab*epD51 z@cuceoJoSfc1j%%y2>}j?Bdp34=A!AR0a=D29uL@78r(e3^M>nTQRV-U_hA&X+noR zaBl6PN$jC1YIi~lPpc^s0Jy}$jqe{Z{^>w3dlt{x&JZi(#5`iRhZ+5XF#Jtnh8D#{ zXNMq5s1!Q}>%$RSan6|lS2Ee5`1({IbOa7d%VDg#2{|!Jerjeb?$QTE=Hf!})C1)p zMxh^q9-D+Xu`jD)<(_99`ywObY1Xcf3{5c6S~|BlgnVRmL^DfK zPMZ`SjlHUdyeWv?Zur|WoU;V1=T`mHYAZY)J=pd@K6Ox!advGXs;zyKwubNHagA|v z@*>#}yW6qq#TEPG1<>SDlGRW!O8iqQ25qr)?`ply4Jclw*U51b$ld_i6$zPPWrQ{{ zyyU##vD5wp;UYHzhyucbCp6_#%Sd>wP3Ivi9K!Ln&bYh=Ba~B(WcJUdXcTLkIt+Xh zPS`H_sNnPMz*WKx3+?Y%n!+mP^1H~c2hy>ELARSTjHkq{eq(24U2nqtJK@35vh9q~ z3d=LU-d9^8_g&*M^QE2!pV{JvULi*LU8}wt4En3_~E% zZZl-IEw>B1PNxC{bIdSLjhx5r7WJm{St3|ueBgoH8hOd*FP?aS=^0J6VX0_ll-Ua< z(@*u{>FVT3y8mVM^%nv zSUBnxp74VMiF26W>g|-+=&^V?SQRgz*|iHTp8+*A+aJe`B?XDxQUz^@Nb~}dU8fVDfLSpqDYAC!Wy#`C+U6y7Ds^|#C zht@in-i9@jVyPugi26;0>aT+!*Vu~2-ttfjsvuuQ+0I-1DU^AnFzgzDvt{>6 zH&kHyngSOPz4wCstx7XcU|yybwP}>J+WIH_)i3?XO_LwbSf=4lM;&>xw=T<+%t!BP z#*}8{!rq}=Q{O?>XVIq2+hjARYJfF%YSk;vNQC1k>g#*1YeTWi84{9juW=lC?#JQN5& z3t-J@DH)-#q&gGBfk$$}=*bbM@dKv0`!F;}bSy-!zHKWa+AO6cEKpq9cBVA^3i~09 z6q)^zRi5bF`PL(CN6fSk64J#uAm~aiZN<2{C3S32;8G>I}BjM z`G_I#kvnf2F@Yh56+MMt7nT&lHHH~Ibq)uRoS;8R!&!*L8$p?ppO7n>2lh?flQCz+ zBbjVtF{hwK`C%fRY{N0<%wvGrHDpcIjFD?FRMtC*`-6?KyR~y?h1Yhd%$t0MZQTW@ zjUYy}F3FfOdZ?w>a*AWW^rkHcqMY4TRT~?IiJwa}r{iO+uMuN9C6?|;n?ilWP;SW5 zodnW{!ZH%jYv$>G7O?*?YOz|nguJV_^U^4kwv9YuMxVKEjhMnLLT^##7!ki!lDT|M z(!}caSt+KrOxGo%w=zwYw)3UK-KlE2)A(&r0Cw2XgCz zND)KwjgTc$(TC|eVZox<78Zkc@&{hvN zb{upzQ!t$w=|a0CGwGwkFM@fCR)fpk!z&^Tu(CB`8Q2R7glo+z)`EW9I25kJr>_H- zAN9{)H>$SOQ^(?E${(I4wfg@JQLM&rm-rYI4}rh{AlVwDU?0mRQrm~y8^h4s(>$VV zIy$xYOUlmPkGNAJwhyv8;h;us?!h*ppd0^aH^E>$3T>iIF>j^Z^8S+0POwgDwv8S` z*-nLcRN#pI!jZR^SBlFeym53 z5)4ki-x45G1S?HtB`6gjWAt;jq>ZW67k69oZIT>zR$(RrPY9nPmuCkx4LGF|X@LqO zSYAJ2pB^E`(yaKjVRMz>+KF)fO~Cs~sdg#EbsfgPFN8^oAI#f?fcJrfNdw<+dWShZ z;GFM?j2>B0D9#H9w~xiC!3!gFhs*u^;F#x$WRJ`+P`B^UDDpe@W2NSFzG2{DAI=l1 zpfCRGFVamv#J(OUExg+#IKQnNhZe$c(#7StsulN1^wU+GZm=kvUHvS~=vhwv-Nx*^ zY<3a8ShzWg)YzB%eX==cRB2gRMe!dMQa-d)Qa)J{MRR6i7BR1GIRo>b3Z}aCFSV@n zKg?-)rrZe1j!Fc9$OOSUzOZ-uD3T}<3+xH~QTr~b7fP*D3`+S11F&~&laDy5XC9cO zeG*>yVQKpmoCcpT^e6&D+;=d#4E_;uoc1-G@y>8VdYQKFshbjZ&L5CY^t3G8rb<=; z#MF;-0*uQ-eUBTl>PBa16~(XLrV|kh2v^$jfXdu?YZ3=Ik75BHV%FTG$BV6KZLdiJYJ*)}+qXEugm3bJu2RMa2vsy{$I zWhl(0FwSPQhf)Z!X-dEsJ&oGs17d$5G^SiT^xZ>pOc6R% zoH~-~&mRapEV1ZtHM?f09M8Bn4QGq^9W}G9}1c zNY4!Uqq_5W)1Fc)+>}4Z>L9SxLpnfx@8PNZr2~}tf|2XqS--p+HT&>~c@+ z&=COWiXsDVBXB=7^EPg|7O_99-a{C1E3GCYhQ^$Mg%SFvb`ip|T)HBkPU$4YzpS`Q zpbIlb{VnE&pl`ivJ0Rmcr=p-Vb=j#Gl=UyeNCc zygKOHgDJB<$$yFYD3tEIBP0LH9ey$ip#hf6ODsYY1y(FZim6`tRR35&oo&L^D@JJU z6@VWMsehV(<7*4*vL9ujBg?h!YomD6Sdn0Zl8>l6{}QtGVk)1^zcNI)n;9%9Ef`L> z_?O%vQLY)~&rn`LRm_S3^UodeDl0q=DU3`Uf=C_QZ;bO1f@ltEguHJiyhaR(LzLa~ zYzSTc5D8Vx}$2S(@l6W;xXuohIP+*SApD)@+!+8&UGt`KVd>rgr6>_j01U6*+ySQi5uIPEgm` zt((8QzACm33Mo2hQqlrEqt*G{z~X%*<+t%g?Q?|2<3*p>JVn*HO*hXsfdn+MXQFWf zz8F@3NJPfy-)QoE!s6+^Y4FufH3f0ZgnuPy6q)c(wcTmLuD>(opqX^)#5W?5TR89ZuCa;b=u9 zS@Go(arA55W5>#`8oO>l${dkvMs*&6-J5qP+lSFP<7`no1mT^ozl?V?310>C-Se+8 z+(b|ug4{A+n>I{9?8$W!@FyZ1q~AmO5)nlFJwll#D=*)UDvpWdoJ;f!Ao&)A^N*l z?wi4LNR&_h_h9=l;*<0ZX)Yz=jnpetA|Ul<(tm0${qNoKeZeRA8_HkOfFq(e zoIVx&6NO1eflAxY#O8+=HP|1mk^8@@!AXV4ainR+u&Vkb5@k3ksvIWO=Vr8uJ#k{x zQ<~K6*i&i%rz~t!-6H3>nq|cU?xQit?4}&5c%16IbFh-__*GHy^yfdkC+&{$%vx zCAavl=k!b6^q+(|M(nzZ%pa9jk_W1w1xm<)%E$$)vSD>qRWV9}8AfJGzznf6M!RAP%VnPixIEd_Tjbrtyw z(ab2@SZfJmER7gWD8}VXK6OA74@)YRao_$Um@4VI{S*q{kcY9VKr1hE)kJuV-~Pv& z66$`zlSZftY*!hENMB7TT03-92d+mA?op*Ju`a!zu?rvvt86wx?;Ny~f^@WJx@|fxQXJ8YZU{&~$c=u3nq1RkkskUWvX^cx_m- zly?d2hS9BhWvEe;cgfurvt4s-2C?LKndlwpSM}Uju&i%i8POqfb>L(zprC~C!1_da zQv!brbk4*t$~UW^tZ<)nPLXbVAI`_ulgXU% zsCHo+1oPM?$zKZ$lb9M;&EDvYmB?VTIP!Y)!iS%1=IG&0#|pgCPGvi=z>$sC#n&!HyL{b$ z$<@Vu(mZlbl0J?3*P-h8Y=St!eqI;y*mnLCQ;!|(ODYBAkHoS3(8j8*^qbJ?TeqZF zzcPgggRUBj1^ntI2++r(l}lxRk10p3bI<{sD8~x)3V2uIs2qcK`8!->6n<#sqo2y) zAp>_|=xwN^DiTH7;b1@u$ULnD%2P1FhvBqRMuGvF`o10K`x!B7ys{le5@{KqDj4$k z-iHof(`pVh?86o`b;2sR24nu%){?}yf<`(F$Z^DUB>L>xPIV$ZE(G&epuQ+O5Igx3 zV#X{w*cVXS1)|~TF-_*5igo!48)z@yTe5$xyO}O8J!&?kS76DPFi?{iD2mTzzMGtF z$;}Vhz!ydmv_pZU@qv2E4~z#_j>B;+2nfDM!;Oa5t<5AZ%?{++?lYr)=f?jomXxW) zO8;i#Kpi{NgQ9a(`{bfStxEb%c;AL<;!+KG#WIklAX}QMhU4!2_r9I}L=;fe@aQk#AF7K$fp=yIR`&&o^uRWqqivNLgt0zhKdLqiMV-T87Vd=VKB0qm zweP7u(aS1FIA(l<9#<cRK9i zJt@43et`-YzQw#}IX%I+R2gJxe2q3Q-_SyAQq&yS##3pgQEBB>twAr&u4KZyXPud@ zX3+!IU0ZynF#%(-W*@Q$Jf@>93Dcm@omu0(Y;?~c`|&wcx|#CV?A;HjEgU!I&nH;N zzw&L&A9!5|32fl^Q>F)guTAfjnbRAX!tc?@3K&?yAJ{bBm>pC4*KuY44L^csDd@9} zKXAx8c#}8=^?XMTXo;99=T1}f>(vOUafiQ{#NXWHSNqGUh8c9~W#`9sT6 zJ>zVWrDc@sppKo94HH{46E^x}p0*JCx;b+_x^0dJzUZ)#3>eC^{DT3M;nquk%_CN! zW2#0>Ihei%J4-7w4!uc(r2UuuD28Z zp>v$8D-&tA05TeO5!3uGal^hqF4yFtzi(ZyhV+i(vmvd1Uq-BP1DLbQI+P8O97bYV+;~=@uPLDZ&&v|6n z{VV}d=O*iYo=@d3??S;dY?VXiX?_*uoM;F4T=?y8UT+zhfV^GN0oIfj9+$h@(g&Ea zcjB$-Cy0T9)13UMq$#L(9@q_H+M#jn8F1xs}7JK1gk3S{a*n{?ULcy7`$TB(vTOH3RMqU}a;G|~GC>j9@i?*QSH0zliB4TEE z40}33>e)O7;g0Fo%y&RuvR?-EANbcS_8O=qkLKCq>m^bUmQ zI5exww6BS}VC0zhPMK#$tYsYwXhyy9*Dwkg!ptCOg}gE8SosgmG6|RoJ+J^)K5Aju=GF?1{git*#b=@>DI?}I3?n8i_=UpHE5vhZQ~SU?0!qN}pU5(l0=(%SqR-U?`b8Xu z=k*Iqr1;;gk;3Xcr+xJ-uV-Vl(0=G6w&)}L5iGHTtnlD5s5|mpvd3{Ie+%A>vRg4P zKKR)jeVyH1U!(QFRSM#QLp6e*9fDm4h00P0jX0D(qx66o9ay0oy&NWk5%s4znVSTj z_mvRii;mvxaAPT`V(f(lQo9m*lS^y*(SY0JN`V(7gPk&@3QA8fH2^`YyUL62h#tb8Wszk z3&AD44;9O_VLm9=PSzZ-NG-m_JU!*)tMyK@M3Rp%RfAA(4tSTTC z>?lANf(0emVs?OEgX;m><$bbGEE;A;2Jb&22cL{M0GA16brhstbq1DJ4T7`=A}qpa zrhxEsUkVu1$A3(Chl4*JD{0}NAedcCfT*Z|7_*RQc)vXS7mkG+;Nj}->I~bb-x6{V z&`b~?-)F-}Fb+ZYR&c`f46F#3*!nGbs~w#o3L*v(K;aUAsS7T0YRIYYX;KhZVj}>r zoS>7bPxnnfXMyHb&I^?R4eJs zE9?g3{j&?f^g942R$L{qDP(HtC$|cFVB zLB$rP%XwV^m-9ECyt{C7D7cf_CmA`4lg?gzgCBmtW^1a#5|C`cjL z?H6;#$}%YG_2~$rO8^)fI+T?wFr=)6?WtTvBzVxri$S^2Yt&c49;@`Hc3#v^pP*g8 z$MA1ZR!}g!VZvZ^h;dy(lrA<@Te-zAk@Fhq`E57PI53lda~~)SLrYFn z4>|Xg@Hiq%b>=7}j%umxLH#U7#V)5rtXJCS;Lw9qY*Apjy^=vkWHG4oh_UhoxJ0jC z^ZaB3bMrMhQjEE~Yl-yxiT%54Y>$q=Qb*V(OUT=pZF?>#`-MmzBNY2%9JnBZNXM{i z_SQnhkYd96$%cf9fwIwK$NXu%51hhEkd0qqg$vnYo8-@lsu^XKjDkjph2VtbCf|W( zK!laC=}Gz@zzvGm=*xFtQ2Z}lm_E(3uM2_wS>!#~H?9qw9SXHqC={onLen(V3q2PNVHw9yJ)3`&Yb>Z7GhHk^2>UAskE>tuCN(_dILb*t z2%CHLO~?K}|ihg5-Uk#50~s+EbA|PR~Y>GjIK%sIKQ1XUyXG z4OUL^yt~?DWdRurKk$5h0MO%=X5b#4M^`P0d^(bm(SN(KW}7lu*OzD9aU&a-!asfV zvLu}&#j+`G62T-EcdDKZvp5O zR1G<(f(f8u$8#Z_4&sp~b#5S6@hFe8j9*+lZ`X%lAB+)4G<2^Wb?a7bI(fomj0q<( zK(yhaB4Q?R>G)Ly@yO-9q1Cs$(xDA5UN{j*MF;{vaq3Lyd+AL4TikhIMvOYsn$4Ld zVsYUb<~xLE>pS=th@CpkJKR4ag;~4UW{~R42ACC>+Y5IiQ|%NH0*?vbPtihGcov&G zCuMd526a~<0hV?G9<6b{sI5Xxx8asx#htMa4$YW|S3zgScq!scwel5Mfp5g%9~%nV zm#4|GZkif?In4@2t|070w1mN^r3)}lMK=-BQHZpgu+oX>U1$eO`V<6#@jdKfWKA2i9vAV@ifnzOkr>k8jFt91Na5 zq~|vJa^j!<;{EpXae6*}RQrK*t^N2oTlZ+#Dd?H-S$X?=b&pt2I&#oZeGLJ~9=noINIroa!j zPHcdnRCDD@xN}_>I74^;``D+nVwObaER(`Jta`Shdnd3;l|y6wOTu>?DNe~D1`&%b9K5_)qp za~4F*)An8)OGwc7tEzEX8&s?HxvR0hyT7MRUCE1{NE%c!A>cYFj4w2)pZ7W`06XTR z^$(W}kMq~)mL>*_gVwV6n>n#=b;G7r%gS)oPXF1p-4KEbE zRR9S8yel@+0#_i`Ehz+g0S-O&S|zf2n|u+T*lFlNlFYHqOi&mE{5aAE@_-UhQP(Eu z@gsuP55gA7%3G9aZb!iD{c9R@b)dA$x5u>BYkzTOO}}EsSPec+Q=L}y+E!{2gx1__ z$9USJ?`d9Uz6^jgdS%+TqIHa4t#oiYx{I$#Z2x4rV$788r7n5yt1J8{n|~^dF7N*U zCON+eJ<`pOt%Wt$^P+Djz~pr*k7jrdKu?QrG`x&2p2M5TZMj8Qf2#L)cqR35_#A`DgB`)Xf3S7sa zVG4lP%?oft6!ytu2yoQV;W~wUA7#oVmme#^Nb;zbI64Yv$=-H#H=iAFNuIH)B#~miLbv>4k5@~VUh9XW)?}C~^S(S&(8;J#H=!O?{W{)`IIeR* z>UC=!v3!vGO8f$&Wn`E%LB-?;%z&$@DzGIOD*XdJxmBWdRKQv|Q)A~J^7kB8;#ah; zh(CbhO63acCqEGa*_I5mN8K1N2(v0F`rS2o*B%Q7g%7bpll<6SvL1hhQ0+G#=#>Co zfQ1_KmLFmo8W9*&YdI5vVui1n`7>JWM|PTz-9a%d^Dsp-PuDjO5#~cT`}{BS%0bx4 zTcXJiRjtJDm$TTnvsjgrn`MH><;(|nY5Vi%RfiuFe7TY| zo+v(D6j$f6w}n03K~viNdwAULjy;d&Ue98HaaS?@7+;!>@B-gBjsV;uH}u$#*}IpW zC0P}oXX#&vRC{Yem_Ui%7jHqWJXK?6SUnPbDQNn}eFsdP_N*X@Y%(xqe1P>>U*nV) z$SvyNvY4NtHksC~Kd$a3clwT3>p0wc?i$>vfNi5jG{57mYGri#Pr&ED;LzZU4SSwL zsZw8VW2P-#=m-F zCoi9|@LQ!Jl>S!}dh0x?ygDF5rUbeZ zcZf5Y)D743Q0DA>jAuwruT>7Dtp$kby1#l)3H8O|CRF?EozgTaOyA4Mb-`Rw#K!~X z{%_9V*P+4!w|S>6gd21DPyRcONl zUK4a#HJf_bgx3fHocL?dWhTgwNjwox>EaOwHAU&+q#}6&2--i^*Q$Byyu9k^(wT4H=z{Qcb?B z?WgfDd#O5QORukUbL1sKsK(071t%7u3dDj~m@JNAfVdf9uQ&052()%&=Yg1z>E=LE z9HH#+b8UD!%J7fzM5RBrmi(|6zWZc8Rga_G;Ss00^Hq5bLgu)E=5n*#-=yKKINOeE zsI(L)`Dq5pP-&kF6YWcBsQf1gN-kCGN9vlwMV^1{DC}nrFNXKtZf)jV+;Y3V(vsk^}u93T_FczeJ8ig59_%d#io;Eu4Ckb zrpk8~wbabSbx;XY?irCab;V(x>mG_S=g&HsmpWt+2Q54 zSU<+Wn?{>xIV3B#;_G*p{Drb6&L1_dWj&jF9t^bfqimGWo}Df*l$zO_WL7oLYKw11 z&W27gLWnBnZ4L~5qOENxQp?4s`CF7{tZVip_#=Y%?+s@VWr5S`u#Pl{ULjVM%mMc` zQ<~iiD=>3Nl5BBHa)w+p+fPidW|}Pg6}A;gwsj35C^^@$UJk;}bGocGaL4A>78I|- zwp5wgvp0e~?KQKN!YuR5q#^YwtD4jC1tg@PYRrNY^hj>G8&7FP%ZZ(g<8b?Hi*+h% zc}*)7zY9A(n6jrZiBiNI!blCd=t@?;XfTNrhbcA==o&F;qRrLY$kEhx;-rrT#5hUZ z&@hRjoq$Qpb}&s7RpRPPCDE{nEwG6Ng9VY5o7_EMAr&hOocn3Jojr_t7zbHi3B{op ze_}FW$^+M;VXOkc6E0H8?(a;+?`JuS) z5tXBTr}^Ag-&E)I`k)(~DaieYBllS%bpi`_F}`=_aun89yoAh6+*{4GAtr8*fFuB!ew7#x^y)DPisY9K;j^iXvD$Oxy^GjnA*}QcS9hyN&al= zV#Ed%ekh8GbF7KfWM&bH0fc+W)2r;C9}x@yra^4U9i~+t9eSh2#nZKto-JdOy=k8= zB9xxsJ!-#^Q41)9F^?Zx^9ceiX{c>b92 zgwTCnWg9nfBDE~#gmvm98mwB-yq{!IXm_$H#XrJfd1b-=reNk@MsNFbE#5UW49@U* zOESMQz+0A!hM62AEQ1`BCRcadf}%~*)kThmLx^L#xdO{qWwqX2Ya8d+{dTrDF6;$X ziF>S8bU|8H&6Pw!@&Od-%E%JBSzXSm@rfTpZT93Y-vBJ?;qq(SUFuTzSj0;Q67nrG zD7+9<8r36DAjfoTHyd+V#=w%PpoDWGhxOygJrd+1ard+f@!P6VADfqk-^McvC<-ng zU)t}!)9y{1_i4hEBYg$j^p815hlS1f>i{Y+kWWQmr80cVIIV6KsO~oD7;b^ZlM8*DJ}XgmN@NuOBFRXt`+xWrD$~s_NNN zG}k={?Y|ZIq4FH^;R|*t31-(tko%P^`43&0M=_}zwWB@_1VVANz!aID0J$mtA$Y|G zRyPfcgZ=|5t9Z5aze=P8s;ckz;qQw_uE(WUsht{*FhcTwZ2u%brwe`Y|-+Rgp{V(iWKiyc7j_3-A>lE%!i86p{j)MOsf~? zLQ*blxs@9(A5OqpYTHr%jZp_b>nPpPGD`C#vLeSep0EQjXbACnp(XvXz0%U5k3>xV z0s0NC81EdM@fPUKMQ!~@Si)_J+*Ld&Tb<7NdZ^RVxsfkXG_Di9sV&3>)fFM zX72NLggA_7OYySWK~Z5vqX~lAIVN@(Q2q6WtRf+cLqs;bK}*aAs>FNcaRXb+D zN29M;SJo}I?QgF~FnflCtt>U;~8i9yF_Ug`$`8Z)76kge4-_}x6RC0Au%}5j0 zT$9ZPfBudt;R|=t+6AK{UXMaoL!LDW@1-z?i2|zy_3gL#ulivM#SIL71Ijax^(7=a z$K-hv%K@KEwdcGo*_IZRP$$W+r=x?Ae2p=OO5p&Ok%I+r#u$+2qD^L z%A0|^cd4e8ChS+2+#S@D4YW?zk_+XxJW>x%C2#*=Et!NZ(0v!Vbsr@W@^_sK3J03O2wK7?|vC|14NsA5;J^g@kD8G-&&wF7bYw>Q(P}W z_g1O1+W-XZoCB^L@iu zD;4&WRrTXXwy?m*c$+|a+Ga$PKg3KfuFk-8cu?1?<0(WF`SPTmK*VEpw?FwZR67j4 zF1T}KPcnR+!vDE)m0urxX*9$#976J4RD1ggi&wQ<65cbBjl{`Rg;TbzE|U^z+}T(< zKl{)yU(vzcO9v7UjSc@lJ!U=g;7nhhEkmtK z+--+ugEV%8$UH;Hh|JyB90Ru)>45a;%fAe@VyX0|T(FZK;1diHF|tAUcLk&e8zRgi zh_t-1q}kQQ;w`c=^Z>=DSn|3nKhLMP>k~Rz+7Zy(*N|D_3@Tl4kD%~WZFRhRbNxR< zVqz*1X&Xc>iN-Xv(cG{jDB z7&$uu&HEY1&9()c2*YaBu8Ks(UBkopQ9gdo5M5`BB7e)|U=C`-oKVc zcTLF4!}UwSJT8>B%p)F1)7%mbgK0opx6n_H><=Q*ae)>@_u;3(Sxscc81ssrXx+5i zT+!Xk{h^O;+u5ACmKStEUCL{+V|tnDZ#~-O*Qf=QDilhs6>iVO_~TB}H}b ze|4{}yVDC8yq-OVqW#&XPG>C|$!Xazs8PYryMo)vDI>6wLFqHX9`O^DLFRu?)v29S zD>n}&8Gb??SFv3$~yW!<)z zj?)H0+NdndR}BnUF}j^;72D5__MD|7`W<(EiYW9~|1H2E9pf^?nHF2h3Hkn8x_> zrPvY|qi(>`wO=ED%cVKW=-4r0qQ#n9M1>wyvSo@pQe+-!Q#Q)fY!+#=@8*{*vm*7l z_bJvj$}C3KjUpv}A-v?tBZl4phx9i03vVUMJRLkYGgEjPR4l_}^tH=7MT&E(mUQzM z!mFC}-eCB3WRqouyaJ|V;Y9=ogm zUC zyE2cKLy86=5&2D=i&CBH$^_gqYMa-;AZc;HUtHK$n=9bbBDD7)&_rV8K#HPTS~TfT z#zY_r04xi^xI6@N82{04%f<{YNTMg%p-hv&W7EPY*cM3`!uF6(!)!oHYaU)N7^it`HK2|+aAN%{xjCtj6(w4yTdO>9a=}PL2MurKC`Ha@mv}xy# zh8Uy|@LGFZ9Z3H}{zeXSk{=J6is@p?3}rQBE8zKR?|O#0z_K3zN6&s2~2LONY&W_N`GXx7WAV?B?%q%JW}JT~%# zOxZG`K%om{=(Ll}YmMea-{+zph}}B$?o8)Q{qH`Wq7jteBHARKMGEHh`+}(mB{zpZXK!TkQ#+qgd8L@C}Rojcp*5GVk z%da+%4e}?&wQ976`L`ve*)LL?M+`D%y71;p^dBnwN`>xaW=ge3^R_vtRkuV-L|0+J zsa;1Qy#^6w)uyG<8BUVOQ%~LPy)EFkY>c11pHO3y+9Hz6Ze7S?7q#oXEXl+-~!B*AKkmUW)0I8#^otJWsI0d0~Kfi2QK75D0VOD`U zKUOTCX}%GPhd#`o*Gb6LKkW9S#8!ZlaGI*uFt=^qG}^8Wx6Wrk4yjRv%7S1u&-a2U z^ov(zellqjE46=I*Y!W3&3)E9biJm_g|i3E^^Kc8wn(~fSIwSPx5M%y9OkGRY98gl zxVGF&N7$?qKb-vzT)wZe_~%$|vQdSa>YY0#I*4b0s>My~^L^FLQH8D3ZUb@*n;$-R zWQ>c&VMw^V`xB1p!WWG=<~vlp-Y*4fXtq7$QT>7!@o7v*J9D0Nz5$}U=D^HJ*|1?X zs6(sEpj3n@?w{uSEk$bO7<;W4hxR_4b)M?HfuHEACkR`YD3Gc;n-0!MC9l!XVYj~V zMbHj{PJy0U9TQn=sQb%pP@z?+=>Yk(Aq;G4f4CdlZ)8}OLo@QGALgjoP;JZINDZgEVB ztiuTm?jl&)VK!vUT)jIv1`&K-*LxCg|JlB|p>jJb(eM7011`W(Y9iCSzK$OY{&JEVF^I)xs1*rZEwl zcf(FB=z^Yt$M%%zAl}-5nEo6{ZT^zopt(eaPt&U?xMY(f_6Tdm$304~TL?vbh>dM7 z0hA~iL=d;sv%p^J5UH$4hm*SmGY&$5r0{q061KA_DKpOD@>UiR|1%JQHeo0(JMRPd}8H8w7CP;?dDuHouWq0Bk(-E>PYdM2m(wW1!)_{`h6TT9# zrJO=#XyX4K8_At5_B5vV6_}K@z0&vuJ#fYG;tmjogW&(xS9a0t`>vU&HxXo!q494Q zte1InC$g{J$lB?xDGopqlWPS2!k5vo*0^?@UHJElvLPxEJA>oQ>fXY(P|`Lr<8s$2 zq1ipcxpG3)#C_`+$aem9_VZvZ${8-}>|+q^^&dJSGx|NnNm>bMRSbOvFI-`{Kg}1B zoSRc@zB4Ma7k<>t!oo##@*&X=&~84`h)^nT&mP6rJOPyP)$es3Pjyp1ToU}mNmu>E5r{Z%_aGhjPIg|{n0&~u*HS(a3T}El z^WNCmUf7gdxu8fwA1aoAq>I%nx4@T~(4A!z)b8?YG~R32R?H@76`#|J-zVok%}#Re z8Vj(il(zC$Ga0*gx_FtcWHrMe8QfBSP5R4df+B3FXt{|Qr{JcH1Q;i5ye zfKet~Z_ zIZylTQ8S-h{J&zZ>&WlUj{yE|`N&QhS9ev>3z=D7ulT+US?ZL0{Cg7)k1rqlOFp{A z=Csp078~@P#OQJA=cOs4N9ta*d)$v{p^sXsU+4!l-q?;&&;Kn!-K-*iVb@_zp#>n_ zI?9!U8$PGhep~~$5u6~-O>lajsd~wE#dYJ9Al^Q_T;2wU&qD?qlT}ihiD(YazL#SL?kHZ8oOp%PKZfTrmZ}>p^K4dkts|l zR2h!EJ*@xdjj+y{lZ^z^Y5FHi?nRQ^47hJKBpCbVqYx^mj5^d764jL0PL`B9p~d%? zLRm%zEc^6r1-`c-v9OAGcLEM`xsGy{;G*HHGo;m#X=W#@=d8E9@n_4?i~{fTuiGc! zNutO72#gg`wQPYm2GSD#5@|)9Na$%^3+s?n`=j~M7hytYaN4t ztfR+hiV87|XqHfF_}56K;jMMAx9V_O6-}71KnV8(+@h>s@&^XvGC_>^PKrz(TTU4% z7DUEPW|t`#YE$Ax{>468O6l=E>?q}a$>v#~u@3h@Z2qZ?D!<=HUZ1w(Q<=N1l&p?2 zi~Xwd+I8zwW>AmyD*W_g=hdXF>IJUc6207i`w_QzRB<`uTC`R&izO1?X&UM`H&Q>#QLNbsoq6hl$C)`{^o)-s=c6v3b} zJPljXZ^b^bRBgw^dGfl`>7~4dgVT3*!o`xz_rJ6;oM&}9^_vdV9NWI=5UT_yLXMbv_kl1{ zm18}h?MaXs$98n@oJ~LL8XYPLOhAVpPkV*Oylcudf&OFZeQrj1C4rxl0*R?A=WWjh z!`t5TA|`ki{?m^Mo{A37gJsNKc7Yh~GtE~v1uvol=Rs(@npIzjdbydTIDK2<4yki^ z(h7Rfc$MPG2h1mk<}67{++nq_ng6!5>xhG?L}?_vRi5QqF1;q2*{X>%ljAK*S8r-k zsz{_#dzfa^B86cY9(JkR_!7Ou^`yVE+d6z4l|4^sp$*1j1$i;gNFhx()hHH=LknK; z)mpY!S_Pc?NEs6-wy_(6zC3K(wE#W$-{=dKoDZr_igR(NwvS;@y2$o3M%f}SQ}ag) z?t}1i3x~%pQWto~+F59|X#<9pI z^y5652TX&7YZYuOeK~xN@{G595Md9tSh=cUZ4Zt8w&4UwPA}=+-+FzU^`JD*Fnl9} zXi9DP6SywaBK5We1Fl$YsUAO9?%<&&N;%~LhmapGp|#U};Kw7W0y0J|lx&*Te?%@v zmO$v%z$svj+I=tl@ew}BmBXQ#|4_3+armPZq2U(wJq>1pVlAF7@Q&UA+@sX{;gkEg zR?<~D1d#fTB&NCb~i-AX;&C z=_wK5S|tYAe-!%DYTx0l1h_w4<$a41NWNV-MtI=z+HuDZw$>sl)K`ew#~`$32r15- zX+QczMS$FfZ@eG0(BcRr6Buod{AIkV@{X%D@T2oYt?;tXPk3oh^D3EzxNu@wcu)oC zy#6j)A5aZ)rJEX9La^Rjg3nTzLP~Wcf!hpdK~Ew2H*s{m zq*@mHiEz>yI}A-vzoDh>nLs94DNI+{D{9}-q*Ha#g@P-L+*xQJbd&dG;jw)|Cv)}L zr8c;M7F2r>m-uN3Gj!{#|7V{_ja7ImzI2sxzHBsC>Sji9rq@%4y&D6s-b8Rec{hS@ z8*hfHR|4Z|&V=UM$3DOJ)l(K|3-`ce*VbB7ruV4pZqJ!t zYtJ^4d_|hxpOk8AuhAQ>?AdfYd>s$ll+idiXZUA5^Xz19JM8vW`@!F=jqY@C{hj*v zP9{mZ=6{w7t||TRmEr0`%0_0HHN+9{R3vTaBVO2Hbrm6?oft$+7UPlwv*wkx)i4jw zYZj&HEgZIE3zDL0$+_Wik@57QbWV*wD%9`c%eAi3><%9^W8EI8rS)K89H=@Y zKs(qVq=HUVOrbXG7IVFxo%Oh@KD4n$#hUt0zuL$VY1^BbmPw;RPnKVos3@|JYp8CX z(Ep|6muk=x``-aJ5N}~RGXAl> zHZ)<1)5uPB;=U%^4>`;$WdQrto|yCZ!v4eHt?*C0pi@-ZkztZe_}s;$>8lzXH5;?v zYaVuwUa+w?6lhqhZ|cRz5t+K)Qa^8tlekhU;JTiSadNK8C#(ug zMz;eF?8K)94j6Rl_t_;KAK?a;QOo9~jMEFjhPp6!;Cj_V3U%@}t7e;q0;H?o?dR!u z#Pg>s?;!_g3wym&L&2PaUpZ?@SAO-(y+d<2z=E;c_TLID)pR%p;x>j#AluM+EElg#NC8Rk4LMI}6Kft+On(krh=n9wM&} z2+OaZ_C6{q%rd@N{)!N!&fd0a-87$?o^=oa!RMLL#)&nJtPgvpHDcwzXd>9N=tKG4 zw|st#&${oQhSct%M=9Vw)|f?YczSE_ykH|7%nFA1DXbzEXA? zEC@(1A_xfa{}IKn@*@_uGj?^gU-8t72_PE1JwNl`5cgLpie*5T8KWnI1tOE;Tnby4 zNwJ7L?KC|97hiS3PwMN~@VpXtH9Iwc8G^v~5!DYXni zb5~SF?M6l!ZgbV|Q3VsEY2iym>{3n~5Ld;B^STA{e4huoNznFe_m0tM zhY+V-v>aX({jpAA{Z+H9e$`ZicWm)|Nw@Pjy9F++z>xajrCo1s8{zdL=IHjt#{Laf z2x-=Ixe`oi;+EyU|31p{ZM)SxD*ENte%M~}^0m{y{d-A1#y`NQQtwx|8K%x?l9GM^3(Gl8Pg7SdhT|NE8#m;f$GbD z{018adttIz2j_4K!toX9F_I?+8J#(k=WTrR{ns zY!kLoj6nqj{E#5D1|Q>i#V5EEwxd5c+&0cc1~?7~^9!5Sv_3TDXmk5UZM+@DoB^RT zIo+Lk6)oc?YF&p);OuGCj>_F}D|ikq1UdtcI;DzMsekp*z+IgO|c$DZOm* z!!xa{9|Glzf@o?qHj|>G!z$IcwAuG?9YPuZ8%~&b{dC$D?zcZ+davpq@59=xTQ$97 zzM#$VK;`ys#~f4Gtb@wL#bOwJD-f}*TKC?C*C^Uj5HHc){Z0Rxh#7~&4Ql(FYP^zf zqsP#SYnzfyy1K0i~Sb@qlvv5CoV8yDG&Iie{aZ}-D zO0W*O{L~ub_ZF)YA}Tr)K_U{ApSW50DUz7)W|L_Ah&kmz>`DdLq+G6L-PP&pFLS&7 zk%2EA0Ng`r+iHYxF6=4uGA=~k0Yhh+6|<|m<S518Va~kke}WxAm4^HXk}tTDCwW zRgh-lZP(rAwAbgZI!>25ax@>b#LL2a@OI202_;_iqRd|QelFRLV$;le)$)|g{co6ju5l5Q6vhchz_#mG@zxps6Dg8X14TxeQoxs$OE_?d@ z`nJJ}kbuDr$8dRaSVW|rISf6sD0QkPOKQd{yYr0=5(7<&P(gL zodpdsoc!%){c73x^vrrXdGx)FJDXOd^SSDJ^67)v`F)Qs{eeH;rFJ&^75m|EpwB&K z70n`gv9NuKMLUvOVM26r^|L%B<>jh5V(blA%kuXoA9ad@jooO<>p?8y^{Ga{#Bi%a%^qe73z@{+#YMAOSd@oVNHVO?>232 z@t)cQK6?G%suH);5_HWe^)dwJS$ib_O@LZvKmZC<^lQo87ps>}PLyEY{c3#AjA1Uk z+ZU8s**zyYS#~c9&iMxe{8*^1REZuL%RX)r_iCt&lYBY(DuBN2$ZVWJ_@|R-=)utr zHfwn%cD0pcZQ@dD#A>7F1dM-DOjo#^1`|zS~k5t4Flp zys1j%@at^qQmRLfz#ZsOP_s3&6mu^7XNz$udo#tysWU-vHO|MSQx&B3*W=!ss-uJA z*&sq*&z1rD*rmMimH_(Hr7X#o5bPn8GB#)WKsyO~KSHsT1Gc#HU^x+I@S7_cO$MI$ z@2x*pdUP1ZIO(bX`;nY^HT)ygc^+<_4o(v7RyB zC9;cEX44z?Pn7IfcW9`tdMj6~hg1cTl6x{hX)t zF&XDDfTa2ujPvY37JaOmIRqf>HhRrG1CVDM(_xMPNV$#SFwYO<*v7h=0|zqlqhHOF z0R{Lm36=71;&Y(mPRei6b6~FfP9_U&{-#jAYaFKDt_eKu4bF9bzjEUZ-2H#1Y^#xCA)K+~jK6ySRt zo;>&n4((&e*46np`(KxbVqEXbML;$0v{YDA`0+WWP zEd64e4kFSlqah#e3zdENa$@+hMVr38m1Aj5>Y_zxXVf+06GwzgH%UkFVG}<=xGbsm z?%v_@>%C(H2cuP=bEoFsqvyU`BPaVdVAHsDql*w1k1le*%TF7AKhbgPDtmp-eSNpB z>nLT_k#qlXnyt!1cEiqbBP=D(+Y_!2fk{`DTB;QqvMk^Z1_uB9kG)tf7IQ>mT>8 zyWoIs>>0*CxIMhRFGps?h(xtwjw_jegY^lH=THe<{0$AB9j1y|zjtcNW9_Tp+q!z_ zR@wAw|Kv}*)MT;SJB(gt9Wn4m`HDv0dSn%iv=A+1??l|+9_RXht?&P^R*r^TF%4!{ zv_l)VLuUU|8Rcq)8-3@+<@Ec0M{(|F_gJCyxvyCsT3KAZo5-E`ue@WMbV>SpPOI)g#uI;7L&usyfqVdRZ?w;M@CU@YD9bc&BX8on^AdCI(r2 zW?T!JoQ200>?p}p+&(25^!y_@cKH|d4;HVV1Uq3|yf*n7U0x{)dEq1YH#=u>#ux(z zJhm9rFO1+T^lD9ZQKx%24NW=F>M?d@<%-BGJ#dH%bR?~T6VwXa3TB>M1{wx{g70G8 z1E9y+unxNLms?&F^INEs5|2j_CY)I4vNE87Fc8+YTyB99#53oNk+Sq-y@> zPn3Ee`T=Zp2b2P4iDR134OYSh3P5`z&2HH5^8z$V<0*l%D!bYAzM+aL<`N0e-!P^u z!<;t*=^{?(WtI>uyZvxv=(LRS%nfPW)N}wN(f`tYMuJOla)V^Wno#)Ekv?jKv@hMbRXtlzE-_O=CE$oCdV)qiNZUs~~2m$pFn_j=!G)(`$*z zC?g{>IE~C4fe^c)_08$BR{UhvvQ@-@1Ks_w&;-<_|Fp5oUBXjNajIoWDya1$5YY^x zC%EUd5A?c`!rof`8!uA|oz${qw*s;kB_E2QwyW8zvH6o_is4i`o$l(WD0{J&>9oa* zJ79piouH>EgbBf=-685w4^$@ZQASg{RJWTj_$QR&!%-Xa$srm8bl$6inI+=3D%Mz` z#xS`z7X+p=C)7zB<}<*cO`-L0^L!)}+uK0~PNJ!hWU&30#-x!YX8s`1J^&C|wJ<{G z%?;rTn0ZPY_cSoIox^^e;K(xc+@;5x>?n#E)9(z0%VWdw%1=B3=3pgvV911&ATyao zm{Wb#vHRo4NuB}aPNqR9BVzd*@nOHU7n@uL(n%8rR#=bp8b&DrIHE3k)}(acBxc4_ zu`&>gtchTy38A;lr(p?RPk-Y>6Y9j_S}g4_)j;R~3=#yQs3RIxw-a!tg%$)Vvs&Ow zC0)!KXbJJ5^&GMoRm>VzF*H6B5AiBe1CcxyGZoAx&5&z=v2tPM9!q#_brtf)Fkcir zA0UsN$pBuKE&JLUmbWs^FSGMQCOd06nb074Ob|g z<7In><6U79p@7X0=T@7+ypc)*MFzn11NL0vq%0G*OPGm?xnVRgS0s`-??=n=Evld6 z93wQAQ35vd_vE#)-DkR*EsU2=LpXdMvAY%+Lycsw#t7!MtL#rp*9| zaP^-ZiwQEoFcuqh7H0sg$?b0oW1~cxMDmlZw$&(wCFIh=D`S^qZ>ph4kg|mSzwJtY z(q8l9`k@ocIl@B(k4^h|Ms$&Z*^&thzx8N-?r>A>xifv{cke`>Q`4lH4CMBOR~?I4 zpyrTxM#QjPq33246YHTF$=P!z&YM^ro_TJYiH^%!i?>Rj-BK7@H_k}gnO*J1H;22X zWRl>-Mg0wjIPS6adr3HMe^GJz{_DS5_jhhSGJhVwylj1F-yc@%X-9XcR(^T1py2;M z{ndi^>z_ybt=ibMsbb&CKWnYz*MGnMJM0<%?d(}`XX1Ct&$w}+WP2pv|Jw9d!nf*g z+W&9)rM|T_p?Zzo?dVH=_y4M#`uEY@_wL%Cm*>5E+jIK4`TL{AQfj+mH&1NeA6fG) z$Kc(?5B!z?PhPy8TcMF}FB_7cwvR9E$L!J{L3J{k|9%zj@1IultHk4T*PE9wFWQTy zS=;~j+aSE~=7m|OzA!%7JykECYhBr%AAjy2xcvRILHzF7KjT~YzqjrCl~wUg@J9c! zw+X+3FTQ?pf9J=>U$rWIi#G88GG2Gneecfu^?w8J{H@=*-|orZ)0TVt>;6@w{cbS2 zRh=TAJ7w{Y)6M@G1H2iTL>NSX%|Q-^)xeQYAcKJkL;wLN0}F%!Cw*N*9CbbY-1PsQ zVgR--QME3sixqPRDg|MXfe4@rWWu%jI{JCKxdw;m`MQBj;9>xdvjV{$TW_%CU=EN# zwR#y)B)=$KA6dsVJ5(LqFs)$v1XM?2L1J=7DvHJ#Xc`4kG=4)U||h1B+X?1!_UA5`4*r9v{4KR#chaF6woN={Ji3l z#JrMX$nZ0AOcViI`kW3Y7tG~gVBi;KV9-J_cp@;6K;ekRb!Y~Ix&X-Lf*hRr-{Hhn zVCskhMvgIxxn;lz$6>BB*kI2*Y!_FfTM#L=-=|T6fk6rAYCRMS<^V&PSPL)%r2!Zy z0*hDe+9%Dx@T{4E0hAySAk%;Zv$2H>`W@Z~ql#_!nTktdNg}4>K_QQRH!#A6 zng9}Pz%(4&p==1l6RJru99z(!&!iyCX5WC@Y}mXCa{9p5g+-WlXBS@6AWmZi-m%WW PAOM7~fhqX^5fBdm5IKt6 literal 0 HcmV?d00001 diff --git a/OsmAnd-java/libs/commons-logging-1.1.1.jar b/OsmAnd-java/libs/commons-logging-1.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..1deef144cb17ed2c11c6cdcdcb2d9530fa8d0b47 GIT binary patch literal 60686 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

lTsdod`N4YNOd~zpxRbR=SJH8j3v}!D-3xf!lHN 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⋛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%0Au3)RaLhOcUE7mj++`z7|$q*YewJwy^X_5Y?TO4s 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

G(6XhqQ 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 z zNbA{vda&}B730r<_%9*n_7b;~b~ zA5$R$i&H#?d%0-Mqb?Fqg#|0Y7@1wWdhU3Rl8(cFf{g>MknyTAZ@i~ZAZ~geO^!5L z9(O4Q%ciQY0|jTMAvhoa&**5XIlA*E?TsQ}+(18Z^&I!wm+LEis3kwmhRoqos|GJw zU*Ci0s{<1bIga`&p`PB;%}fAQ*{{W6GuLnhIShg(8?gtRIHY2?Suc8E+I@kH(l)L4^pXsJ;$*BP=$U@Y7^n!^%-@al6;S+xA-fV|gM;*=7< z$VTru%||gQTO_%smnc$Vdi2jdOkgmD`=dx(y!;;^b+aC6a5IngvmGhg*jN-+lq86r z^TlUq1b3=TheM>~={>b9c~|)?3AA~82AM~u_x9~1yS;4=sTvj&6;-t3P<&G~a$fwZ z9D-WioL~GDr(MEV`uAfoSE*S?9^K*C?lJSLBx}dEpSD=X^loFy&lkSG*NcROX$G=* zQQVF10YfW=g-XrCC~@Su5<9LUcKihIF-7F`F_$R77f7Pxse?92^a5COm=MXr!dX>W zNgm8}huF0y?8na7$*XGMJOyKMC9_(j4~M-&f>j}cHIXzPnddNJu4aGS8`u=Rp64g-b@ z5d2f7Lv>n*f|qfSvTQ4z^6s{WhU2cIJX5lP~J(Cr<;&esMedZd;(vcaYK6y%@|$)3*froly$A06#{QG=UB z#GQu2wV#<&D>;;zRcZC;Fo~`~+fp(s&2A}Xl<^G9X)r)}cD1e@QN;a`FcT=2U; zRBQh3nD{?ZYod+>cw(GI!F|%`sifmi>4Q8&uIpLoJ$=2w4OI1Fm_T}CGW-JGp(drn zYVj*rXH%enAjC|JbU_?^2dM^1A%#Rk0{&Ib6HULg9|B5w{a>mze^$=_{Q>?g=l|rk z_}|lNG#<{|zB})aji$9*--o~c^jk3O4IeM9&H(%tba(e2R#@s8lV-u=W&4gf(8mWq z{T6vhTnzxfMKqSrMqzB~G{IgG=F6ytD6vXDv}hJR>dKH7*YNEuWh;@EaZ+mf(2w#O zPjMSOxG6$zsH0}HT z<-39w^9JdTjRBG6fpy?7h$sdwAv(S0{$>;p@f5M@dM9Ux5mj;n2xi( zNf%^^%+O5C4XQitL%%(ScO`||CEZ8wuwa>{4@X2m6EdNb`@X_ejaccjsg#2niH%^u z;YVw>*ZbG*f-m9sHx+zXw{&C|2-S-daNc{Q3-ay?`(Hr?ja1RR!8X9Q7P=32;iRAV z;3k6O?~%KgZ0#A|M<1Qq3wyO3N0ar&pL~A}si+WBOWqL(HXYqYhw-&-m%0A31*-=G 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 z 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Ƞ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

lkqieI@)R#;A$yh7NR2o*W$2W!7 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 -=afrz`a)gC;vRpfA6rCFlw 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

d+h!qJ~Q-&YV) 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�Y!|Vua(%M)G$*R2^^5z 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 xQbhgh zBR?@ci+ad%N+AbOsQYO4PxjI1ex?kOwGYL``Ua)(*()9&uGlSJ;w`~N-TrcvCVvqL z+^u^SBe|2XVIR}yj83f&fqj}_anwGUXR(n-sU3V;_#smz3?Tc?iR-fnG2eSFBLdxm zDx`74XhgJ%iB)<*WjOGq%@10=gFhAzuM3%={=z_Erwd=rKRkhvsZvh(zM4liz*py* z8vPjhkrqi7%4PU1NvUDVGRLi64g#KEs&$APsf}S^HQ;Sn(B0+WtVwmnfOh>cCk9e| zy}Diok*SZHy*$T|svm7@ytgw-F1L_+(&7Ex}l`(BSd81!jD1d?(;*rS@2@o zC%tga4o4Y75$Ks2-}HFba!L_xY9W2^$#rT@c7O^U)@Nx&S7!}T&Dzg+$8>7_-&w3h z)DAg>oKs&=sA$6Ec!u8Jx5i1)D@Jwlb4}PK#?O9=pUYXZL@c^5;j1-5>bJEsf<>77 zPJctQmIiEwr$GJ*jGMu`sixQGajEZt5hlX?F@0hq<}UG_PW7F{?y=z&c_(CeQZriO za^}Do7mhfmPnd7+yVU(G{_Pg%Z}p?aA-b-uZ_ipf?j4@1micC8=~0u^Krc^!e}I<7 zppDQ_NTrJ&8dQ~5RhfbEq9=dgiI3%M&|2B7!No0pvYm0w`Uy7tS5{^(?pH1e0P5?Z ziT&Um%p_8G)%8`HjuwfPZG??nP5*?+@tzyNlpPC~H|&Wrghi*1wD*guhNC6{SEwnQ zlLwp(T$^bVbnJq--73v92FK=61suYEe~GX^*TXSvPob+#^p-+jm;42F^ki@_fBqy# zmdE@A3yPu7tr}v(^hauWI$;l)GID@dza2PhZFx-HrU+SpC!G{>EZ4=7p|z0x4`K~_ z)ym~Q7(o;cwC)ganr}>UAObT1;^J+gM+TEhB=m0Gk96%c_|Ac716bo6&4(Y(0b%-z zQrmcO5k=8x7qS>P%61G&v;B~N%?^a)pBTehjY(|mi{#!I1I$Tca2QNkC zq|>+72s4ZIp&4R6HJ?bqYrKr|58M5#E4C9lNrjx(cyyS)*i}HjpPU!9lvNyw7PS;l z-4q)@s2yUyRf`EYlWVMA@@ejS0{e$ui2*a)=FR0qe;`Qpy~gztFHb5X+&^rNtKHG0 zTsrX1I3{k&)N?!&0IgrT`4&+B#B+7^!si-Lk&c811_!k>%yR0yg=_nENP?PEfByZl zt2_@eCnRwj+mfr3P42tvuF^ywV7bdUsv5d&da z+a>lJnf^b$v@pxfM(}TBT-dIqd-8=eZ{gJ$)|h77L>M2EW>fmhJVqRd+&L5+!aSWk z$mKcFv2lN}hm`8dkaU*-` z9@!i|A?=V^TVzw#|8xpPR_?yTZRHu8rBBgHEH*r$aHkmYUGjuZ9=tn;PR0-?3lT6Q zHJKT7gnwe%5r5eQ3b1wG)sH*+8+P@4p%^Q1@qfA84n2fPs2)R^bdG+RuEm zRLK6*K;Y}Za{aaW!c-UxBolONj7JT-c!mpzQDVlVx4K>7&@#|EwSG;>f)U%(3d z0Vt@V@S5%fMC`p#%_#sWHeEq+^AHV!p(zapeZV(Nw5H4P%R50)MS+nO6pKUKpiu~q zUJ9g(3H6VE^|-*_A3m}il2flGwc=J^%tv9^RUFJ=q{mH0?}g0Q!bS-Rf0g^c>P#2D zG~UC| zxOL6kMj2}Kif+X`rJq;o?rBr5UT(vegkX!nBqpU%M(6uZ!U{MGgvY`+ohx8LLyif`=i|08YP!QTGA`MR#Eat&Lo$aY|G?3YdfHp*4HkXw6X@aY=7 zf3ULz`)lZ$NB7T0=VQ&^X9j*UD_Du#PnjuPDvv>{oi^4gZ9Ne*25mZ6w2J=<(jgkdXSnc_RlLRMu*nvr ze&rz;0CkYk*P(q-T}h}aZ>eacrdi`o&PjN4u>{`F5G5*3xN1-4b()xDEdMfsCmZ?6 z4-VuL_bPUCq~PBatI(y*NQ&Z0e*O=@;2!@ky>O&li;CxJ%z@EG@>{) zK|{g&k?^CLtKxXeu}y>2Vyq4B+%oi8yo?GS+~XiX62@i;?s{jSpOF2lB4ygZ^WAay zVR&D@{7;WBBOW)oSdb7SKY45<#wgrp4<9rPT}fB{3k0qdbFW`2l-Plr<G>%K;c0=EG!=?>b#FMm((4eg>ZZ&xF_!zQ>M2f#L++AW$M&U{EQeb7ON(AN__Gg@j98(7F znsa+}gPxgTY8N_l=VP_R(UFR|aaBUlJVs`=npV|ojz#m*J}GI-J>MfUR;OD(tyN%P zGbWm;F{SMfcpK;akttp#k(e9Re#jOD_J^F-VL`Qv&6}$lU3z|HK5aygQ_DAmvfc!W z!#6&X9nfwWsoNC0+pa@%1~%>99B1dE>;6Eg1{F_GDZMvh3Wwface*?`UwV!+pF#9mg-*F+Fr@m*QTWjvpCD#`E6p^kEZ< z*SWD#I9F8v!Uv!>ONmt%zedJf9i@TYOs25;C7l?$biD?kl<2w|L4OYU4<&Tww2zmy zTQi0|%4$&DhTTSke|NTbcAxEiGuy!-U_n5B`~Zpeau6h>p}S)J-=PZs6CU<|Ba&>B zWGqyr(89jH$-ic@2hRDFPI61vF=sCBQB3T1C_q!6X6Bgz#siifwiwuRPAFCQQ!|qg z#vdf~x@ns{m;-&Zy4-Wj*Ga$8l*A!~&^TbVUbfHWCFbaR`2Dk0T+davJ2XCfm8RpP zcx|zH=TBg^%id;FseYFTqs9kPzd>P{7R1MP+T}YdCS3|~hS-h%O3^mUPt6;(iTYyC zY=*R%FR>k7S2EvJ^0ZmeZ{%8?U03@j>15^-LXO*P+PT$|?{wOPFJ!vZ|AMG$pl3R! z=BPDjG5^Y)exSZY0-WhtjxE#2UzNXdsyxyY`)HPKI7B*$-D4=M?VO-~NO%gYG~t{w zYdm!@n;EgmhywR(^bsf^xTPp>K9(@WMlWs%%H$j2LbI-i?WS)S(xnaeZ&<~RDc8Wb zCOlBDY|9!nN!Rq;Ph#f&?lD$e+bWj2E@Vrkm0vz#jyBWK`Pv! z0CHD0%`iPxDX-m{z+Pj^#&D`wOF5B`Gq^h4Q=P6ze|q0GIniiaQejG+mDu?zb=Ic& zspEY~A)KY5%#g25B2zDILAtpM0-JI_Mc)~{w{fo@D_<+)cqsegL&KpZItjLHNBctfD;Si7pb-Zwom zYfm}0=XSd`b=c%oZeudn*DAgcz+(dS+GF)Ewoe8J_y~96{4L6=~2@wyMCR=No)5# zTh{v(1R1cY=pRIlyq1hML4q#pQjYUdY$ACHiqx3`Iy5pd=HRLC3bx)|TZzXd}4=eGMl^A`Rms5EB- zA@To9xPcG|IQai})I!sbg~UR{?_8B{u+9IZ1i1XK9~st$OHv(9|ExUU@tXlhMoWNi zatM%e2>6YRd_W!$MF=0&E`QDChfGy2!jxWUkf zy>fmzWSTtTPdq}b7#d`*g(xX-+2Hx9`ugk|dq!$zhHtle)xiJbvA5!SN^$?So;6J} zu1Ku>QdX*rCkZH}XoC^)1DPyB&r+}%q^uyAX4m=^<2*7@CUCuPxDS5MXHVD=#sQQO zJx!d|iL*@}!YUvZWH2BfOXo)v_zd`YfOrm1`YwXUD!>~?ZvTz6X4QGSt3UC0Z@#j2 z)EkrxbikX;)yY0=QawXZjxw_@f}TgP9`VS>kJT5hHB~WUa@~VMsixSDzR?8)Ekgl6 z?|F0NBSRrmqI6P?Qln5-BwVWG1|s@eK^TRlW|H1MTS?QB7$7q*u1^ulM0cXJBnR|L z^1}4;rY*Fszf#p1|Km$2n&527@AZP*S~Xsz_lC)P|4OPjesxfxo? zrKKNd)QjNC@Wr}jmAEZsDqV!wNa?dA>*R;iWgq)ZlU+zTgEzflkENNtk**j_d(Zha z$x7AsMjmnaB@TO0twfdFn0@FEbVvzG^w=(T!5K@a7({tq@MSXy@?9*a)>TLGvBh#9 z7yI%LKHZGH{`+}c_~F6r#jVMKznAz_wHd-Zh;jMw(gJv|$ucKjUu^PS)aB4l>wj;~ z`s2Z{(LtAYv0qPHWDRh!+9$iHo*UA(G?m|I(0a)}UOd+#o7~X7c~#la8MdIG2F^C< zFUTezKBnAuvFfbGj>6>ZMh6K*53t0G1J2DzLBqjsSm}0KQEo~0Kcl&TMSNFeUEStd ze!Cn^47T?LZcNq;XIH)$i%mk(h0Qctz1rvODL#lmHE#0*Pujp=wzB{>{7Ra2XyqxU zNxlsJ?9y4>xK`HgbP0VMx5g9qV<)i)Tl;sJ$!30v8zcSF%&YnINv4einr=<+^ydZf zRnL_NHd~jqA%JU9`UfPxANIxkZtTDGT0px#{MjSVT5c4QiRWm#?hNzi)y-H-OT7on zV(rt@Pf>fG6ERd==e>29Q)wBahWzR?L3- z{BMPg_h(0xuP{)t^F&0*N8WsM!@Aik$Cb*wmHjyPNggD-+}1Wt*Y3Hf`_fQ88bTuF zA0N{w&xMpBr5s)E%;oBeN6PIpx}0n6snRU7W?5ha6FqJCD*?2)5hhI-`*djHO1 zJ4>HI>x?$XxSvtie5<6je38+8#q{wF@4kEH=CM0p(>|r!AHO@)xjWijhf;$7#z){{ zj0Xnx^&uwEM!#h8gkWuYNTdO?yS*4ss5{1W>v%p>M@pmCZ`U8r*Yn#;L6?Os$G*(e z^7q6{^Qo9}vn$HXP5@?$To&U|p%wd=?QefWDxFVZT&RqTYU|B`$0j&F^5Be5`X}0K zDd}j|Bs?aLLD`?Sa`apjyMAsp40ipruN;dI(MM4%D-ll4fAlm&gVY&VfSyDanCGl< z{j;}z3PiKQ-5Z}70x37vmSb6F?a|LKbOL~lLZQvxa0<-?;hdh{ru)q;yTzU8S$_17 ztkYeIcVKlb0`QQ!`_GQPngt(^zPF6^rCRD_R3Mpmt^i@oDtgaCXS{!It3ZeqrQ2C6H+D9lLHlpgp;3PQ?f5*|9|3Kdu}xFk?S# z;gzfF7jo9Pea@k;AHKiLv>$N%?f+BCq4kl zJL>1qwU{H>LQ`4sNeo#E8gQX+zxVv9h#)2~15*_Vg6`3i%=3NFi;sQqJP;loDR%|i zk&k%#3>2Z=>#-i670-2__#I#$-IDx^71Ea-Ze-_V7h2~b3e+Yu^1fYp5MOR)^bS;v zNNKZ96c(U)8dfC`UuMof&u$VR=!iZbv+_*)j=rh4$$e^F8<3iECyN++++#{-XQC$| z=zY@6yPLLs)Pj@kI4;`UbpB9`yVEc}-Wci!d7?x;K`7sI?t)I%>N) z&*0F3B7tZwLkat)dlo+}V~%8!D5iD#GW$0B!kHJcX~~FSydv*Rcku_Asjz zjYr#`B5V~rOUN1Ih?P<2${ZE`%B^7|mH0Cz&qT@U_|%nlin%JSWek;_%f5Dr8$~T; zvz47&p66cN_~kIY80Gn@4}~sz55J$WpDFd|<->LnS0_7ePhTq5Qr1=+s>db54d(ADO|Skc`}?$9(==d@Tupaw?yg)rZvC8*EbA1LC{9-9n!i`2QBC(u>I zM5oYcnAEM*MF;>BQRUiqsE+YbN}ZQ+z{8{cSQk~=zq}aQH0Bc|N)#=;EwpZA_=v8dn^dyyWBw)f1C6coB)3O(J_~$T zU1!&>H!kv#6pX*Z1T-c!4rwSKbIo=|{1W~FL?XwMDYm^{1ATV0Nw3|==QsB`{ymZ& z-p#4JMOzHut}FBskdY}cUwODz0}!?;{P&+j{Z6{D-f(8SI3+mrrk(s|oT1~<{;2Y@ zlCg#+m5a?Re52X@v;@MWuar9_%itSARI$ySTs&Ob>?#G)+}>j>V#|j=FZpe)u7#cn zVa%EBm{IVogeioZi`v-9oEVwen3wIv6eLgh$mNP3zv202w~&Yk2=P6^nLv==rRsmAMQt~RT*`PW3U}2vfutIV)b1(VK zx@{r4Cw5MEuU4py=QrqNp%^5AAB7eu+h7v>)N$OI%Ku8C_>3t;XD(hTyK2z-ROF?3 znw;gF-nU|siKa}IlAfjFQl{@*sjzb#6V3N1XGBzs_E76e!Ho8dFH^Qk)-F6y+AgwF zcQ30g_daEvX0I=2#}KFR6`FD7w;L^snI!~dR8;}&<5I!T1`WbnIR}rvg`xlA{QS@G z7E+7;y)mDNc$QNy@m#Op%RCV5w|S{W!!GmogX!> z4F2U_53ndBelU)GZoYO+A)O7|9y_%d+3!|g=F#Y!?xit?YhfeBL;hTJ4ryjKG@VpSD5Au%cukATeMrX5*6D*L z&S8e;UvK8sLnhCujpVaU>eh^mjG7W18mX(hhbwSyt)OjSJPs3zbO91f=l$i_iyez2mY+(B;WO*HH`djNF#@o+Bmzon}9O1@TJ=*ydAMYR)x( zY*yj5WF-*tR2$UNg>kj3a}YVtA260f_*GF*p^TtBxb%ZfJo;M(BURN5fAEFK3(5=0 z8{AW=$p1$f@J5g{=eR7xs)~p5=LpJE1i6#j>B!u5C3*AkiSVLB=8;Zvv-%u;&-I(D z?ZTo)LkKYxNWDjENU7MEm4!6{!HC0&WC2nFiV2nrK@WNizNYes-d76Fr&bHnAfCI- zq4m}U*9Ogj5j7?qwGFm~co`t)0;G?8;^_lNoBw_~qLjv+L665b#9Y-O-}}QJzy*l) z!5V^pH|By<@SeeVs-F(}epyH7f(bmo|HBLJSPGKdGUk1pBK7?jZ*Lvc*w>|v;?U5zySuwf zTGv`5$ z&u!oXDPgPQ?nLB=#f;c>hfBb=&}mOot|=-BlKRe}*0MY#zI9l}ww+T;nXFZ3qZp#g zg*%bzK-LCu-sb169w-oRkHB?P4Y9_h@>?%l8-X@b6F9Chq!W4_W*g=T_#bEh{*%xZ z+!f9h#nsmvZG&Rc0o?n>Xmd7OV?C`_1?z}HjIVakMXgt5KiRcvc z@o$2HE*l!&s{acmIya+lO8m+EOb16+j!H4>c(}Q_ z*`b#p)RyQ7OlP+OUQS;8=G6>>4*X%PKDe0%R=B%L^Y%C0X3z zW{x~IC5x9DAezzU6m7DY7UeZ%JXGT52TPuwV&|~u@K^QdMSsJeGEbqs=sbndpGd4p zrt;m4qKnP2W1pkF0Y}Mq@e9~ijmZY2``IAFwuT-kafV~tn|cD-+AAR2Lu>l zYY$fphwv`hX20uV!ym0d$I$&NfSZoLvU_LTE zx=`CbCwbDBtkWCfw(@ae^J?*%Wuog~S3V7Oa9d3Gj`Uw-IJmD~h68_e$Zryx(b^iN zw@dVEp+q%}1&kqbkw5wl-jyboc64KwNREbOld*DpnfWk(_(2XG)cidLPA){A4_xEd z5%KcKx@J@RQ`AZakoi*u;2wWb-Fv1eFMpxk<#-+{vVwasswVrJ_!KE1Sl+xp9iPGX zrl3#q0e39yHS^}S^Fw#o8(F2IN7>>@^E_dmtp>>qzvW5nbonmxMZ;a0Fv;irjSm1^zHOZsSJyks}~TMf~YQm7s|v-qx0XmhiS^2?&oee`%`Y8|R9uo9kq0&BuCa8Bh9T(zV- zhia)uoi6p8M(ZG@VzdxJ;87Wq**kI~edK~nC!V>#$^@uLLboh+_}((5FfDQ@Y?n?y zM&fOl#%lU-53OfVudOk3qYc@1Wft+wN*KwETWA3F=K?W=4oxz9+3`m{?i~3`*}Fn6 z=rc)#6B831Q!efLk$twKV>fl6DaMWR<>3S4qf=c}UD7XoLJ-*x``}c2UG;`JadY6W z?i_nk@6N0rkzZy`?ZWaA-pK;`M0lohfux2Z*U40ee0GwRJKrDKjlYB7yO6smtfBx} zfFc2D&kwlnHJlzQNx`itLxx`8Q(sm+_q6YeI=G2)2R7vmR%>BMYu-tG?t@c*8_gSW#pqrFCob)>bXyy&R94jmD~<7&eKP+=yrYl zJA(1lCh)x?$R-uJs!{LUe;4ie-^W(9f5k8}<+frV$?v|t(Y`^HB;B*YK``@1mcCCU z`u|SMS6zb^_Wbhsr-%*)#_;*{|3M{xMpYwg2XhOrf8y(TN@OB|1mQ@4Ap3?OI~E3w zByB&~k70OB9z^JpuMM58t)1^|Qu=6lnMw78wG?asgiFaGKuz%^K$tap;v@EF{Iqnu}!VYTd9}GcAmJq+7Qi zwl++449porM^{QSAIeK3DMGxzveF5u3rjZJ--j48h=mo0@*x&&0M*ov(pe&chetjN zmQyM$9E>%Yq-MdnWyD`0J5dfzs?N`7h~+`BVcdjzo(A)z#m2Q5Ub#BL_k37iM#C&e zsl*qDK2O~VN{6~qr6Q9`EzyiJ30~6p>qm8^IKeO;4dxlO>7$uK61+-YK#Q^sNpM$S z)oC5O5i}&rMZP)@!d@|&&H*`#p+md|k*!}6eDrTG>|(NSX;;b>0VupOn!zS%G-V<& zI1A1+vS-WA0ww98;hfM7vZn4M0!l6zgV{NP{mqy1KxNMv`EWF>1H@*~WTHs|?OOtRI6FWBF{TqsM4u zC(bejN2ffUTrzQRkj|7%QXZCLAfqGX4vv*y{GWH}u!M76qrn^ogY79?&$UT7?#B>J zg8zzQhD(E`a+ef=nS>WcYHN-cZi-$EqpEC|f5eLd%VCy5&#@;Cz#IHL6X+4&B{|)N z?qlWDb3<;iaA&O~-25rZ)0gyR2o|1s#^S=`N`Uf5Dd-(rKY{Wmwi9YzCI)!3DT#C-RBb!zolM93$gI6|HSnav3A8q#nY=k}O$d z^RBem%5+$vE+M+ZL)cRy?ZK+E0!f`Tn9?E^5XGi{m1*niNREdTP9V^^DUIbHj45-;HP+`}lM1)c@Z&PxXN_B*>_OpBWi9wPq zMcz&|`FzhDj##-lJRUmD8Yvz$Mst{aNxq6$c^?bvGB#V$o_SW90d%xaxI7^T9?gdK z2=#ns#jJgt^<;)SMmK)ui#N9(&B^!bP}LwTV8m*|1NT?*Y)z}0g>cR!*%6cK*aAUQ zd;DSuT2mIWsITbGRdL4zteL@@gc6C3iz2g|Gd2b41-WT5q><)67%P|>p6XOeldyT5 zAq5ia85Ie%6C4%*pENSgf-)UGB(c)+di$36tbfR0(EWXqn5EkG9(0Ww_*qZLNp;FVb(}fLL{xBErMW9P1-}j!^0NTN)nqJl}U;8Xp(wu6Pgd;sC4+ zbG}gcEc|me*@J?anml!$!t`J+DlQEs=yNRDgF1g3!gP8Z%w$^@LNFR$mr|D zR4p0~I3@fvFEDBSj(?cH5ix?K`U(<5rK`iDG7+>3ocN@x zLoNrJoe2Mc`R;hM;Uo10U!}D{<@^NgC^?}RhP3YZ4X>)4;XL3z=yj=;IS~AZ~d{@uU6g`+bV*_FZ z2mL2%u4ImSIpif+veMrz52XXp0cl_u76y6?hz07W;?D??)lBL z8Qjvi26<aKRp6O~evlCS>})2^fD1er|Z?zE!x5^IkDcX^N>6G9k2OY*MVp((_wN zUvi;0AF4`9Zq?Mw(P%hHadfYatcqTuvW;|ac8_+icF%5JUo+b;}a`$pUr8o0WxNi*pT*z%YL_1${4#faJ=?%9n zHn$l!4^E$9{Aqg=9Cy~AJbDt1rXBZvp9$Zv-?ZL@-dO@Ngh!0_Yp<4{GT%@FQa`j< zNQXuSM}{DryLeO>&>|&rdBgx3faqR|-=@k{7`&`>K+L@Y3cLc!4%6-x5++Qoh-%Z! z6;hA!rZiOUaJ`}IT?c0o0TLpt*l_A0_Fd@fh^I;~u`b4U^3B9w7&ma zRGxnV6nkip$CnTIZ;WmPpM$3C*M;VUhTogI`VGJ5nliV%o)tf^z1s2Hjhr=QH)^eq zGp*U4xqGbVv@ka@H}={(wtB7#*E_a2Hb1Ud@U2mJ}3$xb8qts;r86r!`>HEg}dF#Aem#n%p?`oPSFW@&T0s z6@d0YLZBefAM_1`3ZeyBfS7@{z)T?NX`t&0=LY!(^hNju_D1oAjzgb9o7hE~o>Qg6 ze70NZr-EnnFSp(U|B>$T?%|Dt&E3uO_cgyiew%_vJ?BI}Vq^Zfe@vKJ!hGccSIkc5 zB{tf#2J^Licq0CCSzd=ulAKjgDUGKK_CJ8NBmn_HV!xqcU4NcZpj ztP*2UM8A+P8}Og%0x9;QqIlrHicV(l4zlOUgtZ|)6~2m~5g66z>PJlI#5t3bmTnFl z*74e4XBIN6XD-Uw#a!#`;qB3%STq|Ea`e<7;TNAtYJTSK2YsrS4xF!8uR@*K8$dDXi6uS&v?}q+tlM00>?IC3ju(zWZ zn_nY5$@{bRW*H6jj@E*>uT%~DwXPj+ngN7Hv5(Q8za5l-B*&fUtBp6Uu0+pkht1&A z&dqyBQt#HQ$k?#hh}e3h>o3jYFgBHAp-3B*Q=8!p-D|(v zcaKW|wlaN&lRuc3^dDv-%*U`-=Z~K&Tr}4F4B3foVFtUDkK@c(%zOU5JV)Jv44deG zFR~ZBe3&bQsdVm;y7fL}d&z=dlwO!`FnA5ryh{X@+Z2FFsiX7@9)7>NbPY#R#%mi? zg%mPfa`dYPTy)Sp81IL#3jrD29cp(R?Jjos&xn^@9-o4nnNJN}kcBt4-rV%bk5qfz z@fHRCaUU1nfDalS@psYOVE(9l0KlmzCq>D7*|+GId+{#IiO0A>4(21$Dzy=tCT{C^ z>d3lp!xqvRY^Be6Qwbusz2&y~ z?|n6uW8b-mGk* zOls*TT|s!9iSA_v!Pl*-1_d=~3|mQ$CiDjlCblRawu_4=YoFJUkiWd_ycdb?R4_jZ zG;uix_*EMgI4lS&M=r3rH~Opk>HQViF!}B$-s=bztrj&O)fjbqcRws~!n8LJ!%BCz z@#5-}ZA)Ni>?~zvqt2V}Cs>SenpOMe?0<(>Dc@b|8$Ro< zoIDaXeMB=QhK>RE`}u^E2ZjI#hAR3JJIFkCB->(OYERSsw;R&_l?i97_wvd7ImV9L z?eY}Ihg(wpUQIEJ%XF*Y!rt3T)jvvp_R}zF#7?(hO668@> zV`N6Ch(H}f+q!&X(f*%5prH}qvD_-@V}C%}!#;o!_8I1(ufV#2!v;ERqs%~(;L(_- zk^Q1IO(XqO)YZXd%j-BKkwTg%^eQZoY z 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%0A)>F2Q_$;BlQAIP?g1SS(0(H` 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 C!y7y993ub@~ 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 z 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

%^bcTX0S};B1IK8`C~hok-8$iaxLo>BXNR<78O{ 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 z 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 i+?Vn9sxoN$EO_H4RU&dM#~w;*CBm1QCpHUa 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 z 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
    fgqE+a5O%n8Q1q*W^q1lH?BwTs+ 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

    #&E&s!=z!4_o$*0+s@HTiL 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%0D1S{NKUrSWn*2` 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

    sI!c%lhbUYnb6-rUC+O?6 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

    a6&ILiMQgP$5kxB-4nOkGO1yIS?M z>+s@`_2*ubRElf`y-p3*tgrNeUNuN6G4mQE=GCc3ax@+ z$pDK5tOvk7>8ONrbZ&*PRa&n+KA}^xTwRyL`K!iUrgfkp-ewQzdsfWfZqd)!%nO$ z>Vy}3Cp^V7g)iH(vRjTaReX2xKvb?wE+SB@^%6@1FwI`2 zwgn%8+ppZ4z5G5(l;?X$j56QQIxSUJ6$wOX9b4%Go=or+&&+dTmv4*^k`55f27{P% zj4(LKJdk>VOpw3O{%fy8neX^X^ffa?{OWZ`{(GFE=3+bJR-<8|2Rw=mo<}&n@OL zAqyO97#A2C6pGo%>`1a#9;saEi(0EW0hoB)V;SZWrVT7cD4plm{YgZL>)@8MX^9}mcLh7J*owY^P zlxc)fq@V|B(&!_J6cIAxTx#JhPeYrHcu|~j2d{%Ep!xU*ib_LfciJqZKu$ArDg(>G zYg>e*M@9Km%wX{zu=4^aDPMJ$9=4KBd^woG zBSpo06e_!WS0a&YjjYtFcr>Cov!+Ccq_NJ#FyC%R4^vL;?ltsDam7g7OY+TICDEnc zN!*5p2Mxdm8|S~lk9!gt+S}i*r%I#?=im3Ns}jbdZ`c%!v-DZYKr2cjN4KMo=s`>& zUL^(a30iYBVIQYI;1uO2`CW9J6LX#BsiIz)2A#{gWxTi;Rs-rN)~1P&zJ+` zDtDo=tb6?doh3U2IH=^AJnmSX0R{lP#cLy+xocF<#GB6BUTCb&plXZf?|3uUv=b*P6mzUpS?%daIrDyxHuY|NyD}biiRq)(bF0S+tmaf3C3t= zVVO*N7MkNc#ZDVj#e#xKEm$%h@0H762^sxQk5f*D&0pu|iJ^U7w-+Rve%B=$iueubPl#d#>V05Z<|LdkEGby9{t@^Hmws!qR&0`GcH>kt-p7;P1QOm(YOX86i$d3>i4Yss$LuSoJd$K_?b zvfO4BhYqu)JR}T*Xofv_#^C9lGuI#_YzC<*VHPB%I?eAttSM;_+^eryPZ`p`?RTR_ zEAHP-P&GI1t@U5!k*0D%koW;SCr;ApzlDUB2&A@Cr$X}eXY$C4OO?|pM3Q@L^L;O3 zLIpJ(ijJThZ{pI?CC1?Qv5}-S0>z*Q&<?nnB<{z3D2XF*>Wo=-8o#7rtxS?TY7obQ@;Xm@DT2{_HUcA9 zeW~f&aK^mT(_a9`CxlT)7gZOTAip%Ya(&lxmsSlGPE3*W1lC(?&PX(ht)#du2~jfv z)v_Z2Pbd(H!{&Zz3Oh^J^9IOJ?G0RFMA?j1kGjj(OV?Q_e5^`EmtDMP+i!(zAwtc` zMmN7Cb_hsMiAs*{)yUksX*f;Pi%ZCPYP$ z(VK>47hNCSo1)cDtl$P4h+ZA$|6IxDx6}`*iMG{uHE{Qw&lbHj0P!x?9?}(}avjth z(G~W4Tk7WfC+X&Z1{{QsOTspOl=%A`5Xpvfaa$)!<2ouI@vq(bs7;wvuNmqw$#MOb zM7jV~r}KCpbpcd}L<9NnN_UJiQPkPAsa#)0#L87Zc;;LT%6^av6M@|=A~~Vxz->P6 z*ru4|?rJ6Dr zl|Ez_>n}%P#UlG$RXc5E))-Y@z9%0E#Wd>t{;g8e0*m?mmtNLmG~A{a7wtO3i#q zXh{Tg*A8u|8)rHvk-xJAbz4gT$vCgq2#17@S7Fk zAFVtX?mQe!Ai`Te;rdhoHvm9Sp0r)B8fG%W*{l00IKR83&yHLlCDsCJ6T09U3`sm^ zfv)9~P+cI22>&-*BvpJ3BL_x+6j}5j+!0}|@|s={`KliSxgrhZe%q>(W+C%+vHfl(mJBpJ0?UHY=@p>RK<&`nKegB8Cdz}uEsYOB9ArvT6Fr&b@1C2!EOV3 zb&-5y&6G#r866(TR+*`I`jC?5T2X@*mcA&z=cT?j8wwN^(AjzifuGnOnlbDqw)k=*!&&0wzIumKx1CCI zwkclZ6MgKKjN?IlNT!}nKCVn!X@ThVJJ3+|{=|`Jv$+C&1uB8Eyh&(30~ai6#;7z4 z+fvw%wr4K5iFLuh3~W|74SY8$`wXq8uo+h>!&*c>H}FE-`6=$A*s=wtpz$bEJ5ou% z1I=pP_!%)s6p0jv86*l`xOvdVp8mDj=8u>j()v=B1pYV5?|&P?5u^Q4Y7Jl z9uOy@5iH+auLwX)1VFG6pZFqUn}{{CHP&zDcxQ#de?y|R+syAfx8^CYlaO(UZpOWiw<+?2k@Bk2RRfNhm^DEw5^#z zvdo*;qV_@V2U-rKRGIw{L&vet}7}sk=*aTSN1Sv^XlGAC+rcI}B*m z8mBDqNm3&x?l@U9m`R>Qusth6em-tzYY>q(OLfI!o=PB7#fL%#cyoxkTaL%xb4@hH zsY}tSfI8uDU?HbjN=xxQbCD|Lkv}6@~v|{^pD;B!vEh`5SoP`T@HhvDHNW zfSnmA*0Y zjX)216RG>VCQB%Gj-?w=QB`b%1wowOGDkW1%bLZODrI6!;H#`rsa#oIIqAe@Lrso-!P!JU_SKc|dC*vIlI@ z@5#TTzziY=Ac|m-<+-v!F-{ihu{RRS$-#-}Kf_tFJEAn(Q3VqGAb}v;Q@w&Pc}(-IMdwxqSBpj~2UbCVt87&x+B^N?492zEMEpq7I%Cy*6lh zt?18+*UVD6_VYvE6Wu9fW7#7^dROcjgYqUt@T7C8=G9t)yeLRwVYZ;#*jo)^Zr0Eh zYcyrAGH&roQ=5e#G^Vdk6;yUP2=6o7W6SoW(6WbR^ePzB*sIdr#6&br6Viu?jv+2* zeJjHn&nw^MsEth-}>JdG*iVwmPrRQ|L$^h?cborLPe-UM5JY=q}&{J|)7` zEUN6 zghSkFFB+-7_RL<}ZCoa<%D1(_j@dpv_>GfyV}B# z>I|F4Z8yE<9YQ%-_>sXos7qv)6dH5RuZ;GDuW94f~RGS?uRAg6;9!`Ka z^^dL|8>M%+>hk9faG#iYpZ+!g>A^MkyV!t`ro5e+-_wn67^VHCz`NRjNORdP?Q=Qr zn7;Y=MYChMoWdo8wF1e|I9psiUm zl95&`^D!JSkHjHPcLKBtd(8S$SLSNdf8_(lX%2%WW!!x8Xl`$*paB|!1#>@`$zyG? zqlz|0sUd1-b_{FH>gaoA-bFm~ICEi>1N5CRiBl3)?LeFm9@NCi1K=h|Bf-l|BVnGs zJSY0qbjcD7(5GHyXp@q=uwyuRCnafJ)@%_f1bUJRwkrA<OiX zujc54_RN?*5S_1!w;)13AK5AmVNdZ6D1Useq$-?1U__j32(xx~)MCIbkMj4JP}ypd zP*KcshFrm8=6=7_Yj9;!{v(7`UMqevK^g<*CTU3@@!8cyhQ;BgebvELs8v~E1qiGC zIn6;1xHEsFisU&X%i}4*$vynKfXwVq7ecNm*w2E3c#r3wC*=&6!?ON|FUnmpp`s*- z)8PE`E9i3!QLjaIR2Fx^*u^m^l7iZW6m!MMv8zrt?(baEMwWoRNl8cHDM+ehiP`mn zrkIc@nJb&KV!O~|0R__-)4E_58Of#wv2v0(iz7F<^q-t^eRpy*kw(V`qFYlApQJK% z*(PoYJ8ltrFVtB_U|bzMI6dEhd@wgx-Q5PR7*p4b*Qm>uRyZt-G;7I7JVO-k&<4-& zle$>ZKfMvdu()Wm{bliBp4Az>AS%#h9sFG1kX@+0}EkcUiX(Re5k~n%4qSQk<`<7Cib26K^0CH^2xHaWtRhxCVs!N^K*x0KaJ2h7JNt1i|Ga#X zry+*Wk;u*D3j0yO*WW2cwXFw_1idJHgHRtfYSu}T7{PFJ$!v#cQ@d$U`3lZ<355G~ z)dSkf1=RDtE530$EYb!S0YTLybQ zYlnaE0RE%hN~TS^j~5|B3Wt+^QlL~pHV7r7gpWzIluDjh+@}*~hj5KdYcgajk6*m! zA34|P+veZ)fOec<`v2K?{3=6m>%8!r<{Ul`>~(g+8Iv!fzF z{n~Jzp>di9$ylW$>H1&8eVvKen&HIC0E%WMqIT~m{XIi3PhgcfpIN)}tcHt>=u)Gd zIIYyrl+2k8y#4fXgj|sn9W3b-@N{yc4)pTfoW$s=nH?JeMAoC5C``yr-xF#cK71Gs zQP)9gcHV50N3v~7s|%G%z}vs2u?ipzdWFD!`{s-LUo>$4@7ME>oTe|S`TuC(RH0oJ zhnzl-%(pxs_-FkBh!JdnNaPr*>A|^i-|FD_F~BiIag#PEfsf`Yn_7DM*yp6qXPt4a z(aXzlv}7g3&xyZ4df-L%aX2I68$&bar7s%oR*ORC=EXAWLq~iLHxmO$h-a%kvk$XU z*}o9N?0?;;Xgi(;OhBk)!$DO8r`~4#XoqbX{_xy;*o_9yfi&9*qjeqkso`g#-C|;9 zCGN0ePP*A?OM6oMxp}Uw@DvI|Xrv*o-P42?#4tJ&abMdT>;NxEn-8aVP3AU9G z*@arBWB8tl|Fm-j#&tuT+evLvJ$$c}>Mas<_5B9kmHN-p4L9cJOgJm(&%HZ_cFgYI zJK09h==hzqTTKCPKWd+PXGK5AV`=~dT<7?9l*ePeSA`2Z#iLY?ROllbqxGo;4WQyWnP@&$=f_@7yam=nR zPXWE&Y|Mt%soUkCNysB~k|j0HJX)RARvwqD5=cHr`VC5{ftK=zlX;X~oFmXvcvYq) z?}nt*?rt(J43$87>yT^~Lvp=!1eg;DpLVkJF+*mnRYwgGk;z>>biUX*)5xnyL)HTW zHJY*uE`#a{X|kUc@780^lK}*I&=}-b^|w-ex$=sv$+{GW#!Q(tkLD<{jv4%|_xXoG zRc)tv4y8&LJ37g|^_1PkZInrEfsIp@ZMEpgFT#%i^`u%1qN;?2p0?J5J|P#Dl@<+t zX`hy_32S;~lw{JP6h2=dvg>Y}kz9+p98I=T3Ihk(O6veDPm~mHef0J8)J%djo2T|W z{L@KAK}uDPHOxW&R+cMOh#?^h;FRdmP8#WR8=AwM^a%?hfS?=JCr3xq`Dg2kk$r0E)Cj7y*^C3uFo9dl^!Ptj z*m62%RI$qmCnJNHHEO-?@%>X)U#et2z>~=J#NV+ZVss?wa=-|omOO<2H`U^e3P0Cxmy%FoU_ z;RY%)$WbZ;zy98W1En`Ru^mW)FAQ-)idEe_!WbV14*^Iw9ax zIO(@t^U>-ORmk-F^QCGd1#MBJt}o4PspMf&*5x99S}Fx#kY>AYZ%-Z#YEnJZQ^RAD zSWAvo|BW=U!@VABf;*%*T zE?^uf7w;mN-@1(UwXdmmuAs@{sAXYqglnvPCEWY26L2VTG!Q3|45`Px;BQk%WQG6XPh@ni{c2AJkrg{O8flIH zupkWK=eCZ+RwAejY#N`{GF#qh$@vdA#7P00W&`^LMwiv zH&rT?Mnd|_;Y~*xMxp+j1AUdz0Dos=<0b)>2&Q;3(kLppH(lNmBsrSE35MM$VUMe6 z-eqWh$L)zB^#3sSjxnMHV7B0G+_r7owr$(CZQHhO+qP}n)@^LR%)Df0GLzk;{#H_{ z`s&N6I^ow5}wZ(=G6)anGsJ!wnCeC?CO%tP2$l-r-+!;QKSg@ZzU&M!kv zti1fU|G^Y7JJ4Od zL8)yN*5*l1ezfA`&z_e~+3mfgy9=rqMF#T@qo?JzDUQ^6)1!OxJ+M`Ms=qwSevCV` zbf+G*E3!eA5bTpQw#pU^J|NJeAma^6Z|Wzzmc_d}Bl#A*+(dgOY4%9S4=;}bfio2K z3K=(e92h#;hP$D14$&@{ll^ir#3SV);Yl!Zf0)*PkEg{J^e4su3ujo!3q;Wl%K6Q5 zYS6U)Pp%-MXBp-lu*)8~+8dzFh%bhT%T3zVY0MI}`7-jW3&1HTj|{6WNkF`F$5 zLIg^(Tn+h~F6(;B9{@M)Zad^_F8aFwoaskz>vr=;&XiO~3Ex_osOfHXIyB!+VG{9!c9BiM2%$~xXPe*(QJW{!=Y&W8?>k=lg6y*rS_!&$>v5t0o{3VueR3Wm$a#b}agIa;)7T^OG#4Ps%ujS1j`70Z!xNc>S zZGlLa7&Ch^(0c|Uvpmpy3|upK8+^Mm`e)n409YeHZJI!B0zNZrJXXZ9ZXFF5coUTa z$~8miN|;e~8A7yNSv|0c71m%}6!-L7h0*0h-5Zw34~t{)-RU7*)dE_dF6sC0p3VBjzTv%fR<9-^h1 zJ^1D$)jeA5LHphJ?4(!T*|Se%A#12HqMp^eaN{8GM7nEim%r-t(Y7ONr!|1vKAL4vPZ{157+4IVrQP~+(dSh16bb_K*$ zgbTWgrcvx!KP9e_nY|PLXxYFtTSR;8$PUBtAKfoVJ-`PT7T2IR0y8QiN>kq_WL+PxmM1?PsQ#dUf5%)$nK?iAdD`H zbLD@`*UIcqUYK*$<`~}agsv{Tcjf1dYF-F;RqG6NURb^re{lFz>zu%TsVb*`!1&Vo zrt>|yZIUmwa_l|_jQ-|E5bIqnI9gezjeU1ITI3LI6Gs>b#JW$=~Xwc%VKm)7GhdK~OGxsuj}|EYsC3+wBX6 zV5aN~j({1|>L1V;a@{aa*!87_6^aDAY!UoJ2Wilv#W^{YO!<}VtpTGsT>)89^9YAd z8C0+jX`{Zv9)=~l)Hp&|O{-HKA<|H^7ve?^S`86=wRITbl76+Fj7uuU$a5AgtU!_R zP8^y4J4JVB^yS;-6GgJm9Y&bY?O0O8BceqT_QHSh7qu@f`izT3PP4y)d?(%(_ELxv z^ier1_Mhm3EGtVLZwTGg`|;5Mxjm^iyC?w7FT^)aPf z?eh42#4MSjVDO^uwV!Sr6PPrWwGfvSDnt^iyn zhT_->;BNLDZqR#MVa8ro%#EJhx7lEQpe2ol`{BLfEIQX@iMeH2;&43hgIwE(6aj4R z%kB$yoYL1}-!@!7)lYvCf5Uz6{TgB?Oa*AJz0s6HaAKv zc#Acf$&Uxagdv-S^%WtkmvK3qN76rL?L~f;SIP@{Kg&3zE*)oRz=O~V3L6_=yH2xS z|9S7c?&SJDePsSoIf#a%*gFdgjsqe^Jr0``C4dELqYYxWJ7yto%_&kyu$8lUy+liZ z8ho(l%h{qW59Hv%6~NEJ!-=~L!6n z6$>Ffej&$}4V4S29SbGI4L!PNO!%mXsXcd7!8ES}qlRS~Rq9E-v zg=HZ0+)e3b^1F_r5 z(WVo-m8ICAle%?r>-w&!jvJmi`?|z(()&g3@xwZ!CN25cIz?(^fM@cOF7!%`f`u53 zgU{Egu~pSU(enKYP{F2C!sy*fanG@e&2aZnV+CLW97X2pSl48@nzUXPfl@q98meK0 z!gN!bRQSd3xC1=ZUzB0lY06D^n`O57(EC!cWzn*osebPw2pU#PW&`UMB9#hz7Y@uu zoXGk-$8R1bR@0`^kR-98;(C!tzmj<`OH z%MVnC#Q58c0Qt2cyM;R5p%5WnNFwBhNxLB84dE=EL|5CMQ$k7d^XoMg!PuX>Wiae7 z%Iw%gSmFfjv3w2d`F57sgmZd&v^qEbDn^s>$$|HlQNTWSAZ136zlHGtlowzt#8hS$ z5p|6v%%r_R9)dE6g?#B@CP>a;ng8j$)gDR}lbxEvvl=mS*KhY^3jNx;-Oyp*2 zLf<+aQZq=A_4ye&P^mE+E#@1K4*ea)%-Ng2KkmeIB%9?P){XIiNm-auA`4y2D%918 zJ5cQ*Am|BIC<^IqQE8^@?Q!0!y?mZmi!{F7;Id$@xA4^jidk+&ySU4_*FkY`qy2>6 zQbG%siiUe8aAB=%2g=Eb2C)!^?Pd*{`d|9R$QR9V%GsgO*7j1a(+K0jpBE#~7@mha|9J%^+fsnk;Rw?G{N$04N@Sx%#YMfbjx`^Qk}uV!{hGl1_K=ccx$7k?60nnjibe|KnIsx_v zo!A94H<;;o8Z$~8IvzgJC&iaKOCyyDO>{i1L|`u zVQt}=fmvcLKcuCwAz5OTJ_9EE8~h2=hvk6AQ0@qHrYMvB!{IJP4`BbQQdCxcol5nS z%?tC}pwGmvHsZ@F&WJ*LQ1hW#g$l%%ggyxXY5iveqd5^Acu+IbNz6c53^0Qhp-+aV zFuJ#hM!|Gd`NY%*$O)abg7+QQ135kh^KtOQP2Izc?j{@TW+tQTN*B0>>hE{-8T1-7VH5v zSBUN&`6q_#p|(R;to$eXETm6G7@ZCrG8@6gd-6h*VZq-~VbBpFRGBdS9d5B6QF@A; zz1AW8ECkWJ27x`t3R?&8FXy52>CbKcE%PRB+3df1`HI=^^Zd6gW11T8NGuO5sz~{% zPS^oYdbBr3=`oT|iW0zg0MAx(4MNr^$N2YD8%nq-VWDWg$nrWQFb&75^tQKz(>mvQ zpqUNTY5NuO-F4~SiRQzSM|15kD$2RS_wH0P`iowle1R$c_SHf%AxdIqN@91bs>-x7 zg+c{qNfvA_c~^>MDYWAY!yD$i=E^&)m7V3@3qzJ_4VPJ6xo0=WQ`leWZ4M z2E4kXuiZd%_t(4MkSV_~lP@{X?SbIu${i5(O*$Cb^{r`T{rDwr&r;yD1HD@g|9!!;C9)vBMHzfeM>b zDWA>gkM%0?`8Z4X-69P25)$nU5~P#?_ny9kVoCY_g6Y^lZ-o$c)Y$FG!jpdCG}1xK z{2>NAtCaeB?^U+I{8%6QLb|rk({jZ`5Z0Db!j$ej^;Flr!|3pf* z4n!jQhEBE)|7m~^j^T$Gpo0_sS=unG#&i3_8qh)CW_PSW1{MI>%?FjQWC0;g;lYfG z()C6)f2r>!d&`8il2h=mXya9OB;0A#)^z(y`6{tHIo4V_cr4d#En2|N}qAw$1O zCA9xrQpx`tF8d~i%C*h*HrKt9(VUj<;lyd^}^q@J;%-tPMZcnaoFeQj?6PN%q~xf%NMo!6U2SNy*)!Z4J3#c$y7r9k!k!jU zfddbd@T|O`;%G{SIV^0#{AEB?&?fL4ylAsr1S(G^IJCP+;@J1yWSkW6lrh?=@}%FL z$?F;~+#E{U)e`%KT~NkUy*C|bHT?%KjT9qKvgP=AZ$n`W6JsJy$Mq(RIXLJmTYA-8 zES_33jZxHk(A0F!IO3tI#$ZEOYjH@)izSK&2pX)&F7?ib0oHh%j}R>>l8_uleCC_9 zG+a_EAXlg>uQYTDy=q$UuFu}Uf^!}$A+gpNLy_jYkY`4J{g!e*(dO+)Vw(|cwjM{b zBL0WWz%HpGEnBg!@88su&KF10>=fl<3^h*}^IX{3b=yS8BUQUlR_-JFS|~YDmvDtA zc7Kdr&6BbY(SG_YQ%lWX zyfe!F>qSv_dd?=xjNM9ep5d|$GwRp|9vO;Z9fdq-&)m*bJQ~3=dmsWc%D2A0D^k%` zW2JUuG-pO5LCfL2nIdUV>a5C@Jaka~UB%fwK0BJ8#PWLCk}A=Fu_p zGl#B4Woa(%;k@iStMs}aKpLJm22!^6}NmMomrOlIitOD0`Ls@WwMF#x?wze7qUM+O|BV zE_A|XrlAM|Mj%h9z3Tc&#gZNn*te3I8rkql+8whfrh67A#a zfO%WNOQh&Rr{;6x5B`|1u!&?WVv$UzlLB7v^9@N$)CAMW3)a@jBRx|m2~tnwqa0%< z`K3KrKJ3Ghiv0Nbz>bRehWe}!z0iNu<_VREl(Yo!Gb|dFsK${p3YwVwRloK$D-SIX zr51LlseQvz-zOkNu~z_=kdAkIBOb<3TNRRA1>PChlvsuD5;U!{R6xch`wW};x7Gt- zNYiVL-9D;ql1Xt>Weo9olk!4E)F+DEw%00!a0U3@I64IK%NQAo`kZ2Pu&ps)O`IBX zPP^c@Fk0QlSVv#mG_1}&3QF>a+z+X0uCWeo1S6u!y7}fO*^Nz3JyVaQg-nAgnH%gM z13l4!)8guB@^0?xn*e#9ur$AX%T{}i-;f4A)fC>|FK)j>dsE-+$Ed9@P)t@QP#qR| z;5c<{ddQ|x@KD$R1aaE&mVe2fc@;fu&5W`LWXgFZqDk(sa(vK7%=7~M*M0bS?ws*} z|L2dM)c@kZ`mg)&Kh|J12e_Wna`Wld>rPktIOIASUK}4Efx0m)1`4=3Qv&c5APEhf zQ3xGf`p|gLaD{W_M#ld7vvA)aHkB}U?=um!0VY?Eh3U*-Jc6m+q*xOx+<6 zSK}ssH)#87T#RQ{TvRvL+GICR$i}E9j*9^K&TQTnm)B5u?1ACdmFeCn`VZn3XCIy{ z!&q&WTyU>RTp*X%M2zg^TU5*}hd#uP_2}u_D{I%O`we{g_*&(m?e!aAtge#)&kM&L zvDbQd@1QE$o$^h$$>?hK8%R(2p{9%%=C1ykYr6mLf?V(2G=8M#R@8vu!uVNs*>Y|- zKH6n6YSLwT&2v~wYi;w+`mO<~WZ|0VMONwpm0h#6E1gco$(@Z+k zg#D3TI%IRg__~v)ULgb>hVoP0g>C6G(@-7I^ogh@_jW9-j&13a(%`I*SqEnJP>0mZ z!(JKtfi!jl&rYxg`D#X?wc;%YYMp9Ry~bNq`z2YK5S?XBkrbV5G01zeE?vRR5AdCA zJ2VyOU*InFNdT5t1uFnL@}o&64z}p8DV)RMLfT7?i+$3BtkPRmdnUxJr1pzb(vYmA zk%mt85i~NwbCp}w`7wJaz=a%ecOa8rH#Ic2r~%&YqN%h;mtb^L4IjzI&&XhE(Q#Tk z@MjS1K>5fvzOAbGkHCQCwOaD(yK>`#LU7B#Svrk7-Sgbrw=hl8wqSp~{afC_TAF!$ z$1sJ)YRs?Aa&I&Re>6HvL%T8s7c&8SR$yXV`!Nan=C5z2dtPo_3PvKCclb2TuiL3X9RNU&6e9E?RD9 z10R{)HUHhpzrm}f!EWo&`$NsHd2{oi0@~39&{Gnva~Tvk+Z9F^TdvzsQP839F0KAp z(b2Fmp*(p>Sy>@lpqUpO^6+tS938$o3bUcMviAGuP!v^OyS}2Jp`;_FNMUAmCRNfA zI(gDvDJrh1psJ^%s)nA68JoYdOl!dj>)I^e$5~sLI9`kp;aQqFxiTe*SxKd;qQ(qQ z2+|8c*9?AOtE(RrL%~j2q3Q8a6|d}=>4fv;Z*8oC8(%Ix2vw z`E5H{`4XSEgE+@gv-M)AuA1gfZq*K7G|P~EMKK53_$}IsJg+s*!A4r#1)ISO!xBbG zcv~#XoS9`QFc5q(@b}GFIB4_V&9zS&DC4^kAod^UuHj=M%>D?lal~szgJ7K#c86bY z-$15K#{a?W{HuR&hoc$5iX8*&v7R|J#H*`{TD|1i$Xj@|FV z`s;exB3!Ot*<3!hc~luE22|SaXHn>lN;Cwc(QMq=oQNFYgw+3>(?W=5-nNRm*O^(} zInUM6-a#_44i6%5E2eCskI{H?tLh<&r=UbkPe{c}41=YJsW}S~0x-4%a~htD>24rW zAxr0P_CN$((?`S{P)N|zeHLS(z`@1lw{-^P0IX`O$aNrM7*x|PKo4M&vV_d_I2a!^ zvWl_WB4#Jd$6};gvOQ-S?52?+q_)8e`O-1TBZzqj*oXNY>n-e}H3sG=!4kDbUown# z%H*K>q3vVKXo;gXeCx;139xelg|WnV(OL+Xrd8K}?Daf8LT{o(k`wA1oZ@Lbvk1PR zoMOv|Cb<Q&E@Xz z;7(3;f16x95PEPXI5#*s#{!`?=#7cYpbv(RBBucK7xcR#%xTX}0_?Z^tfPwKy@;hB z=(ex#(<N3o@YbJl@joJ|FK_#SPCV&a9QW zboXj|!#*|-`&=WRo*YPIF+6eeqv9{rL9SMqOcJk2lWVnr#u3DG6B%JX&xf!{0i;f-OCRR5> z$&%#k1k!gP5(FgQJbQUxpH)$v<7XITuVMO};B)PK#wduS!LhLBKS&T2`K3RDorkA0 zv=*%P=VG^kv(`GOZhf!DTA}-o&eU9tN(g|)2jENo2->?H{Fwg0RgnlM(bNg^=&hwH zxp9hjBhoTHu|*e?T7PS4zkoU((H!a=lXzkXAFG4G7jyW&JMERGvAvs#~dA2S4 z?e--iK@?Q2I{*8c>C&M#NA999M579)-i7x87635(SMtsCoINyB z9hsFyTDt5dfBJTus6nt%7AYOFMldrs91CS%!Zz7QRg~N~96KHkon;#aIV79*5e(Axhc>}Fsw$x}G7`$3-lh}|(YMqns$D;M ze42SkcK`A28tbJS3uSf>l%ajcpJS}wx1DoHeCiK~)Z^0dtePzizGgUs!Jd*m`9RQM zkxbQGD*AzgmT*Y&o^wScC6qm}{~i`q{#;U91HumFtOg2HN9&#EBpffQ>il%jv930M zLbrxiVWcIrJ@zK{4C|1Jy?0g_Y@$13=cX7~KoFfdS|KxCqV$dX8?|kl|G-C>4sl4E z{FYHzX8jUes~-7rU|>tVCVCrlJS6&ozOelxXm>x9Jte3A>yUNGn!hwvSbIm?Hk@mi zF4}?2yr8?}jl;w?+6fJiDgsn{VyClxtUu*Ychwo^cy;Q6`we36(f(J+S}=Nu8{ZYn zP+$=D>LCcws$QjkWqj6wAQO^j+c~nQ^So)8_kq6PQ>5q`t+!2>s4y%**eF~BOsXrU zL9bg@CTSacAGCY@ms`F+Z@$PUM5`m?PM_qR0ub%#2}IXIUuAsL(P{{rm=1PpJw5bF z+>ovdSzt`X!Tn8*bMuXiHkWZ&=`iCJaSpL7`;fEZnZC693|#O2X1f}fZP;!@rsC>E zpJA#$k)8@(_kNP0RXZmgbrRuj4|}|vT85yyxT2x*{S*SvGb9mF`dPfCUevg>KeT_0 zG&>fMIy%c>0V8j9gn*z(Z~_u zMk)j<1(S)P6hSi7rG?Gn^c#iR+aG*lGnQir7DlA`xU5KV?@Tp!HO`Z;5~C;4f3&~j z=(OO8j-d*9C}`#V|IuYShDcJ5zqNai{+nOjeZW=w!Qp@4$g&TX4iS>q=C9aoBe>6` zE2;Hn<2&N!IBBJ^WNmso zA$q2e-l47JFPM0Mpg~F_K1AM8NiSw&Ux$GeY1Rk;kDO&J*qG6`oFsfVH~@1Na@diV z4=7^$9FN%vb*kffwComuKz4oCH@4Zgb-qufh0T6rsW{{+@DgX5m(dN&x_n#XHeT4x z^kwREGJzE_11Hb-ZRL^Nn4&$zVnGn@&u5hpyCSbr<{TwsZN4gqh?q0zb zd@vwB+Rs_e(qKSM4WsnlLaFay9N~fb(}H_! zV}b;fC+7d1__HrB7A(c~M^@oS^$*_ODiaSHqff*)H}ve-cjH~w=NEJ}5L>$xzOSwy zD)={X`wK%<=q|jM+m9DUF9IV?>3t>rp`kuj7f7w>i0$0lblSZplMkoKCrtEi@b2gx zC(buq;4KKo550*O;?y7HoxoS~6QGQBF~?8SAojnW0FX)Cco4Y(MLu#FuK^vsd3La7 ze}%jCJo#?E5t|YDLHlU=hPC(lXz|f|0a3pZM-Ex(zOo`m`%wQLO>uVHtNu+h}aH|R}w%b2)7imjReKWVHwLCW#wwJWrkzy z%8T$4v7+7t%Qt&XlRwcqs{-GXfxs{J;Xmjljm5TaM1eg(3CyTo;<5Dj(NZqmPKWEjPx}pnm90 zvB=?)kx?nABg|W}CAj^u$6yQ2Y|{o>FGvpB^LHL>PPAqDWmB za>qoe5OERZcgVn@`(GTCpm;h@FS5Aw6cCE{NG|4FzB%oA8GH|0$0x}|)qH=zZ&rE_ zoZ12e;XZYcQwQ4s%#?c89oLYRkk%3c^hD{YyU) zvQ|ujQK~$HL_jGSak+%JMn0u51HX{uf;M^0(=svn(_vSj*uZm*QjQq4L-AGoYyN__ z7>fcI@e7@6D_^r^(qxYY4Us1oF?w)~5l+#mSR%QT@tkjYrS^D2B!Mb}c4W8$M%?5L z{^Pm7c~o6HQE(cOQwH(s1mjkbq%}prz(Lk(N?gnK0-)=jiucv{g?zq-mGdTHa zq))OA%N}ISS>GOV2lF8xC1hB6CctAbx}@^B{G$OgWBMpn3p`D8zj6siB{EXM#0Cf% zWtBno35+(a`+gQ~{` zkUa7@L967zD7uZNtZNZ5p5MC4_I?+1d(gMy`82S{& zP0L#Rw7JIZV`uN)~Aa>qR2Wq)d7Ev}xrrN&JE}hUd>3 zSUjuOvN-oe($-+#;k!w*XS3%ZgB8vrUr^&}5#)Ck(^Z=xm6(N2I^jzyG7SV=ZH}PY z*+fWu%|Gjz0D3oS*nDOs`)dFO<+eaYpZlNOTxufqNyjC$u+xIqQ6hp-IEi+6(&GR0d(&^R5y2`nvB8tt zFZAbnNGlnzT-zy_uyJ~m>}Nc)P1R7J1+qI2%lcDuo2C+{8W^L1lO#Vxwhv!WEs`f! z3~y8g#)(oFW3vttL9!?s&z(b62=loLit|oc&J>loKk=}M^c~7+R2W-;_NSCzQ$R%e z^7K!BHI<{HTv0SX4;GvhJQ21{RpJJZ_z!rNIlFW2g=L|j#su5xo1e#CI1^I zmxU9oggBp{Xm}qf)rNibQ!eD+LTzoQnpR`CgpC)$ecd=Haf(c!5 z0w_2c6pm4Cai|}`0ua$ml~!pyC_qh`P$KOQ?&RHA+)Wjsc1!Snp?{ej=tv!7sM`uWh&k5WMc^JCqA&w^jy)Haw*w<0@1aOr)dsNep>OP1(t;{OQT&9*tf=@R|01)p zqF^!EG|zc_q{9}hV`$U{Lf$mtA`R&UBb-y1WPomFtoIAUDpX($n;<%xB|54P^R+Y~ zlr^B4ET88}nEAyx!DkjS_5rK^(k#lvoAT~(~oz*T-(v(NZU)uX>ozZ_A3;y zg3R>2xA{5cVOiMYPn#o=%JvC6{jhMYJm`^pA_TDJPk>LvAgh^+A4zEJ!?6&0m3Hnc z`6Oqnh)!2nJFz-hpr~MX=SK|$>d}_mIY`(mxja}`RhKf_`Y}zz9yY-&q%7j=LJr7l zkda9JYMK|&-I|`RT*d||+-sOTL>W&Z&L{2Nx{h^w@wmkZ#(86%zv?pH98)XOE%a4r ztM*szDwFnH()xg6nbDSEbpo_BR|7Q-{Y`}Ymo)Vyc$=6}$I9#CR`17JQCAjc6bm`Q z*H9yWkicEyv>T4=&C8w!Kosa#3bopqqm~@9y!UD^0ap8nbBZ*-s?wSslW^WLi)V^6 zGz=maVi#@#Ul6qQRj(IZ`*oJ}}#|J=H)Sg_Z_ z0s^XJuyLWp1Uta>*T>kIdCBTaUgQn7S)s1YP0=%8i?tdPBmnfAZp2QOc)SRhW^<)F zYl_rg#dRZzP9JkQ;O1pR3UJ~kG(qBNcY;MUMe66gFqW;-_%Ak3?kQYTw25?LEi??*)!WG=DAv#0ZV1isY};0ajWBX`Ba#9pllVLRB*QmP=Kl z{XU`_YO1*5Kd7C7V!zcN-?6m4K0Q*w6%oIVe$yrvtq z$>Vgl-xe9n`f-NY1+fbu_wDn0n8$Jag%acjHkOQ^l92(&Ff)avfW08=IV2WmAA)6a z;tI**g;5v@5v?PhKw=E;h>tu=PBvrGriJ2%+o5G*i`my&6!P=!?mBy8d5UAqOqB*- zFj9^#I3KtB3oV5NvRUG!hrkzz;ABd;*HyV z;A>dBf)`P>{BGLWwy?I@;QI&sf_cavGIHo-n;T%RaRE}OD3Kciv+chIj4f)e z_OZ&c>>YdHYVFVukT{{q%}!C%u>z9O4P>2n_1JMLY17Ps)X=D8MXNt&0D%Tll8wLQ zfFc@qJUUq~p!UBEnI~DaYHuL*jaIs3AIPR#GPQ3^i6+7Lge|lL@ocJYxxV4Vd!zwI z42FG3E@hDJLh2q#vz;u-!9_b|De_?AZ0q5N48RHh*|T6=jF(HfN>cgrK&+~RC(P)rw;jy@ z3)#_*JDGQpPM`Yud-01D_u>vDYTN{><0&bnXOAy=&4j6App7O_It%R4+RA`{CZ^KH zNq=~}D1C)D+IUOYTS+WY6BG6FtgVB~{VNMmm z0mlV-Qz?M=lA^fa#270#srR7Amfm(>H}IhGPP<99B;^*dB5#MEM$W#Qpg8<YEQ1L;St0uHuYxA@~+{BALp*a`tsEFX* z6_{^C#sC9gQ;l$27*fh$qU*>=n1D$SV&pl(ax>gdB>?prl>%Gc&26VTPrP*(TB(L@ z);u#@nKp+yNI{c%oKABYq0h$l7W&V4AXa;?KI)bD6g7!kD95M9Hq#nw+WDKvc^lK9 z62#d)-0{%gw~Jr%K{+3iwNiVP;V_Kti8gBYm*60;K>kDzIa#-cs>X? zEC*j`cH|C4WT@M*=*MZV-EBwCw3`WMx6)~4)nGQ_RCLC}KmF|gqIwq4gI`|- zR|_TfinDJ08=H^{o3uSAv0j@Q@!Y-ZmDBn3axt$G*z+2KxY`){@GMJ zlxZ90&`ESE*+fHO;;8qjsmV4$D<3+j6t%|ac)0B0;*jcZdlZW{&rnJ3s4WM9$s)2_ zaWnZrgmg@8L?hx?nVM=8Z)#SCTMYr1>LD{qPOuY?`cxdkWpL#oJT`aU!TqDy@F9VF zFUf?Zxfixgv)qZ_J1@hoB~BQYh=f!xB2qVKZR+KiF9;`DIzG-!?CE|V+&GkDV7YM{ zbSo^)-Wc$|4K^iUB*!c>YZ%);%;KAEp;0;aP70KT+EQ2Qz~ST==vg0y~`>=SolvrCJv zV|EEr-J9jD&@&TF#k=#6y?JVelD&zXN%4y%IiBgQgva1-jhJzgAZ4eNDiT=Sag`37 zuI3x6)oRZfoAS~N#ORwVz zvPjKRz9P3Fx(h$&$ZkJ2YsmmQSAn1(dak%!YoM^t{W&~m*MZ&MbE}~LKKAx`&Ta!m zsfOu}9Y~K7!%zbhb)gKMVWobzSy2y6gcI)6{HkDi4*<%g51Wi_CYip zy3|GPs_TSIZehUY`)%{tNxh`rJKHMI+)ua{3OA#tuY^ zzr6)k#{VbC!%E-LFso^gK8AXJf|I!kZnF7(heJ70Z zID@oHDH#byA;~xBVP|ay7@D-#Q9rIR7b7(>Ji^6b*89m+`>&w#_%#=|_m9+mO}LDf zMBjihu}IQb8j*0t z3SjCfx3bg683YLuB_#Qj8k;{2q&RU$veh|Aqewj&Kibp#e0vxIwULq{$eN^ z7krK+sQiI~`>c9fv^$V18p%&)X;1B&e z8Hn>&Pfx`33a{Dqn1-3>EqpxEz0jC(kNssRLnsh)hbrql4k2|5G|&?V=lQ)z{}MTZ z!3Ey)ug#PUnnO6Lo6FhR`6^n$RNFmhdI{3H~X8E0`q#UtPlEj5(r9 z96l!z=Lz1-H)}+luaN0jA0wL(Y5t5W-{S-_dJ1-2*8IT5CF;818ZWclyG3uWc!o}{ z)zT!4m2oH&{bRfW=M`~SIiu?fdY;>AU?D>_?BK;Pv{*T3s|J&f(85=tO=hQ3o+br@SWl3MP z(bG@|1Ln_#D41O+P|f7&M8r`D`z2NI<%LGChg54}R%iEx-VtI^5y5!q#_|v29*3lWKR|+ zd9-IJi<%jgO{*?Kuav+`lPENnS>{+#FOK5tOv(jqG@v&+D4%g|rkuOYwsnplyYn); zle(=dsde2g4@L+Sm`YE#~gO^@+*dsjzz@{`pfz`u|H&{eSo1e+)vghPz&ta`R8N zZBM#w3zPX-Q?^Z#jZtRFIRc(GowOpFRN@@@w4^5aqEQBnlKGO(5iS?@4N9@IW$VL74P*jKNW-F8Ox4H@&ve}%7||F~bXel^Cfq}~^} zziPTXewuqjgINZ>CXwcoK!G6Sz$E1~>;^AJ)d+Y2UY~G&8 zpSwZ?SnT=j>p=&El2YHyT|xG z7}o86qow^Wnf%d=T*dy3o%pUmq5W{X`r&x%#68_#{__p{GsiBf2Il4oFG|HbgNm9= z(1Kz^&85M%#oxuH;-y9IQwxj*{sCXiP%JgVrf?$`+=nSy@=qcB41%97Lx!}0y4;N> zbqsu~{#yvPcjqi3no?u4pb~h2fXs5d$no8cqn9NIL#)lLXgJA4`tbr%W7R6E*~LOu z2u^LYi(_MpXG?iDnu9}gleNZ1yYiaCzqYuVaD`(@p4yJN)fJLrlP1c)CG0Qm+=9qh9h9nY`n6ky>sJBh|_j6bE+bZ z!uCoYeQg>K5oXNgbhHgd7fuEw0Jcpu8XHG{W<9YtDBNf(aM`|-U?lHlsA=E9L z_yI}0tW>=aMO3j|NSA9l>l$+{L+n(u_D1~aG%>v?en*X5E6uuvLG@~i%wQU+lsBg| ztIO}F!pJAG9V(TL``(G9dLzq?fW16qdYDs&JACX|gqAwJ`YYYvsrIHLKS)KUEM7il zEoJH$wbpm=u)-Wn{NaIorg#^(GsC~?mJCwb^YH8cq3oT4Gz*(;-Lh@lwr$(C?XT2j z+qSJP+qP|Yb-By6Yn}6-6S3FLUi;#Wc{|^TjGQyZ$b1G@zJ@`f6nPuP%*UN%*ZK1o zF{i%sw6d%Mp)(GR!2S39Og7K`@f)2YhKV;zo?;93@7W3-jrx@_S{<&tnq+A+l1aLO zcIB&LQqwv!#=G+=%(aHzeYd}MEuEiQfqN-caXrVCxqrkok69bpW8N*(8|;HR?U@x}I7);0vx8k? zrboS;dMJBJyiOi8+j>X-POnKa9zFwSrk5M=n@A1qTnqLwr_RYyhU0Hio?7Dm3oK2M z3gGQ{QTD8gJa|3G3<-N1b6C`iD*|y}MRF9PRAm-Pjth7*s2w>S!aOIW1&c5RnuR%H z%xON+Nr__OxIiwkQuHc*4#1~grrf{@1>iZ63u{k4TQ87HZw_J+wSX{BoAxk^gK_sz zsw&w`%qm#E4^yFB3i6`dMIZLKhLRCGwNWNa0d%$tpTeHz*3CZUfD3C=SwhcZMM}?X z*!gxrloik=Nl4B@Pj?n%ESu_WG)Im@79an=OBe%*Fkbk%!so!h5bP{8FtWu0g+4fw1$#_6K!S{4Zt5iad zvq+g1<3^tq!GHJlC6@KUt3s35EgX`kvT`pmWN=EkG{UE+&hnwiukbtz;(9%8@s^o7 zc3da*>}g*}VDjl4o1iKoTY(u(UWX@D;)4SB%a>ivs&i9jH{}Y?q~J&vnXu=#KKcsW zg2$klO3)?&;fTpro5N%YoThHg79i82=wf$xh8;Vt%qFN)wPgdTr!1fR(HOmwC-19gVUStU6^)`bPmRPONtGar>OWAYrNQPV{4GnS)3-cG}dZ`tbGi^;&kHJhd0YSGiv9VrL=4` ze&1v8aS+V%$ekO>ixVJwd`B$K7^Bv?h`h(M@DO$p3vE?ocy>1lQ z^HzQ!_|`F(h0UC2uq>_ftrRWjOSUcPudE&1m0wCxcy)|^`KVoA(i!H~th4;;@i^=e~v={;Hn1KTpM*xa~Pc9*|M=s{isZqK@Izy|<52RnuT=^3(|4p^&cyQ2oX zwN5dmob6`_al$Rz_n01aaD5&e{Ay2H3#&9wJi6epAfBt%(c?!4U6+t9Q(CNcVjuIB z`2)kElWX@tmnn&zE}cv-@1R*c=HMn0_pVT5-hq1r+f-d6@m87ATh>~13B<>X+=$C> zr`FsE>l($nWBiXe1>Q3qb5-x}cpj-|c>6i3s>eZ5gFV}RNUku~&ies8FJgZi;#X9a zA5_Q=kIr?4#h3sXVF;rg;oy@or5$EUE2JhmMV=FG*CR)YBXyfIqCIOoN-TDg6(U6l zAf9FCvEjxTQxS`Y<2q*jQZ!@YUf}Xhm}{STU6Bahgpc|fjZa3FFU$r{49rlRKd&F) zg(7?FUNcPGa)cXl%?UkI4mBn$@)x`4{JrH6(W;Qp1Tk-f|ApBQPjKYu1>0c2)eC+O z)u|5yw=dD9o9gI}H#25$O0Js@`D0?=1kzq#*s>!G%W0iwPiyypU?dAHGD3vVUND4k z73O7O^EZTG>oPW3M|&C0w+z|F?G#>jE<5L>*CnqLK3|H7inCyTFG19K))=?IPHY27 zKMp_gnw~8ug@oSFi}N*qgFe0wQ>N*&Lkw-)bx_|b`aKfI@0{x_A0Sg6n7#X4FMlNT z9lPtXb&9N>rY?%>asQkJF6 zC4+JW>O;HAP&W5re~4Q$zeYm8{4&;mLr!%J)g?Rb)AWe8(_Zh&e%ce^s9Tj#S=3!$&~j<6wnodkt-d~#xCnajad!Zshyx1MgHDUtn12+>sakIOj9%3 z$)46=#7HI{#hU4O{mT@F>z-HyVL)+dl7qeBOfw)eSTXG_&SkKqKCgPQyZkx6$5$yP zolIn1`v2N-{D=(;{U9+UMD*O!#2xb&j_YCH<*zf>+1Z9}dhow^*#Aw}UHQR9go_$T zC>sn4+@PR_A>3riiD8hRiLdKBL4B@X57lg`!@Uz!?V8WulP{|{UhOA8VUgl8DKLm@ zahPP;4a!{z_dJ>uk~#H08i(2mt1*nxbbv5V7}e@U#wLl^AJ0?%@OxShXgYA#CJ;!@ zaD1ieMrQ6keD&&vYVQ@c894V10Eh%>{|==Agvf5BdFFd_Cqpl#z9Gn$KW)F*OJ9H? z%~u8QH6>-D7A0-VENz>?^*HVz<2UkyJlfrX@u9x0f0Y}wfSjEb9`>wTjlQi)$10k9 zTBRQtCvJ%PLGeq51rLc~;&~Yc1@;F3E7*{;!c~f?H$0xz8*mp{$mj4p->qK&mVdZj zp6LTmaKd*}@%mgQJY9A)tF8WkG>g%))Sy17om-<8&D>p^DMH^YJ8&c05_tLQl0{#i+wpO@vu8-caS#jU zm7HfO-TJsELw0eI=-&|@04VxIxW+U@Zk%XnfD{fq-lPl9jLR!W!fz1E2s@RvIfKY9 zM>MJ#_FJMfMOC?NUn7sDzeMA_7)46l;dE_E$cfiBP5IDEG|ufhdC0VDLsRL@(rTF3 z$RoYxCx36Y@6&MH|w^jqetQ(j zbSHdo1jlBsWMjpaI__2LmC4SHRLxfL^@uKaKDVq1DV`DQVE6n#tcAQl-Cjl14pnGAGPwdc?bEOB!GrP_ert7dF+_n{g~s#48=v1 zDzBc6r=xh@qnK=#OIV&q(c*Pgr@vqItM1&DcDf7H@e5 zxFQom-=vZWZA1QJsX!O&kx&i)`t^fO-WJX&U*uT8#ps%6H>WIHRT?KRnH*WriCaaJ zkmT|$C9r2NSj!xTk;8L)`N+M?o1&jfR25k_q6RZl*iS8?1qe^lqs| z%w}zZYOSI{LCW3RA^`fJ9?k<7fTwA}%xd4NfQl);LqXk&m=6LL>B0#SQ8OrpNs~#! znK-UbuZW6F^P~=HmFn~->pzY)Jxqn(KT_f4Tch0(xNEu~o&7!65xR!*l!&gc$8;r> z9`Vt`715?Tu^epKyEWi|ZQ)0?(v50)~bu$J#{(8KpVYPgC}5l;+*ad-)o{D4O#2Ck9@_$=b#@?S^Mu${7RzR ztcS2(i*Pu5Q#?G=MuJuw#74oYAcIr zCyd;7(C&;&`W?$$tmcoXZ929-dj$55d*Y`SH%Mvp`9lN5K@&mXm^YgL74zUZ5$KX8 z^M-fMz=f@r6@Mhh6;fxdBatb8sQqf26KKze#ue{N&6B?GhIf_{z=BI#!6*yY%u7YV zX}-J3*aqC1j@Wm4S!ces`m}hJJ&j{vRrM4TEusKM~IrSDl?IRdMHU z%AY)YR;lR4TG+~eT*|Pu1SRLa<7oVVn`;dVHs9cJYW7%G`ywo^{eeryen&Ct{KB1ugf9uKQi+a_Efp_SW)?r0r3n2gb4GRMN8TB{A?^U? z;0TrHXoUURe@ENz)8Ex9uY42%eWA?+oGia$zsjlmO#*C>P`71gm%mju7vt&Y{13PY|M4=I|6dg^Hij7ngc(ij?CSEebHCLCBPw@*H6kdK>KxqU zn%psI-Vm#_mT|^<=D;qV+B+n&2~(M%Xhj{Y7xFHeDGOO>TywM`+xCLrM?~2*H0_j( zBRoo-DCT<*eF(~S-)DwuIJE$sSD4p=lP6kGt-k2tzX{pfRcW#lKNtiGSRf$w|FeVh zpF96Q4>4mmBik$rg2Ms$?Tip_l;N}%yJoWsKsuvhr zTiN=mVfHL)$<*kE)E6Kl(o{$W7vv@1bq8VI7QuB=2P|S_O;BZwpn=)U&$D>SXY22d7VYh-n*2NSBq2sCDHfd=%OAnZL56(9w7ye?MN$4HRvxsoy z815J(S*ysI*@}_V)1lFlxNX^-l4EsOQBkX?r2|w&R#|TsYA=eS^Q%2u-M+V+UrKn( z>0`{3AZ5@wBLlA1<3v{U$uHaI$7?^W8 zDe|E0%P?Kx5jRJ+D-sEO{6a}z!bg6qtHp!aTVQmpk7M&knXsD(S^3LEg+)XCpzWGg z?_kaP>t>#51w+ke{7DibHouJ5*(XUAJ4uOM(@iq?25cuU_oS?P?qWOdc1+PPvbx(- z^}-GaNudI}SfOzr4CpdxV-b{D+d+6xnXmm5rB<|@<#5TPk!ZItBLEz+~7+*J6Tl+l5ik+I^Ldx(RuOf4ziV0c8$ zj`_LjoKh|$9u|rk?dEx29?&Lea(%K~DA3yRR!V)b%d^$PmX-Z8_JaE`R$T!H7e{@u z%!}IUdf6I|REvL{jjwQTuNYzPJyOd{D<{$;X(YnEp8OYYBn)z{h-ScvZBm-`oac_v zQ$R`r#9-v@F0E84$^q^=JCbw=>LPE2jF^M*zw8QhpAUMmI+8bu4E>(Z%wL2Sw)!H* ziZsNLJr<~zgyfhnVNH+pgf4M*S-xR0ez*;5 zqXBCGRgL&mIhgB^KczVDlsO5Ue-OsIU}#-3XUtl%JE@8XF>dnLew8)uD zG}uUVwB&j7eVWCs+r>_WHdD>9h54r5KD!{`%zKp35uwcA$-YLDtkMPnRizf$X z;x$Hs{y0}x=}BMwH{&nsk>Vr%X8;2BX8?ljfBgCUuM!b)H2eQ6!o6p@>e2HxxSJp zxjQGXE5jb=SvGg`p1w@GcMF4}IGatnZ5+etR8$J#3`2QoU!u$3lceW;3F zL+^oHSl=D*;KaUI1-Uz!Hf4LKM*X;6ZRX8nZ_dFhOtq2T&@1e(HzHg;Nq6E95G>xb zaSC7FeC*-a$w1QEoHdM4+tMbdP*|k#HV6yKW3_JWoBH z>YP|t+Ih8cRTR};0z~3HKGMw0)m7IAF<*iB$InsgculVVK#!5halm?lFrRjXi%9BD zs$idfSA*U|lakd(c2Nv8)A=M-qe4RUoC!mfZ%7=Iz>`dv{s!*Heq058EEFXAC63!C zjdMTiVY;SqW?;L#VAtIOZCQR*eS#}Ks+8*9Va zKF;4>6YOIx?n&_WETIeb(BOz-iZzaKvr0M4Cz{dch!mf6dN_6pFS`q|xXrP+!iH;> zfp^8~*Nz+X4%Qp=3UkE*qwWVVK(D(#h)}FWMhmAsT#E`vRsbTsaRZ7`LY<-0uUZm$ z{L%QYllfEebI1tAAPLn8@Apg=(Zo1sCWU_^@`2i1||R5E-y55FxaQSO<&IU_uQ{%*Dq*Azus?R zpp1y@9Hbxu$`;}HUT?K zXnV`c+dWI`$aNt9!cXcog%IBUO}P8sx6L;*{$&&_$YV_RxPD-N^F2JnyUk}2?uk8; zZ-0xq`$eGmbr~{oD-i#)Xujw5ScobR)b~(JxOIR^sR#MpFl21-x(xAc89bN6g!^?7 zqJ8@f_puEviDboFgbyyP#G@>nDv86%!Mk~ZVY@Om-MnbY`pz~_2lF*X?Nac%pH`3;3!4vg;4`thqx*p z+!)uH=Ej0@l@V4D$}*wG7a0J&i52rRdQW~xy;+|vJM-sHC6jzO9=|@GA~716Y2mC_ z6FI)zB2S%|Q$|8ZBL|pgjDtP2r(3A$g?MJ&igBk{HbJELA}f;FQ^tv#vTAqi4Q>+= z3T(D+8ic0gkem%4S_}gs1u0)!fJ`T=NZV$*S<%7kfEBMYR>a8QM41&+D$LSk2za5F zroI`wU!fd6t9~0Bc1&qeq8k^s+*opS@PrzdcBZJ%bu}~u@pJ_NRgRF6(@R;b@d7!k zT(Mk((Xv$utq92i-1V^M3K8?dLJGBf2ahNm0Il?@#0+u^mOB6Hm_)V!Z_Ef7bJi%k<(_s7m%4jyhnZ@#)idG zp=vU~pwiMhtCI3_T3Hj}!Vj63)?n5{vs_q9K);GZy2(&wB|8UQIYS1aB?Rdi6Vqzm z!AQGEm>q&~q0A$CDO7~WaNs?`ilI&ntLX1%q$ckrR5VBe_gSe~JaCdo%j2|;xz@}N zFB(cEU7PyNmU;y;9=r&2l*p6dl6#^a#wo7tz|z3UhV<{A4h)3RBvht?7o>DuDRRf> zyUV;A7$gS3NzI-xf`npbw{FS6gs^y}=u%P3otKeuDTrdQACV9H$n&Jb1|LYS4|;vK zMw`jpwIHSOc?wj+p*U^ZwWs7$vKb;Skj^N8bD>IKb7#ZQdGcaN-Pb`hFSuZ6-Jw7y zT8)g!%(aYlN62~NMpfNv25oTT78)UJ?YT6@oVoJMwz*8-3Trv>Haq{!ui};y4&^JMD3ClNu_XAY2m}w$}4-_v=A$^;NwOn_1ey?7aqaoSP!vc4bf3}au{n# zKqQm7B9>X_8~gKUzvJz)YK{S>&*lT~qs6wkX3-$!@++X+A(97>jH@aRlPz6X^U3xo zrCANtv3hG%VelfE4yQoTmYmb#ERRUigqq``@9^-`8?bb=;AP$Q!lvBy0?$yI1J}Jd z)}lOU6VBHs0ZlK_w^2ZM9t4KJ?wx~?2BpV{nA?J>dGoVj-MW$bjEB^DAe>v{s=4h_ z=%as!Zc(2+mmOA!-T=&mGR@jaP^$NbHW;hGpc>290vEx2o~Q#n;Y^;YjpkV86~CDz48R#b7I>hn4Jc9N$fzsi2`wCz zT=E?>8M-uiWQl`FGCyg}1> z7LWQ1L^mtB8^N6n-vf`fa%E6_nM5bwiA_q8(DFncq=8wl@cm9=rS2FBJM}Ts~i)d#0-!3j>6xUB-Wi* z2=;lqOmQdXjgmZRoRxF5Ss#W#bCAi?xCUJi4R!=GG(g-O5wY`1v5S6#rp9DCfFJILB&xN|R)pH8NNr<#4Yg)h;#R9T56Nh8lz66( z{3)hI9}!zB_z{zvN$1dH{Q&}i)rQeQMREt4K$waJODBo87ipHuLT4KF@BuO?s8>j6 zn(?!<(%h)R^aLa6_iSW2{R&QHW{a1_?jBLEjNI*MbiwuA$Ahve(~#iCW3-?wZ}MIA z3-kl{41WDGSzvCGq?nhd|MM&Ib=8cxr?WhHZYdga1ctikPjiZ^cTxwz~t z+6+Sxc2BFZ-i!d!Pu4-gHq~|o`@R2sd!w`I*{E{yHsWkP_W9y+o=6C=gzx|umlHmk zF-nv(E8NgjAzpn*Vmo-%t{S>X1Zmjl5H%`0$VsWfPFa>(vUV(tIc4BSdZ4 zs^N{QuMQ&Gq@U8V*3nX@@%ZO{RR>~=zLHFC$(#o-n%DMkgWr&RUq0T@xC2mk5(!?Y z=U%KYcNkc)TL*00z^r#1!3D3Ur5M6|ogri~qgJdFGFZj3)?~2@oChpQR(zlglo>K` z@`1GbGV@lHJ(uzpIfO{8qQEUXU*5bNTw*<{%a{?~`pcL!h+Mc)zBZg_YlwI0e-{{P zpB$0b;mMyE>Z>8Uw}ht%0As3`?(ReLx`peuTXnUMaMe$nksURwa@Rbqs9gf6Dp#7D z-bODT8RxEiz@d-@HK}ALj!rLlEsO9c0xRXqZ+QGnMYsw&2d-|S;-=5zD+cLTA3IEI zhP~NNxps&5=+eJjYwIf@C04tvS$Y?)FuDaMbu_yjOw}$_du|A@dPscCD2S^z;n!9> zt3Gy|WO}x)p8rB{+B@C(4eLBhWlq#BUF}MbSJ9c-)b3r~gk3sdH4k2CXs{=-71X3P zq%cWvnyP7Fb2UrmF)5>Y<@yG<8O@!=C+kA0F5TG z$3DdT4dV%ucT!hgf=87X>8>MeJWS19MqAL7=5Wn4UIhxjs4n}<@iq!HUR_a7{E#K% zSGy8lo;S+0l$9_1Zcz9o^2Wd+2w;CoSDO1}yCL^!5Riy-#JRo+Ot4tx2Z`2TxzQ{W zZkbf-c;cJv>?wccx35=OLo!$WPs>60)W2%b!5N66Eo(62kevQW=u?2JwlE{);11n$ z=;Cx!jRU;C92ZB6RU7>Mk-v7}kE;*Pd10-UXwDTvKEWL^l`@=pt$%0p(qIOYNM@ zw&=dBFXQ`i)KmhCKX$GL8R&B?Uk+MEMwsylj)P353%q8WXaEcy9aKT4KyWZNy4Hf- z?yN;f<`5tvFoH&#K&kJC#a`tcsXkb4B1BV0U z$_`6HI`dq5AFb7Nue3EE`ZnfI(Tp!3|0P7D5*5QFa7cUg%N|H0@#^|@-NUDwVAlzn z_n5@kB{mSbB|#UE6AcxsYU)uOQMQzbruLjPH3OZEU(z#&Y_q`KZU*1vnIkZ>D7?l= zz#HHv+z@kf;6b}s{kx^q_9>T5w{@Aia-{pmO}IIy_+#P?lR~$myFH*$^m`2Zd@}p? zaJ$gt+#vRLu3&p^b~W1V0U!Ivyhh0G={KRQmDx^^T$S10lyapGY23O1%4L-w^ECVB zn)E3MSjx4K`~4y{g;qJU0xSi5-tJVc5w;2Ko1h@)mB{J^iTp8~+EV~T^j7(HUl=Q@ zF97+4D`t?=7*7CP_12mTKRd>|U;};~fFFwaXwiEalfkS`W zz6BrH)(>$3_Zw<&tnI+S7xD{qFZA=p(hKVwB>uqX7OoeO@c{Cc;tL+(VDA9`15037 zai8f66d18s;zXtp=^Pm)92UJgB+N7vz8o47Vi-w}ZrdyGb|2>w)db4{Wym?2YN*E~ zqyj0mNFfHJJd%bvIVyL94K`xJgj;x1ym(zMp|(g`kMcAE-z2YHK8O4{qIqP;q;Q=v zYecwFjE`DpxY?xAOSvU#ZRGV3v{42lvf(kxgImRIa)Cq`T}@^+vL%O%AxU)vf?L-v zWyT~~kA@))GfLJ>$}Y`z#GHkgAw4~k_C(zzy4%1ml{3vOY4vzh`wdk z)-EnU)k{hEv;D?uQtqp8om3yWb%J|H@S6A1_@VV7Mu4#sg~T64;a`Uq^*O0@7ob8x zpe7L|nX2Qglu4DR1ahc3336A`B*j;1hoVU98EHtQ{XFwNMkuIZFpCrF%Q`e?;kqM1!DX@z?t^{1;zrAuAIy334x&8|JxWY+(!RR#Ps46%~u9V1>0 zXg07qcEKeBbZvf|ltYwT5B3{kd8IBHis%rTnS`rze`D^ zqXWXB1ZSSqa;d{UMscA+rh5X5yYjg!lbP1Mry<$fI2-DL-fgvdTm0_UhmA%ZLs`8Y z-$N);1@^l|K`unG1{K&V_`H}$5s+B1C*6Q@qOK){E=lQSoP!ap@5I~Qo;JNw!PaD> zhNI0+6I+9mDq#^jNm?hTZrXx-Q-G5y>2pqQ1X{Ucq1NCr--6$Oc~e5NTet(VN11`@ z_DA9cI2Ohz;u${*Dp&2yyTx%xpN%G@aFhL3v^~436nPWSxasD?PtmSut0O2+ zRg^eh*1f9MjztzZJ`8WdQ-rwQZ77r?0mOtI^NHPre8kP)dszyHy8`Rd$HFUvQXA6U zg+wkjxj;J4dpX%e;cxPx!Aqm~*ppk*?0lp|pZgvG)(Gh@L|@aezHUg3TAP|ulK>Sn zC&-HXyz9jDR7O4`Gf;kkGU3V`gp(%ZsuQ@1M9Y3I?y2_PusSO8qYd*2!-UOWCj7XU z-h}AxVKP)61B!h(&eieKdI1r<(Gk4a5xPRd^kj!wk?kXtGI*KmJTHpT?Ul<945*XM^;_{6A68bg{=ij>!X`F{k@YMfL zGL#1nLL~-|1T7t4#gUwVgwj7@mJ}mrF-Qj$wI9^(X!Q=JjP%=@cC{!WphB%yX>Id) zCFEr{WYL{PfPXNLa4mngL)UB-7*eO96eUB zxhc26WJlE62=?F#-!V1s`m=B5bA8L@Gd}seNgTZ++CStWWg4&aP?75w{$z9A1?H=0 zx>x?!l-iEaCnt+=eFOD6+@m$0-`X_un!3m-AS-zJQF%#`DxA$DW7u2ARMP4e*(R^C z>Fk;*ey1477h&BO5abl6@<3{nx3&)Z=(jNGZ)eVEeVu{NU@}(u8i^mZF~#-@GjT`5 zUa!4z#ZmGP0$8wg_ZjV(;yrWJU!kAz`g(6em+hY{?RzS|%|?CgHRt1JZR%$@J`S8| zkNga;#xpN(jZq)vzF_4)LmZ!Ux9{N5FR8)4^2UGc&w=pe0%RreY|ndOzH&2^IPWP5 zf}~%+7T3?jK9OTT5&Z~P*1u6k1W`{7D_&{Ye-)p?X1ye3)w4Z&(!PhMel8*4uCI~3 zb6ORlQnGo790kBQhxu}^wHG-TI;$UHY(qJ$w3j*KW`%9B=b0SwD3TM&ACW>yt-VO4 z#9AWVQ^m%Y)elXMtsCe)EjBsh%!yS3FxWTPSn`l=gn93waXg7hc;jsD zBQ-ekohX!9wU1QU1k{g~YJ59W&zOK9yv2$3;Zxss4jMS8g{q_9dZxC&5Fj`%(?UdU zVm0z?XXy}H9fvb@JgKhfT_v~SuK&DPKYEi4AO$~8PVHRnG#4S~|I#RB#LJ9tf9jnL z;6;H4U_+ToPe^OQ((n)5X!mk_JcwC}cjJ;YlQDX(Z|x$vKo0sF4&%CzhEt0f`7=>ES(gZF}uGIIz-R z^58bX9*v@}@$g)th?mmRIJpsysSK7((yA{_p^Am_;qB@Pl=2(KxB3U3u)0oM5nYUr zzl(%DEyh76yzM&IeFqUq<2k$($`(;dfJtz+kWdQ!ruNq9$938-f9LT6vim#=CXQ_e zryh*QVHIH*xK*T{Qfpn&QPPbQnFaxBj2F+=`Kio^59ewlZw_E5aM`c$HIRx=Dyf9CM3Lkyc3oah zTT5kIUS469($-MvFp~$kW7n;E5r94|p0LB8gmC8umUj2HlxT?5MnqfL+N4R@u!Z2n zrKHH(R#i<_x_ zY3i;E`sY*<6sj-Ip?sVtG6wwH8!1nt!ONw&L{rMo?W1`y zgI$weO~o0wVZ%(^dyqW=ved8LZCz*Aa1!FM+=8RGNL2;kK5%Gcr~f>}#;^Qx_00%b z=|gAqGnZW^`3R;&wKfX$O`a=6UzL^E%SGOL58+#m7R1HqBq54(l2x6fNXPm0v7)?1 zZe|@kQ+rp+1NWjPMcV22cd&kX0)h zHK{DNO0z_BiFE`%v#xh*p>O&_KY>>{)$rO%+plVq%;4^6tZj_$&SR4wN6 zX7+=O%VJ(TL?;z`jh}%Uxy9^8ZX9 zK@V;Q<8xy%j%%;rA0loIMI^bHcdr_~LT9i5W_C>NSCZWH+Yt?ess|Q>x(D*xtl9K? z^JTU350fHq==x;<`dHT%x4PEFi}#0tX1U<{>2nv488_;xHmWZ19#=#A?eDIrD4Iz( zgCX164;8pTOLSp3jnPSWjX4~*)*StSRRexLY0*e%Zh-)$sH924UMc4BPx5L=r-3lm<# z$q`a!VnV%_DfOuCLba?5sfT~_=pUfL+i3z4D!;IT@O6OpmgV$_CIuv#mQ1Ci#^7uR zPEju4fZTJsU+$Vc*y@~b+{djqj25rLnmj`W0718L%{YRnz-3oU6L-WEH zwGSuW>KblT9a=f|dJu|fsPtjxwh2LyIJpA{lGLkno45^fqSF^xwL5d6VQs};ZHA#( zj$mVR~I8ir|%}gA->6-+` zRn;85L4IzY4T>N3v$n_FpkMuPrIkBdrB%y(7CCeA;jIzAf?LTUeWv>g&$Bn`ID8wS z%6XUV+^ndon*eYen5lw)T}_5fn!lqIN%s^@=f#Pe=k7_hpWna<8v|TRkID;m#_AV6 zY`x<1?EYf*s5$j4f^4mEpw`(?ZGqAKwNSOHWNS1@14HP!fZdUu^~b67|7G*c|$<5 zAUW>>M!cSpUNjn!hUGF`zYA^&>>-vDzrK6U3iu~%jeNT&XWI<10Hcp{9{VCG9kkm= z_dFnVfAX66wPF>&P)h|D<~d}+)$gE;;aGp~s7y#S9k=^K`(&oL>_}}+ew>*7_|I^J z(J+EHi-I?8+VUa<<`z|PSI;NfzsA(zCXxxUqs$)4)>5h*=dPH)cH$`XI!f)oPG)Sb zk)jzSXM7W58$A=3QfZ0q%0~n&1$O#jo)!T$N{fvkA8`MuWV_b>#ul8JFAYsumrP(g=zAua zlIJMnp4_Xz#g5nUAyXPO=aAhn79+&T=a-V0%hu=euO?ml*V{uXF97wJ_7LE1I zSWj!o1v5QIAPnK zz70bvp)rrlSKAjA@iC_n#k+q26LuNULuFwD+4 zDORC#E=*W97+4f2ni2}D@?mAZxev#y&{_!1eOcF=IOdu3%H$n6(L+7{D z8J5lgdmG=uw&~^3+ks5L$jn zJzqBD2H9K&Zr4`O7sS!@qQ`t6>GmU=jp$r8+ZEbndX{)pR&Zn@itpld{`6Eic{P3# zu?2-<%Bf&;vx|-bKRm;EXzAmgtkL6c(4XW-LQ}4Qo?vJv!mp+CqAim)a@{c;PK43$>`GNgm4-6^#`$S&Wpl=rEA(~`b^jO9#~j#;ZAhPVfMP!v1Spd!)B~87 zuohWA&H9Bk^1Fw(bBdw7e{@ch52C!SX8$18?Xa4@m{ zvX&+_yd`+Mv{8wK_$D`w#gb((jX_AsU1TYHj5!gV<|M;CMAD`=BENtNeC(jZzy+Bu zvU3)UOt8vy;u(n^<@10DdB=1JRC-u7ENCJF)Df9NAqCRxcj6QAU1s0nUUwUu-ZQ;uIvXb!5Chs?O`gFR1sN!LNkIux{&7Rnj|2`WhW=!#2IT| zgfs*HU==IR%{LMZhM4x4c;qI&BB{`#DQV_2+u?Q@H_zkVvPGH3kCPJ zACtD8hLz{KXP#GWI_A;#2Y-mWTeXqyA4)urCl=>S(i3A1`DKx`P zC4W-vh(WbS%M)_FMt5ttuGz&aH+T;|xZx&%j}Gw$5C&?B+$`UiwX*undIyGSyoIS|k!6Hy`XF7L zZKj#$SuK(e!;KX3Sn)l_iD7;l;PJ2FkuSjh`Qbf1BUG?eaNn|ST8lfIP>dHKkKl>m z7Jz`|tU zB!`hPP_(pDE*nbX_dt{5`^9Ilqu&a_;A1Fmf=A>PRx&YAY0|@Ftf^M8Hf@ZVd(Dpp zdkps$-rcdDXi^3Ru(l2g-{`re`wTLo{h7CJqqh%ULshI?*R9T(QdrkvpO!uMw^1hf z9-^)lc;l>Gp0%~Sk@0IB;a(PMu^#Sk$ku8UbCqq4#y-YQ73 zhTD`pBk&xReaa_usdsoowq)@yD1h)mMdwrvQEbZF{2u<{ZSg}~+|x>WEBc)KO#EAstSGj&-e*iod;{ClJ*)Oep&ff=g=2Qwn$5NOM+VF0SvfuVNdEv4Bi zQsx5Mo?_3W-hq6dl5Ldd!b+#&5J+>vVWs8}ZgHZZRk{t2Kk3(?u>lNx0vthwI4EJx zX{SOEL_cY;Ud9L4MjPLcaH8xb^@{L=R!1aI?L`bv8Qa%3C;X5Cpv2KC4$w|6-FDvN zbyxBs5>hh`QclJn)KALFQH^D&bI(dpGdA0usB|Lhm`YYPyGRH2mlC)V{{!sQxx;rvBU5nuNTDJt2LLy=QKt$-h@SVHMDM zWu4RL-A_(sd}TYK%`5-Nom2iAkWH-zS|L+{&$hK7g6IwE`cS4$muLg)TP zvi<;0oc$M(=$oI>pN~}h>VL2wK8*EM#1-C0GkV_^^1mp1#~|CnWL>vvtyQ*d+qP|U zm2KO$ZQHhO+qR8UyL<0@Pj~Eydplyr9OLhdd}d~T$oGx^RyVlY4yF9c9XY}Yzx|Nd z-TQ_`cxBOx(?f|*jMWRHSCdpY3dJ;x9Z^aO<1`FR$#n=>9YfNKvdd>xX_d(+eh6zF zQ_#!0UxLC82QmBbFez`Jk%s|?#KRt4(+0kcI_p1U>(KchUj}9L1IVFKcy#k4Z`#k;zYktN&4J}*Im~`5|bR?LbL@%o}QZFh2TEWT?YiXDRJ0# z!7_rK3M2_ayldc%_Od*G?8m%>Cyb0%z%o2ARD=>oIP&;O%h`>weI?V16w`zDc zF`5ky-;kHSI9}AzhxSNOmcY5cRRSG>j{4vJl5c6q+EGb(gp%tSgApz-_&e(vopfgj z{eg05%swoJw|2fnI|X+1-3CNcY4g~@QY1CgO>BZw;7nx7O!o}rL)?m=U*zN~#gFIL z*G@~Ns;6NC+h;&0Sej2Gtu3j*)viO=d+vmaeBFvO#pH}DbJZiAa?p?iAz1UvLA@4X zlg|Jqg>yvu9I8`w*5?jJoP#Nq>Z%k`VC-O_z+QAZ zN9ePr7N%-q4Ta+T_JyWjAM20MgO5;vZb1ldk}Ayn01~Z+MS$y`c#EioA8{?3+W-?R z@^b&=9&n44g@5}1l@0F(aPYvTjo{Di#zC!{U%>JDd+RqvEihZ~96MUI2;7J;J;!@^ zFZ>=bU2xmR$hFZ@@X__0w}0AIFN_`c0L+m<)Y4D%x$?5L2%zgV2InuFY!fyqyav2T zwe@Ji^e>cd5uP+|>D_Vsr;S&>!(B4V_n^4NKN5`fyz^Yblf(Yr+TAi&!(ZP>3|_z3 z-MVj4ZuKwRb3cc{(0+Q1EQiXx2;Y(w1 z%FibtFXB~mIP;>L4`Q{+2GuZ+7z zw&3bom)Y|5VFy}NEGHyZr~=D{&ka!b;a2xC9(pu^ma6JB(Z?t1Opkp7XIjuv2#sZU zHRx>ZU=KSwpqYFG@l>qp83QaFLIXkkQ{pSVtur zanz<1#8SDc4V~h&{EixCjVcBgE?Kq7I`ab}Z;NI}D_bO+DUp_FL17-e4wRCoBX*aF z*x>8VqZ9fYzVfR(H8n`W+6$DvyU_Y1jRJ$Cxhtv@{Lg84{$#v+CwOvwK zw{AS)>8MVHvU1`yyM=gP&+k;7f?~mZ6w#I&S-qM%;b9n6)%MLvne5d5t=L*#eVHiN zag@wNYwXNMJAXSXrNPYhc+>~YHB}95d0)u<{L_eY-5Gwe=#Razs21N-QQDia=r+DR zO*D}TCAFd^luhAVM5n05;jegwAt>nxE)BBY&1j2EelinjCJGEeV$wP0)7jj97e3y@@c*A zL;yI{6JF*BRLlgYVNLi}M_|=ml|-gOAnIH#zSNIyTr5 zx(;at?_BL&Xt|(<*Mmr=@qwDyq_;uHFM`};TuJM&(O(e~>>Jw^oDwoS@cSDAe|Ah7 zv_eVoQ$R%ZJRNiV+>h8Y^ z6kC{%3*`TDK6s4D6I(J|f0j!mx{miZ=!!NdVtO6&j4jKgqA=`Pr_bpj4BI`!V?59u zQO*|Lh2isk!+blGBUQ>C?s?|_K(wo`A;vKeEnn>0NTEUnzt+7h0-sJLZ%8AOJJJ@- zr5-xQx}#XDWmQjURNyWpgyY~_3M}}|;7Gfq=djHdvpYMZDqT(^5cUQxJhiOT@y0GG zzwMKHCbR4DXzbFo)mQ&0p<4RIj+fUk#AITqeM-5XtE$bzYBt-;E~TZ-@Y_YDLzU0+ zgeh+nvFv#u*tKNk^C+reUO`cz$Q6(W`jpVS>CcZ9_UQ^tdsG@L19boIumy>6=J$7* zwRE1G{BJn=#b-Q~Pk^z-=p6A+RQ&;xnNqK`9TP2E&o)WVl4B#S5*cdE0gt&?U#+R7 zv^1@-DG60Y|1(U8p$<-VU^JMgeyfK&|D5@OCqMy=(^DGMiLbD&FQLBr^FQ%y#oGyK z2ix?~_0eZm4t-n?B{#B<6Z?0yz|{cucXzk^@edV~v}X5DmlSkd&%Ikk+9`1<7o|TA z9cK36LJT*G+!;D-r*NpG^OTVEl*l&f6|`Gf`Xs_(#G{g`sNFg&1CyuCEMly>&EX1pAz7P{MW2 ziKbi>>w><}V%n3;!}s00$m-fh5f@&v&m@JW7a_>SrFc^P#Y|136>f}8fgb3kf8!;Y zVkH~R<8{eLX{+^@NotvJvMQVFFyho>h?bukkQ2U&Yb|fTBN8Mmd`j;cxc!PB$!f;F z^6O{}zB%fuFQUtdWoRA%Kcn0z18tr15s!#-%)j*@nYRPA;Lybx4faT zsl9`pD!J4_Ldx+A~4A2}>|>>XBkg5KV#!biOilGU(W>jW+6(I26L8tg<4uP4}y+ zwi52$`k0&EGM=Phh*fqdtlvqZc~0+SQxG|D9GQ}nI}(U>{vojHGhU{1>t9NF+d4{=z#mqG~=Na zDY?~x!a>s6QxZ#*bFl3zhZ`3*m0h5Vo%3+?9V!QBCL4+97qx3p&V^m5;|$((sG!cB=WCp3 zuNSbMaMk3Q$Wwqmmq-{e?vANo7C}Oy1>H7m6dSodNNU?NDL68)$CO0c;BgOQ?Exe> z>rmC0nFv#!s=HTooUNmN4tPHol>v8n_FHZhg_jyqexzJF7x;Kcs!_wkAb18u288rR zs?CWELz9_BTY~g1?&`wJia}UPa3qV(5TeHpDSTfwE`4&RUVMR0>L=00Njdpg#X;pU z;y^KV+7Yn%g$gi%(c?zWe$~W62PdK;nz>}^0Sn8;s6y}{=BfiG$0_-Vj@4d2m^lT36wIy_cjx`0MUu0AQ zfNJKQR$A4*_7Tvs_ZZ-sQG>qCC6s-b>RTi`hj$`x z`YbCZ7#H=lyGz+N1XIsTv}7-c*0kl6Pkmwq{pvdvA0aJc1-<7iv;R5-85yyd_49=jJA`^l&E(tl- z9C@83Ds&KKY7{f=een>!G||W;&lW%=-_?fV;Cj7QU4~u^%Q-GCRdJdf({?fd0Ag=# z3%a_5`|q*^U*%RmhdSbTF1$cbmK=bXa7&k0n>@{aNIGCpve$sgJiHKh%=Suw&c@V$ zZ9fk@>cx!DoCCQCa^n#6_y`L>gWlr~bg=Se#0yD;%rbyNKf((QVVZ^L-Lfu-<#j+i zhV8-Gq@6s$TaSdclP-$L53WqdMCx`(5(rIn<&e5ydSB*P>0;=~v!ZPJJmY;hR6&74 z-vao`U7O}gopc31GV7}BV85|$3d_fV@Z@t}LA*BMZu8CajywZE!OWiYB8do)nhvma zmd_$SLtWsu)c70SZOz%4KveFoV>bmhQ8fg6SYTiY5i|om{kR5WIZ#6e06Ajhw!rQ= zacKlR0ef`wIV~M@QxJMIL);^F-u9f0w1S2L*#w9==r8X>#?wur)Apm=Mgry58?~LN z+a$mIt#{fm#(If$+(SX`%dQv~69e~>%tx{n4}dZMbEXynyXZe{3!VRm2T)Bs1*dx- zsn~$hsh|3S_a6BM#?v^2ESbuhKI`e!lARG9v!!uO`rX>i#7_r%2ufMl13QQWQFw9Uq$T#VJ`sQK- z5c~t}{gwyE_50R4@%#PqvNb?bjR9WpI2)vn6D)GoiRIKlMXWi;Y(5))-7)QGh2ls^!Tc(0w(?Y;h%&AV{)n$PJ~&HKRo z*$6YT?f3?$Yns=4x-~3?2Yi$E{W0^$>0FlNUy5w&z7zs7q*{9*FfI}S0vwTBE9i$T>NF*V{3ODeDT|GZd0ZElj;kJ%;2gGbfD`)h*PVq(GZaK#SA?` z{-#>=mV4~|k>74aL3-a6kov>W7;F+z$LgAcShN$_@`wx%&j-9qGk(}9d$5LN2fDJ_ zys>u-0h|RXc_vCc{z@p^c#po)rjYYl#h_1^!0x`7?xApfL;LHfgMVNRjR~IM51k5% zVn6rhMB*8B4Cs3jw-_FKB4fOlTQ&!6~w<9+0cb0kDv*9 z!Q_O|sdoRHl1aFyA*%jQ<0b!tEZcv8tE9EQu7%g!Fnbx66VjA*otXF z`=R&p4aDyek^b@X0|SiC6hq*Ubjv9wc>71^1@b~dy^XsR;pc}fn5N!VzEyr!Hr)IU z0>Ggl0rSr(9h_8KQ^20c({fT^~|FGQvR zY$2|}r0#%U=E2s-8L}dz{6wzcCvyKuqLDYWw|2DC|JT@! zi)-@1axpQas#MLIbb;d=;i)++o|aW96qj{>wzmAa0j60m(a#M8QH3-jOF0Bq#!y9I%%r}Hm1xvy zbFPq9iX-EYgzjK)YMJb4GUdiaZU7!ST}a;mFQ6#tW?6cH@smEbI@}a>-WQc!9|f^s zT4hl7#>{+Zk%TJn8(jwceGs%Wls?u#T0BRwN2Sxv5^u68G@~ z53X}^dylCy(3y2YMjcLL$5ww~q`65e1;Mqjzbe zMn>h3hV>LVsM|;k9)l_zY~zyf2>N5f;>m-M0yZ~V{MxSMJ|nUw&X#QIwi~6)UDEwR z7_1Bs71f3U)~~7brH7b@H?=({WOGuZMBDArxW+5(RuCTLTS>v!gYtD8orzhJ80SCe zUkliNM7)dGL10j&sjZD8HeJn0&1uySo#yE`Gr^M@CS{5~apzAbpk`0|tmf(6?)6Rk zv1jJti>AVzWt*i|LHfk^#*XNTOk9^Ih(8AiQ(ywrieKnPXW-OO<1QoIqEA^Pv?U#{ z1&2_bCo_mPS_p_I@wsW#$Lb*48Ok}LaIaiIYbAu^em7aMsm(K4Y)-C%MCi`jUXCv6 zNn4k3=)Gi>i8vHXOdHL+9U+2Qn3I$v70lXnVwr~6W#XWurPhohQd+BRFKJf=?dsN6 z&}ZsNaYV&KXC{FS?UuABYWNS}Dp!8)u|U&IKA*j4+|4 zE89h^Lm$#99Wg~6Hie>?Ez@PnQq(oK>5*KXI#0ygTr^}kuv&|gZsW5-a)mOsQRX|} zZH=|W`t(9?zCv!I3>tG;r%rU*6$yd9)hh&by~l-gO`-bjT~?Xn zR3zznDn}r&09DWBLgN3)=TB__S8&^Yv613^J+=koRE=&z9+EuI3SWYlSupk_ajA(W zG<4dL&lCqk$n2-iE%E4OszeB6b-*rmCbY&AO>r$V^US`io+FP(swvvpu%jDD}J$xbYaq5Ndig%LR*kr z_mY*}>BLTqt9+tbybW8JGVe1}L|I2Hr7k`fbUC%bGy#^H#pd!Ybg>1~$XIvP8xAuU zVcQGtG(&P7UBJe!E&N;fTz@h_cMoSE%C1RHlzsZDoG8$>)KlF7HY3XnuLXY#=MlR-l7`D2@e>RHmMefaEz@fRO$nmuyod+ zU)&2Li1@oWoqC`N;@3A}D9ZOpzn#N6{C(pY8xJcYrTh98r7A>6C>`%cAFv>Pv?vdp zM!h#EE=5X)h6_&6@jUq5xHFNesX|cVmYGAIL3AM+_T{Hoe+yRYhyU4Y()L-%BHanS zl=_?B8y}PoZW2R)Ov4>$24|P#2fJAmzPGF|ZAlVLOJVKv2+O*5Jn-pOJ# z0i9bbfyQjZE=>t24hUucp4XAPMGFlP0RS%P{(p(){m*{aKU4ak+K)1bQqtFSyV4_h zB8s0cz##Fjpco)TASTKcmQBQ%D7+R;bpQ)fc|@7mvfg(l}&&sYlZtI`?&sK zBPIegdh3-=(+(W-4EbD}P2(%`oBJ2@?Ci%I&v)`-;PAKaM%*ROS6t6q^&dY29@Cz# zm-Q%rfo+(%ka`$B%=Wy0(cYK>WbfW%4uIa_#zz21dXQrw?F5TpYrDQk(*GVI=oVuG zJW#;pZ8aDrm@a?=jL74qCYI}(z)B4tbx0Efn#d9cqKy(BSIy-dN?}|oum#i<b(Bd~iEla?qg*S-@S7DQ`>k|9 zrf{Qxo+t5mhBA$6Zwh{F6);WUSoB#l{s_3n=P1=7>xOl^03tw&mmTRYg=Q1TOP%yu z=&og^V31e|7&ebQzU;TEFca}&TEjp=xE*R@At3ndATiar(C@|622LO1G8R)IfO6Bq z3JudaB0$FRc03%}2nt4Ca?p z@c2G_-Fz{sfDTzH%MMR-LNsX+1Y19(uwjDHGga2aumVtmas-Wa_{-a+pt7Ph7xq;? zP{pCV-GuqkN{NO5eYoP}WmqwywRoydPZ@oU0K-3L%8DvWi&iETT4Fh7St^+!#dEtZ zZjP)=*m4*87%s}6VNm5182pKkQUQK#6#eV{_4>OnN2`&i28>;<+u5;8U^3CNq2W9lpS=)V2dM3 z&^yBna&4QM;1?4rABQyk;01xl@LaOhrtG@m__CS4hQ|Uj9?4P zJm-r( zIPh4aud_6b;O;i?-LKL#izvuNZl-+sI5j-_u{-b70Tl}1<7%{9prXTsCpL{~!dvZ9 z=R4>!cL~^}UR5}`Se_j+9cZ^ffZYf06R45mQO%39uU2w*B=S9q>`{d(V;_B5MiR3D z@CWSaip^YftTlrkXZ}Kk2Du~-UM}4e*W)PHN)gJSRVaOU0{l8B)+SgR1Dw!R zUZsiu6K-ro7!{!(kerZhV$rJuxM!A6-^yZ^qVT&!YM0PCRXuGo0Ksgpo+WbEEVL-j z0}}~`rM))2(A}`;3n$L`iT72nC2C4gwm7IIrQSx>%MD)EQirkRlrY%GyM6pUj;8

    ZpHxeWo<#0O_;R+pCI2M4l0 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≈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 S*NZum1xQZ`Gs# literal 0 HcmV?d00001 diff --git a/OsmAnd-java/libs/json-20090211.jar b/OsmAnd-java/libs/json-20090211.jar new file mode 100644 index 0000000000000000000000000000000000000000..ef29094093d39ecf5a50c24fc61f10c8c5b6b195 GIT binary patch literal 45944 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 literal 0 HcmV?d00001 diff --git a/OsmAnd-java/libs/junidecode-0.1.jar b/OsmAnd-java/libs/junidecode-0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..7c79c879e5ddbde80eadcebed19eb816161b5ee9 GIT binary patch literal 390574 zcmb5V2UJtt_OES0As{sr>Ag4UEueJipmYLAS8C|p5<+j%q=SIc2_P+@X<|TnmEJ=q z5D)|eEMMMp&U?Q5Klh$H#@(!utUc#kI~gmCwVyfHZyW2~BqF``*WudH1^P$lUoQZ{ zyMd;us;G{kmbmf1!bq;U5W?<_3$n}-+{)LlU8DV9!wggnb+j}en~E7|xul}pKi{L$ zIK1)e^Y53mIQF!;lUWv!6Xs;-o7u6l?Y&}0+SO0qi@xLPcUH>mZH2;5)d!Y9-XBQ_QXP1A+ll}>f7HAE1a zIN+%N0lQ}x-E++&Os?zPHSAD=PeNk+JE7Bcz6?BZ9RV+2b)JX5IQr!~nk(hzI#STo z5#+N1xCU%|cN0uBv;B#jNRDPv10sbIC2FJb0Nva_idKoC?11N7KXO+Yp!R_0+&>CeDWUfPzqx+oKaoS-hdqdc9gsAU zsKe%94rmrNE>EM`R}I__Vh;T15tuE>35l{A-@fi_a)XisCAtXKMG_7?MZp z#s<4dLQF%!#iB0{g9xnML$ATONwjHFxL6G2V;~}H^5}1{3mA}upT>}@Kwmx@BD5xr z-i1k#xY3Mo6&T3JLd4cU=nEJb3E>aGec&KPzqyKL5z*>%*Y|v|(_R{3>*&Pwku%LM zpWVajY|_Jx8@B!9*~h@5yU8pqcQ|RESr=;TJi=FGWaajn^>5{2s&6x{9hYBfeEy)( zRKJ3HQYo|9#_?Umh~MVKW_qK3@ZGPe{xIJ(d!@+qkP3xU@>hQ-8q4+lBR|Z}MDt9p z%jAI(v|{RgS1WxyMH3qj=1M?m^!;Mrfd7!+L+NwO$cD^%9$v!FRvODK=iD*YcF? z;2TR%I-yEWn$X(Ao|UG|fx_a&*rEICDt za5U2OngwdAlxU_|l)@*5s`48jr2}zuqMNU|2piT|q-c1qF(l`6V+h4I28*Fh+>SF?%^vFJ-qcW-!)q(zBcp7KM)EJO$cPoMR6AoK_b90-)?T4Yyr=H5 z@vz`MwT_;wJ!Ioz=~0g^3(bMtp=3zeq(=LK9?2JJ15QGlAvaQ~4L2ImIv_*&xzKzp zSMHvC@)xp-jvsE2ZU~F|jLO`%q#=(R%{$_sln9gQ zG)8>25?gm%^UJoVJE7X9aVV_$L@Gvy?@xpYD+nzn4#L9ykq~w`6(8aeB7uPnhtx&n z)kN#qae+TetXaEdV3|rr^`dcL{@P%q+>xXMw>U$&t(E~;cyZNnVP;O+A3Tfw+3Z(% z@3SzBIn-$FdCJv^?%MUv?4t)WPQ=KE6kA=|L}-lwY%Gs;5P zvkVH16|9}kR`1%q_Y;|^VX0UMg@EeK6;ubeQ1Jz(3h^_Q1+}3e5Yl=x1+&r7s7d+v ze(hF8sP2K>PQy)+#7)n-XyWaouq=P1>L$qBRH1lMh~cSl7^Eb+BRAhvY$ALO)f4ub z4UA?s72Aw76O$So6de&pSZ(Thn;;Wx%;3`=c$5r1rlr6HIU?I$Bv-xoBudU2FZb=a zketV0I3zK0Y2d2HvvFdnm$=e%^QM{ic9bc;Aql?`W!CzQQz+Q#c`z-1*sLh)C2_VZVFy43xUEq-@QQCxcr-#lk4EKa`>T{z1fV4_Wk=S=f7t^29Bs~FNfoogNOGoAyXdZDO?RhX`#rW%(vtK-t>!H2s23jlZ+=#t3fDMsM4)q0G@u4 z8({${UVV$DnfqvYyO^hD z!0Q4}bdxCo>DL~v+1^!=GrDCRlK34vo)H?HJOAj%#_vd`jxb$Oq*drgV+3fx=y9TJ zGf(B!O2#*kUb(oz>mipRS7#bi=Qy5G)uM-C@;jXA7fH7b{krA0uOf`HN82N|!WHFr zp02+PhCkhWi!M$(8mAL2^4@-{{BDM7Q?l4z>c`u(_Pt#lE>VtjSsV4h98>>4W zB7Qx(Ml$|m`%#9seR48$1gLdh<&)i#v>G;TTWQUw(+B;8a_SFllfAlf6)E^UZ${_uS+q%wWf0@Bb+x%^4dw0uGkUNIro|5Qua>5h|#6N?kb>4p=R6OEIk z6Ri_$Wz@*n8vkWAS7>h%bN7qo7x_{?vtp*)&rTosoe6W^?aqUvAfifBI*T4C>s@lpT4E3)0U_nHMp=j^rk(!AN^)`gKcd^t|& z$5voMYS7!#stF1aV&PBX{+TfJU0ez+5jGZmnFlJVxXe!x& zFl(hWtZg{RLRp^0rj>c}Mbb z*#Ef;7Wnu^#XQe(+^1(HMU(2vsdr8bsP{rmE4PP?N6WkZ>xz-AM>~v`e#*GXut4pcVZd$FxVu54 zln$D5eXVyOa4em#Bi2;bzqwYxs1)N#vGPFguA3KqZj)0#oov2m%X*)zQqj-?z_~-_ zHLGl_$SnB7(C*g9=?=r(P3IF8mLI zTP?Hpw*n>YMrH3%l>xHfjY2_~xslme1}ApAgvbzuv$d?*SPQ~QVq}Q2-MLn#oD=&p z!J)(#tQpFGwno-SX&)db*iAdr&9b>9aHx5qn^~`QVVzm8eW8`~3g zm~?O77f(3s=%BqH*U#Smk@kMV;gM5t7M9;zqQ_``-_3V>wCpF^tNh3NEB$Z6a(UPp zymXJxqI<$h`wZA?1Hz8Mtf8B(pf=x3lSbD$N53ME$Kv?5|*NNq^cB@3!C2lY!YIrPM zdqpJCnDg|R$H8((OZefE^}_tT`}v3Pzw+F=gTqL+u(0{b`#+xJ!~G8<{g)vl9UkXr zgyysVw0JE(##~S5gtRKHa>iV5=a{ryE#0I{rd${2)-(mJEv8&I=k7E~ z?oBQFyH)odJ$pCMr^Y>{Mb8MhYvuW__n}vCe|EdHRXU%ZE!GZbhf7};zUj4g>hL05 zetD0QPs#DyG)?voU8irBeyw6mW~PTUMpmT?*z}`B`>#>RpWZH$AD*FF|Ar@Z zi*IZ9uovjDX>-(5@HV3k3PME9+UH`kmgUt+T@ZSgzYm?RW+p4WJQJmPd5vC--1xQP zs{?N`(_Z>+#9la(G?8W>ShbAx!p=ie6Ps1^xAYoiqsW|_lT4D6euX#rG=*TSIwfp= zFLExadE+QzK-0iGp@lzcbwBBwZGIv!=$0%y95lm}4?jpLUtpVOlU2`m2zL*k zx0|<nT6|D9+!)#X%gf#ieo(>s#J~Bb*NX#={2JCI zipHDG>b`14td*=WzA7VvpAb~6DN@?As`F_%jM4NZJwXjY&8(%YPOd;`Km%hctkyDyyeEHbv&h3Ev&A=sg&@AgzR)M@r-Y31sL*^oI_42|m4S?2P|2=43HP(D_R90d8llt8WuM{G*S4W_ ztbFn6=fme*_cQGK>Nn($l`f+8&07Z=L_<1$olFRQP5GQS^yfeDcGc~u;xl1Yc||C- z{g;)+$@yO^%Nv&*mMNN;?R-yJd!qCRP5?gri5}!33I5eJW;ObiLND2-+(J7^r8|io zgoBujh-Pt#a2%MQD)<+NANv34JlvhE7zqdrHXB`kF`Ab#xY@g*P4U3Kl0Am{gz9rV zHRhqCoui85bI0qBs*aqF4vy50CXN!0zK#G#9Y;aOXO4`Hv=VuiZ!A+Ri!5JRrak2{ z=jx>r2G&s3(9}@Z06nNYXgsJrfKKtg7)4BoqphQ|W2ECvM|DSTM<++1<6}oDM}J2$ zM?J?IjdYDN5^1wBvu|cop7QZgF90**S>psX$QrpDfsIm)WR1d&%#BLpy3N$LN(&#x zDaTPb3YqXI#y``D-{Bh2&wqRyhnqRnDd@SxyffkuITfm(rXfmVTGfog$Hfo6e0fqH>n zfp&or_yPDKSOcsNRs-vTwZMj8Rj>|N6Knuh2kU{g!A6S@79TEZ3~_k#d2@R6dUJd8 zyV3+x1=BReb;NbV&tX`wY*;(23idhnI#w0SiFLqIV@M#wtR7Yv z>w#s)+F+Hi;aFmRW(_QwesIuD1D||vJ|w9P!q)8f2&YuD9)2l ztNc1BO!H%&D#sePe5Cyy3!Of$6U{hHf9|Q7nLzaE=qE1G= z_@p`W7IVtV7FT5c9vrsoC;we<6eOeHMx2HA6ufgJsY*ErV**8XDK4#n=Z{>YH1 zq+u;mt80;}q>>i>$Hl$#VV^KJn5F)NQ?=<2_@XCCqpH5?hX)822~0UDx7~YMLn(Bs zY7{wU%l@@3QI4nTOY>CyTQ-|2%7JfeeBTVOaBo7b13F`M2rYyS?$k1cvI4>RTUjo-MSnZrNig6{HsB=xpKUl#ZK|o-Rdp(*vi3=h)#J*Ta$|CXl02Dc z_i5Vd5eKv$17E=2lzhBlh93;$$ZxslP*1NoZd?q@F=naz7wWz^NVz^ zG3%0pU=7k@D6P=^>*tE4$bn@#L9~}jSfiP$d;ZY~oqzZLY5Dgn!OrU&xc^e;P6F$_ zX=Bl^|JmwtSZP1Y&?)UvbTFu^_2d{!@R{BL(EZ&_0?;}A%Sz}HtO!Lu(0H_{zr@n(kq7m1ekY-o$;UxYR=%^``;?Nme`hE% zyD<0jo%_kJdV4+neD6q7kdobF*pdZC;ZVs8TTFi4Kl)1ghDSDSE-Q`v^`e;aY%Z&P z{PoJ1@@+1w?ET4lw%%|i@A>RkT-S1c+xYP|Bk@zQ^#{XVEbmagNNJ3GTMQGiUN0w; zD@%1~(gbAvUh=(>vb5f{ycv156Gm9@b^i2PoJ%)TlXR|wHULfpRP+S*ZBzq zlJ9QYn0c>gON%d*kEv}!wzsaO&bPEx%Dc>Uy*1By(Qtt|UuI5TN9k_c4DGse%iZ9y zlwQI4{@K#PWF>cob;J27L{pFyzH}+Mqk0OFKcCc5^TgAvqtPI~@vU;w!QMT-JoiO) zO{ZAJ}W@it;)0ts&lEW)uA9x7TeAVwym;U|Go13(UaX z9)>Jc=G)5c($Cyk+H1FJLwb)Nz-?qE1M~5aCAgBUl+0jYEZ%Ras>8NPdLb}-3xS_j zhR?On$Y`G<@#DYX;ioTgD#|NTb@?Mx_Dw1t{9j<)}!$~ObhJlTc zMPrk2{?jC!pfWDZdK6hSegbzph2j*tcEaq$k#=K)aE8+a9BE>8IO6OP1PTCX6x$IszDr%^biUptp}_mR)XM&azIi8%gW zdzV%pk@Z4bsMNhtseJ2-X+c@elu<}o-U3qJ}a&SGl040Natwg zDB~zE0llkJYgnsVt5d7_mBs^zqr%bPsBu7MDrOpH>aw`xc!Ric%v}QNi8L}cDm30| zM#nG2$J>@3VP%`16DUF)V&e6$?lN{F>;&KIEQPVlT zz+S^Xz;a-pV5zXi*n3zAmIV6{D}a59y^FQP5_a3ML|6?h57rq=i#5ecV*{{vu=-dL ztS6QQ3&w)55!f48H7pm_(UHOz;4A3M=&Rs+%a_-e&R52l+*j0>)mPc~rZ2ZI&{xWr zOd=bRm7~3=wP?7gI>e9X!E@151q08i$l^6IU6@GBFU(C$6hr7D|KM*98^| zotVgc{}cu4Y!CJR{6SCoZpm)2xSS!5t?&D<75=8}XT$tK&~dSLWVKlIt|LOERcn-F z(m*x(o=u!;^w|zLK(L)LkFr3IQjh$aIMr<_Y+?D1TBk{6?_~{46|N{?M!dQA zwoI|odxp(6x!k23Y|PZorg%Cci{B$zZ%UWF@Rt;EK^TyfR}SK{q;Yb21uS-GJ$8gF-*E@6U++J^p1T zup+@6@%J?SIQ?s6WeLyMzeWONGGPqW?;Tk#F-ww<_9O;;;Z>efDQCRk9f~SPiOzq!82-o^vV)&wFM7pv`q53PC%udSCr#}k= ze`?f?2CN1J+{`sB0-FA`r!itnWC!M>TTbo}?qco-6hli|Bco5?E4?(mc>#U`VT|F? zw|0_whc$}bA;SgwGfCnq5ZIN4PDaUGtKp50;fS^m@K{y^kzv9$(z>PwV1B%b+8^rB*ZXV zOp&a+Gd*L0PbG6V$N0XRmWIPyk~}J>5#`ge@b`g9E!H!L)@dnt*?-`gNiTUzqc69Y zBg^~o-ej3xM7*p_%CzPBT`$)~(|qPHf5TfZ?!@asc~2JY zl$e6YG}eg>B=MDnNx+sS-}E2}{5!?76r{)-m`tYuq~Z83{Bd9mPP%Yc(bf$)GByX7 z3QWO?6yg+Zwvi*_7jXZ;S2&REj-ovSQf#aTPA2muFip(YwpP#9Kj8nB>X!D~P1+FN z6X2QQ_Nl`Yzzl8jL>!h14e=AeD@FRB}!xiM4NPM|uxujrWC%#!s+yY_iI z{hrDU*V19T1tkJM83n&OeT}=WydP$qieQ^4gU6oc;HZ`HVWvh1w#f|mm(xrfK=~l- z(I}#5q6uDcT7Y9zJ`6J#M-)va!naS;akskm!%XTCb`v%5?9)6PT^Byg%m-mNnGc^i zeS;(KItY7wh*+NJfVZ6%;aIy4!z|bl%agJ2^V2lk&B*;r<6?x$Lz!wSQ^y5%GMY9$tK! zk7M|SzchP+cs^MSUpdXjQT{r(e4J?eVwZhpm?pvC^RwAh46#u&_PG0)o+t!w*7Qk3Ha1bM1meN^DS7Mh1{dEV`C-Dt; zGei&rTu@c`?$Y<=d>#G6o*WEDV={l2uvrjpr0==~E>wDS#XG2w#D^ zd^Ut_EdqTDMg}+`DI*By68|BKOC(_c(gWW##~R!n#7yXmsFT#`z%_T;MW%DW#Y0}Y zvh@SWZ7t>b7QM)Q$nu365P zlFT4B(D5Aok__NF>zHaAa17q8YQdp|VqSD2my6+1NqxRnLR2LB{VUbFE($su`cScp z0eZ61-UKtJ+-M<@Qb#wsgj?Je)5n?77F4Dkl|2Rw3UX#!?X9TWE#|L7qO4$~kKwRZ z^{T>3ws&-;i$kPKs#{9gYxB2H7~v$?zNXc|j5pA_+Q2QW^s^Y%ej2eRM_ds^8e&0B z+sY@P70)iM`uZjNcb&1vt*x?s@UN$j9M75b#8>=YgO}#jDsp{aw0!KnQTgpLJUNOy zW2D6;%LK3GE0+%U73|pSg|=tT4U%s2+P3#(S|zvUYo{%ju_}VNT$+^w z3w%T-@6tHpxnP4WcYDW0ZGh}JM}j8(^RycGMYEQ#S)!&-wM`knA{2KLsy}_02G_Y*sC4d#jpVywcG-B1ig+jP^qZSN&l4 zKcPOqRsx&f!6nRAZYwnC{1&}V6;@LPYRM>Gw3YPF0&OOgJ`MS9{%QE^(%k{WNBmg^ zEz))k9*xrgz*oFj=13UdCd!47ER@)CVM;={qNK3#_hQ%MNwl%?`XfpFae_sCDUfgn zzF;bvVA|Gg5eH&C&wgdloYkV$YqzvYL}b!7Ap0o7K|!3#{7B7#cN?(YE0jWd-T<^3xInwx z@zk!}a6r318jMD}fO!@(7|62oN4pS~2)S&M^F|q+6aWrkYB}nHrt8$m!TPP~;$qFf zoSqHa(iWu53S!{8;p`=h8Cs?@wjnp0)COUVc;f-P@>81~Xh8>Vl_X~aB9|W{in7Vh z*Sla>HjxyoUD3qW!K|1o63VT2M^uEuVd1(1n87FnB2N&&p@dCSHZliHIv=^*tbe4C z$84Ii);!R-Sn0LH#d0>egjp7=*L_@m!ym5W_P&HtV`~=iYVA>}#&dfgx-wEtk$P9NQC{;* zY>UI%Rg0gQO#RK3MCnCT z4-7`+4G7PNvULtr)O7Z`Rd$ZJRd<#I7ZLj$TM79*s|Y)4^~ekc1C|3TF4&6ej=K{t zZ(1BvE)Ar9SNXQ;q@ukERI%86-1S8HhyEc4rONh+Y4@1VVwCtrL{|Ox-$$z+U0Bc$ zt&b9v-GOG8hCY6j-7|?3QS3i%WU<@k|9%(ziuiuV+3#p^(~B&*>YrO&SGMAzl)oVg zKl>S~er}R}(5vUC{JoX9ZnK&`e8zwN@ejNN&Ak6-zxTzp|5;B87}vaJL12!T|D8Ex zo&L=nA%yMqFK&nqXOip3%wd#Wz_5CqhiV8I4?~|V)hP+_g+rf1Ux}l|ewW;SLKlZn z0<_EFFO5P+sg%a-rC!t| zFh&qGoCME1tJ;vUssgo5iiPu$Q~G>ek6(tCRzdhd~n2#G9tPU{Hb;%jPfD+2>hvf#E-HkFvdRLk60>_ zv<7mAxO@6{IfuB0_;}E*Fa?4P-yg654C2^-n4`TzE%`42eg{nu_rBq5R0F?*IC>ct zNpeMV#y!NpPf+_pIMz7OD404)EDZ%Wi=jLe!m}oT9)~#*xZw*;3O9?9{3{688V|Z3 z_L!uC#*n+fP(BL6w=`=@4oM zItLjCa)+dbHxP+68gzSW1LOK!PG4^rY%FiX8fK_hR+E9txMk44Wp=A^n*L+x)E!uD z?(?P;r=CHWKC-)ZTck0!5 z=)DYE=xc4P8Wbn@>mSO*B|?8}-2P@L#hiEJk3wTW`Fl=t>Y?A1z?6a4tJFn z?wQu!vG_644a)F4do}7VXW?>|rE^|03+|0%P{q25nCj^Anyx1aJvMwZVpZ`oN><=p zR6YKE(_9Nql05m1hVcMto6ws1)STrz(8Gq_YD;fTQK{lJYo$bYJyBDOOmh{0dY(pivd9GeXBV2iEY~zG*xz_d?>LnVKpg z!}Qe#*7t9}@`#$CvyMV=lUP{Un_ImL!xb5K3CZ)%Ro(VC0%jex(YYH%QDoJuZ3P<~OYlORT8)ND+2%93`T+`2 z(~UE#LCe7N&fBP4aku$xHmCanb*#8MRvSMFv9#3nMBR*AI1q0sPD3kqPoT&$MniIp#kEg0)%===8kBiA(j;Uu4w8N7L=R1< z)uMUMu!0&k2;EvBJmkBw;2Z7$&-WT-g|Q;a8o0LsC$qq?A+;?-v>^dgayv*mAQlc5 zc)tBDt#o-p`DQ11l9gVJlYDRBcIPtwtYmq1}+jR_%aEL2H9F-q+mUu$MVH)0KJgb zhRkh}!4Np)`Y7;?e+h(>0Z;}vrvr=B2K;9D7U7Up^FSt>!~?wPB&J(eGvO#kC$=W( zz$#AFiv;JaMx(>Nyl0`q_s|glMQ|~n0dT%1wAKw4)mI$c1ao^rDw?29=*&Tn_f1xt zAUVIfvF#r8RHp`_xCR280n9+avqJ!fJY2L#XcgqevfeCu5QYo!aj0>MIj4qiM@ADv z9))m-Gq7RE(d6(IiY+>{x;!uFt4m}KuJUuJi^v*^nos*!D66cwfsJK2S%~?xQdvGG zGRtWyjrhwq_pJ5M`&mGJ!>@0?{R2sI36g#Euuz4c^`4FXElWs z4$OruvK5p~eP0E8n<=D932mQ*Ws&{3mPOXmzy`(;S9@ZkOvSdyg|d%OLfOZhLfPL+ zgtBek3OCn*5b2bUkqML*NNe#f;`|GeERP=#vpj}36jgLL!}K<9t5|Pp`3C`gOp&<+ zridmmg_+H8lqg?YuIJ{usdw9h;HQ)!kcz1=X7+kNhT^w=ZDx=T-pJJVq2k4rAEJyN z%~g%25TDN}EY>IQqHacf7>J5U7*KD0AA4b%rQN))9P$;b+*?rvf*)W}zeH*ldy$5W}FWimmfK1175N0-P261C$j^po?8rWXdqdX&#+77kJDt)ur3uKmW=nEr0vTBx&Fih8jT zy-aH1%Pwwjw`Vn|PShZ6C_2Ms+9!23It{e;?g$5*!?S{w4^2M_Kt`m;K{mNBBzQ z34Xay`S9!RI{)UFD(^44Jkkqc9+x8Qo~YTfG?AZ2KGpe(E;Ef=)mZp;Bd=^4o5&dw{Eb3vMJKb(^F`wcFEIg(`#R6>dp6W zxsm6sUq3Es;nC)z>jdj`JI6aCoilkjt@x(0kz{1N(dk?|`dlkL`QmAl$I$eibVn;N zmOhq8o##WO_+y%^OkHd`W4cZ{Dm^RxEL}t=*ZCD~U)BvBKx__ZQTVm0Wreen&V_gL z80RP_52bEG-{W+wubf{;@}O$+r-zg>f6m|i3496kBjs8n%6mxcj4sr%4X#N_=kc4D zl+x0=9&C+GI7mS$m1ch-eH`$C@dIqP_1gM9JN=xa^I<{av^#Bx#V^JDuQP352@^GC zC@AFErU~C}dMwYIQ@Hn_fN5ytp>GCbm98U=IaU`fZ3r~q8bAjaGMKLkp{v1WmdP~$ zDS7oBT+SSWxf}ho@$|+X+InCftZo_WL5lMu=vU#QwWEPB@=S6hyn%WKD7$ru=39I) zo5@U?@5}Ar?=9k4;@NKit3y;Zw0t0!1Ga8%p@SCHW{Ye{m7e}eX+JR>c= z$Si1m8jT-d8z@@Tn$?@LnTuT@z4B9XxbO19Tb$)BOC<}26&7{s9J8YmyJtl{nY%Wi zj~8G;6~ed`I9T4Z3>QW_Arc|Acqu&vLj^kpRRt3T9R({!Q$rI&GsDM*79#|RaT9VA zbQ9hd*cRFr+!j_JU~#d`tw|DK5ID)a7^wX40BLMhDe|Z{(|40=)6u2zgGR3L8==8W zy-dBV!OX!d;Y{JI%>lE4sT7rIMC(c8bl|JhKzMXSZE)e5QXChT7 z5NBt;V}aGF>Wd4z_s)G46R#8thkq4}to=6Jo{t)7653t}MtmxQlqj!p2}d@HA~7;~ zsd}L=CtdJ9tLuK}#V5Ye9zN_A#}6uMzzdg%JYoggb?fObEuh(5#hDEi_%^4Z975~N zmzy%Myk_a$*lRHYKK5Z}TtVLnKQ%%|3|9H$gu_{&OIw85c`QMW} zxqmOF!6BJbG`-sm`OYt|DX1To1gjm&biB^lzu~~$f7>Lx;dRgJCw-2Gv*8w)<&J+m z0`(8I06e530(p*9`JJ}Xv2rnzD|J$IVHos}dU9|3LuSM^cz=`!HC!FRwssrFOzo|P zU|gez4U@ESd8#7F*MeY5RIOZ#@el^IEUbeXuR5F3aC6NLc14BP4!O3b3X7#;(+VM4 zGl6}fV$+_DKO#bBkQi}-l8^47n@C1EL8(VK(1|4CoSjKWr05!wdd|+2quc0w5+Baa z)bSw!wXGGEw09`>+%o&k#bPJtLV$T_od_<0JBU#~$NIklVP9?d| z`7`N=3|&w1k@IKD5iz=$I{P|XZ!P=%QEJd-W=_! zJGaZ2q22=R4m&Yr%&)w8+D&$}%7oSAZZBB|tdAvY%Uxg62*?;S(2~2gWEwCzW}q#1 zb4fp-X>8b=oO!7LBqujYr$neG*9DIGKJyH8kF2g#nQEvO7+=hMW+}6ziciv4FAt?R zB0Q579|d{mt2wV4Ygx|O#nIs!+Fm8u(pjV}Fm0J%ZJ+Kw(C2^et~Y$J)_+W9`n9*1 zb=!xhfvucPT(*Op3Dx{YTRZY)ttxRVeB(J@)dr)ZeQFysWxV+j2okX%s7<$)D!Dqt$ z9@b|%dmAis7HoP=$9EITof~>@`wup?3Yqdrps5W+X=iNR_dc|9l#MsNc_^Ln2K8>F zX51pJ-SnQly2Zj!fn$vl?Tk)i@7o`>Dq05;()Bt;1JKoPT6OOvE0wFtz{U--MFW=j zv-Y7o`b4SkTfM4!29ld+sm9xFhBH>oTrFGjtl+rM5{cHXuDXaAj`&Zqkx92IEYkq# z@m16XP7U*W@h&1U=8Or|uX?tse%rnM=;R)hs~Oj9`o1SNeE?y}xOKDDzg1LEBx&k{ochM<36$drLI_f^$X2Ghpjj)fwwY(GX8(a8&dO+=Bq`UD z68%N@Zptx96YN~C?qY2Vn)Tk@cX?BM+Nt>ZF}1#}bJeVA(4zZV=2wP7>kIpHnfFLW zrP4RuV4+~{Vvid7%o1-ID(wbY^BWdZ4 z!nD`5qo(Tt)uOFs$+w41s9Dlnt=?alS${pQJvDFOx4#j6(Etz&7`w2qfA^>38NHZ& zA>1oQZMN^v*)^7c?Ds!w=>B|b!Ek3E)pMDD$&-o@MhstGK5~UqoW&02T*zJ*ixsw{ zhI?8SbO6vC8FC@S3ngZf8YLQ%`fD1Jv3@lD-~j`k69Mrw4YbAwj%;hGlS*=6m1vX9 zrqqJ5lB|^-PjOXJ#n*21R1(U8&NP9JLGMO}48KOt<+e+97|Xd@?2YV~ z`?o))bfxUCd|QE^N(_?>e=P3GZaZaRCGd>?d)e~P@2{~6FE1sDA94CqojOsNQl$3yUw=_sMGjx|QNI6LN z42XoH-*~@!@B4q>|9ii+&RU$|cMi;~1!teL_p_h=?Ifs*#q}J#X)reP*g-kR_Befo9Tpi(ICn zMDsgi9R+!uIedktZ8@C9n^X4$1K>uQ&iu_9x^+44ven-Sx;>i!Xk2CmJ4a7C%lqmk zc4h{(w(q?!A=&exuPWEy!(C0xHm)xd-s9eAN}9-~ekWv7Q}gpxo|!IQmYXwkb2x<% zE$Fv-_3Jau_-ySDuj?0&a;j3ZmyC{G0`|hpw|^gPJ~LA;Qaxt{T>yw?JSV8?c$X}`i$L& zg^yAy&Q(RHf}ExD+Y{F%~Eomd&j01f*Cwhjt2%ES9N!c zn?ZP|0zSEcp)&MLJ~6kQOUoNBcxNRTDsA&GSOONIEZ1Z6K`S~ju_y0!M+STSK8}U@ zWsTkYs}jy_u@Ej0vk=awuncjC`2$Jj zK@@0CGd3t9zH1hLk>}SKv(LAJ=MxMDrzBAXjuRjpE-%TYRd zhmtAnQlwnzMO4B{o0Y>Vn^k@n`6~Y|^HupRtmHo*$nvIn+ye1y`cC)k&7bZk!VL?5oJ{^; z{r9x6T*e#nRP-ZQ!v6y^{8w5y!zqhw_%CMo`u61`MkZTjt=F%IYnh&qk-qDCSD)qR zn5*5~%p+1{HJ6EPsi^zs)60 z_(E}in@h5^{t|~LFGY!Dh-F9(Vl87W<5X=WY`L3cny{KUn<$$kQdlpP!<|`3Y-#4T zT8QeDY3Fsw;s{EV{YWf_KL}50)1*d}Ffpfso;0$mQxBwguP65Y(v%yi|bZ{a#9~=oz1IL4N!7<=W za5A{?=Izb|HgEi;3+bEXve}z^vrebo86AHLuO)v`$vT}qdEkg8 z%;Si4rFeaUDEPuG*BsBXSjP&FnkuSFTlEp~y&48ob@mkt_qKkPrO58`t}9=j09%Oq zd?vH+(min3cz>u+)%w9*qLj5z>nm5LfVpy-G+yVo59{BJ3rAmHYiPPrXBVewsF(N2 z*7bR)R<&|*tx#NbQ{cAAjFP|e{Rk_mgQ zO=AHvWL;LX*Ql$HyZD`K{olV{Ll>H#%>R$~xy@g^&Q?D&YB5sgmyaka26SE^`7F3CBU=YJPm2 z*1-|xo}J>c3Z379`jjPWr9AVN^Tjr7#XDK+0Nem*yVUG+`Lq zVbzWhm?r*v;p86+>HvCLRsFMg>F>&pV}I^j{=g}Nefs#g421{h>E%xPf%egX)rp_P zn`VQb9C$PbbwBb=PTzMF92F={ZsNyJdTwp^wei7yV{G<;wPt;8{$T-XxcLc-uNTMK ziuMK#4H_dae&}1)K|U7%+GUVAw=lxqn&8ca zFTr2ukT~fK@$SeF;jh_6qk|FNQgzM%D;{c-xtH7TXdD3QJhW=A5*1+SBOWQ6F}{l7QXak(qW-PllFObhsnUU+ApXGST3( zGa57e%NN>}`b(Tu$R!w{!NP!3hjpc3+H1p^j?9aZUL(OhG*rkVL?Jr8Qs!t^La{B{ zN|U?f=&sk@WTax3E1hu4O&xzE>i==lbU}VZM_a)Mi0R7CTS=rPsfkGAq~KJU=NRz9tNfAfbwe>0hI@S@G9v+ zP|l2Betk2*>A)SHEj|zGLg1ZU1E2zazx;-H0Ht%=v7+Tk*UQWf$76l? zaMu(ljz7S%ng@`1r~%*YngB)B`&(AI0Zb0f;Y(dJpv3wB%Nkk${7@Bs)in-^^z`5O zC{>^97k})yagMeu6+($J4;h`RUFlg#3mLWi{niG)h5`OG0cNnCo+evZY z0#6GXx%yB5lB?SX%pL^7n}eWNc~*XM4VeIe0|$6~(C}5N6{xos4rn+4!E1sBuW~m1 zdh6Q(UI!lV+@R5`j7?B)-8JC+AQawxH*i%T@7LRq3}8I4gU8$rU8Tr_LThIMg$KUy z$~)LqcAsBpeFMPyzzv>xH*%HU2MVn_2YfvUhPU5AukyqELK_MJ3I|T`nmK>)nrZtyDix8HqzKj6)Q7rfB?;7;>T$8QEmLhu&T!2K+fJ*}sT#GjBY1$pbq zHTUOt>a;iiBMB6P`=}raEyH<>_aD23g#`bVQUAXkBmE*cre&OA*7*K5ww^RxSk~Iyrw)IDvdh88iY9X zG~y~k1~ULx9Q%x9op0sY3R{O7umK?ty^p}cB*bMPk>v#|BR?X9ppMY(2u@60+yW9= zKCmjX79j<_jG)96z_lXj;RUN8s}W+*;|K{%FWgO%9zL)dvK}D^{TV@s$%rdY62g0< zjI2V4K=&gAFs*U>NJ98-RFQQE8R&HcBc=jw7|Ac*8x>>?LIQdop@8`Yw+;Ju>H`wY z(_XzM^`zwUao@*Pfl9gNuILiNc|r!ioIizx`$oHI}5kY$1rCl3;r|> z&Q6tMEazyi`@ zsn4@dZSlcKdtzcWv$&s-5>ntI@3mz3&V_rIW5<1Lxy*fl#Q2eX+89gsM+bd3b<)T+ zOuhtOJFduU$`uYX9=4ACp83mc2h$0n7qn^OEC`Rs(>*Uu*;52pZv0erN01MS?t~_& z?x``TFsLJ`BB_igwysnkBGcnp;&FE7aEq<#= zRTtkEv+nn6NB;Jdry8D>YiX9Pw4J?Y&;1wa$LakzebhFx*VO}<1C}kvEn7aU8wIdx zw#szop6U3*8FtRPu)Zi=vt7>>>=dlVpH%gZTY2huohtp9?;Yy}ICyR3u8-E89xtnI ztcH1dWLvCRUo&HM++xsUNf9jf?GPoVDz!37X-$r8dHO-NUyg>-t4SsKuj~Fyv-5i( zWsH@&D;-N$899!UhU66~jmJqRk8cj2j4$rG29ha(?hcDGw%AFmFok1??t^@MU!Ed+2lkn(BlUkG1M?cuD zdKcT}+x6OwG(nr@g^pKtvV7hB0XrQlO~Xw~Lgy=c9Yfw#+rp!}Nj!8W(hNHt6R6jt zOCv-vVEQ9a7JSP}4NQLs`T(D|8U@oIgYw`gD^76!0VowdZdD1+KLX{z53QWQbtvh@ zW8Q}5-WilM{8+Z(vX>v(HFwO?5D!W{B*}O0GOWzvU#zN_Y=!wn>4;cXEoz&%lpnh0 z+jOZq<eXO{MVeS<4 z>R6l5W#oI~8>VEi+|gAQ+_7P_w*VQmaLm>tNx(-y{qo43ZgeR zH443LuZ|mS>wbcM&L$fZUN~PX`A>cQ?}-S=bL!3^w0HJB{(p>K5|00hUI8J7OC+Oj zV)&?;o}bMHpKA<7<3_Lv#o1s$65m@YTf!766e*M_f=BCDWPWU_7?M2>9z;vrdIN?f zeD^Lk_j_l5+V%Gb&*qCbp|SYpT=9ml*sptN*B(~df{6K909qXoAlH^KY!||VZ9-Dd z0?_V=2J&r5!>%B-*b*e3EbCewQ9vFW{4H^qIqVc7gB?J!Onk<&u5GH@5d##k!LVUP z^CR~VENns&1{PT@Fa-H*O9-|N;l$3x)+H%mk<|uABYC%^V3!a|YylE0mL4r|6q0*O z40a5W!1f~9Wa-fc#~}H)?ZLNFe6xx2Vx)ZHC zs~qw3ALpCtOLlJ`o5k?Q0W|%CYz}|9yM;Q2H75XBzGk@; zx25x2n|5`~rCPlAAfqhDC#857kn?$k?(Y2k6s0+BbGlUi%ZtD~Rf7Z(V1?57AJsh~ zO$l0u9Xi^9^TY-f`gln8%{j&T&!FAtlvZnKE6-8(rA? zCT2lmOzFwz;V)JkD!r~&e%dinTMBx7rLicS&Hlx>zx`9sW9P3me9@f-d)Z#J>E8o6 zi)UNd`!@TBL2L46J|gu!I%~h-HM;xSNe|wjkg&IB?Ay zHdOJAsJO|WS>84K_W2ke(^ zXU#k=Go-C!qhT3Zdoa&7{AkVTroM)myU#!4$c6i)Wj`Iz+A^s<}Zu<{xeJnp}cwJ>B zP7{(ZMdWWok%6Yd1~wqIlOOzc&tRTtVm%*Ctb->D)-_k+gYklW8PQf(o|DOY$bCnD zqXJsuiU@~=%f6J1#X|p?5p5AMaMM+XXFlDwfo;hGBqP+Y)h=FcJ!4>}n=XyA11A7^ zlgT}YEpXcR>Y}#6d5s@5qt=k(FqEuS2cH+u`pjs*oEPVMcsu3Um<%>2m{10l1k1l4 z24!d}+AF z0N|)a8D)*^!XSl4$Jde@Yg5S1{KNfa?URvSN%-~xxz4%Vx4yt+XNmbQg-%BCVa7T*nLl;hwp$tpe4}{40$abst}uG;!}}Ns zz6HV}1HHEXmTg~cnt-z!PPX#YD<07mr(w`lSwEsHN6XR7uNhyLM^huHrnTPMfyN(< zX78dnIFTXgq@8-ZY*s}+!cImyTT$FK;FO6fM>M})mFMa6WZ!V+^9n{@IUha3y;)X` zlnw##^=A+;mins2k6`DfbRESqtsBMxrW8~?p!974^$ zasUn)CT@0E9jY}X2=iQEzIK1XCAWkruf%G5Zj1Rt&pik3c4QcLyHCvojoj!%&+T1q zw@&R{e>u~KXN}rlUA&GvihMHLJl}Rte+jZG_DQY_XkfT_K0T6b>wZ~VG)6k{!e`A( zWhxoO83!=a+iij7ao_>_Q_w+1-xO;#OfkUSOaSEsJ#ush!vl$(x`I>6yq3 ziI^~HyMqT|Jidw6HN0Kkk?AFQ6f(ni}(%{0kv zx5p)6?(fQ_dx6~F?R?!|9{q~Z)u|uma{E=d{^oagG>!oBj}ztpPj*1o+F6XQLWq<8 z$KY=(_Rrv->6B$)L>blmXo~mUhp4xvO&Hv)+~P!d{(7HZ*bilB@uRP)FC%Esq62iy zm-#O;{abs$S?BG<<$d5+&}`?=or2(tlPO++sMibbbeepI1w6T;pr>pUoKJ`&_ag;;bA*xuh0E79(@|49A|SZ z%4MGo`*~IT6zrv149z|p^?Or+CCFES^+Wmk`?ssZ7gvYSm!RV*vJ@Ig58GhJuUbm- z2F@>jxNy$UYMOW z<=BCSxJS81J~=FQiU%8Ywz=wAXuhhFHvVWuwrbaEJnCb#SEF=$a~9%M>t3s0>r-o6 z+tJZHantAiiyF02ZuJwU)E}T{wkKL+PQr2wUI&D|wQerkk2-#n};wsPh2p!^Z@ z68FHt1YaD(H#x=Epkt|We$CW`9`G>bqTJL}^(H@v=6GrH<(2pkLqJOAv#JHRy7MQKBdT+;xQ5d_z*-jml*4+4hmE zV12PzVyWorN)g(7;OepMTxSQ+v`cVvv)q<8pOsYoXF;N+*gG^)%(KWF?LA2Gt{tHr zb+JR+s)i)3{uU%0N3=zue+v?x6?_S#E#=<69uDh@7PRf3(YC6VI&U`*r*&1*e^(;( z(h}C()V2v$$I;d*+5p2+Z%%D-bR{AoF~>F!U6AN@uJ(SHlhExdv2Ca=BJL8f?YTNA zsU1uc0Jj>EYiak^bw~*2a$C2U9!c;Ssb#TiuAudG6;gE-(=o|yQaK$l22rhjkZ7w} zTq%waYT&o4d^ZyDL&)DHy6I!8H)DFDi0Go}Lf^0P0Bcp)W4AR6C-A>*ef9n~!!S&3o6I zNpFH`b%6Ahq?V({Y;YXuFQ5_~@BA_YOU`3aIG6MWsCovNUm;>ydCUu^mRMcOs z$Ko4XIi)g|?QZqQ1RJ|u1_9lBt_8>Z8{1tL*Ij!qea8%Zz>S)pfJ;!nTQ~!7qY}&V z`j{Dx5wvnu#NaJgre;ZaECgo_TEF^O0FK;+U4T6@hS_*vS zO7|^ij~>H)gXXV#tbBTlGA#v;$l;nnOIM$)e0xjamJLVvaJQhvtFBF--r{ykuOoW6 zMG*X|ZPT~6^xE?L2m>B`H+R)1?-N>-Y{_^;3Rk=PeAOiH8(K1JS$Kp8ce-1+>g@9g zEpD*1KB9%2+$~?V_W6dEo?CuB!h#3f&0qC~`P>&3S}Gh-!gcSKuA0Mq?@PW~_8$?# zz3vvTx_|rJ7x!DfaZNcExZl1DX3{@X!FYJBfRW;v7wP%?GV0IGt@(KUoynVpC%^uO z>fln7yzUU4*4g>bX&o`~f2VZ}$($%-&W|bTVsC?(4131=g&W)83EknMS+)<}? z9Z$B*A;(1ZY8?-^R3W)Uo~j*>ZAf8t*tx`>N*(lD1Q0�G9QrM)ECBNH9?wv%6Xc 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 OpBs!s&VsZG%N(w<0!x_DyWdCm%wqP2 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�CxRz3vdiFKpnMhp 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 Q0Qi%Hp`f58uP3AUKMBF3>;M1& literal 0 HcmV?d00001 diff --git a/OsmAnd-java/libs/kxml2-2.3.0.jar b/OsmAnd-java/libs/kxml2-2.3.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..647095222a507dad7c73e42db60a4d6e9ad76e13 GIT binary patch literal 43858 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

    yyC@7buJZ51Carm9dyla-q=ExQ=@zXmZej+^0Io zZh5vQJ=(ZVls{xtN6#QSUXaI7K2dyUY*|v-Hd@%()#j2uh{m1w&plQNUPx znYh+tZX99(&}Yw;a+IewZ%B33&xx$l7BG$0Oo1`(*K6xo! zMrMT%S$}pi=DaV9|Mof5%ta#+8evQ^=5Wu@B@|8^i7p&WKmee^=%%Z!I^!B2Aek4y z@Bk3hS9oX*moNxU*}zUKmbsV5v3`4i383!-jxdKssn8b9W6~it zRLVqGaV)mZlr$a)Hx36Rrl38tCG>o70lXJc$@2$F!9G5RQkwfpf9~#Ik`eDJy21(v ziy^{{;v{l8rk@pOA5C>p+oI-z|HM3?lVFE_1iIyChwD}0P^uU&6c{^}B}9H!(Pj`W zdy+I%NS7@jhCNW%3`DCv8?_U`g*NMcF_LEa9OFKUBn&?#dBIj|5Uh@Mn#2we+QH(7 zig`gVnQqMZHDgt!wt$x1ml(B%5_<`nRs!{)cr;R|q)k#NGh~wpFYpm__=Mo-pb%3_ zwBAy>BMcce|3;dhRJ)auOpPXOsn^wu=s*qTlOLDXC@(C^c_8e`O4D&vX#a;6hoKXy zjv%$`{(k24D(Fl$ek;ok2{^}ef}a`0yAaKN+GeA{>Q7{kORfAbbhMC>1UO=Cl5Yx7#RBzgN9 z+_xQuIt@DHF5%{0YFHGZogS^-jB~uq260?35mTT5KiOQ&Txs5~%bUCgX;pOi40y9~ z&~?|vA9L<*A|K;9b-bm0t$4=#oUbI{8K80B=CeOFtBC+kZZQ3uF_QEy#tv_qM;w!B zpWJ8OE9Aj)%4_xPaDp_&{l$WnF*A~^$dkGaRtRrW4_sdMyrMd$ZJ=m^B@)9}vc^6Ps6cK#B&7Gcf%x**%| zB^DwOj&?O9nB6g02?RsS3q&|vA>hJjC)65GUI4nLC_pC|byr4S8eu_*{$)09#y1Vz zPDOCy=CWqijbPe>>2V;acTXDv@2x$6 zM88VKsc!L8*9oHSh87cC4SHzFojh1|a7MS$h@@%QAQJ0}MI8vyY8HNr3M�@69pb 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�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 T7a~`WKg)XJH|bJzN8JAa@p2Q> literal 0 HcmV?d00001 diff --git a/OsmAnd-java/src/com/google/protobuf/AbstractMessage.java b/OsmAnd-java/src/com/google/protobuf/AbstractMessage.java new file mode 100644 index 0000000000..faf0980407 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/AbstractMessage.java @@ -0,0 +1,714 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.google.protobuf.Descriptors.Descriptor; +import com.google.protobuf.Descriptors.FieldDescriptor; + +/** + * A partial implementation of the {@link Message} interface which implements + * as many methods of that interface as possible in terms of other methods. + * + * @author kenton@google.com Kenton Varda + */ +public abstract class AbstractMessage extends AbstractMessageLite + implements Message { + @Override +@SuppressWarnings("unchecked") + public boolean isInitialized() { + // Check that all required fields are present. + for (final FieldDescriptor field : getDescriptorForType().getFields()) { + if (field.isRequired()) { + if (!hasField(field)) { + return false; + } + } + } + + // Check that embedded messages are initialized. + for (final Map.Entry entry : + getAllFields().entrySet()) { + final FieldDescriptor field = entry.getKey(); + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + if (field.isRepeated()) { + for (final Message element : (List) entry.getValue()) { + if (!element.isInitialized()) { + return false; + } + } + } else { + if (!((Message) entry.getValue()).isInitialized()) { + return false; + } + } + } + } + + return true; + } + + @Override + public final String toString() { + return TextFormat.printToString(this); + } + + @Override +public void writeTo(final CodedOutputStream output) throws IOException { + final boolean isMessageSet = + getDescriptorForType().getOptions().getMessageSetWireFormat(); + + for (final Map.Entry entry : + getAllFields().entrySet()) { + final FieldDescriptor field = entry.getKey(); + final Object value = entry.getValue(); + if (isMessageSet && field.isExtension() && + field.getType() == FieldDescriptor.Type.MESSAGE && + !field.isRepeated()) { + output.writeMessageSetExtension(field.getNumber(), (Message) value); + } else { + FieldSet.writeField(field, value, output); + } + } + + final UnknownFieldSet unknownFields = getUnknownFields(); + if (isMessageSet) { + unknownFields.writeAsMessageSetTo(output); + } else { + unknownFields.writeTo(output); + } + } + + private int memoizedSize = -1; + + @Override +public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) { + return size; + } + + size = 0; + final boolean isMessageSet = + getDescriptorForType().getOptions().getMessageSetWireFormat(); + + for (final Map.Entry entry : + getAllFields().entrySet()) { + final FieldDescriptor field = entry.getKey(); + final Object value = entry.getValue(); + if (isMessageSet && field.isExtension() && + field.getType() == FieldDescriptor.Type.MESSAGE && + !field.isRepeated()) { + size += CodedOutputStream.computeMessageSetExtensionSize( + field.getNumber(), (Message) value); + } else { + size += FieldSet.computeFieldSize(field, value); + } + } + + final UnknownFieldSet unknownFields = getUnknownFields(); + if (isMessageSet) { + size += unknownFields.getSerializedSizeAsMessageSet(); + } else { + size += unknownFields.getSerializedSize(); + } + + memoizedSize = size; + return size; + } + + @Override + public boolean equals(final Object other) { + if (other == this) { + return true; + } + if (!(other instanceof Message)) { + return false; + } + final Message otherMessage = (Message) other; + if (getDescriptorForType() != otherMessage.getDescriptorForType()) { + return false; + } + return getAllFields().equals(otherMessage.getAllFields()) && + getUnknownFields().equals(otherMessage.getUnknownFields()); + } + + @Override + public int hashCode() { + int hash = 41; + hash = (19 * hash) + getDescriptorForType().hashCode(); + hash = (53 * hash) + getAllFields().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + return hash; + } + + // ================================================================= + + /** + * A partial implementation of the {@link Message.Builder} interface which + * implements as many methods of that interface as possible in terms of + * other methods. + */ + @SuppressWarnings("unchecked") + public static abstract class Builder + extends AbstractMessageLite.Builder + implements Message.Builder { + // The compiler produces an error if this is not declared explicitly. + @Override + public abstract BuilderType clone(); + + @Override + public BuilderType clear() { + for (final Map.Entry entry : + getAllFields().entrySet()) { + clearField(entry.getKey()); + } + return (BuilderType) this; + } + + @Override + public BuilderType mergeFrom(final Message other) { + if (other.getDescriptorForType() != getDescriptorForType()) { + throw new IllegalArgumentException( + "mergeFrom(Message) can only merge messages of the same type."); + } + + // Note: We don't attempt to verify that other's fields have valid + // types. Doing so would be a losing battle. We'd have to verify + // all sub-messages as well, and we'd have to make copies of all of + // them to insure that they don't change after verification (since + // the Message interface itself cannot enforce immutability of + // implementations). + // TODO(kenton): Provide a function somewhere called makeDeepCopy() + // which allows people to make secure deep copies of messages. + + for (final Map.Entry entry : + other.getAllFields().entrySet()) { + final FieldDescriptor field = entry.getKey(); + if (field.isRepeated()) { + for (final Object element : (List)entry.getValue()) { + addRepeatedField(field, element); + } + } else if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + final Message existingValue = (Message)getField(field); + if (existingValue == existingValue.getDefaultInstanceForType()) { + setField(field, entry.getValue()); + } else { + setField(field, + existingValue.newBuilderForType() + .mergeFrom(existingValue) + .mergeFrom((Message)entry.getValue()) + .build()); + } + } else { + setField(field, entry.getValue()); + } + } + + mergeUnknownFields(other.getUnknownFields()); + + return (BuilderType) this; + } + + @Override + public BuilderType mergeFrom(final CodedInputStream input) + throws IOException { + return mergeFrom(input, ExtensionRegistry.getEmptyRegistry()); + } + + @Override + public BuilderType mergeFrom( + final CodedInputStream input, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + final UnknownFieldSet.Builder unknownFields = + UnknownFieldSet.newBuilder(getUnknownFields()); + while (true) { + final int tag = input.readTag(); + if (tag == 0) { + break; + } + + if (!mergeFieldFrom(input, unknownFields, extensionRegistry, + this, tag)) { + // end group tag + break; + } + } + setUnknownFields(unknownFields.build()); + return (BuilderType) this; + } + + /** + * Like {@link #mergeFrom(CodedInputStream, UnknownFieldSet.Builder, + * ExtensionRegistryLite, Message.Builder)}, but parses a single field. + * Package-private because it is used by GeneratedMessage.ExtendableMessage. + * @param tag The tag, which should have already been read. + * @return {@code true} unless the tag is an end-group tag. + */ + static boolean mergeFieldFrom( + final CodedInputStream input, + final UnknownFieldSet.Builder unknownFields, + final ExtensionRegistryLite extensionRegistry, + final Message.Builder builder, + final int tag) throws IOException { + final Descriptor type = builder.getDescriptorForType(); + + if (type.getOptions().getMessageSetWireFormat() && + tag == WireFormat.MESSAGE_SET_ITEM_TAG) { + mergeMessageSetExtensionFromCodedStream( + input, unknownFields, extensionRegistry, builder); + return true; + } + + final int wireType = WireFormat.getTagWireType(tag); + final int fieldNumber = WireFormat.getTagFieldNumber(tag); + + final FieldDescriptor field; + Message defaultInstance = null; + + if (type.isExtensionNumber(fieldNumber)) { + // extensionRegistry may be either ExtensionRegistry or + // ExtensionRegistryLite. Since the type we are parsing is a full + // message, only a full ExtensionRegistry could possibly contain + // extensions of it. Otherwise we will treat the registry as if it + // were empty. + if (extensionRegistry instanceof ExtensionRegistry) { + final ExtensionRegistry.ExtensionInfo extension = + ((ExtensionRegistry) extensionRegistry) + .findExtensionByNumber(type, fieldNumber); + if (extension == null) { + field = null; + } else { + field = extension.descriptor; + defaultInstance = extension.defaultInstance; + if (defaultInstance == null && + field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + throw new IllegalStateException( + "Message-typed extension lacked default instance: " + + field.getFullName()); + } + } + } else { + field = null; + } + } else { + field = type.findFieldByNumber(fieldNumber); + } + + boolean unknown = false; + boolean packed = false; + if (field == null) { + unknown = true; // Unknown field. + } else if (wireType == FieldSet.getWireFormatForFieldType( + field.getLiteType(), + false /* isPacked */)) { + packed = false; + } else if (field.isPackable() && + wireType == FieldSet.getWireFormatForFieldType( + field.getLiteType(), + true /* isPacked */)) { + packed = true; + } else { + unknown = true; // Unknown wire type. + } + + if (unknown) { // Unknown field or wrong wire type. Skip. + return unknownFields.mergeFieldFrom(tag, input); + } + + if (packed) { + final int length = input.readRawVarint32(); + final int limit = input.pushLimit(length); + if (field.getLiteType() == WireFormat.FieldType.ENUM) { + while (input.getBytesUntilLimit() > 0) { + final int rawValue = input.readEnum(); + final Object value = field.getEnumType().findValueByNumber(rawValue); + if (value == null) { + // If the number isn't recognized as a valid value for this + // enum, drop it (don't even add it to unknownFields). + return true; + } + builder.addRepeatedField(field, value); + } + } else { + while (input.getBytesUntilLimit() > 0) { + final Object value = + FieldSet.readPrimitiveField(input, field.getLiteType()); + builder.addRepeatedField(field, value); + } + } + input.popLimit(limit); + } else { + final Object value; + switch (field.getType()) { + case GROUP: { + final Message.Builder subBuilder; + if (defaultInstance != null) { + subBuilder = defaultInstance.newBuilderForType(); + } else { + subBuilder = builder.newBuilderForField(field); + } + if (!field.isRepeated()) { + subBuilder.mergeFrom((Message) builder.getField(field)); + } + input.readGroup(field.getNumber(), subBuilder, extensionRegistry); + value = subBuilder.build(); + break; + } + case MESSAGE: { + final Message.Builder subBuilder; + if (defaultInstance != null) { + subBuilder = defaultInstance.newBuilderForType(); + } else { + subBuilder = builder.newBuilderForField(field); + } + if (!field.isRepeated()) { + subBuilder.mergeFrom((Message) builder.getField(field)); + } + input.readMessage(subBuilder, extensionRegistry); + value = subBuilder.build(); + break; + } + case ENUM: + final int rawValue = input.readEnum(); + value = field.getEnumType().findValueByNumber(rawValue); + // If the number isn't recognized as a valid value for this enum, + // drop it. + if (value == null) { + unknownFields.mergeVarintField(fieldNumber, rawValue); + return true; + } + break; + default: + value = FieldSet.readPrimitiveField(input, field.getLiteType()); + break; + } + + if (field.isRepeated()) { + builder.addRepeatedField(field, value); + } else { + builder.setField(field, value); + } + } + + return true; + } + + /** Called by {@code #mergeFieldFrom()} to parse a MessageSet extension. */ + private static void mergeMessageSetExtensionFromCodedStream( + final CodedInputStream input, + final UnknownFieldSet.Builder unknownFields, + final ExtensionRegistryLite extensionRegistry, + final Message.Builder builder) throws IOException { + final Descriptor type = builder.getDescriptorForType(); + + // The wire format for MessageSet is: + // message MessageSet { + // repeated group Item = 1 { + // required int32 typeId = 2; + // required bytes message = 3; + // } + // } + // "typeId" is the extension's field number. The extension can only be + // a message type, where "message" contains the encoded bytes of that + // message. + // + // In practice, we will probably never see a MessageSet item in which + // the message appears before the type ID, or where either field does not + // appear exactly once. However, in theory such cases are valid, so we + // should be prepared to accept them. + + int typeId = 0; + ByteString rawBytes = null; // If we encounter "message" before "typeId" + Message.Builder subBuilder = null; + FieldDescriptor field = null; + + while (true) { + final int tag = input.readTag(); + if (tag == 0) { + break; + } + + if (tag == WireFormat.MESSAGE_SET_TYPE_ID_TAG) { + typeId = input.readUInt32(); + // Zero is not a valid type ID. + if (typeId != 0) { + final ExtensionRegistry.ExtensionInfo extension; + + // extensionRegistry may be either ExtensionRegistry or + // ExtensionRegistryLite. Since the type we are parsing is a full + // message, only a full ExtensionRegistry could possibly contain + // extensions of it. Otherwise we will treat the registry as if it + // were empty. + if (extensionRegistry instanceof ExtensionRegistry) { + extension = ((ExtensionRegistry) extensionRegistry) + .findExtensionByNumber(type, typeId); + } else { + extension = null; + } + + if (extension != null) { + field = extension.descriptor; + subBuilder = extension.defaultInstance.newBuilderForType(); + final Message originalMessage = (Message)builder.getField(field); + if (originalMessage != null) { + subBuilder.mergeFrom(originalMessage); + } + if (rawBytes != null) { + // We already encountered the message. Parse it now. + subBuilder.mergeFrom( + CodedInputStream.newInstance(rawBytes.newInput())); + rawBytes = null; + } + } else { + // Unknown extension number. If we already saw data, put it + // in rawBytes. + if (rawBytes != null) { + unknownFields.mergeField(typeId, + UnknownFieldSet.Field.newBuilder() + .addLengthDelimited(rawBytes) + .build()); + rawBytes = null; + } + } + } + } else if (tag == WireFormat.MESSAGE_SET_MESSAGE_TAG) { + if (typeId == 0) { + // We haven't seen a type ID yet, so we have to store the raw bytes + // for now. + rawBytes = input.readBytes(); + } else if (subBuilder == null) { + // We don't know how to parse this. Ignore it. + unknownFields.mergeField(typeId, + UnknownFieldSet.Field.newBuilder() + .addLengthDelimited(input.readBytes()) + .build()); + } else { + // We already know the type, so we can parse directly from the input + // with no copying. Hooray! + input.readMessage(subBuilder, extensionRegistry); + } + } else { + // Unknown tag. Skip it. + if (!input.skipField(tag)) { + break; // end of group + } + } + } + + input.checkLastTagWas(WireFormat.MESSAGE_SET_ITEM_END_TAG); + + if (subBuilder != null) { + builder.setField(field, subBuilder.build()); + } + } + + @Override + public BuilderType mergeUnknownFields(final UnknownFieldSet unknownFields) { + setUnknownFields( + UnknownFieldSet.newBuilder(getUnknownFields()) + .mergeFrom(unknownFields) + .build()); + return (BuilderType) this; + } + + /** + * Construct an UninitializedMessageException reporting missing fields in + * the given message. + */ + protected static UninitializedMessageException + newUninitializedMessageException(Message message) { + return new UninitializedMessageException(findMissingFields(message)); + } + + /** + * Populates {@code this.missingFields} with the full "path" of each + * missing required field in the given message. + */ + private static List findMissingFields(final Message message) { + final List results = new ArrayList(); + findMissingFields(message, "", results); + return results; + } + + /** Recursive helper implementing {@link #findMissingFields(Message)}. */ + private static void findMissingFields(final Message message, + final String prefix, + final List results) { + for (final FieldDescriptor field : + message.getDescriptorForType().getFields()) { + if (field.isRequired() && !message.hasField(field)) { + results.add(prefix + field.getName()); + } + } + + for (final Map.Entry entry : + message.getAllFields().entrySet()) { + final FieldDescriptor field = entry.getKey(); + final Object value = entry.getValue(); + + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + if (field.isRepeated()) { + int i = 0; + for (final Object element : (List) value) { + findMissingFields((Message) element, + subMessagePrefix(prefix, field, i++), + results); + } + } else { + if (message.hasField(field)) { + findMissingFields((Message) value, + subMessagePrefix(prefix, field, -1), + results); + } + } + } + } + } + + private static String subMessagePrefix(final String prefix, + final FieldDescriptor field, + final int index) { + final StringBuilder result = new StringBuilder(prefix); + if (field.isExtension()) { + result.append('(') + .append(field.getFullName()) + .append(')'); + } else { + result.append(field.getName()); + } + if (index != -1) { + result.append('[') + .append(index) + .append(']'); + } + result.append('.'); + return result.toString(); + } + + // =============================================================== + // The following definitions seem to be required in order to make javac + // not produce weird errors like: + // + // java/com/google/protobuf/DynamicMessage.java:203: types + // com.google.protobuf.AbstractMessage.Builder< + // com.google.protobuf.DynamicMessage.Builder> and + // com.google.protobuf.AbstractMessage.Builder< + // com.google.protobuf.DynamicMessage.Builder> are incompatible; both + // define mergeFrom(com.google.protobuf.ByteString), but with unrelated + // return types. + // + // Strangely, these lines are only needed if javac is invoked separately + // on AbstractMessage.java and AbstractMessageLite.java. If javac is + // invoked on both simultaneously, it works. (Or maybe the important + // point is whether or not DynamicMessage.java is compiled together with + // AbstractMessageLite.java -- not sure.) I suspect this is a compiler + // bug. + + @Override + public BuilderType mergeFrom(final ByteString data) + throws InvalidProtocolBufferException { + return super.mergeFrom(data); + } + + @Override + public BuilderType mergeFrom( + final ByteString data, + final ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + return super.mergeFrom(data, extensionRegistry); + } + + @Override + public BuilderType mergeFrom(final byte[] data) + throws InvalidProtocolBufferException { + return super.mergeFrom(data); + } + + @Override + public BuilderType mergeFrom( + final byte[] data, final int off, final int len) + throws InvalidProtocolBufferException { + return super.mergeFrom(data, off, len); + } + + @Override + public BuilderType mergeFrom( + final byte[] data, + final ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + return super.mergeFrom(data, extensionRegistry); + } + + @Override + public BuilderType mergeFrom( + final byte[] data, final int off, final int len, + final ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + return super.mergeFrom(data, off, len, extensionRegistry); + } + + @Override + public BuilderType mergeFrom(final InputStream input) + throws IOException { + return super.mergeFrom(input); + } + + @Override + public BuilderType mergeFrom( + final InputStream input, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + return super.mergeFrom(input, extensionRegistry); + } + + @Override + public boolean mergeDelimitedFrom(final InputStream input) + throws IOException { + return super.mergeDelimitedFrom(input); + } + + @Override + public boolean mergeDelimitedFrom( + final InputStream input, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + return super.mergeDelimitedFrom(input, extensionRegistry); + } + + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/AbstractMessageLite.java b/OsmAnd-java/src/com/google/protobuf/AbstractMessageLite.java new file mode 100644 index 0000000000..f0abb68849 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/AbstractMessageLite.java @@ -0,0 +1,342 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Collection; + +/** + * A partial implementation of the {@link MessageLite} interface which + * implements as many methods of that interface as possible in terms of other + * methods. + * + * @author kenton@google.com Kenton Varda + */ +public abstract class AbstractMessageLite implements MessageLite { + @Override +public ByteString toByteString() { + try { + final ByteString.CodedBuilder out = + ByteString.newCodedBuilder(getSerializedSize()); + writeTo(out.getCodedOutput()); + return out.build(); + } catch (IOException e) { + throw new RuntimeException( + "Serializing to a ByteString threw an IOException (should " + + "never happen).", e); + } + } + + @Override +public byte[] toByteArray() { + try { + final byte[] result = new byte[getSerializedSize()]; + final CodedOutputStream output = CodedOutputStream.newInstance(result); + writeTo(output); + output.checkNoSpaceLeft(); + return result; + } catch (IOException e) { + throw new RuntimeException( + "Serializing to a byte array threw an IOException " + + "(should never happen).", e); + } + } + + @Override +public void writeTo(final OutputStream output) throws IOException { + final int bufferSize = + CodedOutputStream.computePreferredBufferSize(getSerializedSize()); + final CodedOutputStream codedOutput = + CodedOutputStream.newInstance(output, bufferSize); + writeTo(codedOutput); + codedOutput.flush(); + } + + @Override +public void writeDelimitedTo(final OutputStream output) throws IOException { + final int serialized = getSerializedSize(); + final int bufferSize = CodedOutputStream.computePreferredBufferSize( + CodedOutputStream.computeRawVarint32Size(serialized) + serialized); + final CodedOutputStream codedOutput = + CodedOutputStream.newInstance(output, bufferSize); + codedOutput.writeRawVarint32(serialized); + writeTo(codedOutput); + codedOutput.flush(); + } + + /** + * A partial implementation of the {@link Message.Builder} interface which + * implements as many methods of that interface as possible in terms of + * other methods. + */ + @SuppressWarnings("unchecked") + public static abstract class Builder + implements MessageLite.Builder { + // The compiler produces an error if this is not declared explicitly. + @Override + public abstract BuilderType clone(); + + @Override + public BuilderType mergeFrom(final CodedInputStream input) + throws IOException { + return mergeFrom(input, ExtensionRegistryLite.getEmptyRegistry()); + } + + // Re-defined here for return type covariance. + @Override + public abstract BuilderType mergeFrom( + final CodedInputStream input, + final ExtensionRegistryLite extensionRegistry) + throws IOException; + + @Override + public BuilderType mergeFrom(final ByteString data) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = data.newCodedInput(); + mergeFrom(input); + input.checkLastTagWas(0); + return (BuilderType) this; + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "Reading from a ByteString threw an IOException (should " + + "never happen).", e); + } + } + + @Override + public BuilderType mergeFrom( + final ByteString data, + final ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = data.newCodedInput(); + mergeFrom(input, extensionRegistry); + input.checkLastTagWas(0); + return (BuilderType) this; + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "Reading from a ByteString threw an IOException (should " + + "never happen).", e); + } + } + + @Override + public BuilderType mergeFrom(final byte[] data) + throws InvalidProtocolBufferException { + return mergeFrom(data, 0, data.length); + } + + @Override + public BuilderType mergeFrom(final byte[] data, final int off, + final int len) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = + CodedInputStream.newInstance(data, off, len); + mergeFrom(input); + input.checkLastTagWas(0); + return (BuilderType) this; + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "Reading from a byte array threw an IOException (should " + + "never happen).", e); + } + } + + @Override + public BuilderType mergeFrom( + final byte[] data, + final ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + return mergeFrom(data, 0, data.length, extensionRegistry); + } + + @Override + public BuilderType mergeFrom( + final byte[] data, final int off, final int len, + final ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = + CodedInputStream.newInstance(data, off, len); + mergeFrom(input, extensionRegistry); + input.checkLastTagWas(0); + return (BuilderType) this; + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "Reading from a byte array threw an IOException (should " + + "never happen).", e); + } + } + + @Override + public BuilderType mergeFrom(final InputStream input) throws IOException { + final CodedInputStream codedInput = CodedInputStream.newInstance(input); + mergeFrom(codedInput); + codedInput.checkLastTagWas(0); + return (BuilderType) this; + } + + @Override + public BuilderType mergeFrom( + final InputStream input, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + final CodedInputStream codedInput = CodedInputStream.newInstance(input); + mergeFrom(codedInput, extensionRegistry); + codedInput.checkLastTagWas(0); + return (BuilderType) this; + } + + /** + * An InputStream implementations which reads from some other InputStream + * but is limited to a particular number of bytes. Used by + * mergeDelimitedFrom(). This is intentionally package-private so that + * UnknownFieldSet can share it. + */ + static final class LimitedInputStream extends FilterInputStream { + private int limit; + + LimitedInputStream(InputStream in, int limit) { + super(in); + this.limit = limit; + } + + @Override + public int available() throws IOException { + return Math.min(super.available(), limit); + } + + @Override + public int read() throws IOException { + if (limit <= 0) { + return -1; + } + final int result = super.read(); + if (result >= 0) { + --limit; + } + return result; + } + + @Override + public int read(final byte[] b, final int off, int len) + throws IOException { + if (limit <= 0) { + return -1; + } + len = Math.min(len, limit); + final int result = super.read(b, off, len); + if (result >= 0) { + limit -= result; + } + return result; + } + + @Override + public long skip(final long n) throws IOException { + final long result = super.skip(Math.min(n, limit)); + if (result >= 0) { + limit -= result; + } + return result; + } + } + + @Override + public boolean mergeDelimitedFrom( + final InputStream input, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + final int firstByte = input.read(); + if (firstByte == -1) { + return false; + } + final int size = CodedInputStream.readRawVarint32(firstByte, input); + final InputStream limitedInput = new LimitedInputStream(input, size); + mergeFrom(limitedInput, extensionRegistry); + return true; + } + + @Override + public boolean mergeDelimitedFrom(final InputStream input) + throws IOException { + return mergeDelimitedFrom(input, + ExtensionRegistryLite.getEmptyRegistry()); + } + + /** + * Construct an UninitializedMessageException reporting missing fields in + * the given message. + */ + protected static UninitializedMessageException + newUninitializedMessageException(MessageLite message) { + return new UninitializedMessageException(message); + } + + /** + * Adds the {@code values} to the {@code list}. This is a helper method + * used by generated code. Users should ignore it. + * + * @throws NullPointerException if any of the elements of {@code values} is + * null. + */ + protected static void addAll(final Iterable values, + final Collection list) { + for (final T value : values) { + if (value == null) { + throw new NullPointerException(); + } + } + if (values instanceof Collection) { + final + Collection collection = (Collection) values; + list.addAll(collection); + } else { + for (final T value : values) { + list.add(value); + } + } + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/BlockingRpcChannel.java b/OsmAnd-java/src/com/google/protobuf/BlockingRpcChannel.java new file mode 100644 index 0000000000..1e81143aea --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/BlockingRpcChannel.java @@ -0,0 +1,51 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + *

    Abstract interface for a blocking RPC channel. {@code BlockingRpcChannel} + * is the blocking equivalent to {@link RpcChannel}. + * + * @author kenton@google.com Kenton Varda + * @author cpovirk@google.com Chris Povirk + */ +public interface BlockingRpcChannel { + /** + * Call the given method of the remote service and blocks until it returns. + * {@code callBlockingMethod()} is the blocking equivalent to + * {@link RpcChannel#callMethod}. + */ + Message callBlockingMethod( + Descriptors.MethodDescriptor method, + RpcController controller, + Message request, + Message responsePrototype) throws ServiceException; +} diff --git a/OsmAnd-java/src/com/google/protobuf/BlockingService.java b/OsmAnd-java/src/com/google/protobuf/BlockingService.java new file mode 100644 index 0000000000..ecc80096f5 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/BlockingService.java @@ -0,0 +1,64 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + * Blocking equivalent to {@link Service}. + * + * @author kenton@google.com Kenton Varda + * @author cpovirk@google.com Chris Povirk + */ +public interface BlockingService { + /** + * Equivalent to {@link Service#getDescriptorForType}. + */ + Descriptors.ServiceDescriptor getDescriptorForType(); + + /** + * Equivalent to {@link Service#callMethod}, except that + * {@code callBlockingMethod()} returns the result of the RPC or throws a + * {@link ServiceException} if there is a failure, rather than passing the + * information to a callback. + */ + Message callBlockingMethod(Descriptors.MethodDescriptor method, + RpcController controller, + Message request) throws ServiceException; + + /** + * Equivalent to {@link Service#getRequestPrototype}. + */ + Message getRequestPrototype(Descriptors.MethodDescriptor method); + + /** + * Equivalent to {@link Service#getResponsePrototype}. + */ + Message getResponsePrototype(Descriptors.MethodDescriptor method); +} diff --git a/OsmAnd-java/src/com/google/protobuf/ByteString.java b/OsmAnd-java/src/com/google/protobuf/ByteString.java new file mode 100644 index 0000000000..2eabc71aa8 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/ByteString.java @@ -0,0 +1,391 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FilterOutputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; +import java.util.List; + +/** + * Immutable array of bytes. + * + * @author crazybob@google.com Bob Lee + * @author kenton@google.com Kenton Varda + */ +public final class ByteString { + private final byte[] bytes; + + private ByteString(final byte[] bytes) { + this.bytes = bytes; + } + + /** + * Gets the byte at the given index. + * + * @throws ArrayIndexOutOfBoundsException {@code index} is < 0 or >= size + */ + public byte byteAt(final int index) { + return bytes[index]; + } + + /** + * Gets the number of bytes. + */ + public int size() { + return bytes.length; + } + + /** + * Returns {@code true} if the size is {@code 0}, {@code false} otherwise. + */ + public boolean isEmpty() { + return bytes.length == 0; + } + + // ================================================================= + // byte[] -> ByteString + + /** + * Empty ByteString. + */ + public static final ByteString EMPTY = new ByteString(new byte[0]); + + /** + * Copies the given bytes into a {@code ByteString}. + */ + public static ByteString copyFrom(final byte[] bytes, final int offset, + final int size) { + final byte[] copy = new byte[size]; + System.arraycopy(bytes, offset, copy, 0, size); + return new ByteString(copy); + } + + /** + * Copies the given bytes into a {@code ByteString}. + */ + public static ByteString copyFrom(final byte[] bytes) { + return copyFrom(bytes, 0, bytes.length); + } + + /** + * Copies {@code size} bytes from a {@code java.nio.ByteBuffer} into + * a {@code ByteString}. + */ + public static ByteString copyFrom(final ByteBuffer bytes, final int size) { + final byte[] copy = new byte[size]; + bytes.get(copy); + return new ByteString(copy); + } + + /** + * Copies the remaining bytes from a {@code java.nio.ByteBuffer} into + * a {@code ByteString}. + */ + public static ByteString copyFrom(final ByteBuffer bytes) { + return copyFrom(bytes, bytes.remaining()); + } + + /** + * Encodes {@code text} into a sequence of bytes using the named charset + * and returns the result as a {@code ByteString}. + */ + public static ByteString copyFrom(final String text, final String charsetName) + throws UnsupportedEncodingException { + return new ByteString(text.getBytes(charsetName)); + } + + /** + * Encodes {@code text} into a sequence of UTF-8 bytes and returns the + * result as a {@code ByteString}. + */ + public static ByteString copyFromUtf8(final String text) { + try { + return new ByteString(text.getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("UTF-8 not supported?", e); + } + } + + /** + * Concatenates all byte strings in the list and returns the result. + * + *

    The returned {@code ByteString} is not necessarily a unique object. + * If the list is empty, the returned object is the singleton empty + * {@code ByteString}. If the list has only one element, that + * {@code ByteString} will be returned without copying. + */ + public static ByteString copyFrom(List list) { + if (list.size() == 0) { + return EMPTY; + } else if (list.size() == 1) { + return list.get(0); + } + + int size = 0; + for (ByteString str : list) { + size += str.size(); + } + byte[] bytes = new byte[size]; + int pos = 0; + for (ByteString str : list) { + System.arraycopy(str.bytes, 0, bytes, pos, str.size()); + pos += str.size(); + } + return new ByteString(bytes); + } + + // ================================================================= + // ByteString -> byte[] + + /** + * Copies bytes into a buffer at the given offset. + * + * @param target buffer to copy into + * @param offset in the target buffer + */ + public void copyTo(final byte[] target, final int offset) { + System.arraycopy(bytes, 0, target, offset, bytes.length); + } + + /** + * Copies bytes into a buffer. + * + * @param target buffer to copy into + * @param sourceOffset offset within these bytes + * @param targetOffset offset within the target buffer + * @param size number of bytes to copy + */ + public void copyTo(final byte[] target, final int sourceOffset, + final int targetOffset, + final int size) { + System.arraycopy(bytes, sourceOffset, target, targetOffset, size); + } + + /** + * Copies bytes to a {@code byte[]}. + */ + public byte[] toByteArray() { + final int size = bytes.length; + final byte[] copy = new byte[size]; + System.arraycopy(bytes, 0, copy, 0, size); + return copy; + } + + /** + * Constructs a new read-only {@code java.nio.ByteBuffer} with the + * same backing byte array. + */ + public ByteBuffer asReadOnlyByteBuffer() { + final ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + return byteBuffer.asReadOnlyBuffer(); + } + + /** + * Constructs a new {@code String} by decoding the bytes using the + * specified charset. + */ + public String toString(final String charsetName) + throws UnsupportedEncodingException { + return new String(bytes, charsetName); + } + + /** + * Constructs a new {@code String} by decoding the bytes as UTF-8. + */ + public String toStringUtf8() { + try { + return new String(bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("UTF-8 not supported?", e); + } + } + + // ================================================================= + // equals() and hashCode() + + @Override + public boolean equals(final Object o) { + if (o == this) { + return true; + } + + if (!(o instanceof ByteString)) { + return false; + } + + final ByteString other = (ByteString) o; + final int size = bytes.length; + if (size != other.bytes.length) { + return false; + } + + final byte[] thisBytes = bytes; + final byte[] otherBytes = other.bytes; + for (int i = 0; i < size; i++) { + if (thisBytes[i] != otherBytes[i]) { + return false; + } + } + + return true; + } + + private volatile int hash = 0; + + @Override + public int hashCode() { + int h = hash; + + if (h == 0) { + final byte[] thisBytes = bytes; + final int size = bytes.length; + + h = size; + for (int i = 0; i < size; i++) { + h = h * 31 + thisBytes[i]; + } + if (h == 0) { + h = 1; + } + + hash = h; + } + + return h; + } + + // ================================================================= + // Input stream + + /** + * Creates an {@code InputStream} which can be used to read the bytes. + */ + public InputStream newInput() { + return new ByteArrayInputStream(bytes); + } + + /** + * Creates a {@link CodedInputStream} which can be used to read the bytes. + * Using this is more efficient than creating a {@link CodedInputStream} + * wrapping the result of {@link #newInput()}. + */ + public CodedInputStream newCodedInput() { + // We trust CodedInputStream not to modify the bytes, or to give anyone + // else access to them. + return CodedInputStream.newInstance(bytes); + } + + // ================================================================= + // Output stream + + /** + * Creates a new {@link Output} with the given initial capacity. + */ + public static Output newOutput(final int initialCapacity) { + return new Output(new ByteArrayOutputStream(initialCapacity)); + } + + /** + * Creates a new {@link Output}. + */ + public static Output newOutput() { + return newOutput(32); + } + + /** + * Outputs to a {@code ByteString} instance. Call {@link #toByteString()} to + * create the {@code ByteString} instance. + */ + public static final class Output extends FilterOutputStream { + private final ByteArrayOutputStream bout; + + /** + * Constructs a new output with the given initial capacity. + */ + private Output(final ByteArrayOutputStream bout) { + super(bout); + this.bout = bout; + } + + /** + * Creates a {@code ByteString} instance from this {@code Output}. + */ + public ByteString toByteString() { + final byte[] byteArray = bout.toByteArray(); + return new ByteString(byteArray); + } + } + + /** + * Constructs a new ByteString builder, which allows you to efficiently + * construct a {@code ByteString} by writing to a {@link CodedOutputStream}. + * Using this is much more efficient than calling {@code newOutput()} and + * wrapping that in a {@code CodedOutputStream}. + * + *

    This is package-private because it's a somewhat confusing interface. + * Users can call {@link Message#toByteString()} instead of calling this + * directly. + * + * @param size The target byte size of the {@code ByteString}. You must + * write exactly this many bytes before building the result. + */ + static CodedBuilder newCodedBuilder(final int size) { + return new CodedBuilder(size); + } + + /** See {@link ByteString#newCodedBuilder(int)}. */ + static final class CodedBuilder { + private final CodedOutputStream output; + private final byte[] buffer; + + private CodedBuilder(final int size) { + buffer = new byte[size]; + output = CodedOutputStream.newInstance(buffer); + } + + public ByteString build() { + output.checkNoSpaceLeft(); + + // We can be confident that the CodedOutputStream will not modify the + // underlying bytes anymore because it already wrote all of them. So, + // no need to make a copy. + return new ByteString(buffer); + } + + public CodedOutputStream getCodedOutput() { + return output; + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/CodedInputStream.java b/OsmAnd-java/src/com/google/protobuf/CodedInputStream.java new file mode 100644 index 0000000000..45004e2e28 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/CodedInputStream.java @@ -0,0 +1,924 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.List; + +/** + * Reads and decodes protocol message fields. + * + * This class contains two kinds of methods: methods that read specific + * protocol message constructs and field types (e.g. {@link #readTag()} and + * {@link #readInt32()}) and methods that read low-level values (e.g. + * {@link #readRawVarint32()} and {@link #readRawBytes}). If you are reading + * encoded protocol messages, you should use the former methods, but if you are + * reading some other format of your own design, use the latter. + * + * @author kenton@google.com Kenton Varda + */ +public final class CodedInputStream { + /** + * Create a new CodedInputStream wrapping the given InputStream. + */ + public static CodedInputStream newInstance(final InputStream input) { + return new CodedInputStream(input); + } + + /** + * Create a new CodedInputStream wrapping the given byte array. + */ + public static CodedInputStream newInstance(final byte[] buf) { + return newInstance(buf, 0, buf.length); + } + + /** + * Create a new CodedInputStream wrapping the given byte array slice. + */ + public static CodedInputStream newInstance(final byte[] buf, final int off, + final int len) { + return new CodedInputStream(buf, off, len); + } + + // ----------------------------------------------------------------- + // begin osmand change + public static CodedInputStream newInstance(RandomAccessFile raf) { + return new CodedInputStream(raf); + } + // end osmand change + + + /** + * Attempt to read a field tag, returning zero if we have reached EOF. + * Protocol message parsers use this to read tags, since a protocol message + * may legally end wherever a tag occurs, and zero is not a valid tag number. + */ + public int readTag() throws IOException { + if (isAtEnd()) { + lastTag = 0; + return 0; + } + + lastTag = readRawVarint32(); + if (WireFormat.getTagFieldNumber(lastTag) == 0) { + // If we actually read zero (or any tag number corresponding to field + // number zero), that's not a valid tag. + throw InvalidProtocolBufferException.invalidTag(); + } + return lastTag; + } + + /** + * Verifies that the last call to readTag() returned the given tag value. + * This is used to verify that a nested group ended with the correct + * end tag. + * + * @throws InvalidProtocolBufferException {@code value} does not match the + * last tag. + */ + public void checkLastTagWas(final int value) + throws InvalidProtocolBufferException { + if (lastTag != value) { + throw InvalidProtocolBufferException.invalidEndTag(); + } + } + + /** + * Reads and discards a single field, given its tag value. + * + * @return {@code false} if the tag is an endgroup tag, in which case + * nothing is skipped. Otherwise, returns {@code true}. + */ + public boolean skipField(final int tag) throws IOException { + switch (WireFormat.getTagWireType(tag)) { + case WireFormat.WIRETYPE_VARINT: + readInt32(); + return true; + case WireFormat.WIRETYPE_FIXED64: + readRawLittleEndian64(); + return true; + case WireFormat.WIRETYPE_LENGTH_DELIMITED: + skipRawBytes(readRawVarint32()); + return true; + case WireFormat.WIRETYPE_START_GROUP: + skipMessage(); + checkLastTagWas( + WireFormat.makeTag(WireFormat.getTagFieldNumber(tag), + WireFormat.WIRETYPE_END_GROUP)); + return true; + case WireFormat.WIRETYPE_END_GROUP: + return false; + case WireFormat.WIRETYPE_FIXED32: + readRawLittleEndian32(); + return true; + default: + throw InvalidProtocolBufferException.invalidWireType(); + } + } + + /** + * Reads and discards an entire message. This will read either until EOF + * or until an endgroup tag, whichever comes first. + */ + public void skipMessage() throws IOException { + while (true) { + final int tag = readTag(); + if (tag == 0 || !skipField(tag)) { + return; + } + } + } + + // ----------------------------------------------------------------- + + /** Read a {@code double} field value from the stream. */ + public double readDouble() throws IOException { + return Double.longBitsToDouble(readRawLittleEndian64()); + } + + /** Read a {@code float} field value from the stream. */ + public float readFloat() throws IOException { + return Float.intBitsToFloat(readRawLittleEndian32()); + } + + /** Read a {@code uint64} field value from the stream. */ + public long readUInt64() throws IOException { + return readRawVarint64(); + } + + /** Read an {@code int64} field value from the stream. */ + public long readInt64() throws IOException { + return readRawVarint64(); + } + + /** Read an {@code int32} field value from the stream. */ + public int readInt32() throws IOException { + return readRawVarint32(); + } + + /** Read a {@code fixed64} field value from the stream. */ + public long readFixed64() throws IOException { + return readRawLittleEndian64(); + } + + /** Read a {@code fixed32} field value from the stream. */ + public int readFixed32() throws IOException { + return readRawLittleEndian32(); + } + + /** Read a {@code bool} field value from the stream. */ + public boolean readBool() throws IOException { + return readRawVarint32() != 0; + } + + /** Read a {@code string} field value from the stream. */ + public String readString() throws IOException { + final int size = readRawVarint32(); + if (size <= (bufferSize - bufferPos) && size > 0) { + // Fast path: We already have the bytes in a contiguous buffer, so + // just copy directly from it. + final String result = new String(buffer, bufferPos, size, "UTF-8"); + bufferPos += size; + return result; + } else { + // Slow path: Build a byte array first then copy it. + return new String(readRawBytes(size), "UTF-8"); + } + } + + /** Read a {@code group} field value from the stream. */ + public void readGroup(final int fieldNumber, + final MessageLite.Builder builder, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + if (recursionDepth >= recursionLimit) { + throw InvalidProtocolBufferException.recursionLimitExceeded(); + } + ++recursionDepth; + builder.mergeFrom(this, extensionRegistry); + checkLastTagWas( + WireFormat.makeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP)); + --recursionDepth; + } + + /** + * Reads a {@code group} field value from the stream and merges it into the + * given {@link UnknownFieldSet}. + * + * @deprecated UnknownFieldSet.Builder now implements MessageLite.Builder, so + * you can just call {@link #readGroup}. + */ + @Deprecated + public void readUnknownGroup(final int fieldNumber, + final MessageLite.Builder builder) + throws IOException { + // We know that UnknownFieldSet will ignore any ExtensionRegistry so it + // is safe to pass null here. (We can't call + // ExtensionRegistry.getEmptyRegistry() because that would make this + // class depend on ExtensionRegistry, which is not part of the lite + // library.) + readGroup(fieldNumber, builder, null); + } + + /** Read an embedded message field value from the stream. */ + public void readMessage(final MessageLite.Builder builder, + final ExtensionRegistryLite extensionRegistry) + throws IOException { + final int length = readRawVarint32(); + if (recursionDepth >= recursionLimit) { + throw InvalidProtocolBufferException.recursionLimitExceeded(); + } + final int oldLimit = pushLimit(length); + ++recursionDepth; + builder.mergeFrom(this, extensionRegistry); + checkLastTagWas(0); + --recursionDepth; + popLimit(oldLimit); + } + + /** Read a {@code bytes} field value from the stream. */ + public ByteString readBytes() throws IOException { + final int size = readRawVarint32(); + if (size <= (bufferSize - bufferPos) && size > 0) { + // Fast path: We already have the bytes in a contiguous buffer, so + // just copy directly from it. + final ByteString result = ByteString.copyFrom(buffer, bufferPos, size); + bufferPos += size; + return result; + } else { + // Slow path: Build a byte array first then copy it. + return ByteString.copyFrom(readRawBytes(size)); + } + } + + /** Read a {@code uint32} field value from the stream. */ + public int readUInt32() throws IOException { + return readRawVarint32(); + } + + /** + * Read an enum field value from the stream. Caller is responsible + * for converting the numeric value to an actual enum. + */ + public int readEnum() throws IOException { + return readRawVarint32(); + } + + /** Read an {@code sfixed32} field value from the stream. */ + public int readSFixed32() throws IOException { + return readRawLittleEndian32(); + } + + /** Read an {@code sfixed64} field value from the stream. */ + public long readSFixed64() throws IOException { + return readRawLittleEndian64(); + } + + /** Read an {@code sint32} field value from the stream. */ + public int readSInt32() throws IOException { + return decodeZigZag32(readRawVarint32()); + } + + /** Read an {@code sint64} field value from the stream. */ + public long readSInt64() throws IOException { + return decodeZigZag64(readRawVarint64()); + } + + // ================================================================= + + /** + * Read a raw Varint from the stream. If larger than 32 bits, discard the + * upper bits. + */ + public int readRawVarint32() throws IOException { + byte tmp = readRawByte(); + if (tmp >= 0) { + return tmp; + } + int result = tmp & 0x7f; + if ((tmp = readRawByte()) >= 0) { + result |= tmp << 7; + } else { + result |= (tmp & 0x7f) << 7; + if ((tmp = readRawByte()) >= 0) { + result |= tmp << 14; + } else { + result |= (tmp & 0x7f) << 14; + if ((tmp = readRawByte()) >= 0) { + result |= tmp << 21; + } else { + result |= (tmp & 0x7f) << 21; + result |= (tmp = readRawByte()) << 28; + if (tmp < 0) { + // Discard upper 32 bits. + for (int i = 0; i < 5; i++) { + if (readRawByte() >= 0) { + return result; + } + } + throw InvalidProtocolBufferException.malformedVarint(); + } + } + } + } + return result; + } + + /** + * Reads a varint from the input one byte at a time, so that it does not + * read any bytes after the end of the varint. If you simply wrapped the + * stream in a CodedInputStream and used {@link #readRawVarint32(InputStream)} + * then you would probably end up reading past the end of the varint since + * CodedInputStream buffers its input. + */ + static int readRawVarint32(final InputStream input) throws IOException { + final int firstByte = input.read(); + if (firstByte == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + return readRawVarint32(firstByte, input); + } + + /** + * Like {@link #readRawVarint32(InputStream)}, but expects that the caller + * has already read one byte. This allows the caller to determine if EOF + * has been reached before attempting to read. + */ + static int readRawVarint32(final int firstByte, + final InputStream input) throws IOException { + if ((firstByte & 0x80) == 0) { + return firstByte; + } + + int result = firstByte & 0x7f; + int offset = 7; + for (; offset < 32; offset += 7) { + final int b = input.read(); + if (b == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + result |= (b & 0x7f) << offset; + if ((b & 0x80) == 0) { + return result; + } + } + // Keep reading up to 64 bits. + for (; offset < 64; offset += 7) { + final int b = input.read(); + if (b == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + if ((b & 0x80) == 0) { + return result; + } + } + throw InvalidProtocolBufferException.malformedVarint(); + } + + /** Read a raw Varint from the stream. */ + public long readRawVarint64() throws IOException { + int shift = 0; + long result = 0; + while (shift < 64) { + final byte b = readRawByte(); + result |= (long)(b & 0x7F) << shift; + if ((b & 0x80) == 0) { + return result; + } + shift += 7; + } + throw InvalidProtocolBufferException.malformedVarint(); + } + + /** Read a 32-bit little-endian integer from the stream. */ + public int readRawLittleEndian32() throws IOException { + final byte b1 = readRawByte(); + final byte b2 = readRawByte(); + final byte b3 = readRawByte(); + final byte b4 = readRawByte(); + return (((int)b1 & 0xff) ) | + (((int)b2 & 0xff) << 8) | + (((int)b3 & 0xff) << 16) | + (((int)b4 & 0xff) << 24); + } + + /** Read a 64-bit little-endian integer from the stream. */ + public long readRawLittleEndian64() throws IOException { + final byte b1 = readRawByte(); + final byte b2 = readRawByte(); + final byte b3 = readRawByte(); + final byte b4 = readRawByte(); + final byte b5 = readRawByte(); + final byte b6 = readRawByte(); + final byte b7 = readRawByte(); + final byte b8 = readRawByte(); + return (((long)b1 & 0xff) ) | + (((long)b2 & 0xff) << 8) | + (((long)b3 & 0xff) << 16) | + (((long)b4 & 0xff) << 24) | + (((long)b5 & 0xff) << 32) | + (((long)b6 & 0xff) << 40) | + (((long)b7 & 0xff) << 48) | + (((long)b8 & 0xff) << 56); + } + + /** + * Decode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers + * into values that can be efficiently encoded with varint. (Otherwise, + * negative values must be sign-extended to 64 bits to be varint encoded, + * thus always taking 10 bytes on the wire.) + * + * @param n An unsigned 32-bit integer, stored in a signed int because + * Java has no explicit unsigned support. + * @return A signed 32-bit integer. + */ + public static int decodeZigZag32(final int n) { + return (n >>> 1) ^ -(n & 1); + } + + /** + * Decode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers + * into values that can be efficiently encoded with varint. (Otherwise, + * negative values must be sign-extended to 64 bits to be varint encoded, + * thus always taking 10 bytes on the wire.) + * + * @param n An unsigned 64-bit integer, stored in a signed int because + * Java has no explicit unsigned support. + * @return A signed 64-bit integer. + */ + public static long decodeZigZag64(final long n) { + return (n >>> 1) ^ -(n & 1); + } + + // ----------------------------------------------------------------- + + private final byte[] buffer; + private RandomAccessFile raf; + private int bufferSize; + private int bufferSizeAfterLimit; + private int bufferPos; + private final InputStream input; + private int lastTag; + + /** + * The total number of bytes read before the current buffer. The total + * bytes read up to the current position can be computed as + * {@code totalBytesRetired + bufferPos}. This value may be negative if + * reading started in the middle of the current buffer (e.g. if the + * constructor that takes a byte array and an offset was used). + */ + private int totalBytesRetired; + + /** The absolute position of the end of the current message. */ + private int currentLimit = Integer.MAX_VALUE; + + /** See setRecursionLimit() */ + private int recursionDepth; + private int recursionLimit = DEFAULT_RECURSION_LIMIT; + + /** See setSizeLimit() */ + private int sizeLimit = DEFAULT_SIZE_LIMIT; + + private static final int DEFAULT_RECURSION_LIMIT = 64; + private static final int DEFAULT_SIZE_LIMIT = 64 << 20; // 64MB + private static final int BUFFER_SIZE = 5 * 1024; + + + private CodedInputStream(final byte[] buffer, final int off, final int len) { + this.buffer = buffer; + bufferSize = off + len; + bufferPos = off; + totalBytesRetired = -off; + input = null; + } + + private CodedInputStream(final InputStream input) { + buffer = new byte[BUFFER_SIZE]; + bufferSize = 0; + bufferPos = 0; + totalBytesRetired = 0; + this.input = input; + } + + private CodedInputStream(final RandomAccessFile raf) { + buffer = new byte[BUFFER_SIZE]; + this.bufferSize = 0; + bufferPos = 0; + totalBytesRetired = 0; + this.raf = raf; + input = null; + } + + /** + * Set the maximum message recursion depth. In order to prevent malicious + * messages from causing stack overflows, {@code CodedInputStream} limits + * how deeply messages may be nested. The default limit is 64. + * + * @return the old limit. + */ + public int setRecursionLimit(final int limit) { + if (limit < 0) { + throw new IllegalArgumentException( + "Recursion limit cannot be negative: " + limit); + } + final int oldLimit = recursionLimit; + recursionLimit = limit; + return oldLimit; + } + + /** + * Set the maximum message size. In order to prevent malicious + * messages from exhausting memory or causing integer overflows, + * {@code CodedInputStream} limits how large a message may be. + * The default limit is 64MB. You should set this limit as small + * as you can without harming your app's functionality. Note that + * size limits only apply when reading from an {@code InputStream}, not + * when constructed around a raw byte array (nor with + * {@link ByteString#newCodedInput}). + *

    + * If you want to read several messages from a single CodedInputStream, you + * could call {@link #resetSizeCounter()} after each one to avoid hitting the + * size limit. + * + * @return the old limit. + */ + public int setSizeLimit(final int limit) { + if (limit < 0) { + throw new IllegalArgumentException( + "Size limit cannot be negative: " + limit); + } + final int oldLimit = sizeLimit; + sizeLimit = limit; + return oldLimit; + } + + /** + * Resets the current size counter to zero (see {@link #setSizeLimit(int)}). + */ + public void resetSizeCounter() { + totalBytesRetired = -bufferPos; + } + + /** + * Sets {@code currentLimit} to (current position) + {@code byteLimit}. This + * is called when descending into a length-delimited embedded message. + * + *

    Note that {@code pushLimit()} does NOT affect how many bytes the + * {@code CodedInputStream} reads from an underlying {@code InputStream} when + * refreshing its buffer. If you need to prevent reading past a certain + * point in the underlying {@code InputStream} (e.g. because you expect it to + * contain more data after the end of the message which you need to handle + * differently) then you must place a wrapper around you {@code InputStream} + * which limits the amount of data that can be read from it. + * + * @return the old limit. + */ + public int pushLimit(int byteLimit) throws InvalidProtocolBufferException { + if (byteLimit < 0) { + throw InvalidProtocolBufferException.negativeSize(); + } + byteLimit += totalBytesRetired + bufferPos; + final int oldLimit = currentLimit; + if (byteLimit > oldLimit) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + currentLimit = byteLimit; + + recomputeBufferSizeAfterLimit(); + + return oldLimit; + } + + private void recomputeBufferSizeAfterLimit() { + bufferSize += bufferSizeAfterLimit; + final int bufferEnd = totalBytesRetired + bufferSize; + if (bufferEnd > currentLimit) { + // Limit is in current buffer. + bufferSizeAfterLimit = bufferEnd - currentLimit; + bufferSize -= bufferSizeAfterLimit; + } else { + bufferSizeAfterLimit = 0; + } + } + + /** + * Discards the current limit, returning to the previous limit. + * + * @param oldLimit The old limit, as returned by {@code pushLimit}. + */ + public void popLimit(final int oldLimit) { + currentLimit = oldLimit; + recomputeBufferSizeAfterLimit(); + } + + /** + * Returns the number of bytes to be read before the current limit. + * If no limit is set, returns -1. + */ + public int getBytesUntilLimit() { + if (currentLimit == Integer.MAX_VALUE) { + return -1; + } + + final int currentAbsolutePosition = totalBytesRetired + bufferPos; + return currentLimit - currentAbsolutePosition; + } + + /** + * Returns true if the stream has reached the end of the input. This is the + * case if either the end of the underlying input source has been reached or + * if the stream has reached a limit created using {@link #pushLimit(int)}. + */ + public boolean isAtEnd() throws IOException { + return bufferPos == bufferSize && !refillBuffer(false); + } + + /** + * The total bytes read up to the current position. Calling + * {@link #resetSizeCounter()} resets this value to zero. + */ + public int getTotalBytesRead() { + return totalBytesRetired + bufferPos; + } + + /** + * Called with {@code this.buffer} is empty to read more bytes from the + * input. If {@code mustSucceed} is true, refillBuffer() gurantees that + * either there will be at least one byte in the buffer when it returns + * or it will throw an exception. If {@code mustSucceed} is false, + * refillBuffer() returns false if no more bytes were available. + */ + private boolean refillBuffer(final boolean mustSucceed) throws IOException { + if (bufferPos < bufferSize) { + throw new IllegalStateException( + "refillBuffer() called when buffer wasn't empty."); + } + + if (totalBytesRetired + bufferSize == currentLimit) { + // Oops, we hit a limit. + if (mustSucceed) { + throw InvalidProtocolBufferException.truncatedMessage(); + } else { + return false; + } + } + + totalBytesRetired += bufferSize; + + bufferPos = 0; + if (raf != null) { + // osmand change + long remain = raf.length() - raf.getFilePointer(); + bufferSize = (int) Math.min(remain, buffer.length); + if(bufferSize > 0) { + raf.readFully(buffer, 0, bufferSize); + } else { + bufferSize = -1; + } + } else { + bufferSize = (input == null) ? -1 : input.read(buffer); + } + if (bufferSize == 0 || bufferSize < -1) { + throw new IllegalStateException( + "InputStream#read(byte[]) returned invalid result: " + bufferSize + + "\nThe InputStream implementation is buggy."); + } + if (bufferSize == -1) { + bufferSize = 0; + if (mustSucceed) { + throw InvalidProtocolBufferException.truncatedMessage(); + } else { + return false; + } + } else { + recomputeBufferSizeAfterLimit(); + final int totalBytesRead = + totalBytesRetired + bufferSize + bufferSizeAfterLimit; + if (totalBytesRead > sizeLimit || totalBytesRead < 0) { + throw InvalidProtocolBufferException.sizeLimitExceeded(); + } + return true; + } + } + + /** + * Read one byte from the input. + * + * @throws InvalidProtocolBufferException The end of the stream or the current + * limit was reached. + */ + public byte readRawByte() throws IOException { + if (bufferPos == bufferSize) { + refillBuffer(true); + } + return buffer[bufferPos++]; + } + + /** + * Read a fixed size of bytes from the input. + * + * @throws InvalidProtocolBufferException The end of the stream or the current + * limit was reached. + */ + public byte[] readRawBytes(final int size) throws IOException { + if (size < 0) { + throw InvalidProtocolBufferException.negativeSize(); + } + + if (totalBytesRetired + bufferPos + size > currentLimit) { + // Read to the end of the stream anyway. + skipRawBytes(currentLimit - totalBytesRetired - bufferPos); + // Then fail. + throw InvalidProtocolBufferException.truncatedMessage(); + } + + if (size <= bufferSize - bufferPos) { + // We have all the bytes we need already. + final byte[] bytes = new byte[size]; + System.arraycopy(buffer, bufferPos, bytes, 0, size); + bufferPos += size; + return bytes; + } else if (size < BUFFER_SIZE) { + // Reading more bytes than are in the buffer, but not an excessive number + // of bytes. We can safely allocate the resulting array ahead of time. + + // First copy what we have. + final byte[] bytes = new byte[size]; + int pos = bufferSize - bufferPos; + System.arraycopy(buffer, bufferPos, bytes, 0, pos); + bufferPos = bufferSize; + + // We want to use refillBuffer() and then copy from the buffer into our + // byte array rather than reading directly into our byte array because + // the input may be unbuffered. + refillBuffer(true); + + while (size - pos > bufferSize) { + System.arraycopy(buffer, 0, bytes, pos, bufferSize); + pos += bufferSize; + bufferPos = bufferSize; + refillBuffer(true); + } + + System.arraycopy(buffer, 0, bytes, pos, size - pos); + bufferPos = size - pos; + + return bytes; + } else { + // The size is very large. For security reasons, we can't allocate the + // entire byte array yet. The size comes directly from the input, so a + // maliciously-crafted message could provide a bogus very large size in + // order to trick the app into allocating a lot of memory. We avoid this + // by allocating and reading only a small chunk at a time, so that the + // malicious message must actually *be* extremely large to cause + // problems. Meanwhile, we limit the allowed size of a message elsewhere. + + // Remember the buffer markers since we'll have to copy the bytes out of + // it later. + final int originalBufferPos = bufferPos; + final int originalBufferSize = bufferSize; + + // Mark the current buffer consumed. + totalBytesRetired += bufferSize; + bufferPos = 0; + bufferSize = 0; + + // Read all the rest of the bytes we need. + int sizeLeft = size - (originalBufferSize - originalBufferPos); + final List chunks = new ArrayList(); + + while (sizeLeft > 0) { + final byte[] chunk = new byte[Math.min(sizeLeft, BUFFER_SIZE)]; + int pos = 0; + while (pos < chunk.length) { + + final int n; + // osmand change + if(raf != null) { + raf.readFully(chunk, pos, chunk.length - pos); + n = chunk.length - pos; + } else { + n = (input == null) ? -1 : + input.read(chunk, pos, chunk.length - pos); + } + if (n == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + totalBytesRetired += n; + pos += n; + } + sizeLeft -= chunk.length; + chunks.add(chunk); + } + + // OK, got everything. Now concatenate it all into one buffer. + final byte[] bytes = new byte[size]; + + // Start by copying the leftover bytes from this.buffer. + int pos = originalBufferSize - originalBufferPos; + System.arraycopy(buffer, originalBufferPos, bytes, 0, pos); + + // And now all the chunks. + for (final byte[] chunk : chunks) { + System.arraycopy(chunk, 0, bytes, pos, chunk.length); + pos += chunk.length; + } + // Done. + return bytes; + } + } + + /** + * Reads and discards {@code size} bytes. + * + * @throws InvalidProtocolBufferException The end of the stream or the current + * limit was reached. + */ + public void skipRawBytes(final int size) throws IOException { + if (size < 0) { + throw InvalidProtocolBufferException.negativeSize(); + } + + if (totalBytesRetired + bufferPos + size > currentLimit) { + // Read to the end of the stream anyway. + skipRawBytes(currentLimit - totalBytesRetired - bufferPos); + // Then fail. + throw InvalidProtocolBufferException.truncatedMessage(); + } + + if (size <= bufferSize - bufferPos) { + // We have all the bytes we need already. + bufferPos += size; + } else { + // Skipping more bytes than are in the buffer. First skip what we have. + int pos = bufferSize - bufferPos; + totalBytesRetired += bufferSize; // ? pos incorrect + bufferPos = 0; + bufferSize = 0; + + // Then skip directly from the InputStream for the rest. + while (pos < size) { + // osmand change + final int n ; + if(raf != null) { + n = raf.skipBytes(size - pos); + } else { + n = (input == null) ? -1 : (int) input.skip(size - pos); + } + if (n <= 0) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + pos += n; + totalBytesRetired += n; + } + } + } + + // osmand change + public void seek(long pointer) throws IOException { + if (pointer - totalBytesRetired >= 0 && pointer - totalBytesRetired < bufferSize) { + if (pointer > currentLimit) { + // Then fail. + throw InvalidProtocolBufferException.truncatedMessage(); + } + bufferPos = (int) (pointer - totalBytesRetired); + } else { + totalBytesRetired = (int) pointer; + bufferSizeAfterLimit = 0; + raf.seek(pointer); + bufferPos = 0; + bufferSize = 0; + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/CodedInputStreamRAF.java b/OsmAnd-java/src/com/google/protobuf/CodedInputStreamRAF.java new file mode 100644 index 0000000000..02c1ee5d0f --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/CodedInputStreamRAF.java @@ -0,0 +1,825 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.List; + +/** + * Reads and decodes protocol message fields. + * + * This class contains two kinds of methods: methods that read specific + * protocol message constructs and field types (e.g. {@link #readTag()} and + * {@link #readInt32()}) and methods that read low-level values (e.g. + * {@link #readRawVarint32()} and {@link #readRawBytes}). If you are reading + * encoded protocol messages, you should use the former methods, but if you are + * reading some other format of your own design, use the latter. + * + * @author kenton@google.com Kenton Varda + * OSMAND change + */ +public final class CodedInputStreamRAF { + /** + * Create a new CodedInputStream wrapping the given InputStream. + */ + public static CodedInputStreamRAF newInstance(RandomAccessFile raf) { + return new CodedInputStreamRAF(raf, BUFFER_SIZE_DEF); + } + + public static CodedInputStreamRAF newInstance(RandomAccessFile raf, int bufferSize) { + return new CodedInputStreamRAF(raf, bufferSize); + } + + + // ----------------------------------------------------------------- + + /** + * Attempt to read a field tag, returning zero if we have reached EOF. + * Protocol message parsers use this to read tags, since a protocol message + * may legally end wherever a tag occurs, and zero is not a valid tag number. + */ + public int readTag() throws IOException { + if (isAtEnd()) { + lastTag = 0; + return 0; + } + + lastTag = readRawVarint32(); + if (WireFormat.getTagFieldNumber(lastTag) == 0) { + // If we actually read zero (or any tag number corresponding to field + // number zero), that's not a valid tag. + throw InvalidProtocolBufferException.invalidTag(); + } + return lastTag; + } + + /** + * Verifies that the last call to readTag() returned the given tag value. + * This is used to verify that a nested group ended with the correct + * end tag. + * + * @throws InvalidProtocolBufferException {@code value} does not match the + * last tag. + */ + public void checkLastTagWas(final int value) + throws InvalidProtocolBufferException { + if (lastTag != value) { + throw InvalidProtocolBufferException.invalidEndTag(); + } + } + + /** + * Reads and discards a single field, given its tag value. + * + * @return {@code false} if the tag is an endgroup tag, in which case + * nothing is skipped. Otherwise, returns {@code true}. + */ + public boolean skipField(final int tag) throws IOException { + switch (WireFormat.getTagWireType(tag)) { + case WireFormat.WIRETYPE_VARINT: + readInt32(); + return true; + case WireFormat.WIRETYPE_FIXED64: + readRawLittleEndian64(); + return true; + case WireFormat.WIRETYPE_LENGTH_DELIMITED: + skipRawBytes(readRawVarint32()); + return true; + case WireFormat.WIRETYPE_START_GROUP: + skipMessage(); + checkLastTagWas( + WireFormat.makeTag(WireFormat.getTagFieldNumber(tag), + WireFormat.WIRETYPE_END_GROUP)); + return true; + case WireFormat.WIRETYPE_END_GROUP: + return false; + case WireFormat.WIRETYPE_FIXED32: + readRawLittleEndian32(); + return true; + default: + throw InvalidProtocolBufferException.invalidWireType(); + } + } + + /** + * Reads and discards an entire message. This will read either until EOF + * or until an endgroup tag, whichever comes first. + */ + public void skipMessage() throws IOException { + while (true) { + final int tag = readTag(); + if (tag == 0 || !skipField(tag)) { + return; + } + } + } + + // ----------------------------------------------------------------- + + /** Read a {@code double} field value from the stream. */ + public double readDouble() throws IOException { + return Double.longBitsToDouble(readRawLittleEndian64()); + } + + /** Read a {@code float} field value from the stream. */ + public float readFloat() throws IOException { + return Float.intBitsToFloat(readRawLittleEndian32()); + } + + /** Read a {@code uint64} field value from the stream. */ + public long readUInt64() throws IOException { + return readRawVarint64(); + } + + /** Read an {@code int64} field value from the stream. */ + public long readInt64() throws IOException { + return readRawVarint64(); + } + + /** Read an {@code int32} field value from the stream. */ + public int readInt32() throws IOException { + return readRawVarint32(); + } + + /** Read a {@code fixed64} field value from the stream. */ + public long readFixed64() throws IOException { + return readRawLittleEndian64(); + } + + /** Read a {@code fixed32} field value from the stream. */ + public int readFixed32() throws IOException { + return readRawLittleEndian32(); + } + + /** Read a {@code bool} field value from the stream. */ + public boolean readBool() throws IOException { + return readRawVarint32() != 0; + } + + /** Read a {@code string} field value from the stream. */ + public String readString() throws IOException { + final int size = readRawVarint32(); + if (size <= (bufferSize - bufferPos) && size > 0) { + // Fast path: We already have the bytes in a contiguous buffer, so + // just copy directly from it. + final String result = new String(buffer, bufferPos, size, "UTF-8"); + bufferPos += size; + return result; + } else { + // Slow path: Build a byte array first then copy it. + return new String(readRawBytes(size), "UTF-8"); + } + } + + + + + /** Read a {@code bytes} field value from the stream. */ + public ByteString readBytes() throws IOException { + final int size = readRawVarint32(); + if (size <= (bufferSize - bufferPos) && size > 0) { + // Fast path: We already have the bytes in a contiguous buffer, so + // just copy directly from it. + final ByteString result = ByteString.copyFrom(buffer, bufferPos, size); + bufferPos += size; + return result; + } else { + // Slow path: Build a byte array first then copy it. + return ByteString.copyFrom(readRawBytes(size)); + } + } + + /** Read a {@code uint32} field value from the stream. */ + public int readUInt32() throws IOException { + return readRawVarint32(); + } + + /** + * Read an enum field value from the stream. Caller is responsible + * for converting the numeric value to an actual enum. + */ + public int readEnum() throws IOException { + return readRawVarint32(); + } + + /** Read an {@code sfixed32} field value from the stream. */ + public int readSFixed32() throws IOException { + return readRawLittleEndian32(); + } + + /** Read an {@code sfixed64} field value from the stream. */ + public long readSFixed64() throws IOException { + return readRawLittleEndian64(); + } + + /** Read an {@code sint32} field value from the stream. */ + public int readSInt32() throws IOException { + return decodeZigZag32(readRawVarint32()); + } + + /** Read an {@code sint64} field value from the stream. */ + public long readSInt64() throws IOException { + return decodeZigZag64(readRawVarint64()); + } + + // ================================================================= + + /** + * Read a raw Varint from the stream. If larger than 32 bits, discard the + * upper bits. + */ + public int readRawVarint32() throws IOException { + byte tmp = readRawByte(); + if (tmp >= 0) { + return tmp; + } + int result = tmp & 0x7f; + if ((tmp = readRawByte()) >= 0) { + result |= tmp << 7; + } else { + result |= (tmp & 0x7f) << 7; + if ((tmp = readRawByte()) >= 0) { + result |= tmp << 14; + } else { + result |= (tmp & 0x7f) << 14; + if ((tmp = readRawByte()) >= 0) { + result |= tmp << 21; + } else { + result |= (tmp & 0x7f) << 21; + result |= (tmp = readRawByte()) << 28; + if (tmp < 0) { + // Discard upper 32 bits. + for (int i = 0; i < 5; i++) { + if (readRawByte() >= 0) { + return result; + } + } + throw InvalidProtocolBufferException.malformedVarint(); + } + } + } + } + return result; + } + + /** + * Reads a varint from the input one byte at a time, so that it does not + * read any bytes after the end of the varint. If you simply wrapped the + * stream in a CodedInputStream and used {@link #readRawVarint32(InputStream)} + * then you would probably end up reading past the end of the varint since + * CodedInputStream buffers its input. + */ + static int readRawVarint32(final InputStream input) throws IOException { + final int firstByte = input.read(); + if (firstByte == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + return readRawVarint32(firstByte, input); + } + + /** + * Like {@link #readRawVarint32(InputStream)}, but expects that the caller + * has already read one byte. This allows the caller to determine if EOF + * has been reached before attempting to read. + */ + static int readRawVarint32(final int firstByte, + final InputStream input) throws IOException { + if ((firstByte & 0x80) == 0) { + return firstByte; + } + + int result = firstByte & 0x7f; + int offset = 7; + for (; offset < 32; offset += 7) { + final int b = input.read(); + if (b == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + result |= (b & 0x7f) << offset; + if ((b & 0x80) == 0) { + return result; + } + } + // Keep reading up to 64 bits. + for (; offset < 64; offset += 7) { + final int b = input.read(); + if (b == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + if ((b & 0x80) == 0) { + return result; + } + } + throw InvalidProtocolBufferException.malformedVarint(); + } + + /** Read a raw Varint from the stream. */ + public long readRawVarint64() throws IOException { + int shift = 0; + long result = 0; + while (shift < 64) { + final byte b = readRawByte(); + result |= (long)(b & 0x7F) << shift; + if ((b & 0x80) == 0) { + return result; + } + shift += 7; + } + throw InvalidProtocolBufferException.malformedVarint(); + } + + /** Read a 32-bit little-endian integer from the stream. */ + public int readRawLittleEndian32() throws IOException { + final byte b1 = readRawByte(); + final byte b2 = readRawByte(); + final byte b3 = readRawByte(); + final byte b4 = readRawByte(); + return (((int)b1 & 0xff) ) | + (((int)b2 & 0xff) << 8) | + (((int)b3 & 0xff) << 16) | + (((int)b4 & 0xff) << 24); + } + + /** Read a 64-bit little-endian integer from the stream. */ + public long readRawLittleEndian64() throws IOException { + final byte b1 = readRawByte(); + final byte b2 = readRawByte(); + final byte b3 = readRawByte(); + final byte b4 = readRawByte(); + final byte b5 = readRawByte(); + final byte b6 = readRawByte(); + final byte b7 = readRawByte(); + final byte b8 = readRawByte(); + return (((long)b1 & 0xff) ) | + (((long)b2 & 0xff) << 8) | + (((long)b3 & 0xff) << 16) | + (((long)b4 & 0xff) << 24) | + (((long)b5 & 0xff) << 32) | + (((long)b6 & 0xff) << 40) | + (((long)b7 & 0xff) << 48) | + (((long)b8 & 0xff) << 56); + } + + /** + * Decode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers + * into values that can be efficiently encoded with varint. (Otherwise, + * negative values must be sign-extended to 64 bits to be varint encoded, + * thus always taking 10 bytes on the wire.) + * + * @param n An unsigned 32-bit integer, stored in a signed int because + * Java has no explicit unsigned support. + * @return A signed 32-bit integer. + */ + public static int decodeZigZag32(final int n) { + return (n >>> 1) ^ -(n & 1); + } + + /** + * Decode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers + * into values that can be efficiently encoded with varint. (Otherwise, + * negative values must be sign-extended to 64 bits to be varint encoded, + * thus always taking 10 bytes on the wire.) + * + * @param n An unsigned 64-bit integer, stored in a signed int because + * Java has no explicit unsigned support. + * @return A signed 64-bit integer. + */ + public static long decodeZigZag64(final long n) { + return (n >>> 1) ^ -(n & 1); + } + + // ----------------------------------------------------------------- + + private final byte[] buffer; + private int bufferSize; + private int bufferSizeAfterLimit; + private int bufferPos; + private final RandomAccessFile raf; + private int lastTag; + + /** + * The total number of bytes read before the current buffer. The total + * bytes read up to the current position can be computed as + * {@code totalBytesRetired + bufferPos}. This value may be negative if + * reading started in the middle of the current buffer (e.g. if the + * constructor that takes a byte array and an offset was used). + */ + private int totalBytesRetired; + + /** The absolute position of the end of the current message. */ + private int currentLimit = Integer.MAX_VALUE; + + /** See setRecursionLimit() */ + private int recursionDepth; + private int recursionLimit = DEFAULT_RECURSION_LIMIT; + + /** See setSizeLimit() */ + private int sizeLimit = DEFAULT_SIZE_LIMIT; + + private static final int DEFAULT_RECURSION_LIMIT = 64; + private static final int DEFAULT_SIZE_LIMIT = 64 << 20; // 64MB + private static final int BUFFER_SIZE_DEF = 4096; + private int BUFFER_SIZE = BUFFER_SIZE_DEF; + + + private CodedInputStreamRAF(final RandomAccessFile raf, int bufferSize) { + BUFFER_SIZE = bufferSize; + buffer = new byte[BUFFER_SIZE]; + this.bufferSize = 0; + bufferPos = 0; + totalBytesRetired = 0; + this.raf = raf; + } + + /** + * Set the maximum message recursion depth. In order to prevent malicious + * messages from causing stack overflows, {@code CodedInputStream} limits + * how deeply messages may be nested. The default limit is 64. + * + * @return the old limit. + */ + public int setRecursionLimit(final int limit) { + if (limit < 0) { + throw new IllegalArgumentException( + "Recursion limit cannot be negative: " + limit); + } + final int oldLimit = recursionLimit; + recursionLimit = limit; + return oldLimit; + } + + /** + * Set the maximum message size. In order to prevent malicious + * messages from exhausting memory or causing integer overflows, + * {@code CodedInputStream} limits how large a message may be. + * The default limit is 64MB. You should set this limit as small + * as you can without harming your app's functionality. Note that + * size limits only apply when reading from an {@code InputStream}, not + * when constructed around a raw byte array (nor with + * {@link ByteString#newCodedInput}). + *

    + * If you want to read several messages from a single CodedInputStream, you + * could call {@link #resetSizeCounter()} after each one to avoid hitting the + * size limit. + * + * @return the old limit. + */ + public int setSizeLimit(final int limit) { + if (limit < 0) { + throw new IllegalArgumentException( + "Size limit cannot be negative: " + limit); + } + final int oldLimit = sizeLimit; + sizeLimit = limit; + return oldLimit; + } + + /** + * Resets the current size counter to zero (see {@link #setSizeLimit(int)}). + */ + public void resetSizeCounter() { + totalBytesRetired = -bufferPos; + } + + /** + * Sets {@code currentLimit} to (current position) + {@code byteLimit}. This + * is called when descending into a length-delimited embedded message. + * + *

    Note that {@code pushLimit()} does NOT affect how many bytes the + * {@code CodedInputStream} reads from an underlying {@code InputStream} when + * refreshing its buffer. If you need to prevent reading past a certain + * point in the underlying {@code InputStream} (e.g. because you expect it to + * contain more data after the end of the message which you need to handle + * differently) then you must place a wrapper around you {@code InputStream} + * which limits the amount of data that can be read from it. + * + * @return the old limit. + */ + public int pushLimit(int byteLimit) throws InvalidProtocolBufferException { + if (byteLimit < 0) { + throw InvalidProtocolBufferException.negativeSize(); + } + byteLimit += totalBytesRetired + bufferPos; + final int oldLimit = currentLimit; + if (byteLimit > oldLimit) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + currentLimit = byteLimit; + + recomputeBufferSizeAfterLimit(); + + return oldLimit; + } + + private void recomputeBufferSizeAfterLimit() { + bufferSize += bufferSizeAfterLimit; + final int bufferEnd = totalBytesRetired + bufferSize; + if (bufferEnd > currentLimit) { + // Limit is in current buffer. + bufferSizeAfterLimit = bufferEnd - currentLimit; + bufferSize -= bufferSizeAfterLimit; + } else { + bufferSizeAfterLimit = 0; + } + } + + /** + * Discards the current limit, returning to the previous limit. + * + * @param oldLimit The old limit, as returned by {@code pushLimit}. + */ + public void popLimit(final int oldLimit) { + currentLimit = oldLimit; + recomputeBufferSizeAfterLimit(); + } + + /** + * Returns the number of bytes to be read before the current limit. + * If no limit is set, returns -1. + */ + public int getBytesUntilLimit() { + if (currentLimit == Integer.MAX_VALUE) { + return -1; + } + + final int currentAbsolutePosition = totalBytesRetired + bufferPos; + return currentLimit - currentAbsolutePosition; + } + + /** + * Returns true if the stream has reached the end of the input. This is the + * case if either the end of the underlying input source has been reached or + * if the stream has reached a limit created using {@link #pushLimit(int)}. + */ + public boolean isAtEnd() throws IOException { + return bufferPos == bufferSize && !refillBuffer(false); + } + + /** + * The total bytes read up to the current position. Calling + * {@link #resetSizeCounter()} resets this value to zero. + */ + public int getTotalBytesRead() { + return totalBytesRetired + bufferPos; + } + + /** + * Called with {@code this.buffer} is empty to read more bytes from the + * input. If {@code mustSucceed} is true, refillBuffer() gurantees that + * either there will be at least one byte in the buffer when it returns + * or it will throw an exception. If {@code mustSucceed} is false, + * refillBuffer() returns false if no more bytes were available. + */ + private boolean refillBuffer(final boolean mustSucceed) throws IOException { + if (bufferPos < bufferSize) { + throw new IllegalStateException( + "refillBuffer() called when buffer wasn't empty."); + } + + if (totalBytesRetired + bufferSize == currentLimit) { + // Oops, we hit a limit. + if (mustSucceed) { + throw InvalidProtocolBufferException.truncatedMessage(); + } else { + return false; + } + } + + totalBytesRetired += bufferSize; + + bufferPos = 0; + // osmand change + bufferSize = raf.read(buffer); + if (bufferSize == 0 || bufferSize < -1) { + throw new IllegalStateException( + "InputStream#read(byte[]) returned invalid result: " + bufferSize + + "\nThe InputStream implementation is buggy."); + } + if (bufferSize == -1) { + bufferSize = 0; + if (mustSucceed) { + throw InvalidProtocolBufferException.truncatedMessage(); + } else { + return false; + } + } else { + recomputeBufferSizeAfterLimit(); + final int totalBytesRead = + totalBytesRetired + bufferSize + bufferSizeAfterLimit; + if (totalBytesRead > sizeLimit || totalBytesRead < 0) { + throw InvalidProtocolBufferException.sizeLimitExceeded(); + } + return true; + } + } + + /** + * Read one byte from the input. + * + * @throws InvalidProtocolBufferException The end of the stream or the current + * limit was reached. + */ + public byte readRawByte() throws IOException { + if (bufferPos == bufferSize) { + refillBuffer(true); + } + return buffer[bufferPos++]; + } + + /** + * Read a fixed size of bytes from the input. + * + * @throws InvalidProtocolBufferException The end of the stream or the current + * limit was reached. + */ + public byte[] readRawBytes(final int size) throws IOException { + if (size < 0) { + throw InvalidProtocolBufferException.negativeSize(); + } + + if (totalBytesRetired + bufferPos + size > currentLimit) { + // Read to the end of the stream anyway. + skipRawBytes(currentLimit - totalBytesRetired - bufferPos); + // Then fail. + throw InvalidProtocolBufferException.truncatedMessage(); + } + + if (size <= bufferSize - bufferPos) { + // We have all the bytes we need already. + final byte[] bytes = new byte[size]; + System.arraycopy(buffer, bufferPos, bytes, 0, size); + bufferPos += size; + return bytes; + } else if (size < BUFFER_SIZE) { + // Reading more bytes than are in the buffer, but not an excessive number + // of bytes. We can safely allocate the resulting array ahead of time. + + // First copy what we have. + final byte[] bytes = new byte[size]; + int pos = bufferSize - bufferPos; + System.arraycopy(buffer, bufferPos, bytes, 0, pos); + bufferPos = bufferSize; + + // We want to use refillBuffer() and then copy from the buffer into our + // byte array rather than reading directly into our byte array because + // the input may be unbuffered. + refillBuffer(true); + + while (size - pos > bufferSize) { + System.arraycopy(buffer, 0, bytes, pos, bufferSize); + pos += bufferSize; + bufferPos = bufferSize; + refillBuffer(true); + } + + System.arraycopy(buffer, 0, bytes, pos, size - pos); + bufferPos = size - pos; + + return bytes; + } else { + // The size is very large. For security reasons, we can't allocate the + // entire byte array yet. The size comes directly from the input, so a + // maliciously-crafted message could provide a bogus very large size in + // order to trick the app into allocating a lot of memory. We avoid this + // by allocating and reading only a small chunk at a time, so that the + // malicious message must actually *be* extremely large to cause + // problems. Meanwhile, we limit the allowed size of a message elsewhere. + + // Remember the buffer markers since we'll have to copy the bytes out of + // it later. + final int originalBufferPos = bufferPos; + final int originalBufferSize = bufferSize; + + // Mark the current buffer consumed. + totalBytesRetired += bufferSize; + bufferPos = 0; + bufferSize = 0; + + // Read all the rest of the bytes we need. + int sizeLeft = size - (originalBufferSize - originalBufferPos); + final List chunks = new ArrayList(); + + while (sizeLeft > 0) { + final byte[] chunk = new byte[Math.min(sizeLeft, BUFFER_SIZE)]; + int pos = 0; + while (pos < chunk.length) { + // osmand change + final int n = raf.read(chunk, pos, chunk.length - pos); + if (n == -1) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + totalBytesRetired += n; + pos += n; + } + sizeLeft -= chunk.length; + chunks.add(chunk); + } + + // OK, got everything. Now concatenate it all into one buffer. + final byte[] bytes = new byte[size]; + + // Start by copying the leftover bytes from this.buffer. + int pos = originalBufferSize - originalBufferPos; + System.arraycopy(buffer, originalBufferPos, bytes, 0, pos); + + // And now all the chunks. + for (final byte[] chunk : chunks) { + System.arraycopy(chunk, 0, bytes, pos, chunk.length); + pos += chunk.length; + } + + // Done. + return bytes; + } + } + + /** + * Reads and discards {@code size} bytes. + * + * @throws InvalidProtocolBufferException The end of the stream or the current + * limit was reached. + */ + public void skipRawBytes(final int size) throws IOException { + if (size < 0) { + throw InvalidProtocolBufferException.negativeSize(); + } + + if (totalBytesRetired + bufferPos + size > currentLimit) { + // Read to the end of the stream anyway. + skipRawBytes(currentLimit - totalBytesRetired - bufferPos); + // Then fail. + throw InvalidProtocolBufferException.truncatedMessage(); + } + + if (size <= bufferSize - bufferPos) { + // We have all the bytes we need already. + bufferPos += size; + } else { + // Skipping more bytes than are in the buffer. First skip what we have. + int pos = bufferSize - bufferPos; + totalBytesRetired += bufferSize; + bufferPos = 0; + bufferSize = 0; + + // Then skip directly from the InputStream for the rest. + while (pos < size) { + // osmand change + final int n = raf.skipBytes(size - pos); + if (n <= 0) { + throw InvalidProtocolBufferException.truncatedMessage(); + } + pos += n; + totalBytesRetired += n; + } + } + } + + // osmand change + public void seek(long pointer) throws IOException{ + if(pointer - totalBytesRetired >= 0 && pointer - totalBytesRetired < bufferSize){ + if (pointer > currentLimit) { + // Then fail. + throw InvalidProtocolBufferException.truncatedMessage(); + } + bufferPos = (int) (pointer - totalBytesRetired); + } else { + totalBytesRetired = (int) pointer; + bufferSizeAfterLimit = 0; + raf.seek(pointer); + bufferPos = 0; + bufferSize = 0; + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/CodedOutputStream.java b/OsmAnd-java/src/com/google/protobuf/CodedOutputStream.java new file mode 100644 index 0000000000..6e81b981d9 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/CodedOutputStream.java @@ -0,0 +1,1040 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; + +/** + * Encodes and writes protocol message fields. + * + *

    This class contains two kinds of methods: methods that write specific + * protocol message constructs and field types (e.g. {@link #writeTag} and + * {@link #writeInt32}) and methods that write low-level values (e.g. + * {@link #writeRawVarint32} and {@link #writeRawBytes}). If you are + * writing encoded protocol messages, you should use the former methods, but if + * you are writing some other format of your own design, use the latter. + * + *

    This class is totally unsynchronized. + * + * @author kneton@google.com Kenton Varda + */ +public final class CodedOutputStream { + private final byte[] buffer; + private final int limit; + private int position; + // + Change + private long writtenBytes = 0; + + private final OutputStream output; + + /** + * The buffer size used in {@link #newInstance(OutputStream)}. + */ + public static final int DEFAULT_BUFFER_SIZE = 4096; + + /** + * Returns the buffer size to efficiently write dataLength bytes to this + * CodedOutputStream. Used by AbstractMessageLite. + * + * @return the buffer size to efficiently write dataLength bytes to this + * CodedOutputStream. + */ + static int computePreferredBufferSize(int dataLength) { + if (dataLength > DEFAULT_BUFFER_SIZE) return DEFAULT_BUFFER_SIZE; + return dataLength; + } + + private CodedOutputStream(final byte[] buffer, final int offset, + final int length) { + output = null; + this.buffer = buffer; + position = offset; + limit = offset + length; + } + + private CodedOutputStream(final OutputStream output, final byte[] buffer) { + this.output = output; + this.buffer = buffer; + position = 0; + limit = buffer.length; + } + + /** + * Create a new {@code CodedOutputStream} wrapping the given + * {@code OutputStream}. + */ + public static CodedOutputStream newInstance(final OutputStream output) { + return newInstance(output, DEFAULT_BUFFER_SIZE); + } + + /** + * Create a new {@code CodedOutputStream} wrapping the given + * {@code OutputStream} with a given buffer size. + */ + public static CodedOutputStream newInstance(final OutputStream output, + final int bufferSize) { + return new CodedOutputStream(output, new byte[bufferSize]); + } + + /** + * Create a new {@code CodedOutputStream} that writes directly to the given + * byte array. If more bytes are written than fit in the array, + * {@link OutOfSpaceException} will be thrown. Writing directly to a flat + * array is faster than writing to an {@code OutputStream}. See also + * {@link ByteString#newCodedBuilder}. + */ + public static CodedOutputStream newInstance(final byte[] flatArray) { + return newInstance(flatArray, 0, flatArray.length); + } + + /** + * Create a new {@code CodedOutputStream} that writes directly to the given + * byte array slice. If more bytes are written than fit in the slice, + * {@link OutOfSpaceException} will be thrown. Writing directly to a flat + * array is faster than writing to an {@code OutputStream}. See also + * {@link ByteString#newCodedBuilder}. + */ + public static CodedOutputStream newInstance(final byte[] flatArray, + final int offset, + final int length) { + return new CodedOutputStream(flatArray, offset, length); + } + + // ----------------------------------------------------------------- + + /** Write a {@code double} field, including tag, to the stream. */ + public void writeDouble(final int fieldNumber, final double value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); + writeDoubleNoTag(value); + } + + /** Write a {@code float} field, including tag, to the stream. */ + public void writeFloat(final int fieldNumber, final float value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); + writeFloatNoTag(value); + } + + /** Write a {@code uint64} field, including tag, to the stream. */ + public void writeUInt64(final int fieldNumber, final long value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeUInt64NoTag(value); + } + + /** Write an {@code int64} field, including tag, to the stream. */ + public void writeInt64(final int fieldNumber, final long value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeInt64NoTag(value); + } + + /** Write an {@code int32} field, including tag, to the stream. */ + public void writeInt32(final int fieldNumber, final int value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeInt32NoTag(value); + } + + /** Write a {@code fixed64} field, including tag, to the stream. */ + public void writeFixed64(final int fieldNumber, final long value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); + writeFixed64NoTag(value); + } + + /** Write a {@code fixed32} field, including tag, to the stream. */ + public void writeFixed32(final int fieldNumber, final int value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); + writeFixed32NoTag(value); + } + + /** Write a {@code bool} field, including tag, to the stream. */ + public void writeBool(final int fieldNumber, final boolean value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeBoolNoTag(value); + } + + /** Write a {@code string} field, including tag, to the stream. */ + public void writeString(final int fieldNumber, final String value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); + writeStringNoTag(value); + } + + /** Write a {@code group} field, including tag, to the stream. */ + public void writeGroup(final int fieldNumber, final MessageLite value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_START_GROUP); + writeGroupNoTag(value); + writeTag(fieldNumber, WireFormat.WIRETYPE_END_GROUP); + } + + /** + * Write a group represented by an {@link UnknownFieldSet}. + * + * @deprecated UnknownFieldSet now implements MessageLite, so you can just + * call {@link #writeGroup}. + */ + @Deprecated + public void writeUnknownGroup(final int fieldNumber, + final MessageLite value) + throws IOException { + writeGroup(fieldNumber, value); + } + + /** Write an embedded message field, including tag, to the stream. */ + public void writeMessage(final int fieldNumber, final MessageLite value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); + writeMessageNoTag(value); + } + + /** Write a {@code bytes} field, including tag, to the stream. */ + public void writeBytes(final int fieldNumber, final ByteString value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_LENGTH_DELIMITED); + writeBytesNoTag(value); + } + + /** Write a {@code uint32} field, including tag, to the stream. */ + public void writeUInt32(final int fieldNumber, final int value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeUInt32NoTag(value); + } + + /** + * Write an enum field, including tag, to the stream. Caller is responsible + * for converting the enum value to its numeric value. + */ + public void writeEnum(final int fieldNumber, final int value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeEnumNoTag(value); + } + + /** Write an {@code sfixed32} field, including tag, to the stream. */ + public void writeSFixed32(final int fieldNumber, final int value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32); + writeSFixed32NoTag(value); + } + + /** Write an {@code sfixed64} field, including tag, to the stream. */ + public void writeSFixed64(final int fieldNumber, final long value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED64); + writeSFixed64NoTag(value); + } + + /** Write an {@code sint32} field, including tag, to the stream. */ + public void writeSInt32(final int fieldNumber, final int value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeSInt32NoTag(value); + } + + /** Write an {@code sint64} field, including tag, to the stream. */ + public void writeSInt64(final int fieldNumber, final long value) + throws IOException { + writeTag(fieldNumber, WireFormat.WIRETYPE_VARINT); + writeSInt64NoTag(value); + } + + /** + * Write a MessageSet extension field to the stream. For historical reasons, + * the wire format differs from normal fields. + */ + public void writeMessageSetExtension(final int fieldNumber, + final MessageLite value) + throws IOException { + writeTag(WireFormat.MESSAGE_SET_ITEM, WireFormat.WIRETYPE_START_GROUP); + writeUInt32(WireFormat.MESSAGE_SET_TYPE_ID, fieldNumber); + writeMessage(WireFormat.MESSAGE_SET_MESSAGE, value); + writeTag(WireFormat.MESSAGE_SET_ITEM, WireFormat.WIRETYPE_END_GROUP); + } + + /** + * Write an unparsed MessageSet extension field to the stream. For + * historical reasons, the wire format differs from normal fields. + */ + public void writeRawMessageSetExtension(final int fieldNumber, + final ByteString value) + throws IOException { + writeTag(WireFormat.MESSAGE_SET_ITEM, WireFormat.WIRETYPE_START_GROUP); + writeUInt32(WireFormat.MESSAGE_SET_TYPE_ID, fieldNumber); + writeBytes(WireFormat.MESSAGE_SET_MESSAGE, value); + writeTag(WireFormat.MESSAGE_SET_ITEM, WireFormat.WIRETYPE_END_GROUP); + } + + // ----------------------------------------------------------------- + + /** Write a {@code double} field to the stream. */ + public void writeDoubleNoTag(final double value) throws IOException { + writeRawLittleEndian64(Double.doubleToRawLongBits(value)); + } + + /** Write a {@code float} field to the stream. */ + public void writeFloatNoTag(final float value) throws IOException { + writeRawLittleEndian32(Float.floatToRawIntBits(value)); + } + + /** Write a {@code uint64} field to the stream. */ + public void writeUInt64NoTag(final long value) throws IOException { + writeRawVarint64(value); + } + + /** Write an {@code int64} field to the stream. */ + public void writeInt64NoTag(final long value) throws IOException { + writeRawVarint64(value); + } + + /** Write an {@code int32} field to the stream. */ + public void writeInt32NoTag(final int value) throws IOException { + if (value >= 0) { + writeRawVarint32(value); + } else { + // Must sign-extend. + writeRawVarint64(value); + } + } + + /** Write a {@code fixed64} field to the stream. */ + public void writeFixed64NoTag(final long value) throws IOException { + writeRawLittleEndian64(value); + } + + /** Write a {@code fixed32} field to the stream. */ + public void writeFixed32NoTag(final int value) throws IOException { + writeRawLittleEndian32(value); + } + + /** Write a {@code bool} field to the stream. */ + public void writeBoolNoTag(final boolean value) throws IOException { + writeRawByte(value ? 1 : 0); + } + + /** Write a {@code string} field to the stream. */ + public void writeStringNoTag(final String value) throws IOException { + // Unfortunately there does not appear to be any way to tell Java to encode + // UTF-8 directly into our buffer, so we have to let it create its own byte + // array and then copy. + final byte[] bytes = value.getBytes("UTF-8"); + writeRawVarint32(bytes.length); + writeRawBytes(bytes); + } + + /** Write a {@code group} field to the stream. */ + public void writeGroupNoTag(final MessageLite value) throws IOException { + value.writeTo(this); + } + + /** + * Write a group represented by an {@link UnknownFieldSet}. + * + * @deprecated UnknownFieldSet now implements MessageLite, so you can just + * call {@link #writeGroupNoTag}. + */ + @Deprecated + public void writeUnknownGroupNoTag(final MessageLite value) + throws IOException { + writeGroupNoTag(value); + } + + /** Write an embedded message field to the stream. */ + public void writeMessageNoTag(final MessageLite value) throws IOException { + writeRawVarint32(value.getSerializedSize()); + value.writeTo(this); + } + + /** Write a {@code bytes} field to the stream. */ + public void writeBytesNoTag(final ByteString value) throws IOException { + final byte[] bytes = value.toByteArray(); + writeRawVarint32(bytes.length); + writeRawBytes(bytes); + } + + /** Write a {@code uint32} field to the stream. */ + public void writeUInt32NoTag(final int value) throws IOException { + writeRawVarint32(value); + } + + /** + * Write an enum field to the stream. Caller is responsible + * for converting the enum value to its numeric value. + */ + public void writeEnumNoTag(final int value) throws IOException { + writeRawVarint32(value); + } + + /** Write an {@code sfixed32} field to the stream. */ + public void writeSFixed32NoTag(final int value) throws IOException { + writeRawLittleEndian32(value); + } + + /** Write an {@code sfixed64} field to the stream. */ + public void writeSFixed64NoTag(final long value) throws IOException { + writeRawLittleEndian64(value); + } + + /** Write an {@code sint32} field to the stream. */ + public void writeSInt32NoTag(final int value) throws IOException { + writeRawVarint32(encodeZigZag32(value)); + } + + /** Write an {@code sint64} field to the stream. */ + public void writeSInt64NoTag(final long value) throws IOException { + writeRawVarint64(encodeZigZag64(value)); + } + + // ================================================================= + + /** + * Compute the number of bytes that would be needed to encode a + * {@code double} field, including tag. + */ + public static int computeDoubleSize(final int fieldNumber, + final double value) { + return computeTagSize(fieldNumber) + computeDoubleSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code float} field, including tag. + */ + public static int computeFloatSize(final int fieldNumber, final float value) { + return computeTagSize(fieldNumber) + computeFloatSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code uint64} field, including tag. + */ + public static int computeUInt64Size(final int fieldNumber, final long value) { + return computeTagSize(fieldNumber) + computeUInt64SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code int64} field, including tag. + */ + public static int computeInt64Size(final int fieldNumber, final long value) { + return computeTagSize(fieldNumber) + computeInt64SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code int32} field, including tag. + */ + public static int computeInt32Size(final int fieldNumber, final int value) { + return computeTagSize(fieldNumber) + computeInt32SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code fixed64} field, including tag. + */ + public static int computeFixed64Size(final int fieldNumber, + final long value) { + return computeTagSize(fieldNumber) + computeFixed64SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code fixed32} field, including tag. + */ + public static int computeFixed32Size(final int fieldNumber, + final int value) { + return computeTagSize(fieldNumber) + computeFixed32SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code bool} field, including tag. + */ + public static int computeBoolSize(final int fieldNumber, + final boolean value) { + return computeTagSize(fieldNumber) + computeBoolSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code string} field, including tag. + */ + public static int computeStringSize(final int fieldNumber, + final String value) { + return computeTagSize(fieldNumber) + computeStringSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code group} field, including tag. + */ + public static int computeGroupSize(final int fieldNumber, + final MessageLite value) { + return computeTagSize(fieldNumber) * 2 + computeGroupSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code group} field represented by an {@code UnknownFieldSet}, including + * tag. + * + * @deprecated UnknownFieldSet now implements MessageLite, so you can just + * call {@link #computeGroupSize}. + */ + @Deprecated + public static int computeUnknownGroupSize(final int fieldNumber, + final MessageLite value) { + return computeGroupSize(fieldNumber, value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * embedded message field, including tag. + */ + public static int computeMessageSize(final int fieldNumber, + final MessageLite value) { + return computeTagSize(fieldNumber) + computeMessageSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code bytes} field, including tag. + */ + public static int computeBytesSize(final int fieldNumber, + final ByteString value) { + return computeTagSize(fieldNumber) + computeBytesSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code uint32} field, including tag. + */ + public static int computeUInt32Size(final int fieldNumber, final int value) { + return computeTagSize(fieldNumber) + computeUInt32SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * enum field, including tag. Caller is responsible for converting the + * enum value to its numeric value. + */ + public static int computeEnumSize(final int fieldNumber, final int value) { + return computeTagSize(fieldNumber) + computeEnumSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sfixed32} field, including tag. + */ + public static int computeSFixed32Size(final int fieldNumber, + final int value) { + return computeTagSize(fieldNumber) + computeSFixed32SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sfixed64} field, including tag. + */ + public static int computeSFixed64Size(final int fieldNumber, + final long value) { + return computeTagSize(fieldNumber) + computeSFixed64SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sint32} field, including tag. + */ + public static int computeSInt32Size(final int fieldNumber, final int value) { + return computeTagSize(fieldNumber) + computeSInt32SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sint64} field, including tag. + */ + public static int computeSInt64Size(final int fieldNumber, final long value) { + return computeTagSize(fieldNumber) + computeSInt64SizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * MessageSet extension to the stream. For historical reasons, + * the wire format differs from normal fields. + */ + public static int computeMessageSetExtensionSize( + final int fieldNumber, final MessageLite value) { + return computeTagSize(WireFormat.MESSAGE_SET_ITEM) * 2 + + computeUInt32Size(WireFormat.MESSAGE_SET_TYPE_ID, fieldNumber) + + computeMessageSize(WireFormat.MESSAGE_SET_MESSAGE, value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * unparsed MessageSet extension field to the stream. For + * historical reasons, the wire format differs from normal fields. + */ + public static int computeRawMessageSetExtensionSize( + final int fieldNumber, final ByteString value) { + return computeTagSize(WireFormat.MESSAGE_SET_ITEM) * 2 + + computeUInt32Size(WireFormat.MESSAGE_SET_TYPE_ID, fieldNumber) + + computeBytesSize(WireFormat.MESSAGE_SET_MESSAGE, value); + } + + // ----------------------------------------------------------------- + + /** + * Compute the number of bytes that would be needed to encode a + * {@code double} field, including tag. + */ + public static int computeDoubleSizeNoTag(final double value) { + return LITTLE_ENDIAN_64_SIZE; + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code float} field, including tag. + */ + public static int computeFloatSizeNoTag(final float value) { + return LITTLE_ENDIAN_32_SIZE; + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code uint64} field, including tag. + */ + public static int computeUInt64SizeNoTag(final long value) { + return computeRawVarint64Size(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code int64} field, including tag. + */ + public static int computeInt64SizeNoTag(final long value) { + return computeRawVarint64Size(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code int32} field, including tag. + */ + public static int computeInt32SizeNoTag(final int value) { + if (value >= 0) { + return computeRawVarint32Size(value); + } else { + // Must sign-extend. + return 10; + } + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code fixed64} field. + */ + public static int computeFixed64SizeNoTag(final long value) { + return LITTLE_ENDIAN_64_SIZE; + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code fixed32} field. + */ + public static int computeFixed32SizeNoTag(final int value) { + return LITTLE_ENDIAN_32_SIZE; + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code bool} field. + */ + public static int computeBoolSizeNoTag(final boolean value) { + return 1; + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code string} field. + */ + public static int computeStringSizeNoTag(final String value) { + try { + final byte[] bytes = value.getBytes("UTF-8"); + return computeRawVarint32Size(bytes.length) + + bytes.length; + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("UTF-8 not supported.", e); + } + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code group} field. + */ + public static int computeGroupSizeNoTag(final MessageLite value) { + return value.getSerializedSize(); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code group} field represented by an {@code UnknownFieldSet}, including + * tag. + * + * @deprecated UnknownFieldSet now implements MessageLite, so you can just + * call {@link #computeUnknownGroupSizeNoTag}. + */ + @Deprecated + public static int computeUnknownGroupSizeNoTag(final MessageLite value) { + return computeGroupSizeNoTag(value); + } + + /** + * Compute the number of bytes that would be needed to encode an embedded + * message field. + */ + public static int computeMessageSizeNoTag(final MessageLite value) { + final int size = value.getSerializedSize(); + return computeRawVarint32Size(size) + size; + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code bytes} field. + */ + public static int computeBytesSizeNoTag(final ByteString value) { + return computeRawVarint32Size(value.size()) + + value.size(); + } + + /** + * Compute the number of bytes that would be needed to encode a + * {@code uint32} field. + */ + public static int computeUInt32SizeNoTag(final int value) { + return computeRawVarint32Size(value); + } + + /** + * Compute the number of bytes that would be needed to encode an enum field. + * Caller is responsible for converting the enum value to its numeric value. + */ + public static int computeEnumSizeNoTag(final int value) { + return computeRawVarint32Size(value); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sfixed32} field. + */ + public static int computeSFixed32SizeNoTag(final int value) { + return LITTLE_ENDIAN_32_SIZE; + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sfixed64} field. + */ + public static int computeSFixed64SizeNoTag(final long value) { + return LITTLE_ENDIAN_64_SIZE; + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sint32} field. + */ + public static int computeSInt32SizeNoTag(final int value) { + return computeRawVarint32Size(encodeZigZag32(value)); + } + + /** + * Compute the number of bytes that would be needed to encode an + * {@code sint64} field. + */ + public static int computeSInt64SizeNoTag(final long value) { + return computeRawVarint64Size(encodeZigZag64(value)); + } + + // ================================================================= + + /** + * Internal helper that writes the current buffer to the output. The + * buffer position is reset to its initial value when this returns. + */ + private void refreshBuffer() throws IOException { + if (output == null) { + // We're writing to a single buffer. + throw new OutOfSpaceException(); + } + + // Since we have an output stream, this is our buffer + // and buffer offset == 0 + output.write(buffer, 0, position); + writtenBytes += position; + position = 0; + } + + /** + * Flushes the stream and forces any buffered bytes to be written. This + * does not flush the underlying OutputStream. + */ + public void flush() throws IOException { + if (output != null) { + refreshBuffer(); + } + } + + /** + * @return current offset in the output file + */ + public long getWrittenBytes() { + return writtenBytes + position; + } + + /** + * If writing to a flat array, return the space left in the array. + * Otherwise, throws {@code UnsupportedOperationException}. + */ + public int spaceLeft() { + if (output == null) { + return limit - position; + } else { + throw new UnsupportedOperationException( + "spaceLeft() can only be called on CodedOutputStreams that are " + + "writing to a flat array."); + } + } + + /** + * Verifies that {@link #spaceLeft()} returns zero. It's common to create + * a byte array that is exactly big enough to hold a message, then write to + * it with a {@code CodedOutputStream}. Calling {@code checkNoSpaceLeft()} + * after writing verifies that the message was actually as big as expected, + * which can help catch bugs. + */ + public void checkNoSpaceLeft() { + if (spaceLeft() != 0) { + throw new IllegalStateException( + "Did not write as much data as expected."); + } + } + + /** + * If you create a CodedOutputStream around a simple flat array, you must + * not attempt to write more bytes than the array has space. Otherwise, + * this exception will be thrown. + */ + public static class OutOfSpaceException extends IOException { + private static final long serialVersionUID = -6947486886997889499L; + + OutOfSpaceException() { + super("CodedOutputStream was writing to a flat byte array and ran " + + "out of space."); + } + } + + /** Write a single byte. */ + public void writeRawByte(final byte value) throws IOException { + if (position == limit) { + refreshBuffer(); + } + + buffer[position++] = value; + } + + /** Write a single byte, represented by an integer value. */ + public void writeRawByte(final int value) throws IOException { + writeRawByte((byte) value); + } + + /** Write an array of bytes. */ + public void writeRawBytes(final byte[] value) throws IOException { + writeRawBytes(value, 0, value.length); + } + + /** Write part of an array of bytes. */ + public void writeRawBytes(final byte[] value, int offset, int length) + throws IOException { + if (limit - position >= length) { + // We have room in the current buffer. + System.arraycopy(value, offset, buffer, position, length); + position += length; + } else { + // Write extends past current buffer. Fill the rest of this buffer and + // flush. + final int bytesWritten = limit - position; + System.arraycopy(value, offset, buffer, position, bytesWritten); + offset += bytesWritten; + length -= bytesWritten; + position = limit; + refreshBuffer(); + + // Now deal with the rest. + // Since we have an output stream, this is our buffer + // and buffer offset == 0 + if (length <= limit) { + // Fits in new buffer. + System.arraycopy(value, offset, buffer, 0, length); + position = length; + } else { + // Write is very big. Let's do it all at once. + output.write(value, offset, length); + writtenBytes += length; + } + } + } + + /** Encode and write a tag. */ + public void writeTag(final int fieldNumber, final int wireType) + throws IOException { + writeRawVarint32(WireFormat.makeTag(fieldNumber, wireType)); + } + + /** Compute the number of bytes that would be needed to encode a tag. */ + public static int computeTagSize(final int fieldNumber) { + return computeRawVarint32Size(WireFormat.makeTag(fieldNumber, 0)); + } + + /** + * Encode and write a varint. {@code value} is treated as + * unsigned, so it won't be sign-extended if negative. + */ + public void writeRawVarint32(int value) throws IOException { + while (true) { + if ((value & ~0x7F) == 0) { + writeRawByte(value); + return; + } else { + writeRawByte((value & 0x7F) | 0x80); + value >>>= 7; + } + } + } + + /** + * Compute the number of bytes that would be needed to encode a varint. + * {@code value} is treated as unsigned, so it won't be sign-extended if + * negative. + */ + public static int computeRawVarint32Size(final int value) { + if ((value & (0xffffffff << 7)) == 0) return 1; + if ((value & (0xffffffff << 14)) == 0) return 2; + if ((value & (0xffffffff << 21)) == 0) return 3; + if ((value & (0xffffffff << 28)) == 0) return 4; + return 5; + } + + /** Encode and write a varint. */ + public void writeRawVarint64(long value) throws IOException { + while (true) { + if ((value & ~0x7FL) == 0) { + writeRawByte((int)value); + return; + } else { + writeRawByte(((int)value & 0x7F) | 0x80); + value >>>= 7; + } + } + } + + /** Compute the number of bytes that would be needed to encode a varint. */ + public static int computeRawVarint64Size(final long value) { + if ((value & (0xffffffffffffffffL << 7)) == 0) return 1; + if ((value & (0xffffffffffffffffL << 14)) == 0) return 2; + if ((value & (0xffffffffffffffffL << 21)) == 0) return 3; + if ((value & (0xffffffffffffffffL << 28)) == 0) return 4; + if ((value & (0xffffffffffffffffL << 35)) == 0) return 5; + if ((value & (0xffffffffffffffffL << 42)) == 0) return 6; + if ((value & (0xffffffffffffffffL << 49)) == 0) return 7; + if ((value & (0xffffffffffffffffL << 56)) == 0) return 8; + if ((value & (0xffffffffffffffffL << 63)) == 0) return 9; + return 10; + } + + /** Write a little-endian 32-bit integer. */ + public void writeRawLittleEndian32(final int value) throws IOException { + writeRawByte((value ) & 0xFF); + writeRawByte((value >> 8) & 0xFF); + writeRawByte((value >> 16) & 0xFF); + writeRawByte((value >> 24) & 0xFF); + } + + public static final int LITTLE_ENDIAN_32_SIZE = 4; + + /** Write a little-endian 64-bit integer. */ + public void writeRawLittleEndian64(final long value) throws IOException { + writeRawByte((int)(value ) & 0xFF); + writeRawByte((int)(value >> 8) & 0xFF); + writeRawByte((int)(value >> 16) & 0xFF); + writeRawByte((int)(value >> 24) & 0xFF); + writeRawByte((int)(value >> 32) & 0xFF); + writeRawByte((int)(value >> 40) & 0xFF); + writeRawByte((int)(value >> 48) & 0xFF); + writeRawByte((int)(value >> 56) & 0xFF); + } + + public static final int LITTLE_ENDIAN_64_SIZE = 8; + + /** + * Encode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers + * into values that can be efficiently encoded with varint. (Otherwise, + * negative values must be sign-extended to 64 bits to be varint encoded, + * thus always taking 10 bytes on the wire.) + * + * @param n A signed 32-bit integer. + * @return An unsigned 32-bit integer, stored in a signed int because + * Java has no explicit unsigned support. + */ + public static int encodeZigZag32(final int n) { + // Note: the right-shift must be arithmetic + return (n << 1) ^ (n >> 31); + } + + /** + * Encode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers + * into values that can be efficiently encoded with varint. (Otherwise, + * negative values must be sign-extended to 64 bits to be varint encoded, + * thus always taking 10 bytes on the wire.) + * + * @param n A signed 64-bit integer. + * @return An unsigned 64-bit integer, stored in a signed int because + * Java has no explicit unsigned support. + */ + public static long encodeZigZag64(final long n) { + // Note: the right-shift must be arithmetic + return (n << 1) ^ (n >> 63); + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/DescriptorProtos.java b/OsmAnd-java/src/com/google/protobuf/DescriptorProtos.java new file mode 100644 index 0000000000..fcaea4368a --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/DescriptorProtos.java @@ -0,0 +1,9411 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/protobuf/descriptor.proto + +package com.google.protobuf; + +public final class DescriptorProtos { + private DescriptorProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public static final class FileDescriptorSet extends + com.google.protobuf.GeneratedMessage { + // Use FileDescriptorSet.newBuilder() to construct. + private FileDescriptorSet() { + initFields(); + } + private FileDescriptorSet(boolean noInit) {} + + private static final FileDescriptorSet defaultInstance; + public static FileDescriptorSet getDefaultInstance() { + return defaultInstance; + } + + @Override + public FileDescriptorSet getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable; + } + + // repeated .google.protobuf.FileDescriptorProto file = 1; + public static final int FILE_FIELD_NUMBER = 1; + private java.util.List file_ = + java.util.Collections.emptyList(); + public java.util.List getFileList() { + return file_; + } + public int getFileCount() { return file_.size(); } + public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) { + return file_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (com.google.protobuf.DescriptorProtos.FileDescriptorProto element : getFileList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (com.google.protobuf.DescriptorProtos.FileDescriptorProto element : getFileList()) { + output.writeMessage(1, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (com.google.protobuf.DescriptorProtos.FileDescriptorProto element : getFileList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorSet prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private com.google.protobuf.DescriptorProtos.FileDescriptorSet result; + + // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorSet.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new com.google.protobuf.DescriptorProtos.FileDescriptorSet(); + return builder; + } + + @Override + protected com.google.protobuf.DescriptorProtos.FileDescriptorSet internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.google.protobuf.DescriptorProtos.FileDescriptorSet(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDescriptor(); + } + + @Override + public com.google.protobuf.DescriptorProtos.FileDescriptorSet getDefaultInstanceForType() { + return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public com.google.protobuf.DescriptorProtos.FileDescriptorSet build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private com.google.protobuf.DescriptorProtos.FileDescriptorSet buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public com.google.protobuf.DescriptorProtos.FileDescriptorSet buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.file_ != java.util.Collections.EMPTY_LIST) { + result.file_ = + java.util.Collections.unmodifiableList(result.file_); + } + com.google.protobuf.DescriptorProtos.FileDescriptorSet returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorSet) { + return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorSet)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorSet other) { + if (other == com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance()) return this; + if (!other.file_.isEmpty()) { + if (result.file_.isEmpty()) { + result.file_ = new java.util.ArrayList(); + } + result.file_.addAll(other.file_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addFile(subBuilder.buildPartial()); + break; + } + } + } + } + + + // repeated .google.protobuf.FileDescriptorProto file = 1; + public java.util.List getFileList() { + return java.util.Collections.unmodifiableList(result.file_); + } + public int getFileCount() { + return result.getFileCount(); + } + public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) { + return result.getFile(index); + } + public Builder setFile(int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.file_.set(index, value); + return this; + } + public Builder setFile(int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + result.file_.set(index, builderForValue.build()); + return this; + } + public Builder addFile(com.google.protobuf.DescriptorProtos.FileDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.file_.isEmpty()) { + result.file_ = new java.util.ArrayList(); + } + result.file_.add(value); + return this; + } + public Builder addFile(com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + if (result.file_.isEmpty()) { + result.file_ = new java.util.ArrayList(); + } + result.file_.add(builderForValue.build()); + return this; + } + public Builder addAllFile( + java.lang.Iterable values) { + if (result.file_.isEmpty()) { + result.file_ = new java.util.ArrayList(); + } + super.addAll(values, result.file_); + return this; + } + public Builder clearFile() { + result.file_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorSet) + } + + static { + defaultInstance = new FileDescriptorSet(true); + com.google.protobuf.DescriptorProtos.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet) + } + + public static final class FileDescriptorProto extends + com.google.protobuf.GeneratedMessage { + // Use FileDescriptorProto.newBuilder() to construct. + private FileDescriptorProto() { + initFields(); + } + private FileDescriptorProto(boolean noInit) {} + + private static final FileDescriptorProto defaultInstance; + public static FileDescriptorProto getDefaultInstance() { + return defaultInstance; + } + + @Override + public FileDescriptorProto getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable; + } + + // optional string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string package = 2; + public static final int PACKAGE_FIELD_NUMBER = 2; + private boolean hasPackage; + private java.lang.String package_ = ""; + public boolean hasPackage() { return hasPackage; } + public java.lang.String getPackage() { return package_; } + + // repeated string dependency = 3; + public static final int DEPENDENCY_FIELD_NUMBER = 3; + private java.util.List dependency_ = + java.util.Collections.emptyList(); + public java.util.List getDependencyList() { + return dependency_; + } + public int getDependencyCount() { return dependency_.size(); } + public java.lang.String getDependency(int index) { + return dependency_.get(index); + } + + // repeated .google.protobuf.DescriptorProto message_type = 4; + public static final int MESSAGE_TYPE_FIELD_NUMBER = 4; + private java.util.List messageType_ = + java.util.Collections.emptyList(); + public java.util.List getMessageTypeList() { + return messageType_; + } + public int getMessageTypeCount() { return messageType_.size(); } + public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) { + return messageType_.get(index); + } + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + public static final int ENUM_TYPE_FIELD_NUMBER = 5; + private java.util.List enumType_ = + java.util.Collections.emptyList(); + public java.util.List getEnumTypeList() { + return enumType_; + } + public int getEnumTypeCount() { return enumType_.size(); } + public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + return enumType_.get(index); + } + + // repeated .google.protobuf.ServiceDescriptorProto service = 6; + public static final int SERVICE_FIELD_NUMBER = 6; + private java.util.List service_ = + java.util.Collections.emptyList(); + public java.util.List getServiceList() { + return service_; + } + public int getServiceCount() { return service_.size(); } + public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) { + return service_.get(index); + } + + // repeated .google.protobuf.FieldDescriptorProto extension = 7; + public static final int EXTENSION_FIELD_NUMBER = 7; + private java.util.List extension_ = + java.util.Collections.emptyList(); + public java.util.List getExtensionList() { + return extension_; + } + public int getExtensionCount() { return extension_.size(); } + public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + return extension_.get(index); + } + + // optional .google.protobuf.FileOptions options = 8; + public static final int OPTIONS_FIELD_NUMBER = 8; + private boolean hasOptions; + private com.google.protobuf.DescriptorProtos.FileOptions options_; + public boolean hasOptions() { return hasOptions; } + public com.google.protobuf.DescriptorProtos.FileOptions getOptions() { return options_; } + + private void initFields() { + options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + for (com.google.protobuf.DescriptorProtos.DescriptorProto element : getMessageTypeList()) { + if (!element.isInitialized()) return false; + } + for (com.google.protobuf.DescriptorProtos.EnumDescriptorProto element : getEnumTypeList()) { + if (!element.isInitialized()) return false; + } + for (com.google.protobuf.DescriptorProtos.ServiceDescriptorProto element : getServiceList()) { + if (!element.isInitialized()) return false; + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getExtensionList()) { + if (!element.isInitialized()) return false; + } + if (hasOptions()) { + if (!getOptions().isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasPackage()) { + output.writeString(2, getPackage()); + } + for (java.lang.String element : getDependencyList()) { + output.writeString(3, element); + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto element : getMessageTypeList()) { + output.writeMessage(4, element); + } + for (com.google.protobuf.DescriptorProtos.EnumDescriptorProto element : getEnumTypeList()) { + output.writeMessage(5, element); + } + for (com.google.protobuf.DescriptorProtos.ServiceDescriptorProto element : getServiceList()) { + output.writeMessage(6, element); + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getExtensionList()) { + output.writeMessage(7, element); + } + if (hasOptions()) { + output.writeMessage(8, getOptions()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasPackage()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getPackage()); + } + { + int dataSize = 0; + for (java.lang.String element : getDependencyList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeStringSizeNoTag(element); + } + size += dataSize; + size += 1 * getDependencyList().size(); + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto element : getMessageTypeList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, element); + } + for (com.google.protobuf.DescriptorProtos.EnumDescriptorProto element : getEnumTypeList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + for (com.google.protobuf.DescriptorProtos.ServiceDescriptorProto element : getServiceList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getExtensionList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + if (hasOptions()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, getOptions()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorProto prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private com.google.protobuf.DescriptorProtos.FileDescriptorProto result; + + // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new com.google.protobuf.DescriptorProtos.FileDescriptorProto(); + return builder; + } + + @Override + protected com.google.protobuf.DescriptorProtos.FileDescriptorProto internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.google.protobuf.DescriptorProtos.FileDescriptorProto(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDescriptor(); + } + + @Override + public com.google.protobuf.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() { + return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public com.google.protobuf.DescriptorProtos.FileDescriptorProto build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private com.google.protobuf.DescriptorProtos.FileDescriptorProto buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public com.google.protobuf.DescriptorProtos.FileDescriptorProto buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.dependency_ != java.util.Collections.EMPTY_LIST) { + result.dependency_ = + java.util.Collections.unmodifiableList(result.dependency_); + } + if (result.messageType_ != java.util.Collections.EMPTY_LIST) { + result.messageType_ = + java.util.Collections.unmodifiableList(result.messageType_); + } + if (result.enumType_ != java.util.Collections.EMPTY_LIST) { + result.enumType_ = + java.util.Collections.unmodifiableList(result.enumType_); + } + if (result.service_ != java.util.Collections.EMPTY_LIST) { + result.service_ = + java.util.Collections.unmodifiableList(result.service_); + } + if (result.extension_ != java.util.Collections.EMPTY_LIST) { + result.extension_ = + java.util.Collections.unmodifiableList(result.extension_); + } + com.google.protobuf.DescriptorProtos.FileDescriptorProto returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorProto) { + return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorProto)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorProto other) { + if (other == com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasPackage()) { + setPackage(other.getPackage()); + } + if (!other.dependency_.isEmpty()) { + if (result.dependency_.isEmpty()) { + result.dependency_ = new java.util.ArrayList(); + } + result.dependency_.addAll(other.dependency_); + } + if (!other.messageType_.isEmpty()) { + if (result.messageType_.isEmpty()) { + result.messageType_ = new java.util.ArrayList(); + } + result.messageType_.addAll(other.messageType_); + } + if (!other.enumType_.isEmpty()) { + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + result.enumType_.addAll(other.enumType_); + } + if (!other.service_.isEmpty()) { + if (result.service_.isEmpty()) { + result.service_ = new java.util.ArrayList(); + } + result.service_.addAll(other.service_); + } + if (!other.extension_.isEmpty()) { + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + result.extension_.addAll(other.extension_); + } + if (other.hasOptions()) { + mergeOptions(other.getOptions()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + setPackage(input.readString()); + break; + } + case 26: { + addDependency(input.readString()); + break; + } + case 34: { + com.google.protobuf.DescriptorProtos.DescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addMessageType(subBuilder.buildPartial()); + break; + } + case 42: { + com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addEnumType(subBuilder.buildPartial()); + break; + } + case 50: { + com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addService(subBuilder.buildPartial()); + break; + } + case 58: { + com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addExtension(subBuilder.buildPartial()); + break; + } + case 66: { + com.google.protobuf.DescriptorProtos.FileOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.FileOptions.newBuilder(); + if (hasOptions()) { + subBuilder.mergeFrom(getOptions()); + } + input.readMessage(subBuilder, extensionRegistry); + setOptions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string package = 2; + public boolean hasPackage() { + return result.hasPackage(); + } + public java.lang.String getPackage() { + return result.getPackage(); + } + public Builder setPackage(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasPackage = true; + result.package_ = value; + return this; + } + public Builder clearPackage() { + result.hasPackage = false; + result.package_ = getDefaultInstance().getPackage(); + return this; + } + + // repeated string dependency = 3; + public java.util.List getDependencyList() { + return java.util.Collections.unmodifiableList(result.dependency_); + } + public int getDependencyCount() { + return result.getDependencyCount(); + } + public java.lang.String getDependency(int index) { + return result.getDependency(index); + } + public Builder setDependency(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.dependency_.set(index, value); + return this; + } + public Builder addDependency(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.dependency_.isEmpty()) { + result.dependency_ = new java.util.ArrayList(); + } + result.dependency_.add(value); + return this; + } + public Builder addAllDependency( + java.lang.Iterable values) { + if (result.dependency_.isEmpty()) { + result.dependency_ = new java.util.ArrayList(); + } + super.addAll(values, result.dependency_); + return this; + } + public Builder clearDependency() { + result.dependency_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.DescriptorProto message_type = 4; + public java.util.List getMessageTypeList() { + return java.util.Collections.unmodifiableList(result.messageType_); + } + public int getMessageTypeCount() { + return result.getMessageTypeCount(); + } + public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) { + return result.getMessageType(index); + } + public Builder setMessageType(int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.messageType_.set(index, value); + return this; + } + public Builder setMessageType(int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) { + result.messageType_.set(index, builderForValue.build()); + return this; + } + public Builder addMessageType(com.google.protobuf.DescriptorProtos.DescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.messageType_.isEmpty()) { + result.messageType_ = new java.util.ArrayList(); + } + result.messageType_.add(value); + return this; + } + public Builder addMessageType(com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (result.messageType_.isEmpty()) { + result.messageType_ = new java.util.ArrayList(); + } + result.messageType_.add(builderForValue.build()); + return this; + } + public Builder addAllMessageType( + java.lang.Iterable values) { + if (result.messageType_.isEmpty()) { + result.messageType_ = new java.util.ArrayList(); + } + super.addAll(values, result.messageType_); + return this; + } + public Builder clearMessageType() { + result.messageType_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + public java.util.List getEnumTypeList() { + return java.util.Collections.unmodifiableList(result.enumType_); + } + public int getEnumTypeCount() { + return result.getEnumTypeCount(); + } + public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + return result.getEnumType(index); + } + public Builder setEnumType(int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.enumType_.set(index, value); + return this; + } + public Builder setEnumType(int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + result.enumType_.set(index, builderForValue.build()); + return this; + } + public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + result.enumType_.add(value); + return this; + } + public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + result.enumType_.add(builderForValue.build()); + return this; + } + public Builder addAllEnumType( + java.lang.Iterable values) { + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + super.addAll(values, result.enumType_); + return this; + } + public Builder clearEnumType() { + result.enumType_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.ServiceDescriptorProto service = 6; + public java.util.List getServiceList() { + return java.util.Collections.unmodifiableList(result.service_); + } + public int getServiceCount() { + return result.getServiceCount(); + } + public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) { + return result.getService(index); + } + public Builder setService(int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.service_.set(index, value); + return this; + } + public Builder setService(int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + result.service_.set(index, builderForValue.build()); + return this; + } + public Builder addService(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.service_.isEmpty()) { + result.service_ = new java.util.ArrayList(); + } + result.service_.add(value); + return this; + } + public Builder addService(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + if (result.service_.isEmpty()) { + result.service_ = new java.util.ArrayList(); + } + result.service_.add(builderForValue.build()); + return this; + } + public Builder addAllService( + java.lang.Iterable values) { + if (result.service_.isEmpty()) { + result.service_ = new java.util.ArrayList(); + } + super.addAll(values, result.service_); + return this; + } + public Builder clearService() { + result.service_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.FieldDescriptorProto extension = 7; + public java.util.List getExtensionList() { + return java.util.Collections.unmodifiableList(result.extension_); + } + public int getExtensionCount() { + return result.getExtensionCount(); + } + public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + return result.getExtension(index); + } + public Builder setExtension(int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.extension_.set(index, value); + return this; + } + public Builder setExtension(int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + result.extension_.set(index, builderForValue.build()); + return this; + } + public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + result.extension_.add(value); + return this; + } + public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + result.extension_.add(builderForValue.build()); + return this; + } + public Builder addAllExtension( + java.lang.Iterable values) { + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + super.addAll(values, result.extension_); + return this; + } + public Builder clearExtension() { + result.extension_ = java.util.Collections.emptyList(); + return this; + } + + // optional .google.protobuf.FileOptions options = 8; + public boolean hasOptions() { + return result.hasOptions(); + } + public com.google.protobuf.DescriptorProtos.FileOptions getOptions() { + return result.getOptions(); + } + public Builder setOptions(com.google.protobuf.DescriptorProtos.FileOptions value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder setOptions(com.google.protobuf.DescriptorProtos.FileOptions.Builder builderForValue) { + result.hasOptions = true; + result.options_ = builderForValue.build(); + return this; + } + public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FileOptions value) { + if (result.hasOptions() && + result.options_ != com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) { + result.options_ = + com.google.protobuf.DescriptorProtos.FileOptions.newBuilder(result.options_).mergeFrom(value).buildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder clearOptions() { + result.hasOptions = false; + result.options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorProto) + } + + static { + defaultInstance = new FileDescriptorProto(true); + com.google.protobuf.DescriptorProtos.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto) + } + + public static final class DescriptorProto extends + com.google.protobuf.GeneratedMessage { + // Use DescriptorProto.newBuilder() to construct. + private DescriptorProto() { + initFields(); + } + private DescriptorProto(boolean noInit) {} + + private static final DescriptorProto defaultInstance; + public static DescriptorProto getDefaultInstance() { + return defaultInstance; + } + + @Override + public DescriptorProto getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable; + } + + public static final class ExtensionRange extends + com.google.protobuf.GeneratedMessage { + // Use ExtensionRange.newBuilder() to construct. + private ExtensionRange() { + initFields(); + } + private ExtensionRange(boolean noInit) {} + + private static final ExtensionRange defaultInstance; + public static ExtensionRange getDefaultInstance() { + return defaultInstance; + } + + @Override + public ExtensionRange getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable; + } + + // optional int32 start = 1; + public static final int START_FIELD_NUMBER = 1; + private boolean hasStart; + private int start_ = 0; + public boolean hasStart() { return hasStart; } + public int getStart() { return start_; } + + // optional int32 end = 2; + public static final int END_FIELD_NUMBER = 2; + private boolean hasEnd; + private int end_ = 0; + public boolean hasEnd() { return hasEnd; } + public int getEnd() { return end_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasStart()) { + output.writeInt32(1, getStart()); + } + if (hasEnd()) { + output.writeInt32(2, getEnd()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasStart()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getStart()); + } + if (hasEnd()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, getEnd()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result; + + // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange(); + return builder; + } + + @Override + protected com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDescriptor(); + } + + @Override + public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstanceForType() { + return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange) { + return mergeFrom((com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange other) { + if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()) return this; + if (other.hasStart()) { + setStart(other.getStart()); + } + if (other.hasEnd()) { + setEnd(other.getEnd()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setStart(input.readInt32()); + break; + } + case 16: { + setEnd(input.readInt32()); + break; + } + } + } + } + + + // optional int32 start = 1; + public boolean hasStart() { + return result.hasStart(); + } + public int getStart() { + return result.getStart(); + } + public Builder setStart(int value) { + result.hasStart = true; + result.start_ = value; + return this; + } + public Builder clearStart() { + result.hasStart = false; + result.start_ = 0; + return this; + } + + // optional int32 end = 2; + public boolean hasEnd() { + return result.hasEnd(); + } + public int getEnd() { + return result.getEnd(); + } + public Builder setEnd(int value) { + result.hasEnd = true; + result.end_ = value; + return this; + } + public Builder clearEnd() { + result.hasEnd = false; + result.end_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto.ExtensionRange) + } + + static { + defaultInstance = new ExtensionRange(true); + com.google.protobuf.DescriptorProtos.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange) + } + + // optional string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated .google.protobuf.FieldDescriptorProto field = 2; + public static final int FIELD_FIELD_NUMBER = 2; + private java.util.List field_ = + java.util.Collections.emptyList(); + public java.util.List getFieldList() { + return field_; + } + public int getFieldCount() { return field_.size(); } + public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) { + return field_.get(index); + } + + // repeated .google.protobuf.FieldDescriptorProto extension = 6; + public static final int EXTENSION_FIELD_NUMBER = 6; + private java.util.List extension_ = + java.util.Collections.emptyList(); + public java.util.List getExtensionList() { + return extension_; + } + public int getExtensionCount() { return extension_.size(); } + public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + return extension_.get(index); + } + + // repeated .google.protobuf.DescriptorProto nested_type = 3; + public static final int NESTED_TYPE_FIELD_NUMBER = 3; + private java.util.List nestedType_ = + java.util.Collections.emptyList(); + public java.util.List getNestedTypeList() { + return nestedType_; + } + public int getNestedTypeCount() { return nestedType_.size(); } + public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) { + return nestedType_.get(index); + } + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + public static final int ENUM_TYPE_FIELD_NUMBER = 4; + private java.util.List enumType_ = + java.util.Collections.emptyList(); + public java.util.List getEnumTypeList() { + return enumType_; + } + public int getEnumTypeCount() { return enumType_.size(); } + public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + return enumType_.get(index); + } + + // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + public static final int EXTENSION_RANGE_FIELD_NUMBER = 5; + private java.util.List extensionRange_ = + java.util.Collections.emptyList(); + public java.util.List getExtensionRangeList() { + return extensionRange_; + } + public int getExtensionRangeCount() { return extensionRange_.size(); } + public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) { + return extensionRange_.get(index); + } + + // optional .google.protobuf.MessageOptions options = 7; + public static final int OPTIONS_FIELD_NUMBER = 7; + private boolean hasOptions; + private com.google.protobuf.DescriptorProtos.MessageOptions options_; + public boolean hasOptions() { return hasOptions; } + public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() { return options_; } + + private void initFields() { + options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getFieldList()) { + if (!element.isInitialized()) return false; + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getExtensionList()) { + if (!element.isInitialized()) return false; + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto element : getNestedTypeList()) { + if (!element.isInitialized()) return false; + } + for (com.google.protobuf.DescriptorProtos.EnumDescriptorProto element : getEnumTypeList()) { + if (!element.isInitialized()) return false; + } + if (hasOptions()) { + if (!getOptions().isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getFieldList()) { + output.writeMessage(2, element); + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto element : getNestedTypeList()) { + output.writeMessage(3, element); + } + for (com.google.protobuf.DescriptorProtos.EnumDescriptorProto element : getEnumTypeList()) { + output.writeMessage(4, element); + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange element : getExtensionRangeList()) { + output.writeMessage(5, element); + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getExtensionList()) { + output.writeMessage(6, element); + } + if (hasOptions()) { + output.writeMessage(7, getOptions()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getFieldList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, element); + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto element : getNestedTypeList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, element); + } + for (com.google.protobuf.DescriptorProtos.EnumDescriptorProto element : getEnumTypeList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, element); + } + for (com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange element : getExtensionRangeList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + for (com.google.protobuf.DescriptorProtos.FieldDescriptorProto element : getExtensionList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + if (hasOptions()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, getOptions()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.google.protobuf.DescriptorProtos.DescriptorProto prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private com.google.protobuf.DescriptorProtos.DescriptorProto result; + + // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new com.google.protobuf.DescriptorProtos.DescriptorProto(); + return builder; + } + + @Override + protected com.google.protobuf.DescriptorProtos.DescriptorProto internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.google.protobuf.DescriptorProtos.DescriptorProto(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.google.protobuf.DescriptorProtos.DescriptorProto.getDescriptor(); + } + + @Override + public com.google.protobuf.DescriptorProtos.DescriptorProto getDefaultInstanceForType() { + return com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public com.google.protobuf.DescriptorProtos.DescriptorProto build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private com.google.protobuf.DescriptorProtos.DescriptorProto buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public com.google.protobuf.DescriptorProtos.DescriptorProto buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.field_ != java.util.Collections.EMPTY_LIST) { + result.field_ = + java.util.Collections.unmodifiableList(result.field_); + } + if (result.extension_ != java.util.Collections.EMPTY_LIST) { + result.extension_ = + java.util.Collections.unmodifiableList(result.extension_); + } + if (result.nestedType_ != java.util.Collections.EMPTY_LIST) { + result.nestedType_ = + java.util.Collections.unmodifiableList(result.nestedType_); + } + if (result.enumType_ != java.util.Collections.EMPTY_LIST) { + result.enumType_ = + java.util.Collections.unmodifiableList(result.enumType_); + } + if (result.extensionRange_ != java.util.Collections.EMPTY_LIST) { + result.extensionRange_ = + java.util.Collections.unmodifiableList(result.extensionRange_); + } + com.google.protobuf.DescriptorProtos.DescriptorProto returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto) { + return mergeFrom((com.google.protobuf.DescriptorProtos.DescriptorProto)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto other) { + if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (!other.field_.isEmpty()) { + if (result.field_.isEmpty()) { + result.field_ = new java.util.ArrayList(); + } + result.field_.addAll(other.field_); + } + if (!other.extension_.isEmpty()) { + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + result.extension_.addAll(other.extension_); + } + if (!other.nestedType_.isEmpty()) { + if (result.nestedType_.isEmpty()) { + result.nestedType_ = new java.util.ArrayList(); + } + result.nestedType_.addAll(other.nestedType_); + } + if (!other.enumType_.isEmpty()) { + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + result.enumType_.addAll(other.enumType_); + } + if (!other.extensionRange_.isEmpty()) { + if (result.extensionRange_.isEmpty()) { + result.extensionRange_ = new java.util.ArrayList(); + } + result.extensionRange_.addAll(other.extensionRange_); + } + if (other.hasOptions()) { + mergeOptions(other.getOptions()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addField(subBuilder.buildPartial()); + break; + } + case 26: { + com.google.protobuf.DescriptorProtos.DescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addNestedType(subBuilder.buildPartial()); + break; + } + case 34: { + com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addEnumType(subBuilder.buildPartial()); + break; + } + case 42: { + com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addExtensionRange(subBuilder.buildPartial()); + break; + } + case 50: { + com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addExtension(subBuilder.buildPartial()); + break; + } + case 58: { + com.google.protobuf.DescriptorProtos.MessageOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder(); + if (hasOptions()) { + subBuilder.mergeFrom(getOptions()); + } + input.readMessage(subBuilder, extensionRegistry); + setOptions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated .google.protobuf.FieldDescriptorProto field = 2; + public java.util.List getFieldList() { + return java.util.Collections.unmodifiableList(result.field_); + } + public int getFieldCount() { + return result.getFieldCount(); + } + public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) { + return result.getField(index); + } + public Builder setField(int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.field_.set(index, value); + return this; + } + public Builder setField(int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + result.field_.set(index, builderForValue.build()); + return this; + } + public Builder addField(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.field_.isEmpty()) { + result.field_ = new java.util.ArrayList(); + } + result.field_.add(value); + return this; + } + public Builder addField(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (result.field_.isEmpty()) { + result.field_ = new java.util.ArrayList(); + } + result.field_.add(builderForValue.build()); + return this; + } + public Builder addAllField( + java.lang.Iterable values) { + if (result.field_.isEmpty()) { + result.field_ = new java.util.ArrayList(); + } + super.addAll(values, result.field_); + return this; + } + public Builder clearField() { + result.field_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.FieldDescriptorProto extension = 6; + public java.util.List getExtensionList() { + return java.util.Collections.unmodifiableList(result.extension_); + } + public int getExtensionCount() { + return result.getExtensionCount(); + } + public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + return result.getExtension(index); + } + public Builder setExtension(int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.extension_.set(index, value); + return this; + } + public Builder setExtension(int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + result.extension_.set(index, builderForValue.build()); + return this; + } + public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + result.extension_.add(value); + return this; + } + public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + result.extension_.add(builderForValue.build()); + return this; + } + public Builder addAllExtension( + java.lang.Iterable values) { + if (result.extension_.isEmpty()) { + result.extension_ = new java.util.ArrayList(); + } + super.addAll(values, result.extension_); + return this; + } + public Builder clearExtension() { + result.extension_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.DescriptorProto nested_type = 3; + public java.util.List getNestedTypeList() { + return java.util.Collections.unmodifiableList(result.nestedType_); + } + public int getNestedTypeCount() { + return result.getNestedTypeCount(); + } + public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) { + return result.getNestedType(index); + } + public Builder setNestedType(int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.nestedType_.set(index, value); + return this; + } + public Builder setNestedType(int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) { + result.nestedType_.set(index, builderForValue.build()); + return this; + } + public Builder addNestedType(com.google.protobuf.DescriptorProtos.DescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.nestedType_.isEmpty()) { + result.nestedType_ = new java.util.ArrayList(); + } + result.nestedType_.add(value); + return this; + } + public Builder addNestedType(com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (result.nestedType_.isEmpty()) { + result.nestedType_ = new java.util.ArrayList(); + } + result.nestedType_.add(builderForValue.build()); + return this; + } + public Builder addAllNestedType( + java.lang.Iterable values) { + if (result.nestedType_.isEmpty()) { + result.nestedType_ = new java.util.ArrayList(); + } + super.addAll(values, result.nestedType_); + return this; + } + public Builder clearNestedType() { + result.nestedType_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + public java.util.List getEnumTypeList() { + return java.util.Collections.unmodifiableList(result.enumType_); + } + public int getEnumTypeCount() { + return result.getEnumTypeCount(); + } + public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + return result.getEnumType(index); + } + public Builder setEnumType(int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + result.enumType_.set(index, value); + return this; + } + public Builder setEnumType(int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + result.enumType_.set(index, builderForValue.build()); + return this; + } + public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + result.enumType_.add(value); + return this; + } + public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + result.enumType_.add(builderForValue.build()); + return this; + } + public Builder addAllEnumType( + java.lang.Iterable values) { + if (result.enumType_.isEmpty()) { + result.enumType_ = new java.util.ArrayList(); + } + super.addAll(values, result.enumType_); + return this; + } + public Builder clearEnumType() { + result.enumType_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + public java.util.List getExtensionRangeList() { + return java.util.Collections.unmodifiableList(result.extensionRange_); + } + public int getExtensionRangeCount() { + return result.getExtensionRangeCount(); + } + public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) { + return result.getExtensionRange(index); + } + public Builder setExtensionRange(int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) { + if (value == null) { + throw new NullPointerException(); + } + result.extensionRange_.set(index, value); + return this; + } + public Builder setExtensionRange(int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) { + result.extensionRange_.set(index, builderForValue.build()); + return this; + } + public Builder addExtensionRange(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.extensionRange_.isEmpty()) { + result.extensionRange_ = new java.util.ArrayList(); + } + result.extensionRange_.add(value); + return this; + } + public Builder addExtensionRange(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) { + if (result.extensionRange_.isEmpty()) { + result.extensionRange_ = new java.util.ArrayList(); + } + result.extensionRange_.add(builderForValue.build()); + return this; + } + public Builder addAllExtensionRange( + java.lang.Iterable values) { + if (result.extensionRange_.isEmpty()) { + result.extensionRange_ = new java.util.ArrayList(); + } + super.addAll(values, result.extensionRange_); + return this; + } + public Builder clearExtensionRange() { + result.extensionRange_ = java.util.Collections.emptyList(); + return this; + } + + // optional .google.protobuf.MessageOptions options = 7; + public boolean hasOptions() { + return result.hasOptions(); + } + public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() { + return result.getOptions(); + } + public Builder setOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder setOptions(com.google.protobuf.DescriptorProtos.MessageOptions.Builder builderForValue) { + result.hasOptions = true; + result.options_ = builderForValue.build(); + return this; + } + public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) { + if (result.hasOptions() && + result.options_ != com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) { + result.options_ = + com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder(result.options_).mergeFrom(value).buildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder clearOptions() { + result.hasOptions = false; + result.options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto) + } + + static { + defaultInstance = new DescriptorProto(true); + com.google.protobuf.DescriptorProtos.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto) + } + + public static final class FieldDescriptorProto extends + com.google.protobuf.GeneratedMessage { + // Use FieldDescriptorProto.newBuilder() to construct. + private FieldDescriptorProto() { + initFields(); + } + private FieldDescriptorProto(boolean noInit) {} + + private static final FieldDescriptorProto defaultInstance; + public static FieldDescriptorProto getDefaultInstance() { + return defaultInstance; + } + + @Override + public FieldDescriptorProto getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable; + } + + public enum Type + implements com.google.protobuf.ProtocolMessageEnum { + TYPE_DOUBLE(0, 1), + TYPE_FLOAT(1, 2), + TYPE_INT64(2, 3), + TYPE_UINT64(3, 4), + TYPE_INT32(4, 5), + TYPE_FIXED64(5, 6), + TYPE_FIXED32(6, 7), + TYPE_BOOL(7, 8), + TYPE_STRING(8, 9), + TYPE_GROUP(9, 10), + TYPE_MESSAGE(10, 11), + TYPE_BYTES(11, 12), + TYPE_UINT32(12, 13), + TYPE_ENUM(13, 14), + TYPE_SFIXED32(14, 15), + TYPE_SFIXED64(15, 16), + TYPE_SINT32(16, 17), + TYPE_SINT64(17, 18), + ; + + + @Override + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return TYPE_DOUBLE; + case 2: return TYPE_FLOAT; + case 3: return TYPE_INT64; + case 4: return TYPE_UINT64; + case 5: return TYPE_INT32; + case 6: return TYPE_FIXED64; + case 7: return TYPE_FIXED32; + case 8: return TYPE_BOOL; + case 9: return TYPE_STRING; + case 10: return TYPE_GROUP; + case 11: return TYPE_MESSAGE; + case 12: return TYPE_BYTES; + case 13: return TYPE_UINT32; + case 14: return TYPE_ENUM; + case 15: return TYPE_SFIXED32; + case 16: return TYPE_SFIXED64; + case 17: return TYPE_SINT32; + case 18: return TYPE_SINT64; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + @Override + public Type findValueByNumber(int number) { + return Type.valueOf(number) + ; } + }; + + @Override + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + @Override + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(0); + } + + private static final Type[] VALUES = { + TYPE_DOUBLE, TYPE_FLOAT, TYPE_INT64, TYPE_UINT64, TYPE_INT32, TYPE_FIXED64, TYPE_FIXED32, TYPE_BOOL, TYPE_STRING, TYPE_GROUP, TYPE_MESSAGE, TYPE_BYTES, TYPE_UINT32, TYPE_ENUM, TYPE_SFIXED32, TYPE_SFIXED64, TYPE_SINT32, TYPE_SINT64, + }; + public static Type valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + private final int index; + private final int value; + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + static { + com.google.protobuf.DescriptorProtos.getDescriptor(); + } + + // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Type) + } + + public enum Label + implements com.google.protobuf.ProtocolMessageEnum { + LABEL_OPTIONAL(0, 1), + LABEL_REQUIRED(1, 2), + LABEL_REPEATED(2, 3), + ; + + + @Override + public final int getNumber() { return value; } + + public static Label valueOf(int value) { + switch (value) { + case 1: return LABEL_OPTIONAL; + case 2: return LABEL_REQUIRED; + case 3: return LABEL_REPEATED; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap

    +     *   for all i in [0, file.getMessageTypeCount()):
    +     *     file.getMessageType(i).getIndex() == i
    +     * 
    + * Similarly, for a {@link Descriptor} {@code messageType}: + *
    +     *   for all i in [0, messageType.getNestedTypeCount()):
    +     *     messageType.getNestedType(i).getIndex() == i
    +     * 
    + */ + public int getIndex() { return index; } + + /** Convert the descriptor to its protocol message representation. */ + @Override + public DescriptorProto toProto() { return proto; } + + /** Get the type's unqualified name. */ + @Override + public String getName() { return proto.getName(); } + + /** + * Get the type's fully-qualified name, within the proto language's + * namespace. This differs from the Java name. For example, given this + * {@code .proto}: + *
    +     *   package foo.bar;
    +     *   option java_package = "com.example.protos"
    +     *   message Baz {}
    +     * 
    + * {@code Baz}'s full name is "foo.bar.Baz". + */ + @Override + public String getFullName() { return fullName; } + + /** Get the {@link FileDescriptor} containing this descriptor. */ + @Override + public FileDescriptor getFile() { return file; } + + /** If this is a nested type, get the outer descriptor, otherwise null. */ + public Descriptor getContainingType() { return containingType; } + + /** Get the {@code MessageOptions}, defined in {@code descriptor.proto}. */ + public MessageOptions getOptions() { return proto.getOptions(); } + + /** Get a list of this message type's fields. */ + public List getFields() { + return Collections.unmodifiableList(Arrays.asList(fields)); + } + + /** Get a list of this message type's extensions. */ + public List getExtensions() { + return Collections.unmodifiableList(Arrays.asList(extensions)); + } + + /** Get a list of message types nested within this one. */ + public List getNestedTypes() { + return Collections.unmodifiableList(Arrays.asList(nestedTypes)); + } + + /** Get a list of enum types nested within this one. */ + public List getEnumTypes() { + return Collections.unmodifiableList(Arrays.asList(enumTypes)); + } + + /** Determines if the given field number is an extension. */ + public boolean isExtensionNumber(final int number) { + for (final DescriptorProto.ExtensionRange range : + proto.getExtensionRangeList()) { + if (range.getStart() <= number && number < range.getEnd()) { + return true; + } + } + return false; + } + + /** + * Finds a field by name. + * @param name The unqualified name of the field (e.g. "foo"). + * @return The field's descriptor, or {@code null} if not found. + */ + public FieldDescriptor findFieldByName(final String name) { + final GenericDescriptor result = + file.pool.findSymbol(fullName + '.' + name); + if (result != null && result instanceof FieldDescriptor) { + return (FieldDescriptor)result; + } else { + return null; + } + } + + /** + * Finds a field by field number. + * @param number The field number within this message type. + * @return The field's descriptor, or {@code null} if not found. + */ + public FieldDescriptor findFieldByNumber(final int number) { + return file.pool.fieldsByNumber.get( + new DescriptorPool.DescriptorIntPair(this, number)); + } + + /** + * Finds a nested message type by name. + * @param name The unqualified name of the nested type (e.g. "Foo"). + * @return The types's descriptor, or {@code null} if not found. + */ + public Descriptor findNestedTypeByName(final String name) { + final GenericDescriptor result = + file.pool.findSymbol(fullName + '.' + name); + if (result != null && result instanceof Descriptor) { + return (Descriptor)result; + } else { + return null; + } + } + + /** + * Finds a nested enum type by name. + * @param name The unqualified name of the nested type (e.g. "Foo"). + * @return The types's descriptor, or {@code null} if not found. + */ + public EnumDescriptor findEnumTypeByName(final String name) { + final GenericDescriptor result = + file.pool.findSymbol(fullName + '.' + name); + if (result != null && result instanceof EnumDescriptor) { + return (EnumDescriptor)result; + } else { + return null; + } + } + + private final int index; + private DescriptorProto proto; + private final String fullName; + private final FileDescriptor file; + private final Descriptor containingType; + private final Descriptor[] nestedTypes; + private final EnumDescriptor[] enumTypes; + private final FieldDescriptor[] fields; + private final FieldDescriptor[] extensions; + + private Descriptor(final DescriptorProto proto, + final FileDescriptor file, + final Descriptor parent, + final int index) + throws DescriptorValidationException { + this.index = index; + this.proto = proto; + fullName = computeFullName(file, parent, proto.getName()); + this.file = file; + containingType = parent; + + nestedTypes = new Descriptor[proto.getNestedTypeCount()]; + for (int i = 0; i < proto.getNestedTypeCount(); i++) { + nestedTypes[i] = new Descriptor( + proto.getNestedType(i), file, this, i); + } + + enumTypes = new EnumDescriptor[proto.getEnumTypeCount()]; + for (int i = 0; i < proto.getEnumTypeCount(); i++) { + enumTypes[i] = new EnumDescriptor( + proto.getEnumType(i), file, this, i); + } + + fields = new FieldDescriptor[proto.getFieldCount()]; + for (int i = 0; i < proto.getFieldCount(); i++) { + fields[i] = new FieldDescriptor( + proto.getField(i), file, this, i, false); + } + + extensions = new FieldDescriptor[proto.getExtensionCount()]; + for (int i = 0; i < proto.getExtensionCount(); i++) { + extensions[i] = new FieldDescriptor( + proto.getExtension(i), file, this, i, true); + } + + file.pool.addSymbol(this); + } + + /** Look up and cross-link all field types, etc. */ + private void crossLink() throws DescriptorValidationException { + for (final Descriptor nestedType : nestedTypes) { + nestedType.crossLink(); + } + + for (final FieldDescriptor field : fields) { + field.crossLink(); + } + + for (final FieldDescriptor extension : extensions) { + extension.crossLink(); + } + } + + /** See {@link FileDescriptor#setProto}. */ + private void setProto(final DescriptorProto proto) { + this.proto = proto; + + for (int i = 0; i < nestedTypes.length; i++) { + nestedTypes[i].setProto(proto.getNestedType(i)); + } + + for (int i = 0; i < enumTypes.length; i++) { + enumTypes[i].setProto(proto.getEnumType(i)); + } + + for (int i = 0; i < fields.length; i++) { + fields[i].setProto(proto.getField(i)); + } + + for (int i = 0; i < extensions.length; i++) { + extensions[i].setProto(proto.getExtension(i)); + } + } + } + + // ================================================================= + + /** Describes a field of a message type. */ + public static final class FieldDescriptor + implements GenericDescriptor, Comparable, + FieldSet.FieldDescriptorLite { + /** + * Get the index of this descriptor within its parent. + * @see Descriptor#getIndex() + */ + public int getIndex() { return index; } + + /** Convert the descriptor to its protocol message representation. */ + @Override + public FieldDescriptorProto toProto() { return proto; } + + /** Get the field's unqualified name. */ + @Override + public String getName() { return proto.getName(); } + + /** Get the field's number. */ + @Override + public int getNumber() { return proto.getNumber(); } + + /** + * Get the field's fully-qualified name. + * @see Descriptor#getFullName() + */ + @Override + public String getFullName() { return fullName; } + + /** + * Get the field's java type. This is just for convenience. Every + * {@code FieldDescriptorProto.Type} maps to exactly one Java type. + */ + public JavaType getJavaType() { return type.getJavaType(); } + + /** For internal use only. */ + @Override + public WireFormat.JavaType getLiteJavaType() { + return getLiteType().getJavaType(); + } + + /** Get the {@code FileDescriptor} containing this descriptor. */ + @Override + public FileDescriptor getFile() { return file; } + + /** Get the field's declared type. */ + public Type getType() { return type; } + + /** For internal use only. */ + @Override + public WireFormat.FieldType getLiteType() { + return table[type.ordinal()]; + } + // I'm pretty sure values() constructs a new array every time, since there + // is nothing stopping the caller from mutating the array. Therefore we + // make a static copy here. + private static final WireFormat.FieldType[] table = + WireFormat.FieldType.values(); + + /** Is this field declared required? */ + public boolean isRequired() { + return proto.getLabel() == FieldDescriptorProto.Label.LABEL_REQUIRED; + } + + /** Is this field declared optional? */ + public boolean isOptional() { + return proto.getLabel() == FieldDescriptorProto.Label.LABEL_OPTIONAL; + } + + /** Is this field declared repeated? */ + @Override + public boolean isRepeated() { + return proto.getLabel() == FieldDescriptorProto.Label.LABEL_REPEATED; + } + + /** Does this field have the {@code [packed = true]} option? */ + @Override + public boolean isPacked() { + return getOptions().getPacked(); + } + + /** Can this field be packed? i.e. is it a repeated primitive field? */ + public boolean isPackable() { + return isRepeated() && getLiteType().isPackable(); + } + + /** Returns true if the field had an explicitly-defined default value. */ + public boolean hasDefaultValue() { return proto.hasDefaultValue(); } + + /** + * Returns the field's default value. Valid for all types except for + * messages and groups. For all other types, the object returned is of + * the same class that would returned by Message.getField(this). + */ + public Object getDefaultValue() { + if (getJavaType() == JavaType.MESSAGE) { + throw new UnsupportedOperationException( + "FieldDescriptor.getDefaultValue() called on an embedded message " + + "field."); + } + return defaultValue; + } + + /** Get the {@code FieldOptions}, defined in {@code descriptor.proto}. */ + public FieldOptions getOptions() { return proto.getOptions(); } + + /** Is this field an extension? */ + public boolean isExtension() { return proto.hasExtendee(); } + + /** + * Get the field's containing type. For extensions, this is the type being + * extended, not the location where the extension was defined. See + * {@link #getExtensionScope()}. + */ + public Descriptor getContainingType() { return containingType; } + + /** + * For extensions defined nested within message types, gets the outer + * type. Not valid for non-extension fields. For example, consider + * this {@code .proto} file: + *
    +     *   message Foo {
    +     *     extensions 1000 to max;
    +     *   }
    +     *   extend Foo {
    +     *     optional int32 baz = 1234;
    +     *   }
    +     *   message Bar {
    +     *     extend Foo {
    +     *       optional int32 qux = 4321;
    +     *     }
    +     *   }
    +     * 
    + * Both {@code baz}'s and {@code qux}'s containing type is {@code Foo}. + * However, {@code baz}'s extension scope is {@code null} while + * {@code qux}'s extension scope is {@code Bar}. + */ + public Descriptor getExtensionScope() { + if (!isExtension()) { + throw new UnsupportedOperationException( + "This field is not an extension."); + } + return extensionScope; + } + + /** For embedded message and group fields, gets the field's type. */ + public Descriptor getMessageType() { + if (getJavaType() != JavaType.MESSAGE) { + throw new UnsupportedOperationException( + "This field is not of message type."); + } + return messageType; + } + + /** For enum fields, gets the field's type. */ + @Override + public EnumDescriptor getEnumType() { + if (getJavaType() != JavaType.ENUM) { + throw new UnsupportedOperationException( + "This field is not of enum type."); + } + return enumType; + } + + /** + * Compare with another {@code FieldDescriptor}. This orders fields in + * "canonical" order, which simply means ascending order by field number. + * {@code other} must be a field of the same type -- i.e. + * {@code getContainingType()} must return the same {@code Descriptor} for + * both fields. + * + * @return negative, zero, or positive if {@code this} is less than, + * equal to, or greater than {@code other}, respectively. + */ + @Override + public int compareTo(final FieldDescriptor other) { + if (other.containingType != containingType) { + throw new IllegalArgumentException( + "FieldDescriptors can only be compared to other FieldDescriptors " + + "for fields of the same message type."); + } + return getNumber() - other.getNumber(); + } + + private final int index; + + private FieldDescriptorProto proto; + private final String fullName; + private final FileDescriptor file; + private final Descriptor extensionScope; + + // Possibly initialized during cross-linking. + private Type type; + private Descriptor containingType; + private Descriptor messageType; + private EnumDescriptor enumType; + private Object defaultValue; + + public enum Type { + DOUBLE (JavaType.DOUBLE ), + FLOAT (JavaType.FLOAT ), + INT64 (JavaType.LONG ), + UINT64 (JavaType.LONG ), + INT32 (JavaType.INT ), + FIXED64 (JavaType.LONG ), + FIXED32 (JavaType.INT ), + BOOL (JavaType.BOOLEAN ), + STRING (JavaType.STRING ), + GROUP (JavaType.MESSAGE ), + MESSAGE (JavaType.MESSAGE ), + BYTES (JavaType.BYTE_STRING), + UINT32 (JavaType.INT ), + ENUM (JavaType.ENUM ), + SFIXED32(JavaType.INT ), + SFIXED64(JavaType.LONG ), + SINT32 (JavaType.INT ), + SINT64 (JavaType.LONG ); + + Type(final JavaType javaType) { + this.javaType = javaType; + } + + private JavaType javaType; + + public FieldDescriptorProto.Type toProto() { + return FieldDescriptorProto.Type.valueOf(ordinal() + 1); + } + public JavaType getJavaType() { return javaType; } + + public static Type valueOf(final FieldDescriptorProto.Type type) { + return values()[type.getNumber() - 1]; + } + } + + static { + // Refuse to init if someone added a new declared type. + if (Type.values().length != FieldDescriptorProto.Type.values().length) { + throw new RuntimeException( + "descriptor.proto has a new declared type but Desrciptors.java " + + "wasn't updated."); + } + } + + public enum JavaType { + INT(0), + LONG(0L), + FLOAT(0F), + DOUBLE(0D), + BOOLEAN(false), + STRING(""), + BYTE_STRING(ByteString.EMPTY), + ENUM(null), + MESSAGE(null); + + JavaType(final Object defaultDefault) { + this.defaultDefault = defaultDefault; + } + + /** + * The default default value for fields of this type, if it's a primitive + * type. This is meant for use inside this file only, hence is private. + */ + private final Object defaultDefault; + } + + private FieldDescriptor(final FieldDescriptorProto proto, + final FileDescriptor file, + final Descriptor parent, + final int index, + final boolean isExtension) + throws DescriptorValidationException { + this.index = index; + this.proto = proto; + fullName = computeFullName(file, parent, proto.getName()); + this.file = file; + + if (proto.hasType()) { + type = Type.valueOf(proto.getType()); + } + + if (getNumber() <= 0) { + throw new DescriptorValidationException(this, + "Field numbers must be positive integers."); + } + + // Only repeated primitive fields may be packed. + if (proto.getOptions().getPacked() && !isPackable()) { + throw new DescriptorValidationException(this, + "[packed = true] can only be specified for repeated primitive " + + "fields."); + } + + if (isExtension) { + if (!proto.hasExtendee()) { + throw new DescriptorValidationException(this, + "FieldDescriptorProto.extendee not set for extension field."); + } + containingType = null; // Will be filled in when cross-linking + if (parent != null) { + extensionScope = parent; + } else { + extensionScope = null; + } + } else { + if (proto.hasExtendee()) { + throw new DescriptorValidationException(this, + "FieldDescriptorProto.extendee set for non-extension field."); + } + containingType = parent; + extensionScope = null; + } + + file.pool.addSymbol(this); + } + + /** Look up and cross-link all field types, etc. */ + private void crossLink() throws DescriptorValidationException { + if (proto.hasExtendee()) { + final GenericDescriptor extendee = + file.pool.lookupSymbol(proto.getExtendee(), this); + if (!(extendee instanceof Descriptor)) { + throw new DescriptorValidationException(this, + '\"' + proto.getExtendee() + "\" is not a message type."); + } + containingType = (Descriptor)extendee; + + if (!getContainingType().isExtensionNumber(getNumber())) { + throw new DescriptorValidationException(this, + '\"' + getContainingType().getFullName() + + "\" does not declare " + getNumber() + + " as an extension number."); + } + } + + if (proto.hasTypeName()) { + final GenericDescriptor typeDescriptor = + file.pool.lookupSymbol(proto.getTypeName(), this); + + if (!proto.hasType()) { + // Choose field type based on symbol. + if (typeDescriptor instanceof Descriptor) { + type = Type.MESSAGE; + } else if (typeDescriptor instanceof EnumDescriptor) { + type = Type.ENUM; + } else { + throw new DescriptorValidationException(this, + '\"' + proto.getTypeName() + "\" is not a type."); + } + } + + if (getJavaType() == JavaType.MESSAGE) { + if (!(typeDescriptor instanceof Descriptor)) { + throw new DescriptorValidationException(this, + '\"' + proto.getTypeName() + "\" is not a message type."); + } + messageType = (Descriptor)typeDescriptor; + + if (proto.hasDefaultValue()) { + throw new DescriptorValidationException(this, + "Messages can't have default values."); + } + } else if (getJavaType() == JavaType.ENUM) { + if (!(typeDescriptor instanceof EnumDescriptor)) { + throw new DescriptorValidationException(this, + '\"' + proto.getTypeName() + "\" is not an enum type."); + } + enumType = (EnumDescriptor)typeDescriptor; + } else { + throw new DescriptorValidationException(this, + "Field with primitive type has type_name."); + } + } else { + if (getJavaType() == JavaType.MESSAGE || + getJavaType() == JavaType.ENUM) { + throw new DescriptorValidationException(this, + "Field with message or enum type missing type_name."); + } + } + + // We don't attempt to parse the default value until here because for + // enums we need the enum type's descriptor. + if (proto.hasDefaultValue()) { + if (isRepeated()) { + throw new DescriptorValidationException(this, + "Repeated fields cannot have default values."); + } + + try { + switch (getType()) { + case INT32: + case SINT32: + case SFIXED32: + defaultValue = TextFormat.parseInt32(proto.getDefaultValue()); + break; + case UINT32: + case FIXED32: + defaultValue = TextFormat.parseUInt32(proto.getDefaultValue()); + break; + case INT64: + case SINT64: + case SFIXED64: + defaultValue = TextFormat.parseInt64(proto.getDefaultValue()); + break; + case UINT64: + case FIXED64: + defaultValue = TextFormat.parseUInt64(proto.getDefaultValue()); + break; + case FLOAT: + if (proto.getDefaultValue().equals("inf")) { + defaultValue = Float.POSITIVE_INFINITY; + } else if (proto.getDefaultValue().equals("-inf")) { + defaultValue = Float.NEGATIVE_INFINITY; + } else if (proto.getDefaultValue().equals("nan")) { + defaultValue = Float.NaN; + } else { + defaultValue = Float.valueOf(proto.getDefaultValue()); + } + break; + case DOUBLE: + if (proto.getDefaultValue().equals("inf")) { + defaultValue = Double.POSITIVE_INFINITY; + } else if (proto.getDefaultValue().equals("-inf")) { + defaultValue = Double.NEGATIVE_INFINITY; + } else if (proto.getDefaultValue().equals("nan")) { + defaultValue = Double.NaN; + } else { + defaultValue = Double.valueOf(proto.getDefaultValue()); + } + break; + case BOOL: + defaultValue = Boolean.valueOf(proto.getDefaultValue()); + break; + case STRING: + defaultValue = proto.getDefaultValue(); + break; + case BYTES: + try { + defaultValue = + TextFormat.unescapeBytes(proto.getDefaultValue()); + } catch (TextFormat.InvalidEscapeSequenceException e) { + throw new DescriptorValidationException(this, + "Couldn't parse default value: " + e.getMessage(), e); + } + break; + case ENUM: + defaultValue = enumType.findValueByName(proto.getDefaultValue()); + if (defaultValue == null) { + throw new DescriptorValidationException(this, + "Unknown enum default value: \"" + + proto.getDefaultValue() + '\"'); + } + break; + case MESSAGE: + case GROUP: + throw new DescriptorValidationException(this, + "Message type had default value."); + } + } catch (NumberFormatException e) { + throw new DescriptorValidationException(this, + "Could not parse default value: \"" + + proto.getDefaultValue() + '\"', e); + } + } else { + // Determine the default default for this field. + if (isRepeated()) { + defaultValue = Collections.emptyList(); + } else { + switch (getJavaType()) { + case ENUM: + // We guarantee elsewhere that an enum type always has at least + // one possible value. + defaultValue = enumType.getValues().get(0); + break; + case MESSAGE: + defaultValue = null; + break; + default: + defaultValue = getJavaType().defaultDefault; + break; + } + } + } + + if (!isExtension()) { + file.pool.addFieldByNumber(this); + } + + if (containingType != null && + containingType.getOptions().getMessageSetWireFormat()) { + if (isExtension()) { + if (!isOptional() || getType() != Type.MESSAGE) { + throw new DescriptorValidationException(this, + "Extensions of MessageSets must be optional messages."); + } + } else { + throw new DescriptorValidationException(this, + "MessageSets cannot have fields, only extensions."); + } + } + } + + /** See {@link FileDescriptor#setProto}. */ + private void setProto(final FieldDescriptorProto proto) { + this.proto = proto; + } + + /** + * For internal use only. This is to satisfy the FieldDescriptorLite + * interface. + */ + @Override + public MessageLite.Builder internalMergeFrom( + MessageLite.Builder to, MessageLite from) { + // FieldDescriptors are only used with non-lite messages so we can just + // down-cast and call mergeFrom directly. + return ((Message.Builder) to).mergeFrom((Message) from); + } + } + + // ================================================================= + + /** Describes an enum type. */ + public static final class EnumDescriptor + implements GenericDescriptor, Internal.EnumLiteMap { + /** + * Get the index of this descriptor within its parent. + * @see Descriptor#getIndex() + */ + public int getIndex() { return index; } + + /** Convert the descriptor to its protocol message representation. */ + @Override + public EnumDescriptorProto toProto() { return proto; } + + /** Get the type's unqualified name. */ + @Override + public String getName() { return proto.getName(); } + + /** + * Get the type's fully-qualified name. + * @see Descriptor#getFullName() + */ + @Override + public String getFullName() { return fullName; } + + /** Get the {@link FileDescriptor} containing this descriptor. */ + @Override + public FileDescriptor getFile() { return file; } + + /** If this is a nested type, get the outer descriptor, otherwise null. */ + public Descriptor getContainingType() { return containingType; } + + /** Get the {@code EnumOptions}, defined in {@code descriptor.proto}. */ + public EnumOptions getOptions() { return proto.getOptions(); } + + /** Get a list of defined values for this enum. */ + public List getValues() { + return Collections.unmodifiableList(Arrays.asList(values)); + } + + /** + * Find an enum value by name. + * @param name The unqualified name of the value (e.g. "FOO"). + * @return the value's decsriptor, or {@code null} if not found. + */ + public EnumValueDescriptor findValueByName(final String name) { + final GenericDescriptor result = + file.pool.findSymbol(fullName + '.' + name); + if (result != null && result instanceof EnumValueDescriptor) { + return (EnumValueDescriptor)result; + } else { + return null; + } + } + + /** + * Find an enum value by number. If multiple enum values have the same + * number, this returns the first defined value with that number. + * @param number The value's number. + * @return the value's decsriptor, or {@code null} if not found. + */ + @Override + public EnumValueDescriptor findValueByNumber(final int number) { + return file.pool.enumValuesByNumber.get( + new DescriptorPool.DescriptorIntPair(this, number)); + } + + private final int index; + private EnumDescriptorProto proto; + private final String fullName; + private final FileDescriptor file; + private final Descriptor containingType; + private EnumValueDescriptor[] values; + + private EnumDescriptor(final EnumDescriptorProto proto, + final FileDescriptor file, + final Descriptor parent, + final int index) + throws DescriptorValidationException { + this.index = index; + this.proto = proto; + fullName = computeFullName(file, parent, proto.getName()); + this.file = file; + containingType = parent; + + if (proto.getValueCount() == 0) { + // We cannot allow enums with no values because this would mean there + // would be no valid default value for fields of this type. + throw new DescriptorValidationException(this, + "Enums must contain at least one value."); + } + + values = new EnumValueDescriptor[proto.getValueCount()]; + for (int i = 0; i < proto.getValueCount(); i++) { + values[i] = new EnumValueDescriptor( + proto.getValue(i), file, this, i); + } + + file.pool.addSymbol(this); + } + + /** See {@link FileDescriptor#setProto}. */ + private void setProto(final EnumDescriptorProto proto) { + this.proto = proto; + + for (int i = 0; i < values.length; i++) { + values[i].setProto(proto.getValue(i)); + } + } + } + + // ================================================================= + + /** + * Describes one value within an enum type. Note that multiple defined + * values may have the same number. In generated Java code, all values + * with the same number after the first become aliases of the first. + * However, they still have independent EnumValueDescriptors. + */ + public static final class EnumValueDescriptor + implements GenericDescriptor, Internal.EnumLite { + /** + * Get the index of this descriptor within its parent. + * @see Descriptor#getIndex() + */ + public int getIndex() { return index; } + + /** Convert the descriptor to its protocol message representation. */ + @Override + public EnumValueDescriptorProto toProto() { return proto; } + + /** Get the value's unqualified name. */ + @Override + public String getName() { return proto.getName(); } + + /** Get the value's number. */ + @Override + public int getNumber() { return proto.getNumber(); } + + /** + * Get the value's fully-qualified name. + * @see Descriptor#getFullName() + */ + @Override + public String getFullName() { return fullName; } + + /** Get the {@link FileDescriptor} containing this descriptor. */ + @Override + public FileDescriptor getFile() { return file; } + + /** Get the value's enum type. */ + public EnumDescriptor getType() { return type; } + + /** + * Get the {@code EnumValueOptions}, defined in {@code descriptor.proto}. + */ + public EnumValueOptions getOptions() { return proto.getOptions(); } + + private final int index; + private EnumValueDescriptorProto proto; + private final String fullName; + private final FileDescriptor file; + private final EnumDescriptor type; + + private EnumValueDescriptor(final EnumValueDescriptorProto proto, + final FileDescriptor file, + final EnumDescriptor parent, + final int index) + throws DescriptorValidationException { + this.index = index; + this.proto = proto; + this.file = file; + type = parent; + + fullName = parent.getFullName() + '.' + proto.getName(); + + file.pool.addSymbol(this); + file.pool.addEnumValueByNumber(this); + } + + /** See {@link FileDescriptor#setProto}. */ + private void setProto(final EnumValueDescriptorProto proto) { + this.proto = proto; + } + } + + // ================================================================= + + /** Describes a service type. */ + public static final class ServiceDescriptor implements GenericDescriptor { + /** + * Get the index of this descriptor within its parent. + * * @see Descriptors.Descriptor#getIndex() + */ + public int getIndex() { return index; } + + /** Convert the descriptor to its protocol message representation. */ + @Override + public ServiceDescriptorProto toProto() { return proto; } + + /** Get the type's unqualified name. */ + @Override + public String getName() { return proto.getName(); } + + /** + * Get the type's fully-qualified name. + * @see Descriptor#getFullName() + */ + @Override + public String getFullName() { return fullName; } + + /** Get the {@link FileDescriptor} containing this descriptor. */ + @Override + public FileDescriptor getFile() { return file; } + + /** Get the {@code ServiceOptions}, defined in {@code descriptor.proto}. */ + public ServiceOptions getOptions() { return proto.getOptions(); } + + /** Get a list of methods for this service. */ + public List getMethods() { + return Collections.unmodifiableList(Arrays.asList(methods)); + } + + /** + * Find a method by name. + * @param name The unqualified name of the method (e.g. "Foo"). + * @return the method's decsriptor, or {@code null} if not found. + */ + public MethodDescriptor findMethodByName(final String name) { + final GenericDescriptor result = + file.pool.findSymbol(fullName + '.' + name); + if (result != null && result instanceof MethodDescriptor) { + return (MethodDescriptor)result; + } else { + return null; + } + } + + private final int index; + private ServiceDescriptorProto proto; + private final String fullName; + private final FileDescriptor file; + private MethodDescriptor[] methods; + + private ServiceDescriptor(final ServiceDescriptorProto proto, + final FileDescriptor file, + final int index) + throws DescriptorValidationException { + this.index = index; + this.proto = proto; + fullName = computeFullName(file, null, proto.getName()); + this.file = file; + + methods = new MethodDescriptor[proto.getMethodCount()]; + for (int i = 0; i < proto.getMethodCount(); i++) { + methods[i] = new MethodDescriptor( + proto.getMethod(i), file, this, i); + } + + file.pool.addSymbol(this); + } + + private void crossLink() throws DescriptorValidationException { + for (final MethodDescriptor method : methods) { + method.crossLink(); + } + } + + /** See {@link FileDescriptor#setProto}. */ + private void setProto(final ServiceDescriptorProto proto) { + this.proto = proto; + + for (int i = 0; i < methods.length; i++) { + methods[i].setProto(proto.getMethod(i)); + } + } + } + + // ================================================================= + + /** + * Describes one method within a service type. + */ + public static final class MethodDescriptor implements GenericDescriptor { + /** + * Get the index of this descriptor within its parent. + * * @see Descriptors.Descriptor#getIndex() + */ + public int getIndex() { return index; } + + /** Convert the descriptor to its protocol message representation. */ + @Override + public MethodDescriptorProto toProto() { return proto; } + + /** Get the method's unqualified name. */ + @Override + public String getName() { return proto.getName(); } + + /** + * Get the method's fully-qualified name. + * @see Descriptor#getFullName() + */ + @Override + public String getFullName() { return fullName; } + + /** Get the {@link FileDescriptor} containing this descriptor. */ + @Override + public FileDescriptor getFile() { return file; } + + /** Get the method's service type. */ + public ServiceDescriptor getService() { return service; } + + /** Get the method's input type. */ + public Descriptor getInputType() { return inputType; } + + /** Get the method's output type. */ + public Descriptor getOutputType() { return outputType; } + + /** + * Get the {@code MethodOptions}, defined in {@code descriptor.proto}. + */ + public MethodOptions getOptions() { return proto.getOptions(); } + + private final int index; + private MethodDescriptorProto proto; + private final String fullName; + private final FileDescriptor file; + private final ServiceDescriptor service; + + // Initialized during cross-linking. + private Descriptor inputType; + private Descriptor outputType; + + private MethodDescriptor(final MethodDescriptorProto proto, + final FileDescriptor file, + final ServiceDescriptor parent, + final int index) + throws DescriptorValidationException { + this.index = index; + this.proto = proto; + this.file = file; + service = parent; + + fullName = parent.getFullName() + '.' + proto.getName(); + + file.pool.addSymbol(this); + } + + private void crossLink() throws DescriptorValidationException { + final GenericDescriptor input = + file.pool.lookupSymbol(proto.getInputType(), this); + if (!(input instanceof Descriptor)) { + throw new DescriptorValidationException(this, + '\"' + proto.getInputType() + "\" is not a message type."); + } + inputType = (Descriptor)input; + + final GenericDescriptor output = + file.pool.lookupSymbol(proto.getOutputType(), this); + if (!(output instanceof Descriptor)) { + throw new DescriptorValidationException(this, + '\"' + proto.getOutputType() + "\" is not a message type."); + } + outputType = (Descriptor)output; + } + + /** See {@link FileDescriptor#setProto}. */ + private void setProto(final MethodDescriptorProto proto) { + this.proto = proto; + } + } + + // ================================================================= + + private static String computeFullName(final FileDescriptor file, + final Descriptor parent, + final String name) { + if (parent != null) { + return parent.getFullName() + '.' + name; + } else if (file.getPackage().length() > 0) { + return file.getPackage() + '.' + name; + } else { + return name; + } + } + + // ================================================================= + + /** + * All descriptors except {@code FileDescriptor} implement this to make + * {@code DescriptorPool}'s life easier. + */ + private interface GenericDescriptor { + Message toProto(); + String getName(); + String getFullName(); + FileDescriptor getFile(); + } + + /** + * Thrown when building descriptors fails because the source DescriptorProtos + * are not valid. + */ + public static class DescriptorValidationException extends Exception { + private static final long serialVersionUID = 5750205775490483148L; + + /** Gets the full name of the descriptor where the error occurred. */ + public String getProblemSymbolName() { return name; } + + /** + * Gets the the protocol message representation of the invalid descriptor. + */ + public Message getProblemProto() { return proto; } + + /** + * Gets a human-readable description of the error. + */ + public String getDescription() { return description; } + + private final String name; + private final Message proto; + private final String description; + + private DescriptorValidationException( + final GenericDescriptor problemDescriptor, + final String description) { + super(problemDescriptor.getFullName() + ": " + description); + + // Note that problemDescriptor may be partially uninitialized, so we + // don't want to expose it directly to the user. So, we only provide + // the name and the original proto. + name = problemDescriptor.getFullName(); + proto = problemDescriptor.toProto(); + this.description = description; + } + + private DescriptorValidationException( + final GenericDescriptor problemDescriptor, + final String description, + final Throwable cause) { + this(problemDescriptor, description); + initCause(cause); + } + + private DescriptorValidationException( + final FileDescriptor problemDescriptor, + final String description) { + super(problemDescriptor.getName() + ": " + description); + + // Note that problemDescriptor may be partially uninitialized, so we + // don't want to expose it directly to the user. So, we only provide + // the name and the original proto. + name = problemDescriptor.getName(); + proto = problemDescriptor.toProto(); + this.description = description; + } + } + + // ================================================================= + + /** + * A private helper class which contains lookup tables containing all the + * descriptors defined in a particular file. + */ + private static final class DescriptorPool { + DescriptorPool(final FileDescriptor[] dependencies) { + this.dependencies = new DescriptorPool[dependencies.length]; + + for (int i = 0; i < dependencies.length; i++) { + this.dependencies[i] = dependencies[i].pool; + } + + for (final FileDescriptor dependency : dependencies) { + try { + addPackage(dependency.getPackage(), dependency); + } catch (DescriptorValidationException e) { + // Can't happen, because addPackage() only fails when the name + // conflicts with a non-package, but we have not yet added any + // non-packages at this point. + assert false; + } + } + } + + private final DescriptorPool[] dependencies; + + private final Map descriptorsByName = + new HashMap(); + private final Map fieldsByNumber = + new HashMap(); + private final Map enumValuesByNumber + = new HashMap(); + + /** Find a generic descriptor by fully-qualified name. */ + GenericDescriptor findSymbol(final String fullName) { + GenericDescriptor result = descriptorsByName.get(fullName); + if (result != null) { + return result; + } + + for (final DescriptorPool dependency : dependencies) { + result = dependency.descriptorsByName.get(fullName); + if (result != null) { + return result; + } + } + + return null; + } + + /** + * Look up a descriptor by name, relative to some other descriptor. + * The name may be fully-qualified (with a leading '.'), + * partially-qualified, or unqualified. C++-like name lookup semantics + * are used to search for the matching descriptor. + */ + GenericDescriptor lookupSymbol(final String name, + final GenericDescriptor relativeTo) + throws DescriptorValidationException { + // TODO(kenton): This could be optimized in a number of ways. + + GenericDescriptor result; + if (name.startsWith(".")) { + // Fully-qualified name. + result = findSymbol(name.substring(1)); + } else { + // If "name" is a compound identifier, we want to search for the + // first component of it, then search within it for the rest. + final int firstPartLength = name.indexOf('.'); + final String firstPart; + if (firstPartLength == -1) { + firstPart = name; + } else { + firstPart = name.substring(0, firstPartLength); + } + + // We will search each parent scope of "relativeTo" looking for the + // symbol. + final StringBuilder scopeToTry = + new StringBuilder(relativeTo.getFullName()); + + while (true) { + // Chop off the last component of the scope. + final int dotpos = scopeToTry.lastIndexOf("."); + if (dotpos == -1) { + result = findSymbol(name); + break; + } else { + scopeToTry.setLength(dotpos + 1); + + // Append firstPart and try to find. + scopeToTry.append(firstPart); + result = findSymbol(scopeToTry.toString()); + + if (result != null) { + if (firstPartLength != -1) { + // We only found the first part of the symbol. Now look for + // the whole thing. If this fails, we *don't* want to keep + // searching parent scopes. + scopeToTry.setLength(dotpos + 1); + scopeToTry.append(name); + result = findSymbol(scopeToTry.toString()); + } + break; + } + + // Not found. Remove the name so we can try again. + scopeToTry.setLength(dotpos); + } + } + } + + if (result == null) { + throw new DescriptorValidationException(relativeTo, + '\"' + name + "\" is not defined."); + } else { + return result; + } + } + + /** + * Adds a symbol to the symbol table. If a symbol with the same name + * already exists, throws an error. + */ + void addSymbol(final GenericDescriptor descriptor) + throws DescriptorValidationException { + validateSymbolName(descriptor); + + final String fullName = descriptor.getFullName(); + final int dotpos = fullName.lastIndexOf('.'); + + final GenericDescriptor old = descriptorsByName.put(fullName, descriptor); + if (old != null) { + descriptorsByName.put(fullName, old); + + if (descriptor.getFile() == old.getFile()) { + if (dotpos == -1) { + throw new DescriptorValidationException(descriptor, + '\"' + fullName + "\" is already defined."); + } else { + throw new DescriptorValidationException(descriptor, + '\"' + fullName.substring(dotpos + 1) + + "\" is already defined in \"" + + fullName.substring(0, dotpos) + "\"."); + } + } else { + throw new DescriptorValidationException(descriptor, + '\"' + fullName + "\" is already defined in file \"" + + old.getFile().getName() + "\"."); + } + } + } + + /** + * Represents a package in the symbol table. We use PackageDescriptors + * just as placeholders so that someone cannot define, say, a message type + * that has the same name as an existing package. + */ + private static final class PackageDescriptor implements GenericDescriptor { + @Override + public Message toProto() { return file.toProto(); } + @Override + public String getName() { return name; } + @Override + public String getFullName() { return fullName; } + @Override + public FileDescriptor getFile() { return file; } + + PackageDescriptor(final String name, final String fullName, + final FileDescriptor file) { + this.file = file; + this.fullName = fullName; + this.name = name; + } + + private final String name; + private final String fullName; + private final FileDescriptor file; + } + + /** + * Adds a package to the symbol tables. If a package by the same name + * already exists, that is fine, but if some other kind of symbol exists + * under the same name, an exception is thrown. If the package has + * multiple components, this also adds the parent package(s). + */ + void addPackage(final String fullName, final FileDescriptor file) + throws DescriptorValidationException { + final int dotpos = fullName.lastIndexOf('.'); + final String name; + if (dotpos == -1) { + name = fullName; + } else { + addPackage(fullName.substring(0, dotpos), file); + name = fullName.substring(dotpos + 1); + } + + final GenericDescriptor old = + descriptorsByName.put(fullName, + new PackageDescriptor(name, fullName, file)); + if (old != null) { + descriptorsByName.put(fullName, old); + if (!(old instanceof PackageDescriptor)) { + throw new DescriptorValidationException(file, + '\"' + name + "\" is already defined (as something other than a " + + "package) in file \"" + old.getFile().getName() + "\"."); + } + } + } + + /** A (GenericDescriptor, int) pair, used as a map key. */ + private static final class DescriptorIntPair { + private final GenericDescriptor descriptor; + private final int number; + + DescriptorIntPair(final GenericDescriptor descriptor, final int number) { + this.descriptor = descriptor; + this.number = number; + } + + @Override + public int hashCode() { + return descriptor.hashCode() * ((1 << 16) - 1) + number; + } + @Override + public boolean equals(final Object obj) { + if (!(obj instanceof DescriptorIntPair)) { + return false; + } + final DescriptorIntPair other = (DescriptorIntPair)obj; + return descriptor == other.descriptor && number == other.number; + } + } + + /** + * Adds a field to the fieldsByNumber table. Throws an exception if a + * field with hte same containing type and number already exists. + */ + void addFieldByNumber(final FieldDescriptor field) + throws DescriptorValidationException { + final DescriptorIntPair key = + new DescriptorIntPair(field.getContainingType(), field.getNumber()); + final FieldDescriptor old = fieldsByNumber.put(key, field); + if (old != null) { + fieldsByNumber.put(key, old); + throw new DescriptorValidationException(field, + "Field number " + field.getNumber() + + "has already been used in \"" + + field.getContainingType().getFullName() + + "\" by field \"" + old.getName() + "\"."); + } + } + + /** + * Adds an enum value to the enumValuesByNumber table. If an enum value + * with the same type and number already exists, does nothing. (This is + * allowed; the first value define with the number takes precedence.) + */ + void addEnumValueByNumber(final EnumValueDescriptor value) { + final DescriptorIntPair key = + new DescriptorIntPair(value.getType(), value.getNumber()); + final EnumValueDescriptor old = enumValuesByNumber.put(key, value); + if (old != null) { + enumValuesByNumber.put(key, old); + // Not an error: Multiple enum values may have the same number, but + // we only want the first one in the map. + } + } + + /** + * Verifies that the descriptor's name is valid (i.e. it contains only + * letters, digits, and underscores, and does not start with a digit). + */ + static void validateSymbolName(final GenericDescriptor descriptor) + throws DescriptorValidationException { + final String name = descriptor.getName(); + if (name.length() == 0) { + throw new DescriptorValidationException(descriptor, "Missing name."); + } else { + boolean valid = true; + for (int i = 0; i < name.length(); i++) { + final char c = name.charAt(i); + // Non-ASCII characters are not valid in protobuf identifiers, even + // if they are letters or digits. + if (c >= 128) { + valid = false; + } + // First character must be letter or _. Subsequent characters may + // be letters, numbers, or digits. + if (Character.isLetter(c) || c == '_' || + (Character.isDigit(c) && i > 0)) { + // Valid + } else { + valid = false; + } + } + if (!valid) { + throw new DescriptorValidationException(descriptor, + '\"' + name + "\" is not a valid identifier."); + } + } + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/DynamicMessage.java b/OsmAnd-java/src/com/google/protobuf/DynamicMessage.java new file mode 100644 index 0000000000..c64e609fd3 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/DynamicMessage.java @@ -0,0 +1,472 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +import com.google.protobuf.Descriptors.Descriptor; +import com.google.protobuf.Descriptors.FieldDescriptor; + +/** + * An implementation of {@link Message} that can represent arbitrary types, + * given a {@link Descriptors.Descriptor}. + * + * @author kenton@google.com Kenton Varda + */ +public final class DynamicMessage extends AbstractMessage { + private final Descriptor type; + private final FieldSet fields; + private final UnknownFieldSet unknownFields; + private int memoizedSize = -1; + + /** + * Construct a {@code DynamicMessage} using the given {@code FieldSet}. + */ + private DynamicMessage(Descriptor type, FieldSet fields, + UnknownFieldSet unknownFields) { + this.type = type; + this.fields = fields; + this.unknownFields = unknownFields; + } + + /** + * Get a {@code DynamicMessage} representing the default instance of the + * given type. + */ + public static DynamicMessage getDefaultInstance(Descriptor type) { + return new DynamicMessage(type, FieldSet.emptySet(), + UnknownFieldSet.getDefaultInstance()); + } + + /** Parse a message of the given type from the given input stream. */ + public static DynamicMessage parseFrom(Descriptor type, + CodedInputStream input) + throws IOException { + return newBuilder(type).mergeFrom(input).buildParsed(); + } + + /** Parse a message of the given type from the given input stream. */ + public static DynamicMessage parseFrom( + Descriptor type, + CodedInputStream input, + ExtensionRegistry extensionRegistry) + throws IOException { + return newBuilder(type).mergeFrom(input, extensionRegistry).buildParsed(); + } + + /** Parse {@code data} as a message of the given type and return it. */ + public static DynamicMessage parseFrom(Descriptor type, ByteString data) + throws InvalidProtocolBufferException { + return newBuilder(type).mergeFrom(data).buildParsed(); + } + + /** Parse {@code data} as a message of the given type and return it. */ + public static DynamicMessage parseFrom(Descriptor type, ByteString data, + ExtensionRegistry extensionRegistry) + throws InvalidProtocolBufferException { + return newBuilder(type).mergeFrom(data, extensionRegistry).buildParsed(); + } + + /** Parse {@code data} as a message of the given type and return it. */ + public static DynamicMessage parseFrom(Descriptor type, byte[] data) + throws InvalidProtocolBufferException { + return newBuilder(type).mergeFrom(data).buildParsed(); + } + + /** Parse {@code data} as a message of the given type and return it. */ + public static DynamicMessage parseFrom(Descriptor type, byte[] data, + ExtensionRegistry extensionRegistry) + throws InvalidProtocolBufferException { + return newBuilder(type).mergeFrom(data, extensionRegistry).buildParsed(); + } + + /** Parse a message of the given type from {@code input} and return it. */ + public static DynamicMessage parseFrom(Descriptor type, InputStream input) + throws IOException { + return newBuilder(type).mergeFrom(input).buildParsed(); + } + + /** Parse a message of the given type from {@code input} and return it. */ + public static DynamicMessage parseFrom(Descriptor type, InputStream input, + ExtensionRegistry extensionRegistry) + throws IOException { + return newBuilder(type).mergeFrom(input, extensionRegistry).buildParsed(); + } + + /** Construct a {@link Message.Builder} for the given type. */ + public static Builder newBuilder(Descriptor type) { + return new Builder(type); + } + + /** + * Construct a {@link Message.Builder} for a message of the same type as + * {@code prototype}, and initialize it with {@code prototype}'s contents. + */ + public static Builder newBuilder(Message prototype) { + return new Builder(prototype.getDescriptorForType()).mergeFrom(prototype); + } + + // ----------------------------------------------------------------- + // Implementation of Message interface. + + @Override +public Descriptor getDescriptorForType() { + return type; + } + + @Override +public DynamicMessage getDefaultInstanceForType() { + return getDefaultInstance(type); + } + + @Override +public Map getAllFields() { + return fields.getAllFields(); + } + + @Override +public boolean hasField(FieldDescriptor field) { + verifyContainingType(field); + return fields.hasField(field); + } + + @Override +public Object getField(FieldDescriptor field) { + verifyContainingType(field); + Object result = fields.getField(field); + if (result == null) { + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + result = getDefaultInstance(field.getMessageType()); + } else { + result = field.getDefaultValue(); + } + } + return result; + } + + @Override +public int getRepeatedFieldCount(FieldDescriptor field) { + verifyContainingType(field); + return fields.getRepeatedFieldCount(field); + } + + @Override +public Object getRepeatedField(FieldDescriptor field, int index) { + verifyContainingType(field); + return fields.getRepeatedField(field, index); + } + + @Override +public UnknownFieldSet getUnknownFields() { + return unknownFields; + } + + private static boolean isInitialized(Descriptor type, + FieldSet fields) { + // Check that all required fields are present. + for (final FieldDescriptor field : type.getFields()) { + if (field.isRequired()) { + if (!fields.hasField(field)) { + return false; + } + } + } + + // Check that embedded messages are initialized. + return fields.isInitialized(); + } + + @Override +public boolean isInitialized() { + return isInitialized(type, fields); + } + + @Override +public void writeTo(CodedOutputStream output) throws IOException { + if (type.getOptions().getMessageSetWireFormat()) { + fields.writeMessageSetTo(output); + unknownFields.writeAsMessageSetTo(output); + } else { + fields.writeTo(output); + unknownFields.writeTo(output); + } + } + + @Override +public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + if (type.getOptions().getMessageSetWireFormat()) { + size = fields.getMessageSetSerializedSize(); + size += unknownFields.getSerializedSizeAsMessageSet(); + } else { + size = fields.getSerializedSize(); + size += unknownFields.getSerializedSize(); + } + + memoizedSize = size; + return size; + } + + @Override +public Builder newBuilderForType() { + return new Builder(type); + } + + @Override +public Builder toBuilder() { + return newBuilderForType().mergeFrom(this); + } + + /** Verifies that the field is a field of this message. */ + private void verifyContainingType(FieldDescriptor field) { + if (field.getContainingType() != type) { + throw new IllegalArgumentException( + "FieldDescriptor does not match message type."); + } + } + + // ================================================================= + + /** + * Builder for {@link DynamicMessage}s. + */ + public static final class Builder extends AbstractMessage.Builder { + private final Descriptor type; + private FieldSet fields; + private UnknownFieldSet unknownFields; + + /** Construct a {@code Builder} for the given type. */ + private Builder(Descriptor type) { + this.type = type; + this.fields = FieldSet.newFieldSet(); + this.unknownFields = UnknownFieldSet.getDefaultInstance(); + } + + // --------------------------------------------------------------- + // Implementation of Message.Builder interface. + + @Override + public Builder clear() { + if (fields == null) { + throw new IllegalStateException("Cannot call clear() after build()."); + } + fields.clear(); + return this; + } + + @Override + public Builder mergeFrom(Message other) { + if (other instanceof DynamicMessage) { + // This should be somewhat faster than calling super.mergeFrom(). + DynamicMessage otherDynamicMessage = (DynamicMessage) other; + if (otherDynamicMessage.type != type) { + throw new IllegalArgumentException( + "mergeFrom(Message) can only merge messages of the same type."); + } + fields.mergeFrom(otherDynamicMessage.fields); + mergeUnknownFields(otherDynamicMessage.unknownFields); + return this; + } else { + return super.mergeFrom(other); + } + } + + @Override + public DynamicMessage build() { + // If fields == null, we'll throw an appropriate exception later. + if (fields != null && !isInitialized()) { + throw newUninitializedMessageException( + new DynamicMessage(type, fields, unknownFields)); + } + return buildPartial(); + } + + /** + * Helper for DynamicMessage.parseFrom() methods to call. Throws + * {@link InvalidProtocolBufferException} instead of + * {@link UninitializedMessageException}. + */ + private DynamicMessage buildParsed() throws InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + new DynamicMessage(type, fields, unknownFields)) + .asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public DynamicMessage buildPartial() { + if (fields == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + fields.makeImmutable(); + DynamicMessage result = + new DynamicMessage(type, fields, unknownFields); + fields = null; + unknownFields = null; + return result; + } + + @Override + public Builder clone() { + Builder result = new Builder(type); + result.fields.mergeFrom(fields); + return result; + } + + @Override + public boolean isInitialized() { + return DynamicMessage.isInitialized(type, fields); + } + + @Override + public Descriptor getDescriptorForType() { + return type; + } + + @Override + public DynamicMessage getDefaultInstanceForType() { + return getDefaultInstance(type); + } + + @Override + public Map getAllFields() { + return fields.getAllFields(); + } + + @Override + public Builder newBuilderForField(FieldDescriptor field) { + verifyContainingType(field); + + if (field.getJavaType() != FieldDescriptor.JavaType.MESSAGE) { + throw new IllegalArgumentException( + "newBuilderForField is only valid for fields with message type."); + } + + return new Builder(field.getMessageType()); + } + + @Override + public boolean hasField(FieldDescriptor field) { + verifyContainingType(field); + return fields.hasField(field); + } + + @Override + public Object getField(FieldDescriptor field) { + verifyContainingType(field); + Object result = fields.getField(field); + if (result == null) { + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + result = getDefaultInstance(field.getMessageType()); + } else { + result = field.getDefaultValue(); + } + } + return result; + } + + @Override + public Builder setField(FieldDescriptor field, Object value) { + verifyContainingType(field); + fields.setField(field, value); + return this; + } + + @Override + public Builder clearField(FieldDescriptor field) { + verifyContainingType(field); + fields.clearField(field); + return this; + } + + @Override + public int getRepeatedFieldCount(FieldDescriptor field) { + verifyContainingType(field); + return fields.getRepeatedFieldCount(field); + } + + @Override + public Object getRepeatedField(FieldDescriptor field, int index) { + verifyContainingType(field); + return fields.getRepeatedField(field, index); + } + + @Override + public Builder setRepeatedField(FieldDescriptor field, + int index, Object value) { + verifyContainingType(field); + fields.setRepeatedField(field, index, value); + return this; + } + + @Override + public Builder addRepeatedField(FieldDescriptor field, Object value) { + verifyContainingType(field); + fields.addRepeatedField(field, value); + return this; + } + + @Override + public UnknownFieldSet getUnknownFields() { + return unknownFields; + } + + @Override + public Builder setUnknownFields(UnknownFieldSet unknownFields) { + this.unknownFields = unknownFields; + return this; + } + + @Override + public Builder mergeUnknownFields(UnknownFieldSet unknownFields) { + this.unknownFields = + UnknownFieldSet.newBuilder(this.unknownFields) + .mergeFrom(unknownFields) + .build(); + return this; + } + + /** Verifies that the field is a field of this message. */ + private void verifyContainingType(FieldDescriptor field) { + if (field.getContainingType() != type) { + throw new IllegalArgumentException( + "FieldDescriptor does not match message type."); + } + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/ExtensionRegistry.java b/OsmAnd-java/src/com/google/protobuf/ExtensionRegistry.java new file mode 100644 index 0000000000..319c26f571 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/ExtensionRegistry.java @@ -0,0 +1,266 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import com.google.protobuf.Descriptors.Descriptor; +import com.google.protobuf.Descriptors.FieldDescriptor; + +/** + * A table of known extensions, searchable by name or field number. When + * parsing a protocol message that might have extensions, you must provide + * an {@code ExtensionRegistry} in which you have registered any extensions + * that you want to be able to parse. Otherwise, those extensions will just + * be treated like unknown fields. + * + *

    For example, if you had the {@code .proto} file: + * + *

    + * option java_class = "MyProto";
    + *
    + * message Foo {
    + *   extensions 1000 to max;
    + * }
    + *
    + * extend Foo {
    + *   optional int32 bar;
    + * }
    + * 
    + * + * Then you might write code like: + * + *
    + * ExtensionRegistry registry = ExtensionRegistry.newInstance();
    + * registry.add(MyProto.bar);
    + * MyProto.Foo message = MyProto.Foo.parseFrom(input, registry);
    + * 
    + * + *

    Background: + * + *

    You might wonder why this is necessary. Two alternatives might come to + * mind. First, you might imagine a system where generated extensions are + * automatically registered when their containing classes are loaded. This + * is a popular technique, but is bad design; among other things, it creates a + * situation where behavior can change depending on what classes happen to be + * loaded. It also introduces a security vulnerability, because an + * unprivileged class could cause its code to be called unexpectedly from a + * privileged class by registering itself as an extension of the right type. + * + *

    Another option you might consider is lazy parsing: do not parse an + * extension until it is first requested, at which point the caller must + * provide a type to use. This introduces a different set of problems. First, + * it would require a mutex lock any time an extension was accessed, which + * would be slow. Second, corrupt data would not be detected until first + * access, at which point it would be much harder to deal with it. Third, it + * could violate the expectation that message objects are immutable, since the + * type provided could be any arbitrary message class. An unprivileged user + * could take advantage of this to inject a mutable object into a message + * belonging to privileged code and create mischief. + * + * @author kenton@google.com Kenton Varda + */ +public final class ExtensionRegistry extends ExtensionRegistryLite { + /** Construct a new, empty instance. */ + public static ExtensionRegistry newInstance() { + return new ExtensionRegistry(); + } + + /** Get the unmodifiable singleton empty instance. */ + public static ExtensionRegistry getEmptyRegistry() { + return EMPTY; + } + + /** Returns an unmodifiable view of the registry. */ + @Override + public ExtensionRegistry getUnmodifiable() { + return new ExtensionRegistry(this); + } + + /** A (Descriptor, Message) pair, returned by lookup methods. */ + public static final class ExtensionInfo { + /** The extension's descriptor. */ + public final FieldDescriptor descriptor; + + /** + * A default instance of the extension's type, if it has a message type. + * Otherwise, {@code null}. + */ + public final Message defaultInstance; + + private ExtensionInfo(final FieldDescriptor descriptor) { + this.descriptor = descriptor; + defaultInstance = null; + } + private ExtensionInfo(final FieldDescriptor descriptor, + final Message defaultInstance) { + this.descriptor = descriptor; + this.defaultInstance = defaultInstance; + } + } + + /** + * Find an extension by fully-qualified field name, in the proto namespace. + * I.e. {@code result.descriptor.fullName()} will match {@code fullName} if + * a match is found. + * + * @return Information about the extension if found, or {@code null} + * otherwise. + */ + public ExtensionInfo findExtensionByName(final String fullName) { + return extensionsByName.get(fullName); + } + + /** + * Find an extension by containing type and field number. + * + * @return Information about the extension if found, or {@code null} + * otherwise. + */ + public ExtensionInfo findExtensionByNumber(final Descriptor containingType, + final int fieldNumber) { + return extensionsByNumber.get( + new DescriptorIntPair(containingType, fieldNumber)); + } + + /** Add an extension from a generated file to the registry. */ + public void add(final GeneratedMessage.GeneratedExtension extension) { + if (extension.getDescriptor().getJavaType() == + FieldDescriptor.JavaType.MESSAGE) { + if (extension.getMessageDefaultInstance() == null) { + throw new IllegalStateException( + "Registered message-type extension had null default instance: " + + extension.getDescriptor().getFullName()); + } + add(new ExtensionInfo(extension.getDescriptor(), + extension.getMessageDefaultInstance())); + } else { + add(new ExtensionInfo(extension.getDescriptor(), null)); + } + } + + /** Add a non-message-type extension to the registry by descriptor. */ + public void add(final FieldDescriptor type) { + if (type.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + throw new IllegalArgumentException( + "ExtensionRegistry.add() must be provided a default instance when " + + "adding an embedded message extension."); + } + add(new ExtensionInfo(type, null)); + } + + /** Add a message-type extension to the registry by descriptor. */ + public void add(final FieldDescriptor type, final Message defaultInstance) { + if (type.getJavaType() != FieldDescriptor.JavaType.MESSAGE) { + throw new IllegalArgumentException( + "ExtensionRegistry.add() provided a default instance for a " + + "non-message extension."); + } + add(new ExtensionInfo(type, defaultInstance)); + } + + // ================================================================= + // Private stuff. + + private ExtensionRegistry() { + this.extensionsByName = new HashMap(); + this.extensionsByNumber = new HashMap(); + } + + private ExtensionRegistry(ExtensionRegistry other) { + super(other); + this.extensionsByName = Collections.unmodifiableMap(other.extensionsByName); + this.extensionsByNumber = + Collections.unmodifiableMap(other.extensionsByNumber); + } + + private final Map extensionsByName; + private final Map extensionsByNumber; + + private ExtensionRegistry(boolean empty) { + super(ExtensionRegistryLite.getEmptyRegistry()); + this.extensionsByName = Collections.emptyMap(); + this.extensionsByNumber = + Collections.emptyMap(); + } + private static final ExtensionRegistry EMPTY = new ExtensionRegistry(true); + + private void add(final ExtensionInfo extension) { + if (!extension.descriptor.isExtension()) { + throw new IllegalArgumentException( + "ExtensionRegistry.add() was given a FieldDescriptor for a regular " + + "(non-extension) field."); + } + + extensionsByName.put(extension.descriptor.getFullName(), extension); + extensionsByNumber.put( + new DescriptorIntPair(extension.descriptor.getContainingType(), + extension.descriptor.getNumber()), + extension); + + final FieldDescriptor field = extension.descriptor; + if (field.getContainingType().getOptions().getMessageSetWireFormat() && + field.getType() == FieldDescriptor.Type.MESSAGE && + field.isOptional() && + field.getExtensionScope() == field.getMessageType()) { + // This is an extension of a MessageSet type defined within the extension + // type's own scope. For backwards-compatibility, allow it to be looked + // up by type name. + extensionsByName.put(field.getMessageType().getFullName(), extension); + } + } + + /** A (GenericDescriptor, int) pair, used as a map key. */ + private static final class DescriptorIntPair { + private final Descriptor descriptor; + private final int number; + + DescriptorIntPair(final Descriptor descriptor, final int number) { + this.descriptor = descriptor; + this.number = number; + } + + @Override + public int hashCode() { + return descriptor.hashCode() * ((1 << 16) - 1) + number; + } + @Override + public boolean equals(final Object obj) { + if (!(obj instanceof DescriptorIntPair)) { + return false; + } + final DescriptorIntPair other = (DescriptorIntPair)obj; + return descriptor == other.descriptor && number == other.number; + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/ExtensionRegistryLite.java b/OsmAnd-java/src/com/google/protobuf/ExtensionRegistryLite.java new file mode 100644 index 0000000000..d5288dd8ef --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/ExtensionRegistryLite.java @@ -0,0 +1,169 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * Equivalent to {@link ExtensionRegistry} but supports only "lite" types. + *

    + * If all of your types are lite types, then you only need to use + * {@code ExtensionRegistryLite}. Similarly, if all your types are regular + * types, then you only need {@link ExtensionRegistry}. Typically it does not + * make sense to mix the two, since if you have any regular types in your + * program, you then require the full runtime and lose all the benefits of + * the lite runtime, so you might as well make all your types be regular types. + * However, in some cases (e.g. when depending on multiple third-patry libraries + * where one uses lite types and one uses regular), you may find yourself + * wanting to mix the two. In this case things get more complicated. + *

    + * There are three factors to consider: Whether the type being extended is + * lite, whether the embedded type (in the case of a message-typed extension) + * is lite, and whether the extension itself is lite. Since all three are + * declared in different files, they could all be different. Here are all + * the combinations and which type of registry to use: + *

    + *   Extended type     Inner type    Extension         Use registry
    + *   =======================================================================
    + *   lite              lite          lite              ExtensionRegistryLite
    + *   lite              regular       lite              ExtensionRegistry
    + *   regular           regular       regular           ExtensionRegistry
    + *   all other combinations                            not supported
    + * 
    + *

    + * Note that just as regular types are not allowed to contain lite-type fields, + * they are also not allowed to contain lite-type extensions. This is because + * regular types must be fully accessible via reflection, which in turn means + * that all the inner messages must also support reflection. On the other hand, + * since regular types implement the entire lite interface, there is no problem + * with embedding regular types inside lite types. + * + * @author kenton@google.com Kenton Varda + */ +public class ExtensionRegistryLite { + /** Construct a new, empty instance. */ + public static ExtensionRegistryLite newInstance() { + return new ExtensionRegistryLite(); + } + + /** Get the unmodifiable singleton empty instance. */ + public static ExtensionRegistryLite getEmptyRegistry() { + return EMPTY; + } + + /** Returns an unmodifiable view of the registry. */ + public ExtensionRegistryLite getUnmodifiable() { + return new ExtensionRegistryLite(this); + } + + /** + * Find an extension by containing type and field number. + * + * @return Information about the extension if found, or {@code null} + * otherwise. + */ + @SuppressWarnings("unchecked") + public + GeneratedMessageLite.GeneratedExtension + findLiteExtensionByNumber( + final ContainingType containingTypeDefaultInstance, + final int fieldNumber) { + return (GeneratedMessageLite.GeneratedExtension) + extensionsByNumber.get( + new ObjectIntPair(containingTypeDefaultInstance, fieldNumber)); + } + + /** Add an extension from a lite generated file to the registry. */ + public final void add( + final GeneratedMessageLite.GeneratedExtension extension) { + extensionsByNumber.put( + new ObjectIntPair(extension.getContainingTypeDefaultInstance(), + extension.getNumber()), + extension); + } + + // ================================================================= + // Private stuff. + + // Constructors are package-private so that ExtensionRegistry can subclass + // this. + + ExtensionRegistryLite() { + this.extensionsByNumber = + new HashMap>(); + } + + ExtensionRegistryLite(ExtensionRegistryLite other) { + if (other == EMPTY) { + this.extensionsByNumber = Collections.emptyMap(); + } else { + this.extensionsByNumber = + Collections.unmodifiableMap(other.extensionsByNumber); + } + } + + private final Map> + extensionsByNumber; + + private ExtensionRegistryLite(boolean empty) { + this.extensionsByNumber = Collections.emptyMap(); + } + private static final ExtensionRegistryLite EMPTY = + new ExtensionRegistryLite(true); + + /** A (Object, int) pair, used as a map key. */ + private static final class ObjectIntPair { + private final Object object; + private final int number; + + ObjectIntPair(final Object object, final int number) { + this.object = object; + this.number = number; + } + + @Override + public int hashCode() { + return System.identityHashCode(object) * ((1 << 16) - 1) + number; + } + @Override + public boolean equals(final Object obj) { + if (!(obj instanceof ObjectIntPair)) { + return false; + } + final ObjectIntPair other = (ObjectIntPair)obj; + return object == other.object && number == other.number; + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/FieldSet.java b/OsmAnd-java/src/com/google/protobuf/FieldSet.java new file mode 100644 index 0000000000..a76c04f5fa --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/FieldSet.java @@ -0,0 +1,715 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +/** + * A class which represents an arbitrary set of fields of some message type. + * This is used to implement {@link DynamicMessage}, and also to represent + * extensions in {@link GeneratedMessage}. This class is package-private, + * since outside users should probably be using {@link DynamicMessage}. + * + * @author kenton@google.com Kenton Varda + */ +final class FieldSet> { + /** + * Interface for a FieldDescriptor or lite extension descriptor. This + * prevents FieldSet from depending on {@link Descriptors.FieldDescriptor}. + */ + public interface FieldDescriptorLite> + extends Comparable { + int getNumber(); + WireFormat.FieldType getLiteType(); + WireFormat.JavaType getLiteJavaType(); + boolean isRepeated(); + boolean isPacked(); + Internal.EnumLiteMap getEnumType(); + + // If getLiteJavaType() == MESSAGE, this merges a message object of the + // type into a builder of the type. Returns {@code to}. + MessageLite.Builder internalMergeFrom( + MessageLite.Builder to, MessageLite from); + } + + private Map fields; + + /** Construct a new FieldSet. */ + private FieldSet() { + // Use a TreeMap because fields need to be in canonical order when + // serializing. + // TODO(kenton): Maybe use some sort of sparse array instead? It would + // even make sense to store the first 16 or so tags in a flat array + // to make DynamicMessage faster. + fields = new TreeMap(); + } + + /** + * Construct an empty FieldSet. This is only used to initialize + * DEFAULT_INSTANCE. + */ + private FieldSet(final boolean dummy) { + this.fields = Collections.emptyMap(); + } + + /** Construct a new FieldSet. */ + public static > + FieldSet newFieldSet() { + return new FieldSet(); + } + + /** Get an immutable empty FieldSet. */ + @SuppressWarnings("unchecked") + public static > + FieldSet emptySet() { + return DEFAULT_INSTANCE; + } + @SuppressWarnings("unchecked") + private static final FieldSet DEFAULT_INSTANCE = new FieldSet(true); + + /** Make this FieldSet immutable from this point forward. */ + @SuppressWarnings("unchecked") + public void makeImmutable() { + for (final Map.Entry entry: + fields.entrySet()) { + if (entry.getKey().isRepeated()) { + final List value = (List)entry.getValue(); + fields.put(entry.getKey(), Collections.unmodifiableList(value)); + } + } + fields = Collections.unmodifiableMap(fields); + } + + // ================================================================= + + /** See {@link Message.Builder#clear()}. */ + public void clear() { + fields.clear(); + } + + /** + * Get a simple map containing all the fields. + */ + public Map getAllFields() { + return Collections.unmodifiableMap(fields); + } + + /** + * Get an iterator to the field map. This iterator should not be leaked + * out of the protobuf library as it is not protected from mutation. + */ + public Iterator> iterator() { + return fields.entrySet().iterator(); + } + + /** + * Useful for implementing + * {@link Message#hasField(Descriptors.FieldDescriptor)}. + */ + public boolean hasField(final FieldDescriptorType descriptor) { + if (descriptor.isRepeated()) { + throw new IllegalArgumentException( + "hasField() can only be called on non-repeated fields."); + } + + return fields.get(descriptor) != null; + } + + /** + * Useful for implementing + * {@link Message#getField(Descriptors.FieldDescriptor)}. This method + * returns {@code null} if the field is not set; in this case it is up + * to the caller to fetch the field's default value. + */ + public Object getField(final FieldDescriptorType descriptor) { + return fields.get(descriptor); + } + + /** + * Useful for implementing + * {@link Message.Builder#setField(Descriptors.FieldDescriptor,Object)}. + */ + @SuppressWarnings("unchecked") + public void setField(final FieldDescriptorType descriptor, + Object value) { + if (descriptor.isRepeated()) { + if (!(value instanceof List)) { + throw new IllegalArgumentException( + "Wrong object type used with protocol message reflection."); + } + + // Wrap the contents in a new list so that the caller cannot change + // the list's contents after setting it. + final List newList = new ArrayList(); + newList.addAll((List)value); + for (final Object element : newList) { + verifyType(descriptor.getLiteType(), element); + } + value = newList; + } else { + verifyType(descriptor.getLiteType(), value); + } + + fields.put(descriptor, value); + } + + /** + * Useful for implementing + * {@link Message.Builder#clearField(Descriptors.FieldDescriptor)}. + */ + public void clearField(final FieldDescriptorType descriptor) { + fields.remove(descriptor); + } + + /** + * Useful for implementing + * {@link Message#getRepeatedFieldCount(Descriptors.FieldDescriptor)}. + */ + public int getRepeatedFieldCount(final FieldDescriptorType descriptor) { + if (!descriptor.isRepeated()) { + throw new IllegalArgumentException( + "getRepeatedField() can only be called on repeated fields."); + } + + final Object value = fields.get(descriptor); + if (value == null) { + return 0; + } else { + return ((List) value).size(); + } + } + + /** + * Useful for implementing + * {@link Message#getRepeatedField(Descriptors.FieldDescriptor,int)}. + */ + @SuppressWarnings("unchecked") +public Object getRepeatedField(final FieldDescriptorType descriptor, + final int index) { + if (!descriptor.isRepeated()) { + throw new IllegalArgumentException( + "getRepeatedField() can only be called on repeated fields."); + } + + final Object value = fields.get(descriptor); + + if (value == null) { + throw new IndexOutOfBoundsException(); + } else { + return ((List) value).get(index); + } + } + + /** + * Useful for implementing + * {@link Message.Builder#setRepeatedField(Descriptors.FieldDescriptor,int,Object)}. + */ + @SuppressWarnings("unchecked") + public void setRepeatedField(final FieldDescriptorType descriptor, + final int index, + final Object value) { + if (!descriptor.isRepeated()) { + throw new IllegalArgumentException( + "getRepeatedField() can only be called on repeated fields."); + } + + final Object list = fields.get(descriptor); + if (list == null) { + throw new IndexOutOfBoundsException(); + } + + verifyType(descriptor.getLiteType(), value); + ((List) list).set(index, value); + } + + /** + * Useful for implementing + * {@link Message.Builder#addRepeatedField(Descriptors.FieldDescriptor,Object)}. + */ + @SuppressWarnings("unchecked") + public void addRepeatedField(final FieldDescriptorType descriptor, + final Object value) { + if (!descriptor.isRepeated()) { + throw new IllegalArgumentException( + "addRepeatedField() can only be called on repeated fields."); + } + + verifyType(descriptor.getLiteType(), value); + + final Object existingValue = fields.get(descriptor); + List list; + if (existingValue == null) { + list = new ArrayList(); + fields.put(descriptor, list); + } else { + list = (List) existingValue; + } + + list.add(value); + } + + /** + * Verifies that the given object is of the correct type to be a valid + * value for the given field. (For repeated fields, this checks if the + * object is the right type to be one element of the field.) + * + * @throws IllegalArgumentException The value is not of the right type. + */ + private static void verifyType(final WireFormat.FieldType type, + final Object value) { + if (value == null) { + throw new NullPointerException(); + } + + boolean isValid = false; + switch (type.getJavaType()) { + case INT: isValid = value instanceof Integer ; break; + case LONG: isValid = value instanceof Long ; break; + case FLOAT: isValid = value instanceof Float ; break; + case DOUBLE: isValid = value instanceof Double ; break; + case BOOLEAN: isValid = value instanceof Boolean ; break; + case STRING: isValid = value instanceof String ; break; + case BYTE_STRING: isValid = value instanceof ByteString; break; + case ENUM: + // TODO(kenton): Caller must do type checking here, I guess. + isValid = value instanceof Internal.EnumLite; + break; + case MESSAGE: + // TODO(kenton): Caller must do type checking here, I guess. + isValid = value instanceof MessageLite; + break; + } + + if (!isValid) { + // TODO(kenton): When chaining calls to setField(), it can be hard to + // tell from the stack trace which exact call failed, since the whole + // chain is considered one line of code. It would be nice to print + // more information here, e.g. naming the field. We used to do that. + // But we can't now that FieldSet doesn't use descriptors. Maybe this + // isn't a big deal, though, since it would only really apply when using + // reflection and generally people don't chain reflection setters. + throw new IllegalArgumentException( + "Wrong object type used with protocol message reflection."); + } + } + + // ================================================================= + // Parsing and serialization + + /** + * See {@link Message#isInitialized()}. Note: Since {@code FieldSet} + * itself does not have any way of knowing about required fields that + * aren't actually present in the set, it is up to the caller to check + * that all required fields are present. + */ + @SuppressWarnings("unchecked") + public boolean isInitialized() { + for (final Map.Entry entry: + fields.entrySet()) { + final FieldDescriptorType descriptor = entry.getKey(); + if (descriptor.getLiteJavaType() == WireFormat.JavaType.MESSAGE) { + if (descriptor.isRepeated()) { + for (final MessageLite element: + (List) entry.getValue()) { + if (!element.isInitialized()) { + return false; + } + } + } else { + if (!((MessageLite) entry.getValue()).isInitialized()) { + return false; + } + } + } + } + + return true; + } + + /** + * Given a field type, return the wire type. + * + * @returns One of the {@code WIRETYPE_} constants defined in + * {@link WireFormat}. + */ + static int getWireFormatForFieldType(final WireFormat.FieldType type, + boolean isPacked) { + if (isPacked) { + return WireFormat.WIRETYPE_LENGTH_DELIMITED; + } else { + return type.getWireType(); + } + } + + /** + * Like {@link #mergeFrom(Message)}, but merges from another {@link FieldSet}. + */ + @SuppressWarnings("unchecked") + public void mergeFrom(final FieldSet other) { + for (final Map.Entry entry: + other.fields.entrySet()) { + final FieldDescriptorType descriptor = entry.getKey(); + final Object otherValue = entry.getValue(); + + if (descriptor.isRepeated()) { + Object value = fields.get(descriptor); + if (value == null) { + // Our list is empty, but we still need to make a defensive copy of + // the other list since we don't know if the other FieldSet is still + // mutable. + fields.put(descriptor, new ArrayList((List) otherValue)); + } else { + // Concatenate the lists. + ((List) value).addAll((List) otherValue); + } + } else if (descriptor.getLiteJavaType() == WireFormat.JavaType.MESSAGE) { + Object value = fields.get(descriptor); + if (value == null) { + fields.put(descriptor, otherValue); + } else { + // Merge the messages. + fields.put(descriptor, + descriptor.internalMergeFrom( + ((MessageLite) value).toBuilder(), (MessageLite) otherValue) + .build()); + } + + } else { + fields.put(descriptor, otherValue); + } + } + } + + // TODO(kenton): Move static parsing and serialization methods into some + // other class. Probably WireFormat. + + /** + * Read a field of any primitive type from a CodedInputStream. Enums, + * groups, and embedded messages are not handled by this method. + * + * @param input The stream from which to read. + * @param type Declared type of the field. + * @return An object representing the field's value, of the exact + * type which would be returned by + * {@link Message#getField(Descriptors.FieldDescriptor)} for + * this field. + */ + public static Object readPrimitiveField( + CodedInputStream input, + final WireFormat.FieldType type) throws IOException { + switch (type) { + case DOUBLE : return input.readDouble (); + case FLOAT : return input.readFloat (); + case INT64 : return input.readInt64 (); + case UINT64 : return input.readUInt64 (); + case INT32 : return input.readInt32 (); + case FIXED64 : return input.readFixed64 (); + case FIXED32 : return input.readFixed32 (); + case BOOL : return input.readBool (); + case STRING : return input.readString (); + case BYTES : return input.readBytes (); + case UINT32 : return input.readUInt32 (); + case SFIXED32: return input.readSFixed32(); + case SFIXED64: return input.readSFixed64(); + case SINT32 : return input.readSInt32 (); + case SINT64 : return input.readSInt64 (); + + case GROUP: + throw new IllegalArgumentException( + "readPrimitiveField() cannot handle nested groups."); + case MESSAGE: + throw new IllegalArgumentException( + "readPrimitiveField() cannot handle embedded messages."); + case ENUM: + // We don't handle enums because we don't know what to do if the + // value is not recognized. + throw new IllegalArgumentException( + "readPrimitiveField() cannot handle enums."); + } + + throw new RuntimeException( + "There is no way to get here, but the compiler thinks otherwise."); + } + + /** See {@link Message#writeTo(CodedOutputStream)}. */ + public void writeTo(final CodedOutputStream output) + throws IOException { + for (final Map.Entry entry: + fields.entrySet()) { + writeField(entry.getKey(), entry.getValue(), output); + } + } + + /** + * Like {@link #writeTo} but uses MessageSet wire format. + */ + public void writeMessageSetTo(final CodedOutputStream output) + throws IOException { + for (final Map.Entry entry: + fields.entrySet()) { + final FieldDescriptorType descriptor = entry.getKey(); + if (descriptor.getLiteJavaType() == WireFormat.JavaType.MESSAGE && + !descriptor.isRepeated() && !descriptor.isPacked()) { + output.writeMessageSetExtension(entry.getKey().getNumber(), + (MessageLite) entry.getValue()); + } else { + writeField(descriptor, entry.getValue(), output); + } + } + } + + /** + * Write a single tag-value pair to the stream. + * + * @param output The output stream. + * @param type The field's type. + * @param number The field's number. + * @param value Object representing the field's value. Must be of the exact + * type which would be returned by + * {@link Message#getField(Descriptors.FieldDescriptor)} for + * this field. + */ + private static void writeElement(final CodedOutputStream output, + final WireFormat.FieldType type, + final int number, + final Object value) throws IOException { + // Special case for groups, which need a start and end tag; other fields + // can just use writeTag() and writeFieldNoTag(). + if (type == WireFormat.FieldType.GROUP) { + output.writeGroup(number, (MessageLite) value); + } else { + output.writeTag(number, getWireFormatForFieldType(type, false)); + writeElementNoTag(output, type, value); + } + } + + /** + * Write a field of arbitrary type, without its tag, to the stream. + * + * @param output The output stream. + * @param type The field's type. + * @param value Object representing the field's value. Must be of the exact + * type which would be returned by + * {@link Message#getField(Descriptors.FieldDescriptor)} for + * this field. + */ + private static void writeElementNoTag( + final CodedOutputStream output, + final WireFormat.FieldType type, + final Object value) throws IOException { + switch (type) { + case DOUBLE : output.writeDoubleNoTag ((Double ) value); break; + case FLOAT : output.writeFloatNoTag ((Float ) value); break; + case INT64 : output.writeInt64NoTag ((Long ) value); break; + case UINT64 : output.writeUInt64NoTag ((Long ) value); break; + case INT32 : output.writeInt32NoTag ((Integer ) value); break; + case FIXED64 : output.writeFixed64NoTag ((Long ) value); break; + case FIXED32 : output.writeFixed32NoTag ((Integer ) value); break; + case BOOL : output.writeBoolNoTag ((Boolean ) value); break; + case STRING : output.writeStringNoTag ((String ) value); break; + case GROUP : output.writeGroupNoTag ((MessageLite) value); break; + case MESSAGE : output.writeMessageNoTag ((MessageLite) value); break; + case BYTES : output.writeBytesNoTag ((ByteString ) value); break; + case UINT32 : output.writeUInt32NoTag ((Integer ) value); break; + case SFIXED32: output.writeSFixed32NoTag((Integer ) value); break; + case SFIXED64: output.writeSFixed64NoTag((Long ) value); break; + case SINT32 : output.writeSInt32NoTag ((Integer ) value); break; + case SINT64 : output.writeSInt64NoTag ((Long ) value); break; + + case ENUM: + output.writeEnumNoTag(((Internal.EnumLite) value).getNumber()); + break; + } + } + + /** Write a single field. */ + @SuppressWarnings("unchecked") +public static void writeField(final FieldDescriptorLite descriptor, + final Object value, + final CodedOutputStream output) + throws IOException { + WireFormat.FieldType type = descriptor.getLiteType(); + int number = descriptor.getNumber(); + if (descriptor.isRepeated()) { + final List valueList = (List)value; + if (descriptor.isPacked()) { + output.writeTag(number, WireFormat.WIRETYPE_LENGTH_DELIMITED); + // Compute the total data size so the length can be written. + int dataSize = 0; + for (final Object element : valueList) { + dataSize += computeElementSizeNoTag(type, element); + } + output.writeRawVarint32(dataSize); + // Write the data itself, without any tags. + for (final Object element : valueList) { + writeElementNoTag(output, type, element); + } + } else { + for (final Object element : valueList) { + writeElement(output, type, number, element); + } + } + } else { + writeElement(output, type, number, value); + } + } + + /** + * See {@link Message#getSerializedSize()}. It's up to the caller to cache + * the resulting size if desired. + */ + public int getSerializedSize() { + int size = 0; + for (final Map.Entry entry: + fields.entrySet()) { + size += computeFieldSize(entry.getKey(), entry.getValue()); + } + return size; + } + + /** + * Like {@link #getSerializedSize} but uses MessageSet wire format. + */ + public int getMessageSetSerializedSize() { + int size = 0; + for (final Map.Entry entry: + fields.entrySet()) { + final FieldDescriptorType descriptor = entry.getKey(); + if (descriptor.getLiteJavaType() == WireFormat.JavaType.MESSAGE && + !descriptor.isRepeated() && !descriptor.isPacked()) { + size += CodedOutputStream.computeMessageSetExtensionSize( + entry.getKey().getNumber(), (MessageLite) entry.getValue()); + } else { + size += computeFieldSize(descriptor, entry.getValue()); + } + } + return size; + } + + /** + * Compute the number of bytes that would be needed to encode a + * single tag/value pair of arbitrary type. + * + * @param type The field's type. + * @param number The field's number. + * @param value Object representing the field's value. Must be of the exact + * type which would be returned by + * {@link Message#getField(Descriptors.FieldDescriptor)} for + * this field. + */ + private static int computeElementSize( + final WireFormat.FieldType type, + final int number, final Object value) { + int tagSize = CodedOutputStream.computeTagSize(number); + if (type == WireFormat.FieldType.GROUP) { + tagSize *= 2; + } + return tagSize + computeElementSizeNoTag(type, value); + } + + /** + * Compute the number of bytes that would be needed to encode a + * particular value of arbitrary type, excluding tag. + * + * @param type The field's type. + * @param value Object representing the field's value. Must be of the exact + * type which would be returned by + * {@link Message#getField(Descriptors.FieldDescriptor)} for + * this field. + */ + private static int computeElementSizeNoTag( + final WireFormat.FieldType type, final Object value) { + switch (type) { + // Note: Minor violation of 80-char limit rule here because this would + // actually be harder to read if we wrapped the lines. + case DOUBLE : return CodedOutputStream.computeDoubleSizeNoTag ((Double )value); + case FLOAT : return CodedOutputStream.computeFloatSizeNoTag ((Float )value); + case INT64 : return CodedOutputStream.computeInt64SizeNoTag ((Long )value); + case UINT64 : return CodedOutputStream.computeUInt64SizeNoTag ((Long )value); + case INT32 : return CodedOutputStream.computeInt32SizeNoTag ((Integer )value); + case FIXED64 : return CodedOutputStream.computeFixed64SizeNoTag ((Long )value); + case FIXED32 : return CodedOutputStream.computeFixed32SizeNoTag ((Integer )value); + case BOOL : return CodedOutputStream.computeBoolSizeNoTag ((Boolean )value); + case STRING : return CodedOutputStream.computeStringSizeNoTag ((String )value); + case GROUP : return CodedOutputStream.computeGroupSizeNoTag ((MessageLite)value); + case MESSAGE : return CodedOutputStream.computeMessageSizeNoTag ((MessageLite)value); + case BYTES : return CodedOutputStream.computeBytesSizeNoTag ((ByteString )value); + case UINT32 : return CodedOutputStream.computeUInt32SizeNoTag ((Integer )value); + case SFIXED32: return CodedOutputStream.computeSFixed32SizeNoTag((Integer )value); + case SFIXED64: return CodedOutputStream.computeSFixed64SizeNoTag((Long )value); + case SINT32 : return CodedOutputStream.computeSInt32SizeNoTag ((Integer )value); + case SINT64 : return CodedOutputStream.computeSInt64SizeNoTag ((Long )value); + + case ENUM: + return CodedOutputStream.computeEnumSizeNoTag( + ((Internal.EnumLite) value).getNumber()); + } + + throw new RuntimeException( + "There is no way to get here, but the compiler thinks otherwise."); + } + + /** + * Compute the number of bytes needed to encode a particular field. + */ + @SuppressWarnings("unchecked") +public static int computeFieldSize(final FieldDescriptorLite descriptor, + final Object value) { + WireFormat.FieldType type = descriptor.getLiteType(); + int number = descriptor.getNumber(); + if (descriptor.isRepeated()) { + if (descriptor.isPacked()) { + int dataSize = 0; + for (final Object element : (List)value) { + dataSize += computeElementSizeNoTag(type, element); + } + return dataSize + + CodedOutputStream.computeTagSize(number) + + CodedOutputStream.computeRawVarint32Size(dataSize); + } else { + int size = 0; + for (final Object element : (List)value) { + size += computeElementSize(type, number, element); + } + return size; + } + } else { + return computeElementSize(type, number, value); + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/GeneratedMessage.java b/OsmAnd-java/src/com/google/protobuf/GeneratedMessage.java new file mode 100644 index 0000000000..53dc17e777 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/GeneratedMessage.java @@ -0,0 +1,1370 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import com.google.protobuf.Descriptors.Descriptor; +import com.google.protobuf.Descriptors.EnumValueDescriptor; +import com.google.protobuf.Descriptors.FieldDescriptor; + +/** + * All generated protocol message classes extend this class. This class + * implements most of the Message and Builder interfaces using Java reflection. + * Users can ignore this class and pretend that generated messages implement + * the Message interface directly. + * + * @author kenton@google.com Kenton Varda + */ +public abstract class GeneratedMessage extends AbstractMessage { + protected GeneratedMessage() {} + + private UnknownFieldSet unknownFields = UnknownFieldSet.getDefaultInstance(); + + /** + * Get the FieldAccessorTable for this type. We can't have the message + * class pass this in to the constructor because of bootstrapping trouble + * with DescriptorProtos. + */ + protected abstract FieldAccessorTable internalGetFieldAccessorTable(); + + @Override +public Descriptor getDescriptorForType() { + return internalGetFieldAccessorTable().descriptor; + } + + /** Internal helper which returns a mutable map. */ + @SuppressWarnings("unchecked") +private Map getAllFieldsMutable() { + final TreeMap result = + new TreeMap(); + final Descriptor descriptor = internalGetFieldAccessorTable().descriptor; + for (final FieldDescriptor field : descriptor.getFields()) { + if (field.isRepeated()) { + final List value = (List) getField(field); + if (!value.isEmpty()) { + result.put(field, value); + } + } else { + if (hasField(field)) { + result.put(field, getField(field)); + } + } + } + return result; + } + + @Override + public boolean isInitialized() { + for (final FieldDescriptor field : getDescriptorForType().getFields()) { + // Check that all required fields are present. + if (field.isRequired()) { + if (!hasField(field)) { + return false; + } + } + // Check that embedded messages are initialized. + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + if (field.isRepeated()) { + // Osmand fix (remove annotation) + final + List messageList = (List) getField(field); + for (final Message element : messageList) { + if (!element.isInitialized()) { + return false; + } + } + } else { + if (hasField(field) && !((Message) getField(field)).isInitialized()) { + return false; + } + } + } + } + + return true; + } + + @Override +public Map getAllFields() { + return Collections.unmodifiableMap(getAllFieldsMutable()); + } + + @Override +public boolean hasField(final FieldDescriptor field) { + return internalGetFieldAccessorTable().getField(field).has(this); + } + + @Override +public Object getField(final FieldDescriptor field) { + return internalGetFieldAccessorTable().getField(field).get(this); + } + + @Override +public int getRepeatedFieldCount(final FieldDescriptor field) { + return internalGetFieldAccessorTable().getField(field) + .getRepeatedCount(this); + } + + @Override +public Object getRepeatedField(final FieldDescriptor field, final int index) { + return internalGetFieldAccessorTable().getField(field) + .getRepeated(this, index); + } + + @Override +public final UnknownFieldSet getUnknownFields() { + return unknownFields; + } + + @SuppressWarnings("unchecked") + public abstract static class Builder + extends AbstractMessage.Builder { + protected Builder() {} + + // This is implemented here only to work around an apparent bug in the + // Java compiler and/or build system. See bug #1898463. The mere presence + // of this dummy clone() implementation makes it go away. + @Override + public BuilderType clone() { + throw new UnsupportedOperationException( + "This is supposed to be overridden by subclasses."); + } + + /** + * Get the message being built. We don't just pass this to the + * constructor because it becomes null when build() is called. + */ + protected abstract GeneratedMessage internalGetResult(); + + /** + * Get the FieldAccessorTable for this type. We can't have the message + * class pass this in to the constructor because of bootstrapping trouble + * with DescriptorProtos. + */ + private FieldAccessorTable internalGetFieldAccessorTable() { + return internalGetResult().internalGetFieldAccessorTable(); + } + + @Override + public Descriptor getDescriptorForType() { + return internalGetFieldAccessorTable().descriptor; + } + + @Override + public Map getAllFields() { + return internalGetResult().getAllFields(); + } + + @Override + public Message.Builder newBuilderForField( + final FieldDescriptor field) { + return internalGetFieldAccessorTable().getField(field).newBuilder(); + } + + @Override + public boolean hasField(final FieldDescriptor field) { + return internalGetResult().hasField(field); + } + + @Override + public Object getField(final FieldDescriptor field) { + if (field.isRepeated()) { + // The underlying list object is still modifiable at this point. + // Make sure not to expose the modifiable list to the caller. + return Collections.unmodifiableList( + (List) internalGetResult().getField(field)); + } else { + return internalGetResult().getField(field); + } + } + + @Override + public BuilderType setField(final FieldDescriptor field, + final Object value) { + internalGetFieldAccessorTable().getField(field).set(this, value); + return (BuilderType) this; + } + + @Override + public BuilderType clearField(final FieldDescriptor field) { + internalGetFieldAccessorTable().getField(field).clear(this); + return (BuilderType) this; + } + + @Override + public int getRepeatedFieldCount(final FieldDescriptor field) { + return internalGetResult().getRepeatedFieldCount(field); + } + + @Override + public Object getRepeatedField(final FieldDescriptor field, + final int index) { + return internalGetResult().getRepeatedField(field, index); + } + + @Override + public BuilderType setRepeatedField(final FieldDescriptor field, + final int index, final Object value) { + internalGetFieldAccessorTable().getField(field) + .setRepeated(this, index, value); + return (BuilderType) this; + } + + @Override + public BuilderType addRepeatedField(final FieldDescriptor field, + final Object value) { + internalGetFieldAccessorTable().getField(field).addRepeated(this, value); + return (BuilderType) this; + } + + @Override + public final UnknownFieldSet getUnknownFields() { + return internalGetResult().unknownFields; + } + + @Override + public final BuilderType setUnknownFields( + final UnknownFieldSet unknownFields) { + internalGetResult().unknownFields = unknownFields; + return (BuilderType) this; + } + + @Override + public final BuilderType mergeUnknownFields( + final UnknownFieldSet unknownFields) { + final GeneratedMessage result = internalGetResult(); + result.unknownFields = + UnknownFieldSet.newBuilder(result.unknownFields) + .mergeFrom(unknownFields) + .build(); + return (BuilderType) this; + } + + @Override + public boolean isInitialized() { + return internalGetResult().isInitialized(); + } + + /** + * Called by subclasses to parse an unknown field. + * @return {@code true} unless the tag is an end-group tag. + */ + protected boolean parseUnknownField( + final CodedInputStream input, + final UnknownFieldSet.Builder unknownFields, + final ExtensionRegistryLite extensionRegistry, + final int tag) throws IOException { + return unknownFields.mergeFieldFrom(tag, input); + } + } + + // ================================================================= + // Extensions-related stuff + + /** + * Generated message classes for message types that contain extension ranges + * subclass this. + * + *

    This class implements type-safe accessors for extensions. They + * implement all the same operations that you can do with normal fields -- + * e.g. "has", "get", and "getCount" -- but for extensions. The extensions + * are identified using instances of the class {@link GeneratedExtension}; + * the protocol compiler generates a static instance of this class for every + * extension in its input. Through the magic of generics, all is made + * type-safe. + * + *

    For example, imagine you have the {@code .proto} file: + * + *

    +   * option java_class = "MyProto";
    +   *
    +   * message Foo {
    +   *   extensions 1000 to max;
    +   * }
    +   *
    +   * extend Foo {
    +   *   optional int32 bar;
    +   * }
    +   * 
    + * + *

    Then you might write code like: + * + *

    +   * MyProto.Foo foo = getFoo();
    +   * int i = foo.getExtension(MyProto.bar);
    +   * 
    + * + *

    See also {@link ExtendableBuilder}. + */ + public abstract static class ExtendableMessage< + MessageType extends ExtendableMessage> + extends GeneratedMessage { + protected ExtendableMessage() {} + private final FieldSet extensions = FieldSet.newFieldSet(); + + private void verifyExtensionContainingType( + final GeneratedExtension extension) { + if (extension.getDescriptor().getContainingType() != + getDescriptorForType()) { + // This can only happen if someone uses unchecked operations. + throw new IllegalArgumentException( + "Extension is for type \"" + + extension.getDescriptor().getContainingType().getFullName() + + "\" which does not match message type \"" + + getDescriptorForType().getFullName() + "\"."); + } + } + + /** Check if a singular extension is present. */ + public final boolean hasExtension( + final GeneratedExtension extension) { + verifyExtensionContainingType(extension); + return extensions.hasField(extension.getDescriptor()); + } + + /** Get the number of elements in a repeated extension. */ + public final int getExtensionCount( + // osmand fix >> -> > > + final GeneratedExtension > extension) { + verifyExtensionContainingType(extension); + final FieldDescriptor descriptor = extension.getDescriptor(); + return extensions.getRepeatedFieldCount(descriptor); + } + + /** Get the value of an extension. */ + @SuppressWarnings("unchecked") + public final Type getExtension( + final GeneratedExtension extension) { + verifyExtensionContainingType(extension); + FieldDescriptor descriptor = extension.getDescriptor(); + final Object value = extensions.getField(descriptor); + if (value == null) { + if (descriptor.isRepeated()) { + return (Type) Collections.emptyList(); + } else if (descriptor.getJavaType() == + FieldDescriptor.JavaType.MESSAGE) { + return (Type) extension.getMessageDefaultInstance(); + } else { + return (Type) extension.fromReflectionType( + descriptor.getDefaultValue()); + } + } else { + return (Type) extension.fromReflectionType(value); + } + } + + /** Get one element of a repeated extension. */ + @SuppressWarnings("unchecked") + public final Type getExtension( + // osmand fix >> -> > > + final GeneratedExtension > extension, + final int index) { + verifyExtensionContainingType(extension); + FieldDescriptor descriptor = extension.getDescriptor(); + return (Type) extension.singularFromReflectionType( + extensions.getRepeatedField(descriptor, index)); + } + + /** Called by subclasses to check if all extensions are initialized. */ + protected boolean extensionsAreInitialized() { + return extensions.isInitialized(); + } + + @Override + public boolean isInitialized() { + return super.isInitialized() && extensionsAreInitialized(); + } + + /** + * Used by subclasses to serialize extensions. Extension ranges may be + * interleaved with field numbers, but we must write them in canonical + * (sorted by field number) order. ExtensionWriter helps us write + * individual ranges of extensions at once. + */ + protected class ExtensionWriter { + // Imagine how much simpler this code would be if Java iterators had + // a way to get the next element without advancing the iterator. + // osmand fix >> -> > > + private final Iterator > iter = + extensions.iterator(); + private Map.Entry next; + private final boolean messageSetWireFormat; + + private ExtensionWriter(final boolean messageSetWireFormat) { + if (iter.hasNext()) { + next = iter.next(); + } + this.messageSetWireFormat = messageSetWireFormat; + } + + public void writeUntil(final int end, final CodedOutputStream output) + throws IOException { + while (next != null && next.getKey().getNumber() < end) { + FieldDescriptor descriptor = next.getKey(); + if (messageSetWireFormat && descriptor.getLiteJavaType() == + WireFormat.JavaType.MESSAGE && + !descriptor.isRepeated()) { + output.writeMessageSetExtension(descriptor.getNumber(), + (Message) next.getValue()); + } else { + FieldSet.writeField(descriptor, next.getValue(), output); + } + if (iter.hasNext()) { + next = iter.next(); + } else { + next = null; + } + } + } + } + + protected ExtensionWriter newExtensionWriter() { + return new ExtensionWriter(false); + } + protected ExtensionWriter newMessageSetExtensionWriter() { + return new ExtensionWriter(true); + } + + /** Called by subclasses to compute the size of extensions. */ + protected int extensionsSerializedSize() { + return extensions.getSerializedSize(); + } + protected int extensionsSerializedSizeAsMessageSet() { + return extensions.getMessageSetSerializedSize(); + } + + // --------------------------------------------------------------- + // Reflection + + @Override + public Map getAllFields() { + final Map result = super.getAllFieldsMutable(); + result.putAll(extensions.getAllFields()); + return Collections.unmodifiableMap(result); + } + + @Override + public boolean hasField(final FieldDescriptor field) { + if (field.isExtension()) { + verifyContainingType(field); + return extensions.hasField(field); + } else { + return super.hasField(field); + } + } + + @Override + public Object getField(final FieldDescriptor field) { + if (field.isExtension()) { + verifyContainingType(field); + final Object value = extensions.getField(field); + if (value == null) { + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + // Lacking an ExtensionRegistry, we have no way to determine the + // extension's real type, so we return a DynamicMessage. + return DynamicMessage.getDefaultInstance(field.getMessageType()); + } else { + return field.getDefaultValue(); + } + } else { + return value; + } + } else { + return super.getField(field); + } + } + + @Override + public int getRepeatedFieldCount(final FieldDescriptor field) { + if (field.isExtension()) { + verifyContainingType(field); + return extensions.getRepeatedFieldCount(field); + } else { + return super.getRepeatedFieldCount(field); + } + } + + @Override + public Object getRepeatedField(final FieldDescriptor field, + final int index) { + if (field.isExtension()) { + verifyContainingType(field); + return extensions.getRepeatedField(field, index); + } else { + return super.getRepeatedField(field, index); + } + } + + private void verifyContainingType(final FieldDescriptor field) { + if (field.getContainingType() != getDescriptorForType()) { + throw new IllegalArgumentException( + "FieldDescriptor does not match message type."); + } + } + } + + /** + * Generated message builders for message types that contain extension ranges + * subclass this. + * + *

    This class implements type-safe accessors for extensions. They + * implement all the same operations that you can do with normal fields -- + * e.g. "get", "set", and "add" -- but for extensions. The extensions are + * identified using instances of the class {@link GeneratedExtension}; the + * protocol compiler generates a static instance of this class for every + * extension in its input. Through the magic of generics, all is made + * type-safe. + * + *

    For example, imagine you have the {@code .proto} file: + * + *

    +   * option java_class = "MyProto";
    +   *
    +   * message Foo {
    +   *   extensions 1000 to max;
    +   * }
    +   *
    +   * extend Foo {
    +   *   optional int32 bar;
    +   * }
    +   * 
    + * + *

    Then you might write code like: + * + *

    +   * MyProto.Foo foo =
    +   *   MyProto.Foo.newBuilder()
    +   *     .setExtension(MyProto.bar, 123)
    +   *     .build();
    +   * 
    + * + *

    See also {@link ExtendableMessage}. + */ + @SuppressWarnings("unchecked") + public abstract static class ExtendableBuilder< + MessageType extends ExtendableMessage, + BuilderType extends ExtendableBuilder> + extends Builder { + protected ExtendableBuilder() {} + + // This is implemented here only to work around an apparent bug in the + // Java compiler and/or build system. See bug #1898463. The mere presence + // of this dummy clone() implementation makes it go away. + @Override + public BuilderType clone() { + throw new UnsupportedOperationException( + "This is supposed to be overridden by subclasses."); + } + + @Override + protected abstract ExtendableMessage internalGetResult(); + + /** Check if a singular extension is present. */ + public final boolean hasExtension( + final GeneratedExtension extension) { + return internalGetResult().hasExtension(extension); + } + + /** Get the number of elements in a repeated extension. */ + public final int getExtensionCount( + // osmand fix >> -> > > + final GeneratedExtension > extension) { + return internalGetResult().getExtensionCount(extension); + } + + /** Get the value of an extension. */ + public final Type getExtension( + final GeneratedExtension extension) { + return internalGetResult().getExtension(extension); + } + + /** Get one element of a repeated extension. */ + public final Type getExtension( + // osmand fix >> -> > > + final GeneratedExtension > extension, + final int index) { + return internalGetResult().getExtension(extension, index); + } + + /** Set the value of an extension. */ + public final BuilderType setExtension( + final GeneratedExtension extension, + final Type value) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + final FieldDescriptor descriptor = extension.getDescriptor(); + message.extensions.setField(descriptor, + extension.toReflectionType(value)); + return (BuilderType) this; + } + + /** Set the value of one element of a repeated extension. */ + public final BuilderType setExtension( + // osmand fix >> -> > > + final GeneratedExtension > extension, + final int index, final Type value) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + final FieldDescriptor descriptor = extension.getDescriptor(); + message.extensions.setRepeatedField( + descriptor, index, + extension.singularToReflectionType(value)); + return (BuilderType) this; + } + + /** Append a value to a repeated extension. */ + public final BuilderType addExtension( + // osmand fix >> -> > > + final GeneratedExtension > extension, + final Type value) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + final FieldDescriptor descriptor = extension.getDescriptor(); + message.extensions.addRepeatedField( + descriptor, extension.singularToReflectionType(value)); + return (BuilderType) this; + } + + /** Clear an extension. */ + public final BuilderType clearExtension( + final GeneratedExtension extension) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + message.extensions.clearField(extension.getDescriptor()); + return (BuilderType) this; + } + + /** + * Called by subclasses to parse an unknown field or an extension. + * @return {@code true} unless the tag is an end-group tag. + */ + @Override + protected boolean parseUnknownField( + final CodedInputStream input, + final UnknownFieldSet.Builder unknownFields, + final ExtensionRegistryLite extensionRegistry, + final int tag) throws IOException { + final ExtendableMessage message = internalGetResult(); + return AbstractMessage.Builder.mergeFieldFrom( + input, unknownFields, extensionRegistry, this, tag); + } + + // --------------------------------------------------------------- + // Reflection + + // We don't have to override the get*() methods here because they already + // just forward to the underlying message. + + @Override + public BuilderType setField(final FieldDescriptor field, + final Object value) { + if (field.isExtension()) { + final ExtendableMessage message = internalGetResult(); + message.verifyContainingType(field); + message.extensions.setField(field, value); + return (BuilderType) this; + } else { + return super.setField(field, value); + } + } + + @Override + public BuilderType clearField(final FieldDescriptor field) { + if (field.isExtension()) { + final ExtendableMessage message = internalGetResult(); + message.verifyContainingType(field); + message.extensions.clearField(field); + return (BuilderType) this; + } else { + return super.clearField(field); + } + } + + @Override + public BuilderType setRepeatedField(final FieldDescriptor field, + final int index, final Object value) { + if (field.isExtension()) { + final ExtendableMessage message = internalGetResult(); + message.verifyContainingType(field); + message.extensions.setRepeatedField(field, index, value); + return (BuilderType) this; + } else { + return super.setRepeatedField(field, index, value); + } + } + + @Override + public BuilderType addRepeatedField(final FieldDescriptor field, + final Object value) { + if (field.isExtension()) { + final ExtendableMessage message = internalGetResult(); + message.verifyContainingType(field); + message.extensions.addRepeatedField(field, value); + return (BuilderType) this; + } else { + return super.addRepeatedField(field, value); + } + } + + protected final void mergeExtensionFields(final ExtendableMessage other) { + internalGetResult().extensions.mergeFrom(other.extensions); + } + } + + // ----------------------------------------------------------------- + + /** For use by generated code only. */ + public static + GeneratedExtension + newGeneratedExtension() { + return new GeneratedExtension(); + } + + /** + * Type used to represent generated extensions. The protocol compiler + * generates a static singleton instance of this class for each extension. + * + *

    For example, imagine you have the {@code .proto} file: + * + *

    +   * option java_class = "MyProto";
    +   *
    +   * message Foo {
    +   *   extensions 1000 to max;
    +   * }
    +   *
    +   * extend Foo {
    +   *   optional int32 bar;
    +   * }
    +   * 
    + * + *

    Then, {@code MyProto.Foo.bar} has type + * {@code GeneratedExtension}. + * + *

    In general, users should ignore the details of this type, and simply use + * these static singletons as parameters to the extension accessors defined + * in {@link ExtendableMessage} and {@link ExtendableBuilder}. + */ + public static final class GeneratedExtension< + ContainingType extends Message, Type> { + // TODO(kenton): Find ways to avoid using Java reflection within this + // class. Also try to avoid suppressing unchecked warnings. + + // We can't always initialize a GeneratedExtension when we first construct + // it due to initialization order difficulties (namely, the descriptor may + // not have been constructed yet, since it is often constructed by the + // initializer of a separate module). So, we construct an uninitialized + // GeneratedExtension once, then call internalInit() on it later. Generated + // code will always call internalInit() on all extensions as part of the + // static initialization code, and internalInit() throws an exception if + // called more than once, so this method is useless to users. + private GeneratedExtension() {} + + /** For use by generated code only. */ + public void internalInit(final FieldDescriptor descriptor, + final Class type) { + if (this.descriptor != null) { + throw new IllegalStateException("Already initialized."); + } + + if (!descriptor.isExtension()) { + throw new IllegalArgumentException( + "GeneratedExtension given a regular (non-extension) field."); + } + + this.descriptor = descriptor; + this.type = type; + + switch (descriptor.getJavaType()) { + case MESSAGE: + enumValueOf = null; + enumGetValueDescriptor = null; + messageDefaultInstance = + (Message) invokeOrDie(getMethodOrDie(type, "getDefaultInstance"), + null); + if (messageDefaultInstance == null) { + throw new IllegalStateException( + type.getName() + ".getDefaultInstance() returned null."); + } + break; + case ENUM: + enumValueOf = getMethodOrDie(type, "valueOf", + EnumValueDescriptor.class); + enumGetValueDescriptor = getMethodOrDie(type, "getValueDescriptor"); + messageDefaultInstance = null; + break; + default: + enumValueOf = null; + enumGetValueDescriptor = null; + messageDefaultInstance = null; + break; + } + } + + private FieldDescriptor descriptor; + private Class type; + private Method enumValueOf; + private Method enumGetValueDescriptor; + private Message messageDefaultInstance; + + public FieldDescriptor getDescriptor() { return descriptor; } + + /** + * If the extension is an embedded message or group, returns the default + * instance of the message. + */ + @SuppressWarnings("unchecked") + public Message getMessageDefaultInstance() { + return messageDefaultInstance; + } + + /** + * Convert from the type used by the reflection accessors to the type used + * by native accessors. E.g., for enums, the reflection accessors use + * EnumValueDescriptors but the native accessors use the generated enum + * type. + */ + @SuppressWarnings("unchecked") + private Object fromReflectionType(final Object value) { + if (descriptor.isRepeated()) { + if (descriptor.getJavaType() == FieldDescriptor.JavaType.MESSAGE || + descriptor.getJavaType() == FieldDescriptor.JavaType.ENUM) { + // Must convert the whole list. + final List result = new ArrayList(); + for (final Object element : (List) value) { + result.add(singularFromReflectionType(element)); + } + return result; + } else { + return value; + } + } else { + return singularFromReflectionType(value); + } + } + + /** + * Like {@link #fromReflectionType(Object)}, but if the type is a repeated + * type, this converts a single element. + */ + private Object singularFromReflectionType(final Object value) { + switch (descriptor.getJavaType()) { + case MESSAGE: + if (type.isInstance(value)) { + return value; + } else { + // It seems the copy of the embedded message stored inside the + // extended message is not of the exact type the user was + // expecting. This can happen if a user defines a + // GeneratedExtension manually and gives it a different type. + // This should not happen in normal use. But, to be nice, we'll + // copy the message to whatever type the caller was expecting. + return messageDefaultInstance.newBuilderForType() + .mergeFrom((Message) value).build(); + } + case ENUM: + return invokeOrDie(enumValueOf, null, (EnumValueDescriptor) value); + default: + return value; + } + } + + /** + * Convert from the type used by the native accessors to the type used + * by reflection accessors. E.g., for enums, the reflection accessors use + * EnumValueDescriptors but the native accessors use the generated enum + * type. + */ + @SuppressWarnings("unchecked") + private Object toReflectionType(final Object value) { + if (descriptor.isRepeated()) { + if (descriptor.getJavaType() == FieldDescriptor.JavaType.ENUM) { + // Must convert the whole list. + final List result = new ArrayList(); + for (final Object element : (List) value) { + result.add(singularToReflectionType(element)); + } + return result; + } else { + return value; + } + } else { + return singularToReflectionType(value); + } + } + + /** + * Like {@link #toReflectionType(Object)}, but if the type is a repeated + * type, this converts a single element. + */ + private Object singularToReflectionType(final Object value) { + switch (descriptor.getJavaType()) { + case ENUM: + return invokeOrDie(enumGetValueDescriptor, value); + default: + return value; + } + } + } + + // ================================================================= + + /** Calls Class.getMethod and throws a RuntimeException if it fails. */ + @SuppressWarnings("unchecked") + private static Method getMethodOrDie( + final Class clazz, final String name, final Class... params) { + try { + return clazz.getMethod(name, params); + } catch (NoSuchMethodException e) { + throw new RuntimeException( + "Generated message class \"" + clazz.getName() + + "\" missing method \"" + name + "\".", e); + } + } + + /** Calls invoke and throws a RuntimeException if it fails. */ + private static Object invokeOrDie( + final Method method, final Object object, final Object... params) { + try { + return method.invoke(object, params); + } catch (IllegalAccessException e) { + throw new RuntimeException( + "Couldn't use Java reflection to implement protocol message " + + "reflection.", e); + } catch (InvocationTargetException e) { + final Throwable cause = e.getCause(); + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } else if (cause instanceof Error) { + throw (Error) cause; + } else { + throw new RuntimeException( + "Unexpected exception thrown by generated accessor method.", cause); + } + } + } + + /** + * Users should ignore this class. This class provides the implementation + * with access to the fields of a message object using Java reflection. + */ + public static final class FieldAccessorTable { + + /** + * Construct a FieldAccessorTable for a particular message class. Only + * one FieldAccessorTable should ever be constructed per class. + * + * @param descriptor The type's descriptor. + * @param camelCaseNames The camelcase names of all fields in the message. + * These are used to derive the accessor method names. + * @param messageClass The message type. + * @param builderClass The builder type. + */ + public FieldAccessorTable( + final Descriptor descriptor, + final String[] camelCaseNames, + final Class messageClass, + final Class builderClass) { + this.descriptor = descriptor; + fields = new FieldAccessor[descriptor.getFields().size()]; + + for (int i = 0; i < fields.length; i++) { + final FieldDescriptor field = descriptor.getFields().get(i); + if (field.isRepeated()) { + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + fields[i] = new RepeatedMessageFieldAccessor( + field, camelCaseNames[i], messageClass, builderClass); + } else if (field.getJavaType() == FieldDescriptor.JavaType.ENUM) { + fields[i] = new RepeatedEnumFieldAccessor( + field, camelCaseNames[i], messageClass, builderClass); + } else { + fields[i] = new RepeatedFieldAccessor( + field, camelCaseNames[i], messageClass, builderClass); + } + } else { + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + fields[i] = new SingularMessageFieldAccessor( + field, camelCaseNames[i], messageClass, builderClass); + } else if (field.getJavaType() == FieldDescriptor.JavaType.ENUM) { + fields[i] = new SingularEnumFieldAccessor( + field, camelCaseNames[i], messageClass, builderClass); + } else { + fields[i] = new SingularFieldAccessor( + field, camelCaseNames[i], messageClass, builderClass); + } + } + } + } + + private final Descriptor descriptor; + private final FieldAccessor[] fields; + + /** Get the FieldAccessor for a particular field. */ + private FieldAccessor getField(final FieldDescriptor field) { + if (field.getContainingType() != descriptor) { + throw new IllegalArgumentException( + "FieldDescriptor does not match message type."); + } else if (field.isExtension()) { + // If this type had extensions, it would subclass ExtendableMessage, + // which overrides the reflection interface to handle extensions. + throw new IllegalArgumentException( + "This type does not have extensions."); + } + return fields[field.getIndex()]; + } + + /** + * Abstract interface that provides access to a single field. This is + * implemented differently depending on the field type and cardinality. + */ + private interface FieldAccessor { + Object get(GeneratedMessage message); + void set(Builder builder, Object value); + Object getRepeated(GeneratedMessage message, int index); + void setRepeated(Builder builder, + int index, Object value); + void addRepeated(Builder builder, Object value); + boolean has(GeneratedMessage message); + int getRepeatedCount(GeneratedMessage message); + void clear(Builder builder); + Message.Builder newBuilder(); + } + + // --------------------------------------------------------------- + + private static class SingularFieldAccessor implements FieldAccessor { + SingularFieldAccessor( + final FieldDescriptor descriptor, final String camelCaseName, + final Class messageClass, + final Class builderClass) { + getMethod = getMethodOrDie(messageClass, "get" + camelCaseName); + type = getMethod.getReturnType(); + setMethod = getMethodOrDie(builderClass, "set" + camelCaseName, type); + hasMethod = + getMethodOrDie(messageClass, "has" + camelCaseName); + clearMethod = getMethodOrDie(builderClass, "clear" + camelCaseName); + } + + // Note: We use Java reflection to call public methods rather than + // access private fields directly as this avoids runtime security + // checks. + protected final Class type; + protected final Method getMethod; + protected final Method setMethod; + protected final Method hasMethod; + protected final Method clearMethod; + + @Override + public Object get(final GeneratedMessage message) { + return invokeOrDie(getMethod, message); + } + @Override + public void set(final Builder builder, final Object value) { + invokeOrDie(setMethod, builder, value); + } + @Override + public Object getRepeated(final GeneratedMessage message, + final int index) { + throw new UnsupportedOperationException( + "getRepeatedField() called on a singular field."); + } + @Override + public void setRepeated(final Builder builder, + final int index, final Object value) { + throw new UnsupportedOperationException( + "setRepeatedField() called on a singular field."); + } + @Override + public void addRepeated(final Builder builder, final Object value) { + throw new UnsupportedOperationException( + "addRepeatedField() called on a singular field."); + } + @Override + public boolean has(final GeneratedMessage message) { + return (Boolean) invokeOrDie(hasMethod, message); + } + @Override + public int getRepeatedCount(final GeneratedMessage message) { + throw new UnsupportedOperationException( + "getRepeatedFieldSize() called on a singular field."); + } + @Override + public void clear(final Builder builder) { + invokeOrDie(clearMethod, builder); + } + @Override + public Message.Builder newBuilder() { + throw new UnsupportedOperationException( + "newBuilderForField() called on a non-Message type."); + } + } + + private static class RepeatedFieldAccessor implements FieldAccessor { + RepeatedFieldAccessor( + final FieldDescriptor descriptor, final String camelCaseName, + final Class messageClass, + final Class builderClass) { + getMethod = getMethodOrDie(messageClass, + "get" + camelCaseName + "List"); + + getRepeatedMethod = + getMethodOrDie(messageClass, "get" + camelCaseName, Integer.TYPE); + type = getRepeatedMethod.getReturnType(); + setRepeatedMethod = + getMethodOrDie(builderClass, "set" + camelCaseName, + Integer.TYPE, type); + addRepeatedMethod = + getMethodOrDie(builderClass, "add" + camelCaseName, type); + getCountMethod = + getMethodOrDie(messageClass, "get" + camelCaseName + "Count"); + + clearMethod = getMethodOrDie(builderClass, "clear" + camelCaseName); + } + + protected final Class type; + protected final Method getMethod; + protected final Method getRepeatedMethod; + protected final Method setRepeatedMethod; + protected final Method addRepeatedMethod; + protected final Method getCountMethod; + protected final Method clearMethod; + + @Override + public Object get(final GeneratedMessage message) { + return invokeOrDie(getMethod, message); + } + @Override + public void set(final Builder builder, final Object value) { + // Add all the elements individually. This serves two purposes: + // 1) Verifies that each element has the correct type. + // 2) Insures that the caller cannot modify the list later on and + // have the modifications be reflected in the message. + clear(builder); + for (final Object element : (List) value) { + addRepeated(builder, element); + } + } + @Override + public Object getRepeated(final GeneratedMessage message, + final int index) { + return invokeOrDie(getRepeatedMethod, message, index); + } + @Override + public void setRepeated(final Builder builder, + final int index, final Object value) { + invokeOrDie(setRepeatedMethod, builder, index, value); + } + @Override + public void addRepeated(final Builder builder, final Object value) { + invokeOrDie(addRepeatedMethod, builder, value); + } + @Override + public boolean has(final GeneratedMessage message) { + throw new UnsupportedOperationException( + "hasField() called on a singular field."); + } + @Override + public int getRepeatedCount(final GeneratedMessage message) { + return (Integer) invokeOrDie(getCountMethod, message); + } + @Override + public void clear(final Builder builder) { + invokeOrDie(clearMethod, builder); + } + @Override + public Message.Builder newBuilder() { + throw new UnsupportedOperationException( + "newBuilderForField() called on a non-Message type."); + } + } + + // --------------------------------------------------------------- + + private static final class SingularEnumFieldAccessor + extends SingularFieldAccessor { + SingularEnumFieldAccessor( + final FieldDescriptor descriptor, final String camelCaseName, + final Class messageClass, + final Class builderClass) { + super(descriptor, camelCaseName, messageClass, builderClass); + + valueOfMethod = getMethodOrDie(type, "valueOf", + EnumValueDescriptor.class); + getValueDescriptorMethod = + getMethodOrDie(type, "getValueDescriptor"); + } + + private Method valueOfMethod; + private Method getValueDescriptorMethod; + + @Override + public Object get(final GeneratedMessage message) { + return invokeOrDie(getValueDescriptorMethod, super.get(message)); + } + @Override + public void set(final Builder builder, final Object value) { + super.set(builder, invokeOrDie(valueOfMethod, null, value)); + } + } + + private static final class RepeatedEnumFieldAccessor + extends RepeatedFieldAccessor { + RepeatedEnumFieldAccessor( + final FieldDescriptor descriptor, final String camelCaseName, + final Class messageClass, + final Class builderClass) { + super(descriptor, camelCaseName, messageClass, builderClass); + + valueOfMethod = getMethodOrDie(type, "valueOf", + EnumValueDescriptor.class); + getValueDescriptorMethod = + getMethodOrDie(type, "getValueDescriptor"); + } + + private final Method valueOfMethod; + private final Method getValueDescriptorMethod; + + @Override + @SuppressWarnings("unchecked") + public Object get(final GeneratedMessage message) { + final List newList = new ArrayList(); + for (final Object element : (List) super.get(message)) { + newList.add(invokeOrDie(getValueDescriptorMethod, element)); + } + return Collections.unmodifiableList(newList); + } + @Override + public Object getRepeated(final GeneratedMessage message, + final int index) { + return invokeOrDie(getValueDescriptorMethod, + super.getRepeated(message, index)); + } + @Override + public void setRepeated(final Builder builder, + final int index, final Object value) { + super.setRepeated(builder, index, invokeOrDie(valueOfMethod, null, + value)); + } + @Override + public void addRepeated(final Builder builder, final Object value) { + super.addRepeated(builder, invokeOrDie(valueOfMethod, null, value)); + } + } + + // --------------------------------------------------------------- + + private static final class SingularMessageFieldAccessor + extends SingularFieldAccessor { + SingularMessageFieldAccessor( + final FieldDescriptor descriptor, final String camelCaseName, + final Class messageClass, + final Class builderClass) { + super(descriptor, camelCaseName, messageClass, builderClass); + + newBuilderMethod = getMethodOrDie(type, "newBuilder"); + } + + private final Method newBuilderMethod; + + private Object coerceType(final Object value) { + if (type.isInstance(value)) { + return value; + } else { + // The value is not the exact right message type. However, if it + // is an alternative implementation of the same type -- e.g. a + // DynamicMessage -- we should accept it. In this case we can make + // a copy of the message. + return ((Message.Builder) invokeOrDie(newBuilderMethod, null)) + .mergeFrom((Message) value).build(); + } + } + + @Override + public void set(final Builder builder, final Object value) { + super.set(builder, coerceType(value)); + } + @Override + public Message.Builder newBuilder() { + return (Message.Builder) invokeOrDie(newBuilderMethod, null); + } + } + + private static final class RepeatedMessageFieldAccessor + extends RepeatedFieldAccessor { + RepeatedMessageFieldAccessor( + final FieldDescriptor descriptor, final String camelCaseName, + final Class messageClass, + final Class builderClass) { + super(descriptor, camelCaseName, messageClass, builderClass); + + newBuilderMethod = getMethodOrDie(type, "newBuilder"); + } + + private final Method newBuilderMethod; + + private Object coerceType(final Object value) { + if (type.isInstance(value)) { + return value; + } else { + // The value is not the exact right message type. However, if it + // is an alternative implementation of the same type -- e.g. a + // DynamicMessage -- we should accept it. In this case we can make + // a copy of the message. + return ((Message.Builder) invokeOrDie(newBuilderMethod, null)) + .mergeFrom((Message) value).build(); + } + } + + @Override + public void setRepeated(final Builder builder, + final int index, final Object value) { + super.setRepeated(builder, index, coerceType(value)); + } + @Override + public void addRepeated(final Builder builder, final Object value) { + super.addRepeated(builder, coerceType(value)); + } + @Override + public Message.Builder newBuilder() { + return (Message.Builder) invokeOrDie(newBuilderMethod, null); + } + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/GeneratedMessageLite.java b/OsmAnd-java/src/com/google/protobuf/GeneratedMessageLite.java new file mode 100644 index 0000000000..a5137665c9 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/GeneratedMessageLite.java @@ -0,0 +1,576 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Lite version of {@link GeneratedMessage}. + * + * @author kenton@google.com Kenton Varda + */ +public abstract class GeneratedMessageLite extends AbstractMessageLite { + protected GeneratedMessageLite() {} + + @SuppressWarnings("unchecked") + public abstract static class Builder + extends AbstractMessageLite.Builder { + protected Builder() {} + + // This is implemented here only to work around an apparent bug in the + // Java compiler and/or build system. See bug #1898463. The mere presence + // of this dummy clone() implementation makes it go away. + @Override + public BuilderType clone() { + throw new UnsupportedOperationException( + "This is supposed to be overridden by subclasses."); + } + + /** All subclasses implement this. */ + public abstract BuilderType mergeFrom(MessageType message); + + // Defined here for return type covariance. + @Override + public abstract MessageType getDefaultInstanceForType(); + + /** + * Get the message being built. We don't just pass this to the + * constructor because it becomes null when build() is called. + */ + protected abstract MessageType internalGetResult(); + + /** + * Called by subclasses to parse an unknown field. + * @return {@code true} unless the tag is an end-group tag. + */ + protected boolean parseUnknownField( + final CodedInputStream input, + final ExtensionRegistryLite extensionRegistry, + final int tag) throws IOException { + return input.skipField(tag); + } + } + + // ================================================================= + // Extensions-related stuff + + /** + * Lite equivalent of {@link GeneratedMessage.ExtendableMessage}. + */ + public abstract static class ExtendableMessage< + MessageType extends ExtendableMessage> + extends GeneratedMessageLite { + protected ExtendableMessage() {} + private final FieldSet extensions = + FieldSet.newFieldSet(); + + private void verifyExtensionContainingType( + final GeneratedExtension extension) { + if (extension.getContainingTypeDefaultInstance() != + getDefaultInstanceForType()) { + // This can only happen if someone uses unchecked operations. + throw new IllegalArgumentException( + "This extension is for a different message type. Please make " + + "sure that you are not suppressing any generics type warnings."); + } + } + + /** Check if a singular extension is present. */ + public final boolean hasExtension( + final GeneratedExtension extension) { + verifyExtensionContainingType(extension); + return extensions.hasField(extension.descriptor); + } + + /** Get the number of elements in a repeated extension. */ + public final int getExtensionCount( + final GeneratedExtension> extension) { + verifyExtensionContainingType(extension); + return extensions.getRepeatedFieldCount(extension.descriptor); + } + + /** Get the value of an extension. */ + @SuppressWarnings("unchecked") + public final Type getExtension( + final GeneratedExtension extension) { + verifyExtensionContainingType(extension); + final Object value = extensions.getField(extension.descriptor); + if (value == null) { + return extension.defaultValue; + } else { + return (Type) value; + } + } + + /** Get one element of a repeated extension. */ + @SuppressWarnings("unchecked") + public final Type getExtension( + final GeneratedExtension> extension, + final int index) { + verifyExtensionContainingType(extension); + return (Type) extensions.getRepeatedField(extension.descriptor, index); + } + + /** Called by subclasses to check if all extensions are initialized. */ + protected boolean extensionsAreInitialized() { + return extensions.isInitialized(); + } + + /** + * Used by subclasses to serialize extensions. Extension ranges may be + * interleaved with field numbers, but we must write them in canonical + * (sorted by field number) order. ExtensionWriter helps us write + * individual ranges of extensions at once. + */ + protected class ExtensionWriter { + // Imagine how much simpler this code would be if Java iterators had + // a way to get the next element without advancing the iterator. + + private final Iterator> iter = + extensions.iterator(); + private Map.Entry next; + private final boolean messageSetWireFormat; + + private ExtensionWriter(boolean messageSetWireFormat) { + if (iter.hasNext()) { + next = iter.next(); + } + this.messageSetWireFormat = messageSetWireFormat; + } + + public void writeUntil(final int end, final CodedOutputStream output) + throws IOException { + while (next != null && next.getKey().getNumber() < end) { + ExtensionDescriptor extension = next.getKey(); + if (messageSetWireFormat && extension.getLiteJavaType() == + WireFormat.JavaType.MESSAGE && + !extension.isRepeated()) { + output.writeMessageSetExtension(extension.getNumber(), + (MessageLite) next.getValue()); + } else { + FieldSet.writeField(extension, next.getValue(), output); + } + if (iter.hasNext()) { + next = iter.next(); + } else { + next = null; + } + } + } + } + + protected ExtensionWriter newExtensionWriter() { + return new ExtensionWriter(false); + } + protected ExtensionWriter newMessageSetExtensionWriter() { + return new ExtensionWriter(true); + } + + /** Called by subclasses to compute the size of extensions. */ + protected int extensionsSerializedSize() { + return extensions.getSerializedSize(); + } + protected int extensionsSerializedSizeAsMessageSet() { + return extensions.getMessageSetSerializedSize(); + } + } + + /** + * Lite equivalent of {@link GeneratedMessage.ExtendableBuilder}. + */ + @SuppressWarnings("unchecked") + public abstract static class ExtendableBuilder< + MessageType extends ExtendableMessage, + BuilderType extends ExtendableBuilder> + extends Builder { + protected ExtendableBuilder() {} + + // This is implemented here only to work around an apparent bug in the + // Java compiler and/or build system. See bug #1898463. The mere presence + // of this dummy clone() implementation makes it go away. + @Override + public BuilderType clone() { + throw new UnsupportedOperationException( + "This is supposed to be overridden by subclasses."); + } + + @Override + protected abstract MessageType internalGetResult(); + + /** Check if a singular extension is present. */ + public final boolean hasExtension( + final GeneratedExtension extension) { + return internalGetResult().hasExtension(extension); + } + + /** Get the number of elements in a repeated extension. */ + public final int getExtensionCount( + final GeneratedExtension> extension) { + return internalGetResult().getExtensionCount(extension); + } + + /** Get the value of an extension. */ + public final Type getExtension( + final GeneratedExtension extension) { + return internalGetResult().getExtension(extension); + } + + /** Get one element of a repeated extension. */ + public final Type getExtension( + final GeneratedExtension> extension, + final int index) { + return internalGetResult().getExtension(extension, index); + } + + /** Set the value of an extension. */ + public final BuilderType setExtension( + final GeneratedExtension extension, + final Type value) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + message.extensions.setField(extension.descriptor, value); + return (BuilderType) this; + } + + /** Set the value of one element of a repeated extension. */ + public final BuilderType setExtension( + final GeneratedExtension> extension, + final int index, final Type value) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + message.extensions.setRepeatedField(extension.descriptor, index, value); + return (BuilderType) this; + } + + /** Append a value to a repeated extension. */ + public final BuilderType addExtension( + final GeneratedExtension> extension, + final Type value) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + message.extensions.addRepeatedField(extension.descriptor, value); + return (BuilderType) this; + } + + /** Clear an extension. */ + public final BuilderType clearExtension( + final GeneratedExtension extension) { + final ExtendableMessage message = internalGetResult(); + message.verifyExtensionContainingType(extension); + message.extensions.clearField(extension.descriptor); + return (BuilderType) this; + } + + /** + * Called by subclasses to parse an unknown field or an extension. + * @return {@code true} unless the tag is an end-group tag. + */ + @Override + protected boolean parseUnknownField( + final CodedInputStream input, + final ExtensionRegistryLite extensionRegistry, + final int tag) throws IOException { + final FieldSet extensions = + ((ExtendableMessage) internalGetResult()).extensions; + + final int wireType = WireFormat.getTagWireType(tag); + final int fieldNumber = WireFormat.getTagFieldNumber(tag); + + final GeneratedExtension extension = + extensionRegistry.findLiteExtensionByNumber( + getDefaultInstanceForType(), fieldNumber); + + boolean unknown = false; + boolean packed = false; + if (extension == null) { + unknown = true; // Unknown field. + } else if (wireType == FieldSet.getWireFormatForFieldType( + extension.descriptor.getLiteType(), + false /* isPacked */)) { + packed = false; // Normal, unpacked value. + } else if (extension.descriptor.isRepeated && + extension.descriptor.type.isPackable() && + wireType == FieldSet.getWireFormatForFieldType( + extension.descriptor.getLiteType(), + true /* isPacked */)) { + packed = true; // Packed value. + } else { + unknown = true; // Wrong wire type. + } + + if (unknown) { // Unknown field or wrong wire type. Skip. + return input.skipField(tag); + } + + if (packed) { + final int length = input.readRawVarint32(); + final int limit = input.pushLimit(length); + if (extension.descriptor.getLiteType() == WireFormat.FieldType.ENUM) { + while (input.getBytesUntilLimit() > 0) { + final int rawValue = input.readEnum(); + final Object value = + extension.descriptor.getEnumType().findValueByNumber(rawValue); + if (value == null) { + // If the number isn't recognized as a valid value for this + // enum, drop it (don't even add it to unknownFields). + return true; + } + extensions.addRepeatedField(extension.descriptor, value); + } + } else { + while (input.getBytesUntilLimit() > 0) { + final Object value = + FieldSet.readPrimitiveField(input, + extension.descriptor.getLiteType()); + extensions.addRepeatedField(extension.descriptor, value); + } + } + input.popLimit(limit); + } else { + final Object value; + switch (extension.descriptor.getLiteJavaType()) { + case MESSAGE: { + MessageLite.Builder subBuilder = null; + if (!extension.descriptor.isRepeated()) { + MessageLite existingValue = + (MessageLite) extensions.getField(extension.descriptor); + if (existingValue != null) { + subBuilder = existingValue.toBuilder(); + } + } + if (subBuilder == null) { + subBuilder = extension.messageDefaultInstance.newBuilderForType(); + } + if (extension.descriptor.getLiteType() == + WireFormat.FieldType.GROUP) { + input.readGroup(extension.getNumber(), + subBuilder, extensionRegistry); + } else { + input.readMessage(subBuilder, extensionRegistry); + } + value = subBuilder.build(); + break; + } + case ENUM: + final int rawValue = input.readEnum(); + value = extension.descriptor.getEnumType() + .findValueByNumber(rawValue); + // If the number isn't recognized as a valid value for this enum, + // drop it. + if (value == null) { + return true; + } + break; + default: + value = FieldSet.readPrimitiveField(input, + extension.descriptor.getLiteType()); + break; + } + + if (extension.descriptor.isRepeated()) { + extensions.addRepeatedField(extension.descriptor, value); + } else { + extensions.setField(extension.descriptor, value); + } + } + + return true; + } + + protected final void mergeExtensionFields(final MessageType other) { + ((ExtendableMessage) internalGetResult()).extensions.mergeFrom( + ((ExtendableMessage) other).extensions); + } + } + + // ----------------------------------------------------------------- + + /** For use by generated code only. */ + public static + GeneratedExtension + newGeneratedExtension() { + return new GeneratedExtension(); + } + + private static final class ExtensionDescriptor + implements FieldSet.FieldDescriptorLite< + ExtensionDescriptor> { + private ExtensionDescriptor( + final Internal.EnumLiteMap enumTypeMap, + final int number, + final WireFormat.FieldType type, + final boolean isRepeated, + final boolean isPacked) { + this.enumTypeMap = enumTypeMap; + this.number = number; + this.type = type; + this.isRepeated = isRepeated; + this.isPacked = isPacked; + } + + private final Internal.EnumLiteMap enumTypeMap; + private final int number; + private final WireFormat.FieldType type; + private final boolean isRepeated; + private final boolean isPacked; + + @Override + public int getNumber() { + return number; + } + + @Override + public WireFormat.FieldType getLiteType() { + return type; + } + + @Override + public WireFormat.JavaType getLiteJavaType() { + return type.getJavaType(); + } + + @Override + public boolean isRepeated() { + return isRepeated; + } + + @Override + public boolean isPacked() { + return isPacked; + } + + @Override + public Internal.EnumLiteMap getEnumType() { + return enumTypeMap; + } + + @Override + @SuppressWarnings("unchecked") + public MessageLite.Builder internalMergeFrom( + MessageLite.Builder to, MessageLite from) { + return ((Builder) to).mergeFrom((GeneratedMessageLite) from); + } + + @Override + public int compareTo(ExtensionDescriptor other) { + return number - other.number; + } + } + + /** + * Lite equivalent to {@link GeneratedMessage.GeneratedExtension}. + * + * Users should ignore the contents of this class and only use objects of + * this type as parameters to extension accessors and ExtensionRegistry.add(). + */ + public static final class GeneratedExtension< + ContainingType extends MessageLite, Type> { + // We can't always initialize a GeneratedExtension when we first construct + // it due to initialization order difficulties (namely, the default + // instances may not have been constructed yet). So, we construct an + // uninitialized GeneratedExtension once, then call internalInit() on it + // later. Generated code will always call internalInit() on all extensions + // as part of the static initialization code, and internalInit() throws an + // exception if called more than once, so this method is useless to users. + private GeneratedExtension() {} + + private void internalInit( + final ContainingType containingTypeDefaultInstance, + final Type defaultValue, + final MessageLite messageDefaultInstance, + final ExtensionDescriptor descriptor) { + this.containingTypeDefaultInstance = containingTypeDefaultInstance; + this.defaultValue = defaultValue; + this.messageDefaultInstance = messageDefaultInstance; + this.descriptor = descriptor; + } + + /** For use by generated code only. */ + public void internalInitSingular( + final ContainingType containingTypeDefaultInstance, + final Type defaultValue, + final MessageLite messageDefaultInstance, + final Internal.EnumLiteMap enumTypeMap, + final int number, + final WireFormat.FieldType type) { + internalInit( + containingTypeDefaultInstance, defaultValue, messageDefaultInstance, + new ExtensionDescriptor(enumTypeMap, number, type, + false /* isRepeated */, false /* isPacked */)); + } + + /** For use by generated code only. */ + @SuppressWarnings("unchecked") + public void internalInitRepeated( + final ContainingType containingTypeDefaultInstance, + final MessageLite messageDefaultInstance, + final Internal.EnumLiteMap enumTypeMap, + final int number, + final WireFormat.FieldType type, + final boolean isPacked) { + internalInit( + containingTypeDefaultInstance, (Type) Collections.emptyList(), + messageDefaultInstance, + new ExtensionDescriptor( + enumTypeMap, number, type, true /* isRepeated */, isPacked)); + } + + private ContainingType containingTypeDefaultInstance; + private Type defaultValue; + private MessageLite messageDefaultInstance; + private ExtensionDescriptor descriptor; + + /** + * Default instance of the type being extended, used to identify that type. + */ + public ContainingType getContainingTypeDefaultInstance() { + return containingTypeDefaultInstance; + } + + /** Get the field number. */ + public int getNumber() { + return descriptor.getNumber(); + } + + /** + * If the extension is an embedded message, this is the default instance of + * that type. + */ + public MessageLite getMessageDefaultInstance() { + return messageDefaultInstance; + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/Internal.java b/OsmAnd-java/src/com/google/protobuf/Internal.java new file mode 100644 index 0000000000..965465e14b --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/Internal.java @@ -0,0 +1,121 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.UnsupportedEncodingException; + +/** + * The classes contained within are used internally by the Protocol Buffer + * library and generated message implementations. They are public only because + * those generated messages do not reside in the {@code protobuf} package. + * Others should not use this class directly. + * + * @author kenton@google.com (Kenton Varda) + */ +public class Internal { + /** + * Helper called by generated code to construct default values for string + * fields. + *

    + * The protocol compiler does not actually contain a UTF-8 decoder -- it + * just pushes UTF-8-encoded text around without touching it. The one place + * where this presents a problem is when generating Java string literals. + * Unicode characters in the string literal would normally need to be encoded + * using a Unicode escape sequence, which would require decoding them. + * To get around this, protoc instead embeds the UTF-8 bytes into the + * generated code and leaves it to the runtime library to decode them. + *

    + * It gets worse, though. If protoc just generated a byte array, like: + * new byte[] {0x12, 0x34, 0x56, 0x78} + * Java actually generates *code* which allocates an array and then fills + * in each value. This is much less efficient than just embedding the bytes + * directly into the bytecode. To get around this, we need another + * work-around. String literals are embedded directly, so protoc actually + * generates a string literal corresponding to the bytes. The easiest way + * to do this is to use the ISO-8859-1 character set, which corresponds to + * the first 256 characters of the Unicode range. Protoc can then use + * good old CEscape to generate the string. + *

    + * So we have a string literal which represents a set of bytes which + * represents another string. This function -- stringDefaultValue -- + * converts from the generated string to the string we actually want. The + * generated code calls this automatically. + */ + public static String stringDefaultValue(String bytes) { + try { + return new String(bytes.getBytes("ISO-8859-1"), "UTF-8"); + } catch (UnsupportedEncodingException e) { + // This should never happen since all JVMs are required to implement + // both of the above character sets. + throw new IllegalStateException( + "Java VM does not support a standard character set.", e); + } + } + + /** + * Helper called by generated code to construct default values for bytes + * fields. + *

    + * This is a lot like {@link #stringDefaultValue}, but for bytes fields. + * In this case we only need the second of the two hacks -- allowing us to + * embed raw bytes as a string literal with ISO-8859-1 encoding. + */ + public static ByteString bytesDefaultValue(String bytes) { + try { + return ByteString.copyFrom(bytes.getBytes("ISO-8859-1")); + } catch (UnsupportedEncodingException e) { + // This should never happen since all JVMs are required to implement + // ISO-8859-1. + throw new IllegalStateException( + "Java VM does not support a standard character set.", e); + } + } + + /** + * Interface for an enum value or value descriptor, to be used in FieldSet. + * The lite library stores enum values directly in FieldSets but the full + * library stores EnumValueDescriptors in order to better support reflection. + */ + public interface EnumLite { + int getNumber(); + } + + /** + * Interface for an object which maps integers to {@link EnumLite}s. + * {@link Descriptors.EnumDescriptor} implements this interface by mapping + * numbers to {@link Descriptors.EnumValueDescriptor}s. Additionally, + * every generated enum type has a static method internalGetValueMap() which + * returns an implementation of this type that maps numbers to enum values. + */ + public interface EnumLiteMap { + T findValueByNumber(int number); + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/InvalidProtocolBufferException.java b/OsmAnd-java/src/com/google/protobuf/InvalidProtocolBufferException.java new file mode 100644 index 0000000000..90f7ffbc28 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/InvalidProtocolBufferException.java @@ -0,0 +1,93 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; + +/** + * Thrown when a protocol message being parsed is invalid in some way, + * e.g. it contains a malformed varint or a negative byte length. + * + * @author kenton@google.com Kenton Varda + */ +public class InvalidProtocolBufferException extends IOException { + private static final long serialVersionUID = -1616151763072450476L; + + public InvalidProtocolBufferException(final String description) { + super(description); + } + + static InvalidProtocolBufferException truncatedMessage() { + return new InvalidProtocolBufferException( + "While parsing a protocol message, the input ended unexpectedly " + + "in the middle of a field. This could mean either than the " + + "input has been truncated or that an embedded message " + + "misreported its own length."); + } + + static InvalidProtocolBufferException negativeSize() { + return new InvalidProtocolBufferException( + "CodedInputStream encountered an embedded string or message " + + "which claimed to have negative size."); + } + + static InvalidProtocolBufferException malformedVarint() { + return new InvalidProtocolBufferException( + "CodedInputStream encountered a malformed varint."); + } + + static InvalidProtocolBufferException invalidTag() { + return new InvalidProtocolBufferException( + "Protocol message contained an invalid tag (zero)."); + } + + static InvalidProtocolBufferException invalidEndTag() { + return new InvalidProtocolBufferException( + "Protocol message end-group tag did not match expected tag."); + } + + static InvalidProtocolBufferException invalidWireType() { + return new InvalidProtocolBufferException( + "Protocol message tag had invalid wire type."); + } + + static InvalidProtocolBufferException recursionLimitExceeded() { + return new InvalidProtocolBufferException( + "Protocol message had too many levels of nesting. May be malicious. " + + "Use CodedInputStream.setRecursionLimit() to increase the depth limit."); + } + + static InvalidProtocolBufferException sizeLimitExceeded() { + return new InvalidProtocolBufferException( + "Protocol message was too large. May be malicious. " + + "Use CodedInputStream.setSizeLimit() to increase the size limit."); + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/Message.java b/OsmAnd-java/src/com/google/protobuf/Message.java new file mode 100644 index 0000000000..bd8ed82973 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/Message.java @@ -0,0 +1,325 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// TODO(kenton): Use generics? E.g. Builder, then +// mergeFrom*() could return BuilderType for better type-safety. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +/** + * Abstract interface implemented by Protocol Message objects. + *

    + * See also {@link MessageLite}, which defines most of the methods that typical + * users care about. {@link Message} adds to it methods that are not available + * in the "lite" runtime. The biggest added features are introspection and + * reflection -- i.e., getting descriptors for the message type and accessing + * the field values dynamically. + * + * @author kenton@google.com Kenton Varda + */ +public interface Message extends MessageLite { + /** + * Get the message's type's descriptor. This differs from the + * {@code getDescriptor()} method of generated message classes in that + * this method is an abstract method of the {@code Message} interface + * whereas {@code getDescriptor()} is a static method of a specific class. + * They return the same thing. + */ + Descriptors.Descriptor getDescriptorForType(); + + // (From MessageLite, re-declared here only for return type covariance.) + @Override +Message getDefaultInstanceForType(); + + /** + * Returns a collection of all the fields in this message which are set + * and their corresponding values. A singular ("required" or "optional") + * field is set iff hasField() returns true for that field. A "repeated" + * field is set iff getRepeatedFieldSize() is greater than zero. The + * values are exactly what would be returned by calling + * {@link #getField(Descriptors.FieldDescriptor)} for each field. The map + * is guaranteed to be a sorted map, so iterating over it will return fields + * in order by field number. + */ + Map getAllFields(); + + /** + * Returns true if the given field is set. This is exactly equivalent to + * calling the generated "has" accessor method corresponding to the field. + * @throws IllegalArgumentException The field is a repeated field, or + * {@code field.getContainingType() != getDescriptorForType()}. + */ + boolean hasField(Descriptors.FieldDescriptor field); + + /** + * Obtains the value of the given field, or the default value if it is + * not set. For primitive fields, the boxed primitive value is returned. + * For enum fields, the EnumValueDescriptor for the value is returend. For + * embedded message fields, the sub-message is returned. For repeated + * fields, a java.util.List is returned. + */ + Object getField(Descriptors.FieldDescriptor field); + + /** + * Gets the number of elements of a repeated field. This is exactly + * equivalent to calling the generated "Count" accessor method corresponding + * to the field. + * @throws IllegalArgumentException The field is not a repeated field, or + * {@code field.getContainingType() != getDescriptorForType()}. + */ + int getRepeatedFieldCount(Descriptors.FieldDescriptor field); + + /** + * Gets an element of a repeated field. For primitive fields, the boxed + * primitive value is returned. For enum fields, the EnumValueDescriptor + * for the value is returend. For embedded message fields, the sub-message + * is returned. + * @throws IllegalArgumentException The field is not a repeated field, or + * {@code field.getContainingType() != getDescriptorForType()}. + */ + Object getRepeatedField(Descriptors.FieldDescriptor field, int index); + + /** Get the {@link UnknownFieldSet} for this message. */ + UnknownFieldSet getUnknownFields(); + + // ----------------------------------------------------------------- + // Comparison and hashing + + /** + * Compares the specified object with this message for equality. Returns + * true if the given object is a message of the same type (as + * defined by {@code getDescriptorForType()}) and has identical values for + * all of its fields. + * + * @param other object to be compared for equality with this message + * @return true if the specified object is equal to this message + */ + @Override + boolean equals(Object other); + + /** + * Returns the hash code value for this message. The hash code of a message + * is defined to be getDescriptor().hashCode() ^ map.hashCode(), + * where map is a map of field numbers to field values. + * + * @return the hash code value for this message + * @see Map#hashCode() + */ + @Override + int hashCode(); + + // ----------------------------------------------------------------- + // Convenience methods. + + /** + * Converts the message to a string in protocol buffer text format. This is + * just a trivial wrapper around {@link TextFormat#printToString(Message)}. + */ + @Override + String toString(); + + // ================================================================= + // Builders + + // (From MessageLite, re-declared here only for return type covariance.) + @Override +Builder newBuilderForType(); + @Override +Builder toBuilder(); + + /** + * Abstract interface implemented by Protocol Message builders. + */ + interface Builder extends MessageLite.Builder { + // (From MessageLite.Builder, re-declared here only for return type + // covariance.) + @Override + Builder clear(); + + /** + * Merge {@code other} into the message being built. {@code other} must + * have the exact same type as {@code this} (i.e. + * {@code getDescriptorForType() == other.getDescriptorForType()}). + * + * Merging occurs as follows. For each field:
    + * * For singular primitive fields, if the field is set in {@code other}, + * then {@code other}'s value overwrites the value in this message.
    + * * For singular message fields, if the field is set in {@code other}, + * it is merged into the corresponding sub-message of this message + * using the same merging rules.
    + * * For repeated fields, the elements in {@code other} are concatenated + * with the elements in this message. + * + * This is equivalent to the {@code Message::MergeFrom} method in C++. + */ + Builder mergeFrom(Message other); + + // (From MessageLite.Builder, re-declared here only for return type + // covariance.) + @Override + Message build(); + @Override + Message buildPartial(); + @Override + Builder clone(); + @Override + Builder mergeFrom(CodedInputStream input) throws IOException; + @Override + Builder mergeFrom(CodedInputStream input, + ExtensionRegistryLite extensionRegistry) + throws IOException; + + /** + * Get the message's type's descriptor. + * See {@link Message#getDescriptorForType()}. + */ + Descriptors.Descriptor getDescriptorForType(); + + // (From MessageLite.Builder, re-declared here only for return type + // covariance.) + @Override + Message getDefaultInstanceForType(); + + /** + * Like {@link Message#getAllFields()}. The returned map may or may not + * reflect future changes to the builder. Either way, the returned map is + * itself unmodifiable. + */ + Map getAllFields(); + + /** + * Create a Builder for messages of the appropriate type for the given + * field. Messages built with this can then be passed to setField(), + * setRepeatedField(), or addRepeatedField(). + */ + Builder newBuilderForField(Descriptors.FieldDescriptor field); + + /** Like {@link Message#hasField(Descriptors.FieldDescriptor)} */ + boolean hasField(Descriptors.FieldDescriptor field); + + /** Like {@link Message#getField(Descriptors.FieldDescriptor)} */ + Object getField(Descriptors.FieldDescriptor field); + + /** + * Sets a field to the given value. The value must be of the correct type + * for this field, i.e. the same type that + * {@link Message#getField(Descriptors.FieldDescriptor)} would return. + */ + Builder setField(Descriptors.FieldDescriptor field, Object value); + + /** + * Clears the field. This is exactly equivalent to calling the generated + * "clear" accessor method corresponding to the field. + */ + Builder clearField(Descriptors.FieldDescriptor field); + + /** + * Like {@link Message#getRepeatedFieldCount(Descriptors.FieldDescriptor)} + */ + int getRepeatedFieldCount(Descriptors.FieldDescriptor field); + + /** + * Like {@link Message#getRepeatedField(Descriptors.FieldDescriptor,int)} + */ + Object getRepeatedField(Descriptors.FieldDescriptor field, int index); + + /** + * Sets an element of a repeated field to the given value. The value must + * be of the correct type for this field, i.e. the same type that + * {@link Message#getRepeatedField(Descriptors.FieldDescriptor,int)} would + * return. + * @throws IllegalArgumentException The field is not a repeated field, or + * {@code field.getContainingType() != getDescriptorForType()}. + */ + Builder setRepeatedField(Descriptors.FieldDescriptor field, + int index, Object value); + + /** + * Like {@code setRepeatedField}, but appends the value as a new element. + * @throws IllegalArgumentException The field is not a repeated field, or + * {@code field.getContainingType() != getDescriptorForType()}. + */ + Builder addRepeatedField(Descriptors.FieldDescriptor field, Object value); + + /** Get the {@link UnknownFieldSet} for this message. */ + UnknownFieldSet getUnknownFields(); + + /** Set the {@link UnknownFieldSet} for this message. */ + Builder setUnknownFields(UnknownFieldSet unknownFields); + + /** + * Merge some unknown fields into the {@link UnknownFieldSet} for this + * message. + */ + Builder mergeUnknownFields(UnknownFieldSet unknownFields); + + // --------------------------------------------------------------- + // Convenience methods. + + // (From MessageLite.Builder, re-declared here only for return type + // covariance.) + @Override + Builder mergeFrom(ByteString data) throws InvalidProtocolBufferException; + @Override + Builder mergeFrom(ByteString data, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; + @Override + Builder mergeFrom(byte[] data) throws InvalidProtocolBufferException; + @Override + Builder mergeFrom(byte[] data, int off, int len) + throws InvalidProtocolBufferException; + @Override + Builder mergeFrom(byte[] data, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; + @Override + Builder mergeFrom(byte[] data, int off, int len, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; + @Override + Builder mergeFrom(InputStream input) throws IOException; + @Override + Builder mergeFrom(InputStream input, + ExtensionRegistryLite extensionRegistry) + throws IOException; + @Override + boolean mergeDelimitedFrom(InputStream input) + throws IOException; + @Override + boolean mergeDelimitedFrom(InputStream input, + ExtensionRegistryLite extensionRegistry) + throws IOException; + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/MessageLite.java b/OsmAnd-java/src/com/google/protobuf/MessageLite.java new file mode 100644 index 0000000000..cf7f39e2f5 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/MessageLite.java @@ -0,0 +1,335 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// TODO(kenton): Use generics? E.g. Builder, then +// mergeFrom*() could return BuilderType for better type-safety. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Abstract interface implemented by Protocol Message objects. + * + *

    This interface is implemented by all protocol message objects. Non-lite + * messages additionally implement the Message interface, which is a subclass + * of MessageLite. Use MessageLite instead when you only need the subset of + * features which it supports -- namely, nothing that uses descriptors or + * reflection. You can instruct the protocol compiler to generate classes + * which implement only MessageLite, not the full Message interface, by adding + * the follow line to the .proto file: + *

    + *   option optimize_for = LITE_RUNTIME;
    + * 
    + * + *

    This is particularly useful on resource-constrained systems where the + * full protocol buffers runtime library is too big. + * + *

    Note that on non-constrained systems (e.g. servers) when you need to link + * in lots of protocol definitions, a better way to reduce total code footprint + * is to use {@code optimize_for = CODE_SIZE}. This will make the generated + * code smaller while still supporting all the same features (at the expense of + * speed). {@code optimize_for = LITE_RUNTIME} is best when you only have a + * small number of message types linked into your binary, in which case the + * size of the protocol buffers runtime itself is the biggest problem. + * + * @author kenton@google.com Kenton Varda + */ +public interface MessageLite { + /** + * Get an instance of the type with all fields set to their default values. + * This may or may not be a singleton. This differs from the + * {@code getDefaultInstance()} method of generated message classes in that + * this method is an abstract method of the {@code MessageLite} interface + * whereas {@code getDefaultInstance()} is a static method of a specific + * class. They return the same thing. + */ + MessageLite getDefaultInstanceForType(); + + /** + * Returns true if all required fields in the message and all embedded + * messages are set, false otherwise. + */ + boolean isInitialized(); + + /** + * Serializes the message and writes it to {@code output}. This does not + * flush or close the stream. + */ + void writeTo(CodedOutputStream output) throws IOException; + + /** + * Get the number of bytes required to encode this message. The result + * is only computed on the first call and memoized after that. + */ + int getSerializedSize(); + + // ----------------------------------------------------------------- + // Convenience methods. + + /** + * Serializes the message to a {@code ByteString} and returns it. This is + * just a trivial wrapper around + * {@link #writeTo(CodedOutputStream)}. + */ + ByteString toByteString(); + + /** + * Serializes the message to a {@code byte} array and returns it. This is + * just a trivial wrapper around + * {@link #writeTo(CodedOutputStream)}. + */ + byte[] toByteArray(); + + /** + * Serializes the message and writes it to {@code output}. This is just a + * trivial wrapper around {@link #writeTo(CodedOutputStream)}. This does + * not flush or close the stream. + *

    + * NOTE: Protocol Buffers are not self-delimiting. Therefore, if you write + * any more data to the stream after the message, you must somehow ensure + * that the parser on the receiving end does not interpret this as being + * part of the protocol message. This can be done e.g. by writing the size + * of the message before the data, then making sure to limit the input to + * that size on the receiving end (e.g. by wrapping the InputStream in one + * which limits the input). Alternatively, just use + * {@link #writeDelimitedTo(OutputStream)}. + */ + void writeTo(OutputStream output) throws IOException; + + /** + * Like {@link #writeTo(OutputStream)}, but writes the size of the message + * as a varint before writing the data. This allows more data to be written + * to the stream after the message without the need to delimit the message + * data yourself. Use {@link Builder#mergeDelimitedFrom(InputStream)} (or + * the static method {@code YourMessageType.parseDelimitedFrom(InputStream)}) + * to parse messages written by this method. + */ + void writeDelimitedTo(OutputStream output) throws IOException; + + // ================================================================= + // Builders + + /** + * Constructs a new builder for a message of the same type as this message. + */ + Builder newBuilderForType(); + + /** + * Constructs a builder initialized with the current message. Use this to + * derive a new message from the current one. + */ + Builder toBuilder(); + + /** + * Abstract interface implemented by Protocol Message builders. + */ + interface Builder extends Cloneable { + /** Resets all fields to their default values. */ + Builder clear(); + + /** + * Construct the final message. Once this is called, the Builder is no + * longer valid, and calling any other method will result in undefined + * behavior and may throw a NullPointerException. If you need to continue + * working with the builder after calling {@code build()}, {@code clone()} + * it first. + * @throws UninitializedMessageException The message is missing one or more + * required fields (i.e. {@link #isInitialized()} returns false). + * Use {@link #buildPartial()} to bypass this check. + */ + MessageLite build(); + + /** + * Like {@link #build()}, but does not throw an exception if the message + * is missing required fields. Instead, a partial message is returned. + * Once this is called, the Builder is no longer valid, and calling any + * will result in undefined behavior and may throw a NullPointerException. + * + * If you need to continue working with the builder after calling + * {@code buildPartial()}, {@code clone()} it first. + */ + MessageLite buildPartial(); + + /** + * Clones the Builder. + * @see Object#clone() + */ + Builder clone(); + + /** + * Returns true if all required fields in the message and all embedded + * messages are set, false otherwise. + */ + boolean isInitialized(); + + /** + * Parses a message of this type from the input and merges it with this + * message, as if using {@link Builder#mergeFrom(MessageLite)}. + * + *

    Warning: This does not verify that all required fields are present in + * the input message. If you call {@link #build()} without setting all + * required fields, it will throw an {@link UninitializedMessageException}, + * which is a {@code RuntimeException} and thus might not be caught. There + * are a few good ways to deal with this: + *

      + *
    • Call {@link #isInitialized()} to verify that all required fields + * are set before building. + *
    • Parse the message separately using one of the static + * {@code parseFrom} methods, then use {@link #mergeFrom(MessageLite)} + * to merge it with this one. {@code parseFrom} will throw an + * {@link InvalidProtocolBufferException} (an {@code IOException}) + * if some required fields are missing. + *
    • Use {@code buildPartial()} to build, which ignores missing + * required fields. + *
    + * + *

    Note: The caller should call + * {@link CodedInputStream#checkLastTagWas(int)} after calling this to + * verify that the last tag seen was the appropriate end-group tag, + * or zero for EOF. + */ + Builder mergeFrom(CodedInputStream input) throws IOException; + + /** + * Like {@link Builder#mergeFrom(CodedInputStream)}, but also + * parses extensions. The extensions that you want to be able to parse + * must be registered in {@code extensionRegistry}. Extensions not in + * the registry will be treated as unknown fields. + */ + Builder mergeFrom(CodedInputStream input, + ExtensionRegistryLite extensionRegistry) + throws IOException; + + /** + * Get the message's type's default instance. + * See {@link MessageLite#getDefaultInstanceForType()}. + */ + MessageLite getDefaultInstanceForType(); + + // --------------------------------------------------------------- + // Convenience methods. + + /** + * Parse {@code data} as a message of this type and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. + */ + Builder mergeFrom(ByteString data) throws InvalidProtocolBufferException; + + /** + * Parse {@code data} as a message of this type and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream,ExtensionRegistry)}. + */ + Builder mergeFrom(ByteString data, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; + + /** + * Parse {@code data} as a message of this type and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. + */ + Builder mergeFrom(byte[] data) throws InvalidProtocolBufferException; + + /** + * Parse {@code data} as a message of this type and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. + */ + Builder mergeFrom(byte[] data, int off, int len) + throws InvalidProtocolBufferException; + + /** + * Parse {@code data} as a message of this type and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream,ExtensionRegistry)}. + */ + Builder mergeFrom(byte[] data, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; + + /** + * Parse {@code data} as a message of this type and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream,ExtensionRegistry)}. + */ + Builder mergeFrom(byte[] data, int off, int len, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; + + /** + * Parse a message of this type from {@code input} and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. Note that this method always + * reads the entire input (unless it throws an exception). If you + * want it to stop earlier, you will need to wrap your input in some + * wrapper stream that limits reading. Or, use + * {@link MessageLite#writeDelimitedTo(OutputStream)} to write your message + * and {@link #mergeDelimitedFrom(InputStream)} to read it. + *

    + * Despite usually reading the entire input, this does not close the stream. + */ + Builder mergeFrom(InputStream input) throws IOException; + + /** + * Parse a message of this type from {@code input} and merge it with the + * message being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream,ExtensionRegistry)}. + */ + Builder mergeFrom(InputStream input, + ExtensionRegistryLite extensionRegistry) + throws IOException; + + /** + * Like {@link #mergeFrom(InputStream)}, but does not read until EOF. + * Instead, the size of the message (encoded as a varint) is read first, + * then the message data. Use + * {@link MessageLite#writeDelimitedTo(OutputStream)} to write messages in + * this format. + * + * @returns True if successful, or false if the stream is at EOF when the + * method starts. Any other error (including reaching EOF during + * parsing) will cause an exception to be thrown. + */ + boolean mergeDelimitedFrom(InputStream input) + throws IOException; + + /** + * Like {@link #mergeDelimitedFrom(InputStream)} but supporting extensions. + */ + boolean mergeDelimitedFrom(InputStream input, + ExtensionRegistryLite extensionRegistry) + throws IOException; + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/ProtocolMessageEnum.java b/OsmAnd-java/src/com/google/protobuf/ProtocolMessageEnum.java new file mode 100644 index 0000000000..f25cd3d908 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/ProtocolMessageEnum.java @@ -0,0 +1,59 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import com.google.protobuf.Descriptors.EnumDescriptor; +import com.google.protobuf.Descriptors.EnumValueDescriptor; + +/** + * Interface of useful methods added to all enums generated by the protocol + * compiler. + */ +public interface ProtocolMessageEnum extends Internal.EnumLite { + + /** + * Return the value's numeric value as defined in the .proto file. + */ + @Override +int getNumber(); + + /** + * Return the value's descriptor, which contains information such as + * value name, number, and type. + */ + EnumValueDescriptor getValueDescriptor(); + + /** + * Return the enum type's descriptor, which contains information + * about each defined value, etc. + */ + EnumDescriptor getDescriptorForType(); +} diff --git a/OsmAnd-java/src/com/google/protobuf/RpcCallback.java b/OsmAnd-java/src/com/google/protobuf/RpcCallback.java new file mode 100644 index 0000000000..1fd35ed332 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/RpcCallback.java @@ -0,0 +1,47 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + * Interface for an RPC callback, normally called when an RPC completes. + * {@code ParameterType} is normally the method's response message type. + * + *

    Starting with version 2.3.0, RPC implementations should not try to build + * on this, but should instead provide code generator plugins which generate + * code specific to the particular RPC implementation. This way the generated + * code can be more appropriate for the implementation in use and can avoid + * unnecessary layers of indirection. + * + * @author kenton@google.com Kenton Varda + */ +public interface RpcCallback { + void run(ParameterType parameter); +} diff --git a/OsmAnd-java/src/com/google/protobuf/RpcChannel.java b/OsmAnd-java/src/com/google/protobuf/RpcChannel.java new file mode 100644 index 0000000000..c6ec54fc91 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/RpcChannel.java @@ -0,0 +1,71 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + *

    Abstract interface for an RPC channel. An {@code RpcChannel} represents a + * communication line to a {@link Service} which can be used to call that + * {@link Service}'s methods. The {@link Service} may be running on another + * machine. Normally, you should not call an {@code RpcChannel} directly, but + * instead construct a stub {@link Service} wrapping it. Example: + * + *

    + *   RpcChannel channel = rpcImpl.newChannel("remotehost.example.com:1234");
    + *   RpcController controller = rpcImpl.newController();
    + *   MyService service = MyService.newStub(channel);
    + *   service.myMethod(controller, request, callback);
    + * 
    + * + *

    Starting with version 2.3.0, RPC implementations should not try to build + * on this, but should instead provide code generator plugins which generate + * code specific to the particular RPC implementation. This way the generated + * code can be more appropriate for the implementation in use and can avoid + * unnecessary layers of indirection. + * + * @author kenton@google.com Kenton Varda + */ +public interface RpcChannel { + /** + * Call the given method of the remote service. This method is similar to + * {@code Service.callMethod()} with one important difference: the caller + * decides the types of the {@code Message} objects, not the callee. The + * request may be of any type as long as + * {@code request.getDescriptor() == method.getInputType()}. + * The response passed to the callback will be of the same type as + * {@code responsePrototype} (which must have + * {@code getDescriptor() == method.getOutputType()}). + */ + void callMethod(Descriptors.MethodDescriptor method, + RpcController controller, + Message request, + Message responsePrototype, + RpcCallback done); +} diff --git a/OsmAnd-java/src/com/google/protobuf/RpcController.java b/OsmAnd-java/src/com/google/protobuf/RpcController.java new file mode 100644 index 0000000000..aaa5446da8 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/RpcController.java @@ -0,0 +1,118 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + *

    An {@code RpcController} mediates a single method call. The primary + * purpose of the controller is to provide a way to manipulate settings + * specific to the RPC implementation and to find out about RPC-level errors. + * + *

    Starting with version 2.3.0, RPC implementations should not try to build + * on this, but should instead provide code generator plugins which generate + * code specific to the particular RPC implementation. This way the generated + * code can be more appropriate for the implementation in use and can avoid + * unnecessary layers of indirection. + * + *

    The methods provided by the {@code RpcController} interface are intended + * to be a "least common denominator" set of features which we expect all + * implementations to support. Specific implementations may provide more + * advanced features (e.g. deadline propagation). + * + * @author kenton@google.com Kenton Varda + */ +public interface RpcController { + // ----------------------------------------------------------------- + // These calls may be made from the client side only. Their results + // are undefined on the server side (may throw RuntimeExceptions). + + /** + * Resets the RpcController to its initial state so that it may be reused in + * a new call. This can be called from the client side only. It must not + * be called while an RPC is in progress. + */ + void reset(); + + /** + * After a call has finished, returns true if the call failed. The possible + * reasons for failure depend on the RPC implementation. {@code failed()} + * most only be called on the client side, and must not be called before a + * call has finished. + */ + boolean failed(); + + /** + * If {@code failed()} is {@code true}, returns a human-readable description + * of the error. + */ + String errorText(); + + /** + * Advises the RPC system that the caller desires that the RPC call be + * canceled. The RPC system may cancel it immediately, may wait awhile and + * then cancel it, or may not even cancel the call at all. If the call is + * canceled, the "done" callback will still be called and the RpcController + * will indicate that the call failed at that time. + */ + void startCancel(); + + // ----------------------------------------------------------------- + // These calls may be made from the server side only. Their results + // are undefined on the client side (may throw RuntimeExceptions). + + /** + * Causes {@code failed()} to return true on the client side. {@code reason} + * will be incorporated into the message returned by {@code errorText()}. + * If you find you need to return machine-readable information about + * failures, you should incorporate it into your response protocol buffer + * and should NOT call {@code setFailed()}. + */ + void setFailed(String reason); + + /** + * If {@code true}, indicates that the client canceled the RPC, so the server + * may as well give up on replying to it. This method must be called on the + * server side only. The server should still call the final "done" callback. + */ + boolean isCanceled(); + + /** + * Asks that the given callback be called when the RPC is canceled. The + * parameter passed to the callback will always be {@code null}. The + * callback will always be called exactly once. If the RPC completes without + * being canceled, the callback will be called after completion. If the RPC + * has already been canceled when NotifyOnCancel() is called, the callback + * will be called immediately. + * + *

    {@code notifyOnCancel()} must be called no more than once per request. + * It must be called on the server side only. + */ + void notifyOnCancel(RpcCallback callback); +} diff --git a/OsmAnd-java/src/com/google/protobuf/RpcUtil.java b/OsmAnd-java/src/com/google/protobuf/RpcUtil.java new file mode 100644 index 0000000000..202fe1201a --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/RpcUtil.java @@ -0,0 +1,137 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + * Grab-bag of utility functions useful when dealing with RPCs. + * + * @author kenton@google.com Kenton Varda + */ +public final class RpcUtil { + private RpcUtil() {} + + /** + * Take an {@code RpcCallback} and convert it to an + * {@code RpcCallback} accepting a specific message type. This is always + * type-safe (parameter type contravariance). + */ + @SuppressWarnings("unchecked") + public static RpcCallback + specializeCallback(final RpcCallback originalCallback) { + return (RpcCallback)originalCallback; + // The above cast works, but only due to technical details of the Java + // implementation. A more theoretically correct -- but less efficient -- + // implementation would be as follows: + // return new RpcCallback() { + // public void run(Type parameter) { + // originalCallback.run(parameter); + // } + // }; + } + + /** + * Take an {@code RpcCallback} accepting a specific message type and convert + * it to an {@code RpcCallback}. The generalized callback will + * accept any message object which has the same descriptor, and will convert + * it to the correct class before calling the original callback. However, + * if the generalized callback is given a message with a different descriptor, + * an exception will be thrown. + */ + public static + RpcCallback generalizeCallback( + final RpcCallback originalCallback, + final Class originalClass, + final Type defaultInstance) { + return new RpcCallback() { + @Override + public void run(final Message parameter) { + Type typedParameter; + try { + typedParameter = originalClass.cast(parameter); + } catch (ClassCastException ignored) { + typedParameter = copyAsType(defaultInstance, parameter); + } + originalCallback.run(typedParameter); + } + }; + } + + /** + * Creates a new message of type "Type" which is a copy of "source". "source" + * must have the same descriptor but may be a different class (e.g. + * DynamicMessage). + */ + @SuppressWarnings("unchecked") + private static Type copyAsType( + final Type typeDefaultInstance, final Message source) { + return (Type)typeDefaultInstance.newBuilderForType() + .mergeFrom(source) + .build(); + } + + /** + * Creates a callback which can only be called once. This may be useful for + * security, when passing a callback to untrusted code: most callbacks do + * not expect to be called more than once, so doing so may expose bugs if it + * is not prevented. + */ + public static + RpcCallback newOneTimeCallback( + final RpcCallback originalCallback) { + return new RpcCallback() { + private boolean alreadyCalled = false; + + @Override + public void run(final ParameterType parameter) { + synchronized(this) { + if (alreadyCalled) { + throw new AlreadyCalledException(); + } + alreadyCalled = true; + } + + originalCallback.run(parameter); + } + }; + } + + /** + * Exception thrown when a one-time callback is called more than once. + */ + public static final class AlreadyCalledException extends RuntimeException { + private static final long serialVersionUID = 5469741279507848266L; + + public AlreadyCalledException() { + super("This RpcCallback was already called and cannot be called " + + "multiple times."); + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/Service.java b/OsmAnd-java/src/com/google/protobuf/Service.java new file mode 100644 index 0000000000..541585f41f --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/Service.java @@ -0,0 +1,117 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + * Abstract base interface for protocol-buffer-based RPC services. Services + * themselves are abstract classes (implemented either by servers or as + * stubs), but they subclass this base interface. The methods of this + * interface can be used to call the methods of the service without knowing + * its exact type at compile time (analogous to the Message interface). + * + *

    Starting with version 2.3.0, RPC implementations should not try to build + * on this, but should instead provide code generator plugins which generate + * code specific to the particular RPC implementation. This way the generated + * code can be more appropriate for the implementation in use and can avoid + * unnecessary layers of indirection. + * + * @author kenton@google.com Kenton Varda + */ +public interface Service { + /** + * Get the {@code ServiceDescriptor} describing this service and its methods. + */ + Descriptors.ServiceDescriptor getDescriptorForType(); + + /** + *

    Call a method of the service specified by MethodDescriptor. This is + * normally implemented as a simple {@code switch()} that calls the standard + * definitions of the service's methods. + * + *

    Preconditions: + *

      + *
    • {@code method.getService() == getDescriptorForType()} + *
    • {@code request} is of the exact same class as the object returned by + * {@code getRequestPrototype(method)}. + *
    • {@code controller} is of the correct type for the RPC implementation + * being used by this Service. For stubs, the "correct type" depends + * on the RpcChannel which the stub is using. Server-side Service + * implementations are expected to accept whatever type of + * {@code RpcController} the server-side RPC implementation uses. + *
    + * + *

    Postconditions: + *

      + *
    • {@code done} will be called when the method is complete. This may be + * before {@code callMethod()} returns or it may be at some point in + * the future. + *
    • The parameter to {@code done} is the response. It must be of the + * exact same type as would be returned by + * {@code getResponsePrototype(method)}. + *
    • If the RPC failed, the parameter to {@code done} will be + * {@code null}. Further details about the failure can be found by + * querying {@code controller}. + *
    + */ + void callMethod(Descriptors.MethodDescriptor method, + RpcController controller, + Message request, + RpcCallback done); + + /** + *

    {@code callMethod()} requires that the request passed in is of a + * particular subclass of {@code Message}. {@code getRequestPrototype()} + * gets the default instances of this type for a given method. You can then + * call {@code Message.newBuilderForType()} on this instance to + * construct a builder to build an object which you can then pass to + * {@code callMethod()}. + * + *

    Example: + *

    +   *   MethodDescriptor method =
    +   *     service.getDescriptorForType().findMethodByName("Foo");
    +   *   Message request =
    +   *     stub.getRequestPrototype(method).newBuilderForType()
    +   *         .mergeFrom(input).build();
    +   *   service.callMethod(method, request, callback);
    +   * 
    + */ + Message getRequestPrototype(Descriptors.MethodDescriptor method); + + /** + * Like {@code getRequestPrototype()}, but gets a prototype of the response + * message. {@code getResponsePrototype()} is generally not needed because + * the {@code Service} implementation constructs the response message itself, + * but it may be useful in some cases to know ahead of time what type of + * object will be returned. + */ + Message getResponsePrototype(Descriptors.MethodDescriptor method); +} diff --git a/OsmAnd-java/src/com/google/protobuf/ServiceException.java b/OsmAnd-java/src/com/google/protobuf/ServiceException.java new file mode 100644 index 0000000000..c043a77582 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/ServiceException.java @@ -0,0 +1,44 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + * Thrown by blocking RPC methods when a failure occurs. + * + * @author cpovirk@google.com (Chris Povirk) + */ +public final class ServiceException extends Exception { + private static final long serialVersionUID = -1219262335729891920L; + + public ServiceException(final String message) { + super(message); + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/TextFormat.java b/OsmAnd-java/src/com/google/protobuf/TextFormat.java new file mode 100644 index 0000000000..6639165d65 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/TextFormat.java @@ -0,0 +1,1352 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + + +import java.io.IOException; +import java.math.BigInteger; +import java.nio.CharBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.google.protobuf.Descriptors.Descriptor; +import com.google.protobuf.Descriptors.EnumDescriptor; +import com.google.protobuf.Descriptors.EnumValueDescriptor; +import com.google.protobuf.Descriptors.FieldDescriptor; + +/** + * Provide ascii text parsing and formatting support for proto2 instances. + * The implementation largely follows google/protobuf/text_format.cc. + * + * @author wenboz@google.com Wenbo Zhu + * @author kenton@google.com Kenton Varda + */ +public final class TextFormat { + private TextFormat() { + } + + /** + * Outputs a textual representation of the Protocol Message supplied into + * the parameter output. (This representation is the new version of the + * classic "ProtocolPrinter" output from the original Protocol Buffer system) + */ + public static void print(final Message message, final Appendable output) + throws IOException { + final TextGenerator generator = new TextGenerator(output); + print(message, generator); + } + + /** Outputs a textual representation of {@code fields} to {@code output}. */ + public static void print(final UnknownFieldSet fields, + final Appendable output) + throws IOException { + final TextGenerator generator = new TextGenerator(output); + printUnknownFields(fields, generator); + } + + /** + * Like {@code print()}, but writes directly to a {@code String} and + * returns it. + */ + public static String printToString(final Message message) { + try { + final StringBuilder text = new StringBuilder(); + print(message, text); + return text.toString(); + } catch (IOException e) { + throw new RuntimeException( + "Writing to a StringBuilder threw an IOException (should never " + + "happen).", e); + } + } + + /** + * Like {@code print()}, but writes directly to a {@code String} and + * returns it. + */ + public static String printToString(final UnknownFieldSet fields) { + try { + final StringBuilder text = new StringBuilder(); + print(fields, text); + return text.toString(); + } catch (IOException e) { + throw new RuntimeException( + "Writing to a StringBuilder threw an IOException (should never " + + "happen).", e); + } + } + + private static void print(final Message message, + final TextGenerator generator) + throws IOException { + for (final Map.Entry field : + message.getAllFields().entrySet()) { + printField(field.getKey(), field.getValue(), generator); + } + printUnknownFields(message.getUnknownFields(), generator); + } + + public static void printField(final FieldDescriptor field, + final Object value, + final Appendable output) + throws IOException { + final TextGenerator generator = new TextGenerator(output); + printField(field, value, generator); + } + + public static String printFieldToString(final FieldDescriptor field, + final Object value) { + try { + final StringBuilder text = new StringBuilder(); + printField(field, value, text); + return text.toString(); + } catch (IOException e) { + throw new RuntimeException( + "Writing to a StringBuilder threw an IOException (should never " + + "happen).", e); + } + } + + @SuppressWarnings("unchecked") +private static void printField(final FieldDescriptor field, + final Object value, + final TextGenerator generator) + throws IOException { + if (field.isRepeated()) { + // Repeated field. Print each element. + for (final Object element : (List) value) { + printSingleField(field, element, generator); + } + } else { + printSingleField(field, value, generator); + } + } + + private static void printSingleField(final FieldDescriptor field, + final Object value, + final TextGenerator generator) + throws IOException { + if (field.isExtension()) { + generator.print("["); + // We special-case MessageSet elements for compatibility with proto1. + if (field.getContainingType().getOptions().getMessageSetWireFormat() + && (field.getType() == FieldDescriptor.Type.MESSAGE) + && (field.isOptional()) + // object equality + && (field.getExtensionScope() == field.getMessageType())) { + generator.print(field.getMessageType().getFullName()); + } else { + generator.print(field.getFullName()); + } + generator.print("]"); + } else { + if (field.getType() == FieldDescriptor.Type.GROUP) { + // Groups must be serialized with their original capitalization. + generator.print(field.getMessageType().getName()); + } else { + generator.print(field.getName()); + } + } + + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + generator.print(" {\n"); + generator.indent(); + } else { + generator.print(": "); + } + + printFieldValue(field, value, generator); + + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + generator.outdent(); + generator.print("}"); + } + generator.print("\n"); + } + + private static void printFieldValue(final FieldDescriptor field, + final Object value, + final TextGenerator generator) + throws IOException { + switch (field.getType()) { + case INT32: + case INT64: + case SINT32: + case SINT64: + case SFIXED32: + case SFIXED64: + case FLOAT: + case DOUBLE: + case BOOL: + // Good old toString() does what we want for these types. + generator.print(value.toString()); + break; + + case UINT32: + case FIXED32: + generator.print(unsignedToString((Integer) value)); + break; + + case UINT64: + case FIXED64: + generator.print(unsignedToString((Long) value)); + break; + + case STRING: + generator.print("\""); + generator.print(escapeText((String) value)); + generator.print("\""); + break; + + case BYTES: + generator.print("\""); + generator.print(escapeBytes((ByteString) value)); + generator.print("\""); + break; + + case ENUM: + generator.print(((EnumValueDescriptor) value).getName()); + break; + + case MESSAGE: + case GROUP: + print((Message) value, generator); + break; + } + } + + private static void printUnknownFields(final UnknownFieldSet unknownFields, + final TextGenerator generator) + throws IOException { + for (final Map.Entry entry : + unknownFields.asMap().entrySet()) { + @SuppressWarnings("unused") + final String prefix = entry.getKey().toString() + ": "; + final UnknownFieldSet.Field field = entry.getValue(); + + for (final long value : field.getVarintList()) { + generator.print(entry.getKey().toString()); + generator.print(": "); + generator.print(unsignedToString(value)); + generator.print("\n"); + } + for (final int value : field.getFixed32List()) { + generator.print(entry.getKey().toString()); + generator.print(": "); + // AVIAN missing dependency + generator.print(String.format((Locale) null, "0x%08x", value)); + generator.print("\n"); + } + for (final long value : field.getFixed64List()) { + generator.print(entry.getKey().toString()); + generator.print(": "); + // AVIAN missing dependency + generator.print(String.format((Locale) null, "0x%016x", value)); + generator.print("\n"); + } + for (final ByteString value : field.getLengthDelimitedList()) { + generator.print(entry.getKey().toString()); + generator.print(": \""); + generator.print(escapeBytes(value)); + generator.print("\"\n"); + } + for (final UnknownFieldSet value : field.getGroupList()) { + generator.print(entry.getKey().toString()); + generator.print(" {\n"); + generator.indent(); + printUnknownFields(value, generator); + generator.outdent(); + generator.print("}\n"); + } + } + } + + /** Convert an unsigned 32-bit integer to a string. */ + private static String unsignedToString(final int value) { + if (value >= 0) { + return Integer.toString(value); + } else { + return Long.toString(((long) value) & 0x00000000FFFFFFFFL); + } + } + + /** Convert an unsigned 64-bit integer to a string. */ + private static String unsignedToString(final long value) { + if (value >= 0) { + return Long.toString(value); + } else { + // Pull off the most-significant bit so that BigInteger doesn't think + // the number is negative, then set it again using setBit(). + return BigInteger.valueOf(value & 0x7FFFFFFFFFFFFFFFL) + .setBit(63).toString(); + } + } + + /** + * An inner class for writing text to the output stream. + */ + private static final class TextGenerator { + private Appendable output; + private boolean atStartOfLine = true; + private final StringBuilder indent = new StringBuilder(); + + private TextGenerator(final Appendable output) { + this.output = output; + } + + /** + * Indent text by two spaces. After calling Indent(), two spaces will be + * inserted at the beginning of each line of text. Indent() may be called + * multiple times to produce deeper indents. + */ + public void indent() { + indent.append(" "); + } + + /** + * Reduces the current indent level by two spaces, or crashes if the indent + * level is zero. + */ + public void outdent() { + final int length = indent.length(); + if (length == 0) { + throw new IllegalArgumentException( + " Outdent() without matching Indent()."); + } + indent.delete(length - 2, length); + } + + /** + * Print text to the output stream. + */ + public void print(final CharSequence text) throws IOException { + final int size = text.length(); + int pos = 0; + + for (int i = 0; i < size; i++) { + if (text.charAt(i) == '\n') { + write(text.subSequence(pos, size), i - pos + 1); + pos = i + 1; + atStartOfLine = true; + } + } + write(text.subSequence(pos, size), size - pos); + } + + private void write(final CharSequence data, final int size) + throws IOException { + if (size == 0) { + return; + } + if (atStartOfLine) { + atStartOfLine = false; + output.append(indent); + } + output.append(data); + } + } + + // ================================================================= + // Parsing + + /** + * Represents a stream of tokens parsed from a {@code String}. + * + *

    The Java standard library provides many classes that you might think + * would be useful for implementing this, but aren't. For example: + * + *

      + *
    • {@code java.io.StreamTokenizer}: This almost does what we want -- or, + * at least, something that would get us close to what we want -- except + * for one fatal flaw: It automatically un-escapes strings using Java + * escape sequences, which do not include all the escape sequences we + * need to support (e.g. '\x'). + *
    • {@code java.util.Scanner}: This seems like a great way at least to + * parse regular expressions out of a stream (so we wouldn't have to load + * the entire input into a single string before parsing). Sadly, + * {@code Scanner} requires that tokens be delimited with some delimiter. + * Thus, although the text "foo:" should parse to two tokens ("foo" and + * ":"), {@code Scanner} would recognize it only as a single token. + * Furthermore, {@code Scanner} provides no way to inspect the contents + * of delimiters, making it impossible to keep track of line and column + * numbers. + *
    + * + *

    Luckily, Java's regular expression support does manage to be useful to + * us. (Barely: We need {@code Matcher.usePattern()}, which is new in + * Java 1.5.) So, we can use that, at least. Unfortunately, this implies + * that we need to have the entire input in one contiguous string. + */ + private static final class Tokenizer { + private final CharSequence text; + private final Matcher matcher; + private String currentToken; + + // The character index within this.text at which the current token begins. + private int pos = 0; + + // The line and column numbers of the current token. + private int line = 0; + private int column = 0; + + // The line and column numbers of the previous token (allows throwing + // errors *after* consuming). + private int previousLine = 0; + private int previousColumn = 0; + + // We use possesive quantifiers (*+ and ++) because otherwise the Java + // regex matcher has stack overflows on large inputs. + private static final Pattern WHITESPACE = + Pattern.compile("(\\s|(#.*$))++", Pattern.MULTILINE); + private static final Pattern TOKEN = Pattern.compile( + "[a-zA-Z_][0-9a-zA-Z_+-]*+|" + // an identifier + "[.]?[0-9+-][0-9a-zA-Z_.+-]*+|" + // a number + "\"([^\"\n\\\\]|\\\\.)*+(\"|\\\\?$)|" + // a double-quoted string + "\'([^\'\n\\\\]|\\\\.)*+(\'|\\\\?$)", // a single-quoted string + Pattern.MULTILINE); + + private static final Pattern DOUBLE_INFINITY = Pattern.compile( + "-?inf(inity)?", + Pattern.CASE_INSENSITIVE); + private static final Pattern FLOAT_INFINITY = Pattern.compile( + "-?inf(inity)?f?", + Pattern.CASE_INSENSITIVE); + private static final Pattern FLOAT_NAN = Pattern.compile( + "nanf?", + Pattern.CASE_INSENSITIVE); + + /** Construct a tokenizer that parses tokens from the given text. */ + private Tokenizer(final CharSequence text) { + this.text = text; + this.matcher = WHITESPACE.matcher(text); + skipWhitespace(); + nextToken(); + } + + /** Are we at the end of the input? */ + public boolean atEnd() { + return currentToken.length() == 0; + } + + /** Advance to the next token. */ + public void nextToken() { + // AVIAN missing dependency +// if(true){ +// throw new UnsupportedOperationException(); +// } + previousLine = line; + previousColumn = column; + + // Advance the line counter to the current position. + while (pos < matcher.regionStart()) { + if (text.charAt(pos) == '\n') { + ++line; + column = 0; + } else { + ++column; + } + ++pos; + } + + // Match the next token. + if (matcher.regionStart() == matcher.regionEnd()) { + // EOF + currentToken = ""; + } else { + matcher.usePattern(TOKEN); + if (matcher.lookingAt()) { + currentToken = matcher.group(); + matcher.region(matcher.end(), matcher.regionEnd()); + } else { + // Take one character. + currentToken = String.valueOf(text.charAt(pos)); + matcher.region(pos + 1, matcher.regionEnd()); + } + + skipWhitespace(); + } + } + + /** + * Skip over any whitespace so that the matcher region starts at the next + * token. + */ + private void skipWhitespace() { + // AVIAN missing dependency +// if(true){ +// throw new UnsupportedOperationException(); +// } + matcher.usePattern(WHITESPACE); + if (matcher.lookingAt()) { + matcher.region(matcher.end(), matcher.regionEnd()); + } + } + + /** + * If the next token exactly matches {@code token}, consume it and return + * {@code true}. Otherwise, return {@code false} without doing anything. + */ + public boolean tryConsume(final String token) { + if (currentToken.equals(token)) { + nextToken(); + return true; + } else { + return false; + } + } + + /** + * If the next token exactly matches {@code token}, consume it. Otherwise, + * throw a {@link ParseException}. + */ + public void consume(final String token) throws ParseException { + if (!tryConsume(token)) { + throw parseException("Expected \"" + token + "\"."); + } + } + + /** + * Returns {@code true} if the next token is an integer, but does + * not consume it. + */ + public boolean lookingAtInteger() { + if (currentToken.length() == 0) { + return false; + } + + final char c = currentToken.charAt(0); + return ('0' <= c && c <= '9') || + c == '-' || c == '+'; + } + + /** + * If the next token is an identifier, consume it and return its value. + * Otherwise, throw a {@link ParseException}. + */ + public String consumeIdentifier() throws ParseException { + for (int i = 0; i < currentToken.length(); i++) { + final char c = currentToken.charAt(i); + if (('a' <= c && c <= 'z') || + ('A' <= c && c <= 'Z') || + ('0' <= c && c <= '9') || + (c == '_') || (c == '.')) { + // OK + } else { + throw parseException("Expected identifier."); + } + } + + final String result = currentToken; + nextToken(); + return result; + } + + /** + * If the next token is a 32-bit signed integer, consume it and return its + * value. Otherwise, throw a {@link ParseException}. + */ + public int consumeInt32() throws ParseException { + try { + final int result = parseInt32(currentToken); + nextToken(); + return result; + } catch (NumberFormatException e) { + throw integerParseException(e); + } + } + + /** + * If the next token is a 32-bit unsigned integer, consume it and return its + * value. Otherwise, throw a {@link ParseException}. + */ + public int consumeUInt32() throws ParseException { + try { + final int result = parseUInt32(currentToken); + nextToken(); + return result; + } catch (NumberFormatException e) { + throw integerParseException(e); + } + } + + /** + * If the next token is a 64-bit signed integer, consume it and return its + * value. Otherwise, throw a {@link ParseException}. + */ + public long consumeInt64() throws ParseException { + try { + final long result = parseInt64(currentToken); + nextToken(); + return result; + } catch (NumberFormatException e) { + throw integerParseException(e); + } + } + + /** + * If the next token is a 64-bit unsigned integer, consume it and return its + * value. Otherwise, throw a {@link ParseException}. + */ + public long consumeUInt64() throws ParseException { + try { + final long result = parseUInt64(currentToken); + nextToken(); + return result; + } catch (NumberFormatException e) { + throw integerParseException(e); + } + } + + /** + * If the next token is a double, consume it and return its value. + * Otherwise, throw a {@link ParseException}. + */ + public double consumeDouble() throws ParseException { + // We need to parse infinity and nan separately because + // Double.parseDouble() does not accept "inf", "infinity", or "nan". + if (DOUBLE_INFINITY.matcher(currentToken).matches()) { + final boolean negative = currentToken.startsWith("-"); + nextToken(); + return negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY; + } + if (currentToken.equalsIgnoreCase("nan")) { + nextToken(); + return Double.NaN; + } + try { + final double result = Double.parseDouble(currentToken); + nextToken(); + return result; + } catch (NumberFormatException e) { + throw floatParseException(e); + } + } + + /** + * If the next token is a float, consume it and return its value. + * Otherwise, throw a {@link ParseException}. + */ + public float consumeFloat() throws ParseException { + // We need to parse infinity and nan separately because + // Float.parseFloat() does not accept "inf", "infinity", or "nan". + if (FLOAT_INFINITY.matcher(currentToken).matches()) { + final boolean negative = currentToken.startsWith("-"); + nextToken(); + return negative ? Float.NEGATIVE_INFINITY : Float.POSITIVE_INFINITY; + } + if (FLOAT_NAN.matcher(currentToken).matches()) { + nextToken(); + return Float.NaN; + } + try { + final float result = Float.parseFloat(currentToken); + nextToken(); + return result; + } catch (NumberFormatException e) { + throw floatParseException(e); + } + } + + /** + * If the next token is a boolean, consume it and return its value. + * Otherwise, throw a {@link ParseException}. + */ + public boolean consumeBoolean() throws ParseException { + if (currentToken.equals("true")) { + nextToken(); + return true; + } else if (currentToken.equals("false")) { + nextToken(); + return false; + } else { + throw parseException("Expected \"true\" or \"false\"."); + } + } + + /** + * If the next token is a string, consume it and return its (unescaped) + * value. Otherwise, throw a {@link ParseException}. + */ + public String consumeString() throws ParseException { + return consumeByteString().toStringUtf8(); + } + + /** + * If the next token is a string, consume it, unescape it as a + * {@link ByteString}, and return it. Otherwise, throw a + * {@link ParseException}. + */ + public ByteString consumeByteString() throws ParseException { + List list = new ArrayList(); + consumeByteString(list); + while (currentToken.startsWith("'") || currentToken.startsWith("\"")) { + consumeByteString(list); + } + return ByteString.copyFrom(list); + } + + /** + * Like {@link #consumeByteString()} but adds each token of the string to + * the given list. String literals (whether bytes or text) may come in + * multiple adjacent tokens which are automatically concatenated, like in + * C or Python. + */ + private void consumeByteString(List list) throws ParseException { + final char quote = currentToken.length() > 0 ? currentToken.charAt(0) + : '\0'; + if (quote != '\"' && quote != '\'') { + throw parseException("Expected string."); + } + + if (currentToken.length() < 2 || + currentToken.charAt(currentToken.length() - 1) != quote) { + throw parseException("String missing ending quote."); + } + + try { + final String escaped = + currentToken.substring(1, currentToken.length() - 1); + final ByteString result = unescapeBytes(escaped); + nextToken(); + list.add(result); + } catch (InvalidEscapeSequenceException e) { + throw parseException(e.getMessage()); + } + } + + /** + * Returns a {@link ParseException} with the current line and column + * numbers in the description, suitable for throwing. + */ + public ParseException parseException(final String description) { + // Note: People generally prefer one-based line and column numbers. + return new ParseException( + (line + 1) + ":" + (column + 1) + ": " + description); + } + + /** + * Returns a {@link ParseException} with the line and column numbers of + * the previous token in the description, suitable for throwing. + */ + public ParseException parseExceptionPreviousToken( + final String description) { + // Note: People generally prefer one-based line and column numbers. + return new ParseException( + (previousLine + 1) + ":" + (previousColumn + 1) + ": " + description); + } + + /** + * Constructs an appropriate {@link ParseException} for the given + * {@code NumberFormatException} when trying to parse an integer. + */ + private ParseException integerParseException( + final NumberFormatException e) { + return parseException("Couldn't parse integer: " + e.getMessage()); + } + + /** + * Constructs an appropriate {@link ParseException} for the given + * {@code NumberFormatException} when trying to parse a float or double. + */ + private ParseException floatParseException(final NumberFormatException e) { + return parseException("Couldn't parse number: " + e.getMessage()); + } + } + + /** Thrown when parsing an invalid text format message. */ + public static class ParseException extends IOException { + private static final long serialVersionUID = 3196188060225107702L; + + public ParseException(final String message) { + super(message); + } + } + + /** + * Parse a text-format message from {@code input} and merge the contents + * into {@code builder}. + */ + public static void merge(final Readable input, + final Message.Builder builder) + throws IOException { + merge(input, ExtensionRegistry.getEmptyRegistry(), builder); + } + + /** + * Parse a text-format message from {@code input} and merge the contents + * into {@code builder}. + */ + public static void merge(final CharSequence input, + final Message.Builder builder) + throws ParseException { + merge(input, ExtensionRegistry.getEmptyRegistry(), builder); + } + + /** + * Parse a text-format message from {@code input} and merge the contents + * into {@code builder}. Extensions will be recognized if they are + * registered in {@code extensionRegistry}. + */ + public static void merge(final Readable input, + final ExtensionRegistry extensionRegistry, + final Message.Builder builder) + throws IOException { + // Read the entire input to a String then parse that. + + // If StreamTokenizer were not quite so crippled, or if there were a kind + // of Reader that could read in chunks that match some particular regex, + // or if we wanted to write a custom Reader to tokenize our stream, then + // we would not have to read to one big String. Alas, none of these is + // the case. Oh well. + + merge(toStringBuilder(input), extensionRegistry, builder); + } + + private static final int BUFFER_SIZE = 4096; + + // TODO(chrisn): See if working around java.io.Reader#read(CharBuffer) + // overhead is worthwhile + private static StringBuilder toStringBuilder(final Readable input) + throws IOException { + final StringBuilder text = new StringBuilder(); + final CharBuffer buffer = CharBuffer.allocate(BUFFER_SIZE); + while (true) { + final int n = input.read(buffer); + if (n == -1) { + break; + } + buffer.flip(); + text.append(buffer, 0, n); + } + return text; + } + + /** + * Parse a text-format message from {@code input} and merge the contents + * into {@code builder}. Extensions will be recognized if they are + * registered in {@code extensionRegistry}. + */ + public static void merge(final CharSequence input, + final ExtensionRegistry extensionRegistry, + final Message.Builder builder) + throws ParseException { + final Tokenizer tokenizer = new Tokenizer(input); + + while (!tokenizer.atEnd()) { + mergeField(tokenizer, extensionRegistry, builder); + } + } + + /** + * Parse a single field from {@code tokenizer} and merge it into + * {@code builder}. + */ + private static void mergeField(final Tokenizer tokenizer, + final ExtensionRegistry extensionRegistry, + final Message.Builder builder) + throws ParseException { + FieldDescriptor field; + final Descriptor type = builder.getDescriptorForType(); + ExtensionRegistry.ExtensionInfo extension = null; + + if (tokenizer.tryConsume("[")) { + // An extension. + final StringBuilder name = + new StringBuilder(tokenizer.consumeIdentifier()); + while (tokenizer.tryConsume(".")) { + name.append('.'); + name.append(tokenizer.consumeIdentifier()); + } + + extension = extensionRegistry.findExtensionByName(name.toString()); + + if (extension == null) { + throw tokenizer.parseExceptionPreviousToken( + "Extension \"" + name + "\" not found in the ExtensionRegistry."); + } else if (extension.descriptor.getContainingType() != type) { + throw tokenizer.parseExceptionPreviousToken( + "Extension \"" + name + "\" does not extend message type \"" + + type.getFullName() + "\"."); + } + + tokenizer.consume("]"); + + field = extension.descriptor; + } else { + final String name = tokenizer.consumeIdentifier(); + field = type.findFieldByName(name); + + // Group names are expected to be capitalized as they appear in the + // .proto file, which actually matches their type names, not their field + // names. + if (field == null) { + // Explicitly specify US locale so that this code does not break when + // executing in Turkey. + final String lowerName = name.toLowerCase(Locale.US); + field = type.findFieldByName(lowerName); + // If the case-insensitive match worked but the field is NOT a group, + if (field != null && field.getType() != FieldDescriptor.Type.GROUP) { + field = null; + } + } + // Again, special-case group names as described above. + if (field != null && field.getType() == FieldDescriptor.Type.GROUP && + !field.getMessageType().getName().equals(name)) { + field = null; + } + + if (field == null) { + throw tokenizer.parseExceptionPreviousToken( + "Message type \"" + type.getFullName() + + "\" has no field named \"" + name + "\"."); + } + } + + Object value = null; + + if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { + tokenizer.tryConsume(":"); // optional + + final String endToken; + if (tokenizer.tryConsume("<")) { + endToken = ">"; + } else { + tokenizer.consume("{"); + endToken = "}"; + } + + final Message.Builder subBuilder; + if (extension == null) { + subBuilder = builder.newBuilderForField(field); + } else { + subBuilder = extension.defaultInstance.newBuilderForType(); + } + + while (!tokenizer.tryConsume(endToken)) { + if (tokenizer.atEnd()) { + throw tokenizer.parseException( + "Expected \"" + endToken + "\"."); + } + mergeField(tokenizer, extensionRegistry, subBuilder); + } + + value = subBuilder.build(); + + } else { + tokenizer.consume(":"); + + switch (field.getType()) { + case INT32: + case SINT32: + case SFIXED32: + value = tokenizer.consumeInt32(); + break; + + case INT64: + case SINT64: + case SFIXED64: + value = tokenizer.consumeInt64(); + break; + + case UINT32: + case FIXED32: + value = tokenizer.consumeUInt32(); + break; + + case UINT64: + case FIXED64: + value = tokenizer.consumeUInt64(); + break; + + case FLOAT: + value = tokenizer.consumeFloat(); + break; + + case DOUBLE: + value = tokenizer.consumeDouble(); + break; + + case BOOL: + value = tokenizer.consumeBoolean(); + break; + + case STRING: + value = tokenizer.consumeString(); + break; + + case BYTES: + value = tokenizer.consumeByteString(); + break; + + case ENUM: + final EnumDescriptor enumType = field.getEnumType(); + + if (tokenizer.lookingAtInteger()) { + final int number = tokenizer.consumeInt32(); + value = enumType.findValueByNumber(number); + if (value == null) { + throw tokenizer.parseExceptionPreviousToken( + "Enum type \"" + enumType.getFullName() + + "\" has no value with number " + number + '.'); + } + } else { + final String id = tokenizer.consumeIdentifier(); + value = enumType.findValueByName(id); + if (value == null) { + throw tokenizer.parseExceptionPreviousToken( + "Enum type \"" + enumType.getFullName() + + "\" has no value named \"" + id + "\"."); + } + } + + break; + + case MESSAGE: + case GROUP: + throw new RuntimeException("Can't get here."); + } + } + + if (field.isRepeated()) { + builder.addRepeatedField(field, value); + } else { + builder.setField(field, value); + } + } + + // ================================================================= + // Utility functions + // + // Some of these methods are package-private because Descriptors.java uses + // them. + + /** + * Escapes bytes in the format used in protocol buffer text format, which + * is the same as the format used for C string literals. All bytes + * that are not printable 7-bit ASCII characters are escaped, as well as + * backslash, single-quote, and double-quote characters. Characters for + * which no defined short-hand escape sequence is defined will be escaped + * using 3-digit octal sequences. + */ + static String escapeBytes(final ByteString input) { + final StringBuilder builder = new StringBuilder(input.size()); + for (int i = 0; i < input.size(); i++) { + final byte b = input.byteAt(i); + switch (b) { + // Java does not recognize \a or \v, apparently. + case 0x07: builder.append("\\a" ); break; + case '\b': builder.append("\\b" ); break; + case '\f': builder.append("\\f" ); break; + case '\n': builder.append("\\n" ); break; + case '\r': builder.append("\\r" ); break; + case '\t': builder.append("\\t" ); break; + case 0x0b: builder.append("\\v" ); break; + case '\\': builder.append("\\\\"); break; + case '\'': builder.append("\\\'"); break; + case '"' : builder.append("\\\""); break; + default: + if (b >= 0x20) { + builder.append((char) b); + } else { + builder.append('\\'); + builder.append((char) ('0' + ((b >>> 6) & 3))); + builder.append((char) ('0' + ((b >>> 3) & 7))); + builder.append((char) ('0' + (b & 7))); + } + break; + } + } + return builder.toString(); + } + + /** + * Un-escape a byte sequence as escaped using + * {@link #escapeBytes(ByteString)}. Two-digit hex escapes (starting with + * "\x") are also recognized. + */ + static ByteString unescapeBytes(final CharSequence input) + throws InvalidEscapeSequenceException { + final byte[] result = new byte[input.length()]; + int pos = 0; + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + if (c == '\\') { + if (i + 1 < input.length()) { + ++i; + c = input.charAt(i); + if (isOctal(c)) { + // Octal escape. + int code = digitValue(c); + if (i + 1 < input.length() && isOctal(input.charAt(i + 1))) { + ++i; + code = code * 8 + digitValue(input.charAt(i)); + } + if (i + 1 < input.length() && isOctal(input.charAt(i + 1))) { + ++i; + code = code * 8 + digitValue(input.charAt(i)); + } + result[pos++] = (byte)code; + } else { + switch (c) { + case 'a' : result[pos++] = 0x07; break; + case 'b' : result[pos++] = '\b'; break; + case 'f' : result[pos++] = '\f'; break; + case 'n' : result[pos++] = '\n'; break; + case 'r' : result[pos++] = '\r'; break; + case 't' : result[pos++] = '\t'; break; + case 'v' : result[pos++] = 0x0b; break; + case '\\': result[pos++] = '\\'; break; + case '\'': result[pos++] = '\''; break; + case '"' : result[pos++] = '\"'; break; + + case 'x': + // hex escape + int code = 0; + if (i + 1 < input.length() && isHex(input.charAt(i + 1))) { + ++i; + code = digitValue(input.charAt(i)); + } else { + throw new InvalidEscapeSequenceException( + "Invalid escape sequence: '\\x' with no digits"); + } + if (i + 1 < input.length() && isHex(input.charAt(i + 1))) { + ++i; + code = code * 16 + digitValue(input.charAt(i)); + } + result[pos++] = (byte)code; + break; + + default: + throw new InvalidEscapeSequenceException( + "Invalid escape sequence: '\\" + c + '\''); + } + } + } else { + throw new InvalidEscapeSequenceException( + "Invalid escape sequence: '\\' at end of string."); + } + } else { + result[pos++] = (byte)c; + } + } + + return ByteString.copyFrom(result, 0, pos); + } + + /** + * Thrown by {@link TextFormat#unescapeBytes} and + * {@link TextFormat#unescapeText} when an invalid escape sequence is seen. + */ + static class InvalidEscapeSequenceException extends IOException { + private static final long serialVersionUID = -8164033650142593304L; + + InvalidEscapeSequenceException(final String description) { + super(description); + } + } + + /** + * Like {@link #escapeBytes(ByteString)}, but escapes a text string. + * Non-ASCII characters are first encoded as UTF-8, then each byte is escaped + * individually as a 3-digit octal escape. Yes, it's weird. + */ + static String escapeText(final String input) { + return escapeBytes(ByteString.copyFromUtf8(input)); + } + + /** + * Un-escape a text string as escaped using {@link #escapeText(String)}. + * Two-digit hex escapes (starting with "\x") are also recognized. + */ + static String unescapeText(final String input) + throws InvalidEscapeSequenceException { + return unescapeBytes(input).toStringUtf8(); + } + + /** Is this an octal digit? */ + private static boolean isOctal(final char c) { + return '0' <= c && c <= '7'; + } + + /** Is this a hex digit? */ + private static boolean isHex(final char c) { + return ('0' <= c && c <= '9') || + ('a' <= c && c <= 'f') || + ('A' <= c && c <= 'F'); + } + + /** + * Interpret a character as a digit (in any base up to 36) and return the + * numeric value. This is like {@code Character.digit()} but we don't accept + * non-ASCII digits. + */ + private static int digitValue(final char c) { + if ('0' <= c && c <= '9') { + return c - '0'; + } else if ('a' <= c && c <= 'z') { + return c - 'a' + 10; + } else { + return c - 'A' + 10; + } + } + + /** + * Parse a 32-bit signed integer from the text. Unlike the Java standard + * {@code Integer.parseInt()}, this function recognizes the prefixes "0x" + * and "0" to signify hexidecimal and octal numbers, respectively. + */ + static int parseInt32(final String text) throws NumberFormatException { + return (int) parseInteger(text, true, false); + } + + /** + * Parse a 32-bit unsigned integer from the text. Unlike the Java standard + * {@code Integer.parseInt()}, this function recognizes the prefixes "0x" + * and "0" to signify hexidecimal and octal numbers, respectively. The + * result is coerced to a (signed) {@code int} when returned since Java has + * no unsigned integer type. + */ + static int parseUInt32(final String text) throws NumberFormatException { + return (int) parseInteger(text, false, false); + } + + /** + * Parse a 64-bit signed integer from the text. Unlike the Java standard + * {@code Integer.parseInt()}, this function recognizes the prefixes "0x" + * and "0" to signify hexidecimal and octal numbers, respectively. + */ + static long parseInt64(final String text) throws NumberFormatException { + return parseInteger(text, true, true); + } + + /** + * Parse a 64-bit unsigned integer from the text. Unlike the Java standard + * {@code Integer.parseInt()}, this function recognizes the prefixes "0x" + * and "0" to signify hexidecimal and octal numbers, respectively. The + * result is coerced to a (signed) {@code long} when returned since Java has + * no unsigned long type. + */ + static long parseUInt64(final String text) throws NumberFormatException { + return parseInteger(text, false, true); + } + + private static long parseInteger(final String text, + final boolean isSigned, + final boolean isLong) + throws NumberFormatException { + int pos = 0; + + boolean negative = false; + if (text.startsWith("-", pos)) { + if (!isSigned) { + throw new NumberFormatException("Number must be positive: " + text); + } + ++pos; + negative = true; + } + + int radix = 10; + if (text.startsWith("0x", pos)) { + pos += 2; + radix = 16; + } else if (text.startsWith("0", pos)) { + radix = 8; + } + + final String numberText = text.substring(pos); + + long result = 0; + if (numberText.length() < 16) { + // Can safely assume no overflow. + result = Long.parseLong(numberText, radix); + if (negative) { + result = -result; + } + + // Check bounds. + // No need to check for 64-bit numbers since they'd have to be 16 chars + // or longer to overflow. + if (!isLong) { + if (isSigned) { + if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { + throw new NumberFormatException( + "Number out of range for 32-bit signed integer: " + text); + } + } else { + if (result >= (1L << 32) || result < 0) { + throw new NumberFormatException( + "Number out of range for 32-bit unsigned integer: " + text); + } + } + } + } else { + BigInteger bigValue = new BigInteger(numberText, radix); + if (negative) { + bigValue = bigValue.negate(); + } + + // Check bounds. + if (!isLong) { + if (isSigned) { + if (bigValue.bitLength() > 31) { + throw new NumberFormatException( + "Number out of range for 32-bit signed integer: " + text); + } + } else { + if (bigValue.bitLength() > 32) { + throw new NumberFormatException( + "Number out of range for 32-bit unsigned integer: " + text); + } + } + } else { + if (isSigned) { + if (bigValue.bitLength() > 63) { + throw new NumberFormatException( + "Number out of range for 64-bit signed integer: " + text); + } + } else { + if (bigValue.bitLength() > 64) { + throw new NumberFormatException( + "Number out of range for 64-bit unsigned integer: " + text); + } + } + } + + result = bigValue.longValue(); + } + + return result; + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/UninitializedMessageException.java b/OsmAnd-java/src/com/google/protobuf/UninitializedMessageException.java new file mode 100644 index 0000000000..8743c1200a --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/UninitializedMessageException.java @@ -0,0 +1,99 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.util.Collections; +import java.util.List; + +/** + * Thrown when attempting to build a protocol message that is missing required + * fields. This is a {@code RuntimeException} because it normally represents + * a programming error: it happens when some code which constructs a message + * fails to set all the fields. {@code parseFrom()} methods do not + * throw this; they throw an {@link InvalidProtocolBufferException} if + * required fields are missing, because it is not a programming error to + * receive an incomplete message. In other words, + * {@code UninitializedMessageException} should never be thrown by correct + * code, but {@code InvalidProtocolBufferException} might be. + * + * @author kenton@google.com Kenton Varda + */ +public class UninitializedMessageException extends RuntimeException { + private static final long serialVersionUID = -7466929953374883507L; + + public UninitializedMessageException(final MessageLite message) { + super("Message was missing required fields. (Lite runtime could not " + + "determine which fields were missing)."); + missingFields = null; + } + + public UninitializedMessageException(final List missingFields) { + super(buildDescription(missingFields)); + this.missingFields = missingFields; + } + + private final List missingFields; + + /** + * Get a list of human-readable names of required fields missing from this + * message. Each name is a full path to a field, e.g. "foo.bar[5].baz". + * Returns null if the lite runtime was used, since it lacks the ability to + * find missing fields. + */ + public List getMissingFields() { + return Collections.unmodifiableList(missingFields); + } + + /** + * Converts this exception to an {@link InvalidProtocolBufferException}. + * When a parsed message is missing required fields, this should be thrown + * instead of {@code UninitializedMessageException}. + */ + public InvalidProtocolBufferException asInvalidProtocolBufferException() { + return new InvalidProtocolBufferException(getMessage()); + } + + /** Construct the description string for this exception. */ + private static String buildDescription(final List missingFields) { + final StringBuilder description = + new StringBuilder("Message missing required fields: "); + boolean first = true; + for (final String field : missingFields) { + if (first) { + first = false; + } else { + description.append(", "); + } + description.append(field); + } + return description.toString(); + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/UnknownFieldSet.java b/OsmAnd-java/src/com/google/protobuf/UnknownFieldSet.java new file mode 100644 index 0000000000..37364433be --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/UnknownFieldSet.java @@ -0,0 +1,980 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import com.google.protobuf.AbstractMessageLite.Builder.LimitedInputStream; + +/** + * {@code UnknownFieldSet} is used to keep track of fields which were seen when + * parsing a protocol message but whose field numbers or types are unrecognized. + * This most frequently occurs when new fields are added to a message type + * and then messages containing those feilds are read by old software that was + * compiled before the new types were added. + * + *

    Every {@link Message} contains an {@code UnknownFieldSet} (and every + * {@link Message.Builder} contains an {@link Builder}). + * + *

    Most users will never need to use this class. + * + * @author kenton@google.com Kenton Varda + */ +public final class UnknownFieldSet implements MessageLite { + private UnknownFieldSet() {} + + /** Create a new {@link Builder}. */ + public static Builder newBuilder() { + return Builder.create(); + } + + /** + * Create a new {@link Builder} and initialize it to be a copy + * of {@code copyFrom}. + */ + public static Builder newBuilder(final UnknownFieldSet copyFrom) { + return newBuilder().mergeFrom(copyFrom); + } + + /** Get an empty {@code UnknownFieldSet}. */ + public static UnknownFieldSet getDefaultInstance() { + return defaultInstance; + } + @Override +public UnknownFieldSet getDefaultInstanceForType() { + return defaultInstance; + } + private static final UnknownFieldSet defaultInstance = + new UnknownFieldSet(Collections.emptyMap()); + + /** + * Construct an {@code UnknownFieldSet} around the given map. The map is + * expected to be immutable. + */ + private UnknownFieldSet(final Map fields) { + this.fields = fields; + } + private Map fields; + + @Override + public boolean equals(final Object other) { + if (this == other) { + return true; + } + return (other instanceof UnknownFieldSet) && + fields.equals(((UnknownFieldSet) other).fields); + } + + @Override + public int hashCode() { + return fields.hashCode(); + } + + /** Get a map of fields in the set by number. */ + public Map asMap() { + return fields; + } + + /** Check if the given field number is present in the set. */ + public boolean hasField(final int number) { + return fields.containsKey(number); + } + + /** + * Get a field by number. Returns an empty field if not present. Never + * returns {@code null}. + */ + public Field getField(final int number) { + final Field result = fields.get(number); + return (result == null) ? Field.getDefaultInstance() : result; + } + + /** Serializes the set and writes it to {@code output}. */ + @Override +public void writeTo(final CodedOutputStream output) throws IOException { + for (final Map.Entry entry : fields.entrySet()) { + entry.getValue().writeTo(entry.getKey(), output); + } + } + + /** + * Converts the set to a string in protocol buffer text format. This is + * just a trivial wrapper around + * {@link TextFormat#printToString(UnknownFieldSet)}. + */ + @Override + public String toString() { + return TextFormat.printToString(this); + } + + /** + * Serializes the message to a {@code ByteString} and returns it. This is + * just a trivial wrapper around {@link #writeTo(CodedOutputStream)}. + */ + @Override +public ByteString toByteString() { + try { + final ByteString.CodedBuilder out = + ByteString.newCodedBuilder(getSerializedSize()); + writeTo(out.getCodedOutput()); + return out.build(); + } catch (final IOException e) { + throw new RuntimeException( + "Serializing to a ByteString threw an IOException (should " + + "never happen).", e); + } + } + + /** + * Serializes the message to a {@code byte} array and returns it. This is + * just a trivial wrapper around {@link #writeTo(CodedOutputStream)}. + */ + @Override +public byte[] toByteArray() { + try { + final byte[] result = new byte[getSerializedSize()]; + final CodedOutputStream output = CodedOutputStream.newInstance(result); + writeTo(output); + output.checkNoSpaceLeft(); + return result; + } catch (final IOException e) { + throw new RuntimeException( + "Serializing to a byte array threw an IOException " + + "(should never happen).", e); + } + } + + /** + * Serializes the message and writes it to {@code output}. This is just a + * trivial wrapper around {@link #writeTo(CodedOutputStream)}. + */ + @Override +public void writeTo(final OutputStream output) throws IOException { + final CodedOutputStream codedOutput = CodedOutputStream.newInstance(output); + writeTo(codedOutput); + codedOutput.flush(); + } + + @Override +public void writeDelimitedTo(OutputStream output) throws IOException { + final CodedOutputStream codedOutput = CodedOutputStream.newInstance(output); + codedOutput.writeRawVarint32(getSerializedSize()); + writeTo(codedOutput); + codedOutput.flush(); + } + + /** Get the number of bytes required to encode this set. */ + @Override +public int getSerializedSize() { + int result = 0; + for (final Map.Entry entry : fields.entrySet()) { + result += entry.getValue().getSerializedSize(entry.getKey()); + } + return result; + } + + /** + * Serializes the set and writes it to {@code output} using + * {@code MessageSet} wire format. + */ + public void writeAsMessageSetTo(final CodedOutputStream output) + throws IOException { + for (final Map.Entry entry : fields.entrySet()) { + entry.getValue().writeAsMessageSetExtensionTo( + entry.getKey(), output); + } + } + + /** + * Get the number of bytes required to encode this set using + * {@code MessageSet} wire format. + */ + public int getSerializedSizeAsMessageSet() { + int result = 0; + for (final Map.Entry entry : fields.entrySet()) { + result += entry.getValue().getSerializedSizeAsMessageSetExtension( + entry.getKey()); + } + return result; + } + + @Override +public boolean isInitialized() { + // UnknownFieldSets do not have required fields, so they are always + // initialized. + return true; + } + + /** Parse an {@code UnknownFieldSet} from the given input stream. */ + public static UnknownFieldSet parseFrom(final CodedInputStream input) + throws IOException { + return newBuilder().mergeFrom(input).build(); + } + + /** Parse {@code data} as an {@code UnknownFieldSet} and return it. */ + public static UnknownFieldSet parseFrom(final ByteString data) + throws InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).build(); + } + + /** Parse {@code data} as an {@code UnknownFieldSet} and return it. */ + public static UnknownFieldSet parseFrom(final byte[] data) + throws InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).build(); + } + + /** Parse an {@code UnknownFieldSet} from {@code input} and return it. */ + public static UnknownFieldSet parseFrom(final InputStream input) + throws IOException { + return newBuilder().mergeFrom(input).build(); + } + + @Override +public Builder newBuilderForType() { + return newBuilder(); + } + + @Override +public Builder toBuilder() { + return newBuilder().mergeFrom(this); + } + + /** + * Builder for {@link UnknownFieldSet}s. + * + *

    Note that this class maintains {@link Field.Builder}s for all fields + * in the set. Thus, adding one element to an existing {@link Field} does not + * require making a copy. This is important for efficient parsing of + * unknown repeated fields. However, it implies that {@link Field}s cannot + * be constructed independently, nor can two {@link UnknownFieldSet}s share + * the same {@code Field} object. + * + *

    Use {@link UnknownFieldSet#newBuilder()} to construct a {@code Builder}. + */ + public static final class Builder implements MessageLite.Builder { + // This constructor should never be called directly (except from 'create'). + private Builder() {} + + private Map fields; + + // Optimization: We keep around a builder for the last field that was + // modified so that we can efficiently add to it multiple times in a + // row (important when parsing an unknown repeated field). + private int lastFieldNumber; + private Field.Builder lastField; + + private static Builder create() { + Builder builder = new Builder(); + builder.reinitialize(); + return builder; + } + + /** + * Get a field builder for the given field number which includes any + * values that already exist. + */ + private Field.Builder getFieldBuilder(final int number) { + if (lastField != null) { + if (number == lastFieldNumber) { + return lastField; + } + // Note: addField() will reset lastField and lastFieldNumber. + addField(lastFieldNumber, lastField.build()); + } + if (number == 0) { + return null; + } else { + final Field existing = fields.get(number); + lastFieldNumber = number; + lastField = Field.newBuilder(); + if (existing != null) { + lastField.mergeFrom(existing); + } + return lastField; + } + } + + /** + * Build the {@link UnknownFieldSet} and return it. + * + *

    Once {@code build()} has been called, the {@code Builder} will no + * longer be usable. Calling any method after {@code build()} will result + * in undefined behavior and can cause a {@code NullPointerException} to be + * thrown. + */ + @Override + public UnknownFieldSet build() { + getFieldBuilder(0); // Force lastField to be built. + final UnknownFieldSet result; + if (fields.isEmpty()) { + result = getDefaultInstance(); + } else { + result = new UnknownFieldSet(Collections.unmodifiableMap(fields)); + } + fields = null; + return result; + } + + @Override + public UnknownFieldSet buildPartial() { + // No required fields, so this is the same as build(). + return build(); + } + + @Override + public Builder clone() { + getFieldBuilder(0); // Force lastField to be built. + return UnknownFieldSet.newBuilder().mergeFrom( + new UnknownFieldSet(fields)); + } + + @Override + public UnknownFieldSet getDefaultInstanceForType() { + return UnknownFieldSet.getDefaultInstance(); + } + + private void reinitialize() { + fields = Collections.emptyMap(); + lastFieldNumber = 0; + lastField = null; + } + + /** Reset the builder to an empty set. */ + @Override + public Builder clear() { + reinitialize(); + return this; + } + + /** + * Merge the fields from {@code other} into this set. If a field number + * exists in both sets, {@code other}'s values for that field will be + * appended to the values in this set. + */ + public Builder mergeFrom(final UnknownFieldSet other) { + if (other != getDefaultInstance()) { + for (final Map.Entry entry : other.fields.entrySet()) { + mergeField(entry.getKey(), entry.getValue()); + } + } + return this; + } + + /** + * Add a field to the {@code UnknownFieldSet}. If a field with the same + * number already exists, the two are merged. + */ + public Builder mergeField(final int number, final Field field) { + if (number == 0) { + throw new IllegalArgumentException("Zero is not a valid field number."); + } + if (hasField(number)) { + getFieldBuilder(number).mergeFrom(field); + } else { + // Optimization: We could call getFieldBuilder(number).mergeFrom(field) + // in this case, but that would create a copy of the Field object. + // We'd rather reuse the one passed to us, so call addField() instead. + addField(number, field); + } + return this; + } + + /** + * Convenience method for merging a new field containing a single varint + * value. This is used in particular when an unknown enum value is + * encountered. + */ + public Builder mergeVarintField(final int number, final int value) { + if (number == 0) { + throw new IllegalArgumentException("Zero is not a valid field number."); + } + getFieldBuilder(number).addVarint(value); + return this; + } + + /** Check if the given field number is present in the set. */ + public boolean hasField(final int number) { + if (number == 0) { + throw new IllegalArgumentException("Zero is not a valid field number."); + } + return number == lastFieldNumber || fields.containsKey(number); + } + + /** + * Add a field to the {@code UnknownFieldSet}. If a field with the same + * number already exists, it is removed. + */ + public Builder addField(final int number, final Field field) { + if (number == 0) { + throw new IllegalArgumentException("Zero is not a valid field number."); + } + if (lastField != null && lastFieldNumber == number) { + // Discard this. + lastField = null; + lastFieldNumber = 0; + } + if (fields.isEmpty()) { + fields = new TreeMap(); + } + fields.put(number, field); + return this; + } + + /** + * Get all present {@code Field}s as an immutable {@code Map}. If more + * fields are added, the changes may or may not be reflected in this map. + */ + public Map asMap() { + getFieldBuilder(0); // Force lastField to be built. + return Collections.unmodifiableMap(fields); + } + + /** + * Parse an entire message from {@code input} and merge its fields into + * this set. + */ + @Override + public Builder mergeFrom(final CodedInputStream input) throws IOException { + while (true) { + final int tag = input.readTag(); + if (tag == 0 || !mergeFieldFrom(tag, input)) { + break; + } + } + return this; + } + + /** + * Parse a single field from {@code input} and merge it into this set. + * @param tag The field's tag number, which was already parsed. + * @return {@code false} if the tag is an engroup tag. + */ + public boolean mergeFieldFrom(final int tag, final CodedInputStream input) + throws IOException { + final int number = WireFormat.getTagFieldNumber(tag); + switch (WireFormat.getTagWireType(tag)) { + case WireFormat.WIRETYPE_VARINT: + getFieldBuilder(number).addVarint(input.readInt64()); + return true; + case WireFormat.WIRETYPE_FIXED64: + getFieldBuilder(number).addFixed64(input.readFixed64()); + return true; + case WireFormat.WIRETYPE_LENGTH_DELIMITED: + getFieldBuilder(number).addLengthDelimited(input.readBytes()); + return true; + case WireFormat.WIRETYPE_START_GROUP: + final Builder subBuilder = newBuilder(); + input.readGroup(number, subBuilder, + ExtensionRegistry.getEmptyRegistry()); + getFieldBuilder(number).addGroup(subBuilder.build()); + return true; + case WireFormat.WIRETYPE_END_GROUP: + return false; + case WireFormat.WIRETYPE_FIXED32: + getFieldBuilder(number).addFixed32(input.readFixed32()); + return true; + default: + throw InvalidProtocolBufferException.invalidWireType(); + } + } + + /** + * Parse {@code data} as an {@code UnknownFieldSet} and merge it with the + * set being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. + */ + @Override + public Builder mergeFrom(final ByteString data) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = data.newCodedInput(); + mergeFrom(input); + input.checkLastTagWas(0); + return this; + } catch (final InvalidProtocolBufferException e) { + throw e; + } catch (final IOException e) { + throw new RuntimeException( + "Reading from a ByteString threw an IOException (should " + + "never happen).", e); + } + } + + /** + * Parse {@code data} as an {@code UnknownFieldSet} and merge it with the + * set being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. + */ + @Override + public Builder mergeFrom(final byte[] data) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = CodedInputStream.newInstance(data); + mergeFrom(input); + input.checkLastTagWas(0); + return this; + } catch (final InvalidProtocolBufferException e) { + throw e; + } catch (final IOException e) { + throw new RuntimeException( + "Reading from a byte array threw an IOException (should " + + "never happen).", e); + } + } + + /** + * Parse an {@code UnknownFieldSet} from {@code input} and merge it with the + * set being built. This is just a small wrapper around + * {@link #mergeFrom(CodedInputStream)}. + */ + @Override + public Builder mergeFrom(final InputStream input) throws IOException { + final CodedInputStream codedInput = CodedInputStream.newInstance(input); + mergeFrom(codedInput); + codedInput.checkLastTagWas(0); + return this; + } + + @Override + public boolean mergeDelimitedFrom(InputStream input) + throws IOException { + final int firstByte = input.read(); + if (firstByte == -1) { + return false; + } + final int size = CodedInputStream.readRawVarint32(firstByte, input); + final InputStream limitedInput = new LimitedInputStream(input, size); + mergeFrom(limitedInput); + return true; + } + + @Override + public boolean mergeDelimitedFrom( + InputStream input, + ExtensionRegistryLite extensionRegistry) throws IOException { + // UnknownFieldSet has no extensions. + return mergeDelimitedFrom(input); + } + + @Override + public Builder mergeFrom( + CodedInputStream input, + ExtensionRegistryLite extensionRegistry) throws IOException { + // UnknownFieldSet has no extensions. + return mergeFrom(input); + } + + @Override + public Builder mergeFrom( + ByteString data, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + // UnknownFieldSet has no extensions. + return mergeFrom(data); + } + + @Override + public Builder mergeFrom(byte[] data, int off, int len) + throws InvalidProtocolBufferException { + try { + final CodedInputStream input = + CodedInputStream.newInstance(data, off, len); + mergeFrom(input); + input.checkLastTagWas(0); + return this; + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "Reading from a byte array threw an IOException (should " + + "never happen).", e); + } + } + + @Override + public Builder mergeFrom( + byte[] data, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + // UnknownFieldSet has no extensions. + return mergeFrom(data); + } + + @Override + public Builder mergeFrom( + byte[] data, int off, int len, + ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + // UnknownFieldSet has no extensions. + return mergeFrom(data, off, len); + } + + @Override + public Builder mergeFrom( + InputStream input, + ExtensionRegistryLite extensionRegistry) throws IOException { + // UnknownFieldSet has no extensions. + return mergeFrom(input); + } + + @Override + public boolean isInitialized() { + // UnknownFieldSets do not have required fields, so they are always + // initialized. + return true; + } + } + + /** + * Represents a single field in an {@code UnknownFieldSet}. + * + *

    A {@code Field} consists of five lists of values. The lists correspond + * to the five "wire types" used in the protocol buffer binary format. + * The wire type of each field can be determined from the encoded form alone, + * without knowing the field's declared type. So, we are able to parse + * unknown values at least this far and separate them. Normally, only one + * of the five lists will contain any values, since it is impossible to + * define a valid message type that declares two different types for the + * same field number. However, the code is designed to allow for the case + * where the same unknown field number is encountered using multiple different + * wire types. + * + *

    {@code Field} is an immutable class. To construct one, you must use a + * {@link Builder}. + * + * @see UnknownFieldSet + */ + public static final class Field { + private Field() {} + + /** Construct a new {@link Builder}. */ + public static Builder newBuilder() { + return Builder.create(); + } + + /** + * Construct a new {@link Builder} and initialize it to a copy of + * {@code copyFrom}. + */ + public static Builder newBuilder(final Field copyFrom) { + return newBuilder().mergeFrom(copyFrom); + } + + /** Get an empty {@code Field}. */ + public static Field getDefaultInstance() { + return fieldDefaultInstance; + } + private static final Field fieldDefaultInstance = newBuilder().build(); + + /** Get the list of varint values for this field. */ + public List getVarintList() { return varint; } + + /** Get the list of fixed32 values for this field. */ + public List getFixed32List() { return fixed32; } + + /** Get the list of fixed64 values for this field. */ + public List getFixed64List() { return fixed64; } + + /** Get the list of length-delimited values for this field. */ + public List getLengthDelimitedList() { return lengthDelimited; } + + /** + * Get the list of embedded group values for this field. These are + * represented using {@link UnknownFieldSet}s rather than {@link Message}s + * since the group's type is presumably unknown. + */ + public List getGroupList() { return group; } + + @Override + public boolean equals(final Object other) { + if (this == other) { + return true; + } + if (!(other instanceof Field)) { + return false; + } + return Arrays.equals(getIdentityArray(), + ((Field) other).getIdentityArray()); + } + + @Override + public int hashCode() { + return Arrays.hashCode(getIdentityArray()); + } + + /** + * Returns the array of objects to be used to uniquely identify this + * {@link Field} instance. + */ + private Object[] getIdentityArray() { + return new Object[] { + varint, + fixed32, + fixed64, + lengthDelimited, + group}; + } + + /** + * Serializes the field, including field number, and writes it to + * {@code output}. + */ + public void writeTo(final int fieldNumber, final CodedOutputStream output) + throws IOException { + for (final long value : varint) { + output.writeUInt64(fieldNumber, value); + } + for (final int value : fixed32) { + output.writeFixed32(fieldNumber, value); + } + for (final long value : fixed64) { + output.writeFixed64(fieldNumber, value); + } + for (final ByteString value : lengthDelimited) { + output.writeBytes(fieldNumber, value); + } + for (final UnknownFieldSet value : group) { + output.writeGroup(fieldNumber, value); + } + } + + /** + * Get the number of bytes required to encode this field, including field + * number. + */ + public int getSerializedSize(final int fieldNumber) { + int result = 0; + for (final long value : varint) { + result += CodedOutputStream.computeUInt64Size(fieldNumber, value); + } + for (final int value : fixed32) { + result += CodedOutputStream.computeFixed32Size(fieldNumber, value); + } + for (final long value : fixed64) { + result += CodedOutputStream.computeFixed64Size(fieldNumber, value); + } + for (final ByteString value : lengthDelimited) { + result += CodedOutputStream.computeBytesSize(fieldNumber, value); + } + for (final UnknownFieldSet value : group) { + result += CodedOutputStream.computeGroupSize(fieldNumber, value); + } + return result; + } + + /** + * Serializes the field, including field number, and writes it to + * {@code output}, using {@code MessageSet} wire format. + */ + public void writeAsMessageSetExtensionTo( + final int fieldNumber, + final CodedOutputStream output) + throws IOException { + for (final ByteString value : lengthDelimited) { + output.writeRawMessageSetExtension(fieldNumber, value); + } + } + + /** + * Get the number of bytes required to encode this field, including field + * number, using {@code MessageSet} wire format. + */ + public int getSerializedSizeAsMessageSetExtension(final int fieldNumber) { + int result = 0; + for (final ByteString value : lengthDelimited) { + result += CodedOutputStream.computeRawMessageSetExtensionSize( + fieldNumber, value); + } + return result; + } + + private List varint; + private List fixed32; + private List fixed64; + private List lengthDelimited; + private List group; + + /** + * Used to build a {@link Field} within an {@link UnknownFieldSet}. + * + *

    Use {@link Field#newBuilder()} to construct a {@code Builder}. + */ + public static final class Builder { + // This constructor should never be called directly (except from 'create'). + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new Field(); + return builder; + } + + private Field result; + + /** + * Build the field. After {@code build()} has been called, the + * {@code Builder} is no longer usable. Calling any other method will + * result in undefined behavior and can cause a + * {@code NullPointerException} to be thrown. + */ + public Field build() { + if (result.varint == null) { + result.varint = Collections.emptyList(); + } else { + result.varint = Collections.unmodifiableList(result.varint); + } + if (result.fixed32 == null) { + result.fixed32 = Collections.emptyList(); + } else { + result.fixed32 = Collections.unmodifiableList(result.fixed32); + } + if (result.fixed64 == null) { + result.fixed64 = Collections.emptyList(); + } else { + result.fixed64 = Collections.unmodifiableList(result.fixed64); + } + if (result.lengthDelimited == null) { + result.lengthDelimited = Collections.emptyList(); + } else { + result.lengthDelimited = + Collections.unmodifiableList(result.lengthDelimited); + } + if (result.group == null) { + result.group = Collections.emptyList(); + } else { + result.group = Collections.unmodifiableList(result.group); + } + + final Field returnMe = result; + result = null; + return returnMe; + } + + /** Discard the field's contents. */ + public Builder clear() { + result = new Field(); + return this; + } + + /** + * Merge the values in {@code other} into this field. For each list + * of values, {@code other}'s values are append to the ones in this + * field. + */ + public Builder mergeFrom(final Field other) { + if (!other.varint.isEmpty()) { + if (result.varint == null) { + result.varint = new ArrayList(); + } + result.varint.addAll(other.varint); + } + if (!other.fixed32.isEmpty()) { + if (result.fixed32 == null) { + result.fixed32 = new ArrayList(); + } + result.fixed32.addAll(other.fixed32); + } + if (!other.fixed64.isEmpty()) { + if (result.fixed64 == null) { + result.fixed64 = new ArrayList(); + } + result.fixed64.addAll(other.fixed64); + } + if (!other.lengthDelimited.isEmpty()) { + if (result.lengthDelimited == null) { + result.lengthDelimited = new ArrayList(); + } + result.lengthDelimited.addAll(other.lengthDelimited); + } + if (!other.group.isEmpty()) { + if (result.group == null) { + result.group = new ArrayList(); + } + result.group.addAll(other.group); + } + return this; + } + + /** Add a varint value. */ + public Builder addVarint(final long value) { + if (result.varint == null) { + result.varint = new ArrayList(); + } + result.varint.add(value); + return this; + } + + /** Add a fixed32 value. */ + public Builder addFixed32(final int value) { + if (result.fixed32 == null) { + result.fixed32 = new ArrayList(); + } + result.fixed32.add(value); + return this; + } + + /** Add a fixed64 value. */ + public Builder addFixed64(final long value) { + if (result.fixed64 == null) { + result.fixed64 = new ArrayList(); + } + result.fixed64.add(value); + return this; + } + + /** Add a length-delimited value. */ + public Builder addLengthDelimited(final ByteString value) { + if (result.lengthDelimited == null) { + result.lengthDelimited = new ArrayList(); + } + result.lengthDelimited.add(value); + return this; + } + + /** Add an embedded group. */ + public Builder addGroup(final UnknownFieldSet value) { + if (result.group == null) { + result.group = new ArrayList(); + } + result.group.add(value); + return this; + } + } + } +} diff --git a/OsmAnd-java/src/com/google/protobuf/WireFormat.java b/OsmAnd-java/src/com/google/protobuf/WireFormat.java new file mode 100644 index 0000000000..cca0b8e572 --- /dev/null +++ b/OsmAnd-java/src/com/google/protobuf/WireFormat.java @@ -0,0 +1,166 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** + * This class is used internally by the Protocol Buffer library and generated + * message implementations. It is public only because those generated messages + * do not reside in the {@code protobuf} package. Others should not use this + * class directly. + * + * This class contains constants and helper functions useful for dealing with + * the Protocol Buffer wire format. + * + * @author kenton@google.com Kenton Varda + */ +public final class WireFormat { + // Do not allow instantiation. + private WireFormat() {} + + static final int WIRETYPE_VARINT = 0; + static final int WIRETYPE_FIXED64 = 1; + static final int WIRETYPE_LENGTH_DELIMITED = 2; + static final int WIRETYPE_START_GROUP = 3; + static final int WIRETYPE_END_GROUP = 4; + static final int WIRETYPE_FIXED32 = 5; + // Osmand Delta change + public static final int WIRETYPE_FIXED32_LENGTH_DELIMITED = 6; + + static final int TAG_TYPE_BITS = 3; + static final int TAG_TYPE_MASK = (1 << TAG_TYPE_BITS) - 1; + + /** Given a tag value, determines the wire type (the lower 3 bits). */ + public static int getTagWireType(final int tag) { + return tag & TAG_TYPE_MASK; + } + + /** Given a tag value, determines the field number (the upper 29 bits). */ + public static int getTagFieldNumber(final int tag) { + return tag >>> TAG_TYPE_BITS; + } + + /** Makes a tag value given a field number and wire type. */ + static int makeTag(final int fieldNumber, final int wireType) { + return (fieldNumber << TAG_TYPE_BITS) | wireType; + } + + /** + * Lite equivalent to {@link Descriptors.FieldDescriptor.JavaType}. This is + * only here to support the lite runtime and should not be used by users. + */ + public enum JavaType { + INT(0), + LONG(0L), + FLOAT(0F), + DOUBLE(0D), + BOOLEAN(false), + STRING(""), + BYTE_STRING(ByteString.EMPTY), + ENUM(null), + MESSAGE(null); + + JavaType(final Object defaultDefault) { + this.defaultDefault = defaultDefault; + } + + /** + * The default default value for fields of this type, if it's a primitive + * type. + */ + Object getDefaultDefault() { + return defaultDefault; + } + + private final Object defaultDefault; + } + + /** + * Lite equivalent to {@link Descriptors.FieldDescriptor.Type}. This is + * only here to support the lite runtime and should not be used by users. + */ + public enum FieldType { + DOUBLE (JavaType.DOUBLE , WIRETYPE_FIXED64 ), + FLOAT (JavaType.FLOAT , WIRETYPE_FIXED32 ), + INT64 (JavaType.LONG , WIRETYPE_VARINT ), + UINT64 (JavaType.LONG , WIRETYPE_VARINT ), + INT32 (JavaType.INT , WIRETYPE_VARINT ), + FIXED64 (JavaType.LONG , WIRETYPE_FIXED64 ), + FIXED32 (JavaType.INT , WIRETYPE_FIXED32 ), + BOOL (JavaType.BOOLEAN , WIRETYPE_VARINT ), + // OSMAND FIX no methods override for enum + STRING (JavaType.STRING , WIRETYPE_LENGTH_DELIMITED, false), + GROUP (JavaType.MESSAGE , WIRETYPE_START_GROUP , false), + MESSAGE (JavaType.MESSAGE , WIRETYPE_LENGTH_DELIMITED , false), + BYTES (JavaType.BYTE_STRING, WIRETYPE_LENGTH_DELIMITED , false), + UINT32 (JavaType.INT , WIRETYPE_VARINT ), + ENUM (JavaType.ENUM , WIRETYPE_VARINT ), + SFIXED32(JavaType.INT , WIRETYPE_FIXED32 ), + SFIXED64(JavaType.LONG , WIRETYPE_FIXED64 ), + SINT32 (JavaType.INT , WIRETYPE_VARINT ), + SINT64 (JavaType.LONG , WIRETYPE_VARINT ); + + FieldType(final JavaType javaType, final int wireType) { + this.javaType = javaType; + this.wireType = wireType; + this.packable = true; + } + + FieldType(final JavaType javaType, final int wireType, boolean packable) { + this.javaType = javaType; + this.wireType = wireType; + this.packable = packable; + } + + private final JavaType javaType; + private final int wireType; + private final boolean packable; + + public JavaType getJavaType() { return javaType; } + public int getWireType() { return wireType; } + + public boolean isPackable() { return true; } + } + + // Field numbers for feilds in MessageSet wire format. + static final int MESSAGE_SET_ITEM = 1; + static final int MESSAGE_SET_TYPE_ID = 2; + static final int MESSAGE_SET_MESSAGE = 3; + + // Tag numbers. + static final int MESSAGE_SET_ITEM_TAG = + makeTag(MESSAGE_SET_ITEM, WIRETYPE_START_GROUP); + static final int MESSAGE_SET_ITEM_END_TAG = + makeTag(MESSAGE_SET_ITEM, WIRETYPE_END_GROUP); + static final int MESSAGE_SET_TYPE_ID_TAG = + makeTag(MESSAGE_SET_TYPE_ID, WIRETYPE_VARINT); + static final int MESSAGE_SET_MESSAGE_TAG = + makeTag(MESSAGE_SET_MESSAGE, WIRETYPE_LENGTH_DELIMITED); +} diff --git a/OsmAnd-java/src/net/osmand/CallbackWithObject.java b/OsmAnd-java/src/net/osmand/CallbackWithObject.java new file mode 100644 index 0000000000..c3651019bd --- /dev/null +++ b/OsmAnd-java/src/net/osmand/CallbackWithObject.java @@ -0,0 +1,18 @@ +package net.osmand; + +/** + * That class is designed to be common interface for callbacks with one param + * @author victor + * @param + */ +public interface CallbackWithObject { + + + /** + * Calls on processing result + * @param result could be null depends on usage + * @return processed or not + */ + public boolean processResult(T result); + +} diff --git a/OsmAnd-java/src/net/osmand/Collator.java b/OsmAnd-java/src/net/osmand/Collator.java new file mode 100644 index 0000000000..3991947b01 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/Collator.java @@ -0,0 +1,11 @@ +package net.osmand; + +/** + * Wrapper of java.text. Collator + */ +public interface Collator extends java.util.Comparator, Cloneable{ + + public boolean equals(String source, String target); + + public abstract int compare(String source, String target); +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/CollatorStringMatcher.java b/OsmAnd-java/src/net/osmand/CollatorStringMatcher.java new file mode 100644 index 0000000000..0b9419ef88 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/CollatorStringMatcher.java @@ -0,0 +1,129 @@ +package net.osmand; + + + +/** + * Abstract collator matcher that basically supports subclasses with some collator + * matching. + * + * @author pavol.zibrita + */ +public class CollatorStringMatcher implements StringMatcher { + + private final Collator collator; + private final StringMatcherMode mode; + private final String part; + + public static enum StringMatcherMode { + CHECK_ONLY_STARTS_WITH, + CHECK_STARTS_FROM_SPACE, + CHECK_STARTS_FROM_SPACE_NOT_BEGINNING, + CHECK_CONTAINS + } + + public CollatorStringMatcher(String part, StringMatcherMode mode) { + this.collator = PlatformUtil.primaryCollator(); + this.part = part; + this.mode = mode; + } + + public Collator getCollator() { + return collator; + } + + @Override + public boolean matches(String name) { + return cmatches(collator, name, part, mode); + } + + + public static boolean cmatches(Collator collator, String base, String part, StringMatcherMode mode){ + switch (mode) { + case CHECK_CONTAINS: + return ccontains(collator, base, part); + case CHECK_STARTS_FROM_SPACE: + return cstartsWith(collator, base, part, true, true); + case CHECK_STARTS_FROM_SPACE_NOT_BEGINNING: + return cstartsWith(collator, base, part, false, true); + case CHECK_ONLY_STARTS_WITH: + return cstartsWith(collator, base, part, true, false); + } + return false; + } + + + /** + * Check if part contains in base + * + * @param collator Collator to use + * @param part String to search + * @param base String where to search + * @return true if part is contained in base + */ + public static boolean ccontains(Collator collator, String base, String part) { + int pos = 0; + if (part.length() > 3) { + // improve searching by searching first 3 characters + pos = cindexOf(collator, pos, part.substring(0, 3), base); + if (pos == -1) { + return false; + } + } + pos = cindexOf(collator, pos, part, base); + if (pos == -1) { + return false; + } + return true; + } + + private static int cindexOf(Collator collator, int start, String part, String base) { + for (int pos = start; pos <= base.length() - part.length(); pos++) { + if (collator.equals(base.substring(pos, pos + part.length()), part)) { + return pos; + } + } + return -1; + } + + /** + * Checks if string starts with another string. + * Special check try to find as well in the middle of name + * + * @param collator + * @param searchIn + * @param theStart + * @return true if searchIn starts with token + */ + public static boolean cstartsWith(Collator collator, String searchIn, String theStart, + boolean checkBeginning, boolean checkSpaces) { + int startLength = theStart.length(); + int searchInLength = searchIn.length(); + if (startLength == 0) { + return true; + } + if (startLength > searchInLength) { + return false; + } + // simulate starts with for collator + if (checkBeginning) { + boolean starts = collator.equals(searchIn.substring(0, startLength), theStart); + if (starts) { + return true; + } + } + if (checkSpaces) { + for (int i = 1; i <= searchInLength - startLength; i++) { + if (isSpace(searchIn.charAt(i - 1)) && !isSpace(searchIn.charAt(i))) { + if (collator.equals(searchIn.substring(i, i + startLength), theStart)) { + return true; + } + } + } + } + return false; + } + + private static boolean isSpace(char c){ + return !Character.isLetter(c) && !Character.isDigit(c); + } +} diff --git a/OsmAnd-java/src/net/osmand/FloatMath.java b/OsmAnd-java/src/net/osmand/FloatMath.java new file mode 100644 index 0000000000..86cd9f71a5 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/FloatMath.java @@ -0,0 +1,38 @@ +package net.osmand; + +/** + * This class can be replaced with more effective on ARM devices + */ +public class FloatMath { + + public static float PI = (float) Math.PI; + + public static float cos(float a) { + return (float) Math.cos(a); + } + + public static float sin(float a) { + return (float) Math.sin(a); + } + + public static float abs(float a) { + return (float) Math.abs(a); + } + + public static float atan2(float py, float px) { + return (float) Math.atan2(py, px); + } + + public static float sqrt(float f) { + return (float) Math.sqrt(f); + } + + public static float max(float a, float b) { + if(a > b) { + return a; + } + return b; + } + + +} diff --git a/OsmAnd-java/src/net/osmand/GeoidAltitudeCorrection.java b/OsmAnd-java/src/net/osmand/GeoidAltitudeCorrection.java new file mode 100644 index 0000000000..87ec33a3ec --- /dev/null +++ b/OsmAnd-java/src/net/osmand/GeoidAltitudeCorrection.java @@ -0,0 +1,77 @@ +package net.osmand; + +import java.io.EOFException; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; + +import org.apache.commons.logging.Log; + +public class GeoidAltitudeCorrection { + + private final Log log = PlatformUtil.getLog(GeoidAltitudeCorrection.class); + private File f; + private RandomAccessFile rf; + + private int cachedPointer = -1; + private short cachedValue = 0; + + public GeoidAltitudeCorrection(File dir) { + String[] fnames = dir.list(); + if(fnames != null) { + String fn = null; + for(String f : fnames) { + if(f.contains("WW15MGH")) { + fn = f; + break; + } + } + if (fn != null) { + this.f = new File(dir, fn); + if (f.exists()) { + try { + rf = new RandomAccessFile(f.getPath(), "r"); + } catch (FileNotFoundException e) { + log.error("Error", e); + } + } + } + } + + } + + public boolean isGeoidInformationAvailable(){ + return rf != null; + } + + public float getGeoidHeight(double lat, double lon) { + if (!isGeoidInformationAvailable()) { + return 0; + } + int shy = (int) Math.floor((90 - lat) * 4); + int shx = (int) Math.floor((lon >= 0 ? lon : lon + 360) * 4); + int pointer = ((shy * 1440) + shx) * 2; + short res = 0; + if (pointer != cachedPointer) { + try { + rf.seek(pointer); + // read short + cachedValue = readShort(); + cachedPointer = pointer; + } catch (IOException e) { + log.error("Geoid info error", e); + } + } + res = cachedValue; + return res / 100f; + } + + private short readShort() throws IOException { + byte[] b = new byte[2]; + rf.read(b); + int ch1 = b[0] < 0 ? b[0] + 256 : b[0]; + int ch2 = b[1] < 0 ? b[1] + 256 : b[1]; + return (short)((ch1 << 8) + (ch2 << 0)); + } +} diff --git a/OsmAnd-java/src/net/osmand/IProgress.java b/OsmAnd-java/src/net/osmand/IProgress.java new file mode 100644 index 0000000000..3f349573ef --- /dev/null +++ b/OsmAnd-java/src/net/osmand/IProgress.java @@ -0,0 +1,57 @@ +package net.osmand; + +/** + * That common interface that could be used by background operations. + * Implementation of it depends on chosen UI platform + */ +public interface IProgress { + + /** + * @param taskName + * @param work - -1 means that indeterminate task, + * otherwise number of could be specified + */ + public void startTask(String taskName, int work); + + public void startWork(int work); + + public void progress(int deltaWork); + + public void remaining(int remainingWork); + + public void setGeneralProgress(String genProgress); + + public void finishTask(); + + public boolean isIndeterminate(); + + public boolean isInterrupted(); + + public IProgress EMPTY_PROGRESS = new IProgress() { + + @Override + public void startWork(int work) {} + + @Override + public void startTask(String taskName, int work) {} + + @Override + public void setGeneralProgress(String genProgress) {} + + @Override + public void remaining(int remainingWork) {} + + @Override + public void progress(int deltaWork) {} + + @Override + public boolean isInterrupted() {return false;} + + @Override + public boolean isIndeterminate() {return false;} + + @Override + public void finishTask() {} + }; + +} diff --git a/OsmAnd-java/src/net/osmand/IndexConstants.java b/OsmAnd-java/src/net/osmand/IndexConstants.java new file mode 100644 index 0000000000..2f31cfd9f4 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/IndexConstants.java @@ -0,0 +1,48 @@ +package net.osmand; + + +public class IndexConstants { + + // Important : Every time you change schema of db upgrade version!!! + // If you want that new application support old index : put upgrade code in android app ResourceManager + public final static int POI_TABLE_VERSION = 1; + public final static int BINARY_MAP_VERSION = 2; // starts with 1 + public final static int VOICE_VERSION = 0; //supported download versions + public final static int TTSVOICE_VERSION = 1; //supported download versions + + public static final String POI_INDEX_EXT = ".poi.odb"; //$NON-NLS-1$ + public static final String BINARY_MAP_INDEX_EXT = ".obf"; //$NON-NLS-1$ + + public static final String GEN_LOG_EXT = ".gen.log"; //$NON-NLS-1$ + + public static final String POI_INDEX_EXT_ZIP = ".poi.zip"; //$NON-NLS-1$ + public static final String VOICE_INDEX_EXT_ZIP = ".voice.zip"; //$NON-NLS-1$ + public static final String TTSVOICE_INDEX_EXT_ZIP = ".ttsvoice.zip"; //$NON-NLS-1$ + public static final String ANYVOICE_INDEX_EXT_ZIP = "voice.zip"; //$NON-NLS-1$ //to cactch both voices, .voice.zip and .ttsvoice.zip + public static final String BINARY_MAP_INDEX_EXT_ZIP = ".obf.zip"; //$NON-NLS-1$ + + public static final String EXTRA_ZIP_EXT = ".extra.zip"; + public static final String EXTRA_EXT = ".extra"; + + public static final String RENDERER_INDEX_EXT = ".render.xml"; //$NON-NLS-1$ + + public final static String POI_TABLE = "poi"; //$NON-NLS-1$ + + public static final String INDEX_DOWNLOAD_DOMAIN = "download.osmand.net"; + public static final String APP_DIR = "osmand/"; //$NON-NLS-1$ + public static final String MAPS_PATH = ""; + public static final String BACKUP_INDEX_DIR= "backup/"; + public static final String GPX_INDEX_DIR= "tracks/"; + public static final String TILES_INDEX_DIR= "tiles/"; + public static final String SRTM_INDEX_DIR = "srtm/"; //$NON-NLS-1$ + public static final String AV_INDEX_DIR = "avnotes/"; //$NON-NLS-1$ + public static final String VOICE_INDEX_DIR = "voice/"; //$NON-NLS-1$ + public static final String RENDERERS_DIR = "rendering/"; //$NON-NLS-1$ + public static final String ROUTING_XML_FILE= "routing.xml"; + + + public static final String SQLITE_EXT = ".sqlitedb"; //$NON-NLS-1$ + public static final String TEMP_SOURCE_TO_LOAD = "temp"; + + +} diff --git a/OsmAnd-java/src/net/osmand/Location.java b/OsmAnd-java/src/net/osmand/Location.java new file mode 100644 index 0000000000..e113e3d80a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/Location.java @@ -0,0 +1,514 @@ +package net.osmand; +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * A class representing a geographic location sensed at a particular + * time (a "fix"). A location consists of a latitude and longitude, a + * UTC timestamp. and optionally information on altitude, speed, and + * bearing. + * + *

    Information specific to a particular provider or class of + * providers may be communicated to the application using getExtras, + * which returns a Bundle of key/value pairs. Each provider will only + * provide those entries for which information is available. + */ +public class Location { + + private String mProvider; + private long mTime = 0; + private double mLatitude = 0.0; + private double mLongitude = 0.0; + private boolean mHasAltitude = false; + private double mAltitude = 0.0f; + private boolean mHasSpeed = false; + private float mSpeed = 0.0f; + private boolean mHasBearing = false; + private float mBearing = 0.0f; + private boolean mHasAccuracy = false; + private float mAccuracy = 0.0f; + + // Cache the inputs and outputs of computeDistanceAndBearing + // so calls to distanceTo() and bearingTo() can share work + private double mLat1 = 0.0; + private double mLon1 = 0.0; + private double mLat2 = 0.0; + private double mLon2 = 0.0; + private float mDistance = 0.0f; + private float mInitialBearing = 0.0f; + // Scratchpad + private float[] mResults = new float[2]; + + /** + * Constructs a new Location. By default, time, latitude, + * longitude, and numSatellites are 0; hasAltitude, hasSpeed, and + * hasBearing are false; and there is no extra information. + * + * @param provider the name of the location provider that generated this + * location fix. + */ + public Location(String provider) { + mProvider = provider; + } + + /** + * Constructs a new Location object that is a copy of the given + * location. + */ + public Location(Location l) { + set(l); + } + + /** + * Sets the contents of the location to the values from the given location. + */ + public void set(Location l) { + mProvider = l.mProvider; + mTime = l.mTime; + mLatitude = l.mLatitude; + mLongitude = l.mLongitude; + mHasAltitude = l.mHasAltitude; + mAltitude = l.mAltitude; + mHasSpeed = l.mHasSpeed; + mSpeed = l.mSpeed; + mHasBearing = l.mHasBearing; + mBearing = l.mBearing; + mHasAccuracy = l.mHasAccuracy; + mAccuracy = l.mAccuracy; + } + + /** + * Clears the contents of the location. + */ + public void reset() { + mProvider = null; + mTime = 0; + mLatitude = 0; + mLongitude = 0; + mHasAltitude = false; + mAltitude = 0; + mHasSpeed = false; + mSpeed = 0; + mHasBearing = false; + mBearing = 0; + mHasAccuracy = false; + mAccuracy = 0; + } + + + private static void computeDistanceAndBearing(double lat1, double lon1, + double lat2, double lon2, float[] results) { + // Based on http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf + // using the "Inverse Formula" (section 4) + + int MAXITERS = 20; + // Convert lat/long to radians + lat1 *= Math.PI / 180.0; + lat2 *= Math.PI / 180.0; + lon1 *= Math.PI / 180.0; + lon2 *= Math.PI / 180.0; + + double a = 6378137.0; // WGS84 major axis + double b = 6356752.3142; // WGS84 semi-major axis + double f = (a - b) / a; + double aSqMinusBSqOverBSq = (a * a - b * b) / (b * b); + + double L = lon2 - lon1; + double A = 0.0; + double U1 = Math.atan((1.0 - f) * Math.tan(lat1)); + double U2 = Math.atan((1.0 - f) * Math.tan(lat2)); + + double cosU1 = Math.cos(U1); + double cosU2 = Math.cos(U2); + double sinU1 = Math.sin(U1); + double sinU2 = Math.sin(U2); + double cosU1cosU2 = cosU1 * cosU2; + double sinU1sinU2 = sinU1 * sinU2; + + double sigma = 0.0; + double deltaSigma = 0.0; + double cosSqAlpha = 0.0; + double cos2SM = 0.0; + double cosSigma = 0.0; + double sinSigma = 0.0; + double cosLambda = 0.0; + double sinLambda = 0.0; + + double lambda = L; // initial guess + for (int iter = 0; iter < MAXITERS; iter++) { + double lambdaOrig = lambda; + cosLambda = Math.cos(lambda); + sinLambda = Math.sin(lambda); + double t1 = cosU2 * sinLambda; + double t2 = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda; + double sinSqSigma = t1 * t1 + t2 * t2; // (14) + sinSigma = Math.sqrt(sinSqSigma); + cosSigma = sinU1sinU2 + cosU1cosU2 * cosLambda; // (15) + sigma = Math.atan2(sinSigma, cosSigma); // (16) + double sinAlpha = (sinSigma == 0) ? 0.0 : + cosU1cosU2 * sinLambda / sinSigma; // (17) + cosSqAlpha = 1.0 - sinAlpha * sinAlpha; + cos2SM = (cosSqAlpha == 0) ? 0.0 : + cosSigma - 2.0 * sinU1sinU2 / cosSqAlpha; // (18) + + double uSquared = cosSqAlpha * aSqMinusBSqOverBSq; // defn + A = 1 + (uSquared / 16384.0) * // (3) + (4096.0 + uSquared * + (-768 + uSquared * (320.0 - 175.0 * uSquared))); + double B = (uSquared / 1024.0) * // (4) + (256.0 + uSquared * + (-128.0 + uSquared * (74.0 - 47.0 * uSquared))); + double C = (f / 16.0) * + cosSqAlpha * + (4.0 + f * (4.0 - 3.0 * cosSqAlpha)); // (10) + double cos2SMSq = cos2SM * cos2SM; + deltaSigma = B * sinSigma * // (6) + (cos2SM + (B / 4.0) * + (cosSigma * (-1.0 + 2.0 * cos2SMSq) - + (B / 6.0) * cos2SM * + (-3.0 + 4.0 * sinSigma * sinSigma) * + (-3.0 + 4.0 * cos2SMSq))); + + lambda = L + + (1.0 - C) * f * sinAlpha * + (sigma + C * sinSigma * + (cos2SM + C * cosSigma * + (-1.0 + 2.0 * cos2SM * cos2SM))); // (11) + + double delta = (lambda - lambdaOrig) / lambda; + if (Math.abs(delta) < 1.0e-12) { + break; + } + } + + float distance = (float) (b * A * (sigma - deltaSigma)); + results[0] = distance; + if (results.length > 1) { + float initialBearing = (float) Math.atan2(cosU2 * sinLambda, + cosU1 * sinU2 - sinU1 * cosU2 * cosLambda); + initialBearing *= 180.0 / Math.PI; + results[1] = initialBearing; + if (results.length > 2) { + float finalBearing = (float) Math.atan2(cosU1 * sinLambda, + -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda); + finalBearing *= 180.0 / Math.PI; + results[2] = finalBearing; + } + } + } + + /** + * Computes the approximate distance in meters between two + * locations, and optionally the initial and final bearings of the + * shortest path between them. Distance and bearing are defined using the + * WGS84 ellipsoid. + * + *

    The computed distance is stored in results[0]. If results has length + * 2 or greater, the initial bearing is stored in results[1]. If results has + * length 3 or greater, the final bearing is stored in results[2]. + * + * @param startLatitude the starting latitude + * @param startLongitude the starting longitude + * @param endLatitude the ending latitude + * @param endLongitude the ending longitude + * @param results an array of floats to hold the results + * + * @throws IllegalArgumentException if results is null or has length < 1 + */ + public static void distanceBetween(double startLatitude, double startLongitude, + double endLatitude, double endLongitude, float[] results) { + if (results == null || results.length < 1) { + throw new IllegalArgumentException("results is null or has length < 1"); + } + computeDistanceAndBearing(startLatitude, startLongitude, + endLatitude, endLongitude, results); + } + + /** + * Returns the approximate distance in meters between this + * location and the given location. Distance is defined using + * the WGS84 ellipsoid. + * + * @param dest the destination location + * @return the approximate distance in meters + */ + public float distanceTo(Location dest) { + // See if we already have the result + synchronized (mResults) { + if (mLatitude != mLat1 || mLongitude != mLon1 || + dest.mLatitude != mLat2 || dest.mLongitude != mLon2) { + computeDistanceAndBearing(mLatitude, mLongitude, + dest.mLatitude, dest.mLongitude, mResults); + mLat1 = mLatitude; + mLon1 = mLongitude; + mLat2 = dest.mLatitude; + mLon2 = dest.mLongitude; + mDistance = mResults[0]; + mInitialBearing = mResults[1]; + } + return mDistance; + } + } + + /** + * Returns the approximate initial bearing in degrees East of true + * North when traveling along the shortest path between this + * location and the given location. The shortest path is defined + * using the WGS84 ellipsoid. Locations that are (nearly) + * antipodal may produce meaningless results. + * + * @param dest the destination location + * @return the initial bearing in degrees + */ + public float bearingTo(Location dest) { + synchronized (mResults) { + // See if we already have the result + if (mLatitude != mLat1 || mLongitude != mLon1 || + dest.mLatitude != mLat2 || dest.mLongitude != mLon2) { + computeDistanceAndBearing(mLatitude, mLongitude, + dest.mLatitude, dest.mLongitude, mResults); + mLat1 = mLatitude; + mLon1 = mLongitude; + mLat2 = dest.mLatitude; + mLon2 = dest.mLongitude; + mDistance = mResults[0]; + mInitialBearing = mResults[1]; + } + return mInitialBearing; + } + } + + /** + * Returns the name of the provider that generated this fix, + * or null if it is not associated with a provider. + */ + public String getProvider() { + return mProvider; + } + + /** + * Sets the name of the provider that generated this fix. + */ + public void setProvider(String provider) { + mProvider = provider; + } + + /** + * Returns the UTC time of this fix, in milliseconds since January 1, + * 1970. + */ + public long getTime() { + return mTime; + } + + /** + * Sets the UTC time of this fix, in milliseconds since January 1, + * 1970. + */ + public void setTime(long time) { + mTime = time; + } + + /** + * Returns the latitude of this fix. + */ + public double getLatitude() { + return mLatitude; + } + + /** + * Sets the latitude of this fix. + */ + public void setLatitude(double latitude) { + mLatitude = latitude; + } + + /** + * Returns the longitude of this fix. + */ + public double getLongitude() { + return mLongitude; + } + + /** + * Sets the longitude of this fix. + */ + public void setLongitude(double longitude) { + mLongitude = longitude; + } + + /** + * Returns true if this fix contains altitude information, false + * otherwise. + */ + public boolean hasAltitude() { + return mHasAltitude; + } + + /** + * Returns the altitude of this fix. If {@link #hasAltitude} is false, + * 0.0f is returned. + */ + public double getAltitude() { + return mAltitude; + } + + /** + * Sets the altitude of this fix. Following this call, + * hasAltitude() will return true. + */ + public void setAltitude(double altitude) { + mAltitude = altitude; + mHasAltitude = true; + } + + /** + * Clears the altitude of this fix. Following this call, + * hasAltitude() will return false. + */ + public void removeAltitude() { + mAltitude = 0.0f; + mHasAltitude = false; + } + + /** + * Returns true if this fix contains speed information, false + * otherwise. The default implementation returns false. + */ + public boolean hasSpeed() { + return mHasSpeed; + } + + /** + * Returns the speed of the device over ground in meters/second. + * If hasSpeed() is false, 0.0f is returned. + */ + public float getSpeed() { + return mSpeed; + } + + /** + * Sets the speed of this fix, in meters/second. Following this + * call, hasSpeed() will return true. + */ + public void setSpeed(float speed) { + mSpeed = speed; + mHasSpeed = true; + } + + /** + * Clears the speed of this fix. Following this call, hasSpeed() + * will return false. + */ + public void removeSpeed() { + mSpeed = 0.0f; + mHasSpeed = false; + } + + /** + * Returns true if the provider is able to report bearing information, + * false otherwise. The default implementation returns false. + */ + public boolean hasBearing() { + return mHasBearing; + } + + /** + * Returns the direction of travel in degrees East of true + * North. If hasBearing() is false, 0.0 is returned. + */ + public float getBearing() { + return mBearing; + } + + /** + * Sets the bearing of this fix. Following this call, hasBearing() + * will return true. + */ + public void setBearing(float bearing) { + while (bearing < 0.0f) { + bearing += 360.0f; + } + while (bearing >= 360.0f) { + bearing -= 360.0f; + } + mBearing = bearing; + mHasBearing = true; + } + + /** + * Clears the bearing of this fix. Following this call, hasBearing() + * will return false. + */ + public void removeBearing() { + mBearing = 0.0f; + mHasBearing = false; + } + + /** + * Returns true if the provider is able to report accuracy information, + * false otherwise. The default implementation returns false. + */ + public boolean hasAccuracy() { + return mHasAccuracy; + } + + /** + * Returns the accuracy of the fix in meters. If hasAccuracy() is false, + * 0.0 is returned. + */ + public float getAccuracy() { + return mAccuracy; + } + + /** + * Sets the accuracy of this fix. Following this call, hasAccuracy() + * will return true. + */ + public void setAccuracy(float accuracy) { + mAccuracy = accuracy; + mHasAccuracy = true; + } + + /** + * Clears the accuracy of this fix. Following this call, hasAccuracy() + * will return false. + */ + public void removeAccuracy() { + mAccuracy = 0.0f; + mHasAccuracy = false; + } + + @Override public String toString() { + return "Location[mProvider=" + mProvider + + ",mTime=" + mTime + + ",mLatitude=" + mLatitude + + ",mLongitude=" + mLongitude + + ",mHasAltitude=" + mHasAltitude + + ",mAltitude=" + mAltitude + + ",mHasSpeed=" + mHasSpeed + + ",mSpeed=" + mSpeed + + ",mHasBearing=" + mHasBearing + + ",mBearing=" + mBearing + + ",mHasAccuracy=" + mHasAccuracy + + ",mAccuracy=" + mAccuracy; + } + + + + +} diff --git a/OsmAnd-java/src/net/osmand/NativeLibrary.java b/OsmAnd-java/src/net/osmand/NativeLibrary.java new file mode 100644 index 0000000000..5546aa008d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/NativeLibrary.java @@ -0,0 +1,289 @@ +package net.osmand; + +import gnu.trove.list.array.TIntArrayList; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.logging.Log; + +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteSubregion; +import net.osmand.binary.RouteDataObject; +import net.osmand.render.RenderingRuleSearchRequest; +import net.osmand.render.RenderingRulesStorage; +import net.osmand.router.GeneralRouter; +import net.osmand.router.RouteCalculationProgress; +import net.osmand.router.RouteSegmentResult; +import net.osmand.router.RoutingConfiguration; + +public class NativeLibrary { + + public static class RenderingGenerationResult { + public RenderingGenerationResult(ByteBuffer bitmap) { + bitmapBuffer = bitmap; + } + + public final ByteBuffer bitmapBuffer; + } + + public static class NativeSearchResult { + + public long nativeHandler; + + private NativeSearchResult(long nativeHandler) { + this.nativeHandler = nativeHandler; + } + + @Override + protected void finalize() throws Throwable { + deleteNativeResult(); + super.finalize(); + } + + public void deleteNativeResult() { + if (nativeHandler != 0) { + deleteSearchResult(nativeHandler); + nativeHandler = 0; + } + } + } + + public static class NativeRouteSearchResult { + + public long nativeHandler; + public RouteDataObject[] objects; + public RouteSubregion region; + + public NativeRouteSearchResult(long nativeHandler, RouteDataObject[] objects) { + this.nativeHandler = nativeHandler; + this.objects = objects; + } + + @Override + protected void finalize() throws Throwable { + deleteNativeResult(); + super.finalize(); + } + + public void deleteNativeResult() { + if (nativeHandler != 0) { + deleteRouteSearchResult(nativeHandler); + nativeHandler = 0; + } + } + } + + /** + * @param searchResultHandle + * - must be null if there is no need to append to previous results returns native handle to results + */ + public NativeSearchResult searchObjectsForRendering(int sleft, int sright, int stop, int sbottom, int zoom, + RenderingRuleSearchRequest request, boolean skipDuplicates, Object objectWithInterruptedField, String msgIfNothingFound) { + int renderRouteDataFile = 0; + if (request.searchRenderingAttribute("showRoadMapsAttribute")) { + renderRouteDataFile = request.getIntPropertyValue(request.ALL.R_ATTR_INT_VALUE); + } + return new NativeSearchResult(searchNativeObjectsForRendering(sleft, sright, stop, sbottom, zoom, request, skipDuplicates, + renderRouteDataFile, objectWithInterruptedField, msgIfNothingFound)); + } + + public RouteDataObject[] getDataObjects(NativeRouteSearchResult rs, int x31, int y31) { + if (rs.nativeHandler == 0) { + // do not throw exception because it is expected situation + return new RouteDataObject[0]; + } + return getRouteDataObjects(rs.region.routeReg, rs.nativeHandler, x31, y31); + } + + public boolean initMapFile(String filePath) { + return initBinaryMapFile(filePath); + } + + public boolean initCacheMapFile(String filePath) { + return initCacheMapFiles(filePath); + } + + public boolean closeMapFile(String filePath) { + return closeBinaryMapFile(filePath); + } + + public RouteSegmentResult[] runNativeRouting(int sx31, int sy31, int ex31, int ey31, RoutingConfiguration config, + RouteRegion[] regions, RouteCalculationProgress progress) { + TIntArrayList state = new TIntArrayList(); + List keys = new ArrayList(); + List values = new ArrayList(); + GeneralRouter r = (GeneralRouter) config.router; + fillObjects(state, keys, values, 0, r.highwaySpeed); + fillObjects(state, keys, values, 1, r.highwayPriorities); + fillObjects(state, keys, values, 2, r.avoid); + fillObjects(state, keys, values, 3, r.obstacles); + fillObjects(state, keys, values, 4, r.routingObstacles); + LinkedHashMap attrs = new LinkedHashMap(config.attributes); + attrs.putAll(r.attributes); + fillObjects(state, keys, values, 5, attrs); + + return nativeRouting(new int[] { sx31, sy31, ex31, ey31 }, state.toArray(), keys.toArray(new String[keys.size()]), + values.toArray(new String[values.size()]), config.initialDirection == null ? -360 : config.initialDirection.floatValue(), + regions, progress); + } + + public void fillObjects(TIntArrayList state, List keys, List values, int s, Map map) { + Iterator> it = map.entrySet().iterator(); + while (it.hasNext()) { + Entry n = it.next(); + state.add(s); + keys.add(n.getKey()); + values.add(n.getValue() + ""); + } + } + + public NativeRouteSearchResult loadRouteRegion(RouteSubregion sub, boolean loadObjects) { + NativeRouteSearchResult lr = loadRoutingData(sub.routeReg, sub.routeReg.getName(), sub.routeReg.getFilePointer(), sub, loadObjects); + if (lr != null && lr.nativeHandler != 0) { + lr.region = sub; + } + return lr; + } + + /**/ + protected static native NativeRouteSearchResult loadRoutingData(RouteRegion reg, String regName, int regfp, RouteSubregion subreg, + boolean loadObjects); + + protected static native void deleteRouteSearchResult(long searchResultHandle); + + protected static native RouteDataObject[] getRouteDataObjects(RouteRegion reg, long rs, int x31, int y31); + + protected static native RouteSegmentResult[] nativeRouting(int[] coordinates, int[] state, String[] keyConfig, String[] valueConfig, + float initDirection, RouteRegion[] regions, RouteCalculationProgress progress); + + protected static native void deleteSearchResult(long searchResultHandle); + + protected static native boolean initBinaryMapFile(String filePath); + + protected static native boolean initCacheMapFiles(String filePath); + + protected static native boolean closeBinaryMapFile(String filePath); + + protected static native void initRenderingRulesStorage(RenderingRulesStorage storage); + + protected static native RenderingGenerationResult generateRenderingIndirect(RenderingContext rc, long searchResultHandler, + boolean isTransparent, RenderingRuleSearchRequest render, boolean encodePng); + + protected static native long searchNativeObjectsForRendering(int sleft, int sright, int stop, int sbottom, int zoom, + RenderingRuleSearchRequest request, boolean skipDuplicates, int renderRouteDataFile, Object objectWithInterruptedField, + String msgIfNothingFound); + + public static native void testRoutingPing(); + + public static native int testNativeRouting(String obfPath, double sLat, double sLon, double eLat, double eLon); + + /**/ + // Empty native impl + /* + * protected static NativeRouteSearchResult loadRoutingData(RouteRegion reg, String regName, int regfp,RouteSubregion subreg, boolean + * loadObjects) { return null;} + * + * protected static void deleteRouteSearchResult(long searchResultHandle) {} + * + * protected static RouteDataObject[] getRouteDataObjects(RouteRegion reg, long rs, int x31, int y31){return null;} + * + * protected static RouteSegmentResult[] nativeRouting(int[] coordinates, int[] state, String[] keyConfig, String[] valueConfig, float + * initDirection, RouteRegion[] regions, RouteCalculationProgress progress) {return null;} + * + * protected static void deleteSearchResult(long searchResultHandle) {} + * + * protected static boolean initBinaryMapFile(String filePath) {return false;} + * + * protected static boolean initCacheMapFiles(String filePath) {return false;} + * + * protected static boolean closeBinaryMapFile(String filePath) {return false;} + * + * protected static void initRenderingRulesStorage(RenderingRulesStorage storage) {} + * + * + * protected static RenderingGenerationResult generateRenderingIndirect(RenderingContext rc, long searchResultHandler, boolean + * isTransparent, RenderingRuleSearchRequest render, boolean encodePng) { return null; } + * + * protected static long searchNativeObjectsForRendering(int sleft, int sright, int stop, int sbottom, int zoom, + * RenderingRuleSearchRequest request, boolean skipDuplicates, int renderRouteDataFile, Object objectWithInterruptedField, String + * msgIfNothingFound) { return 0; } + * + * public static void testRoutingPing() {} + * + * public static int testNativeRouting(String obfPath, double sLat, double sLon, double eLat, double eLon) {return 0;} /* + */ + + private static final Log log = PlatformUtil.getLog(NativeLibrary.class); + public static boolean loadAllLibs(String path) { + boolean b = true; + b &= load("Qt5Core", path); + b &= load("OsmAndCore", path); + b &= load("OsmAndCoreUtils", path); + b &= load("OsmAndJNI", path); + return b; + } + + public static boolean load(String libBaseName, String path) { + // look for a pre-installed library + if (path != null) { + try { + System.load(path + libBaseName); + return true; + } catch (UnsatisfiedLinkError e) { + log.error(e); + } // fall through + } + + // guess what a bundled library would be called + String osname = System.getProperty("os.name").toLowerCase(); + String osarch = System.getProperty("os.arch"); + if (osname.startsWith("mac os")) { + osname = "mac"; + osarch = "universal"; + } + if (osname.startsWith("windows")) + osname = "win"; + if (osname.startsWith("sunos")) + osname = "solaris"; + if (osarch.startsWith("i") && osarch.endsWith("86")) + osarch = "x86"; + String libname = libBaseName + "-" + osname + '-' + osarch + ".lib"; + + // try a bundled library + try { + ClassLoader cl = NativeLibrary.class.getClassLoader(); + InputStream in = cl.getResourceAsStream( libname); + if (in == null) { + log.error("libname: " + libname + " not found"); + return false; + } + File tmplib = File.createTempFile(libBaseName + "-", ".lib"); + tmplib.deleteOnExit(); + OutputStream out = new FileOutputStream(tmplib); + byte[] buf = new byte[1024]; + for (int len; (len = in.read(buf)) != -1;) + out.write(buf, 0, len); + in.close(); + out.close(); + + System.load(tmplib.getAbsolutePath()); + return true; + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + } catch (UnsatisfiedLinkError e) { + log.error(e.getMessage(), e); + } // fall through + return false; + } +} diff --git a/OsmAnd-java/src/net/osmand/PlatformUtil.java b/OsmAnd-java/src/net/osmand/PlatformUtil.java new file mode 100644 index 0000000000..b0a56ae2ba --- /dev/null +++ b/OsmAnd-java/src/net/osmand/PlatformUtil.java @@ -0,0 +1,88 @@ +package net.osmand; + + + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +/** + * That class is replacing of standard LogFactory due to + * problems with Android implementation of LogFactory. + * See Android analog of LogUtil + * + * That class should be very simple & always use LogFactory methods, + * there is an intention to delegate all static methods to LogFactory. + */ +public class PlatformUtil { + + public static boolean AVIAN_LIBRARY = false; + + public static Log getLog(Class cl){ + return LogFactory.getLog(cl); + } + + public static XmlPullParser newXMLPullParser() throws XmlPullParserException{ + return new org.kxml2.io.KXmlParser(); + } + + + // AVIAN missing dependency + /*public static net.osmand.Collator primaryCollator(){ + return new net.osmand.Collator() { + + @Override + public int compare(Object o1, Object o2) { + return compare(o1+"", o2+""); + } + + @Override + public boolean equals(String source, String target) { + if(source == null) { + return source == target; + } + return source.equals(target); + } + + @Override + public int compare(String source, String target) { + if(source == null) { + return source == target ? 0 : -1; + } + return source.compareTo(target); + } + }; + }*/ + + public static net.osmand.Collator primaryCollator(){ + final java.text.Collator instance = java.text.Collator.getInstance(); + instance.setStrength(java.text.Collator.PRIMARY); + return wrapCollator(instance); + } + + public static net.osmand.Collator wrapCollator(final java.text.Collator instance) { + return new net.osmand.Collator() { + + @Override + public int compare(Object o1, Object o2) { + return instance.compare(o1, o2); + } + + @Override + public boolean equals(Object obj) { + return instance.equals(obj); + } + + @Override + public boolean equals(String source, String target) { + return instance.equals(source, target); + } + + @Override + public int compare(String source, String target) { + return instance.compare(source, target); + } + }; + } +} diff --git a/OsmAnd-java/src/net/osmand/RenderingContext.java b/OsmAnd-java/src/net/osmand/RenderingContext.java new file mode 100644 index 0000000000..1a62b5b07b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/RenderingContext.java @@ -0,0 +1,69 @@ +package net.osmand; + + +public class RenderingContext { + static enum ShadowRenderingMode { + // int shadowRenderingMode = 0; // no shadow (minumum CPU) + // int shadowRenderingMode = 1; // classic shadow (the implementaton in master) + // int shadowRenderingMode = 2; // blur shadow (most CPU, but still reasonable) + // int shadowRenderingMode = 3; solid border (CPU use like classic version or even smaller) + NO_SHADOW(0), ONE_STEP(1), BLUR_SHADOW(2), SOLID_SHADOW(3); + public final int value; + + ShadowRenderingMode(int v) { + this.value = v; + } + } + + // FIELDS OF THAT CLASS ARE USED IN C++ + public boolean interrupted = false; + public boolean nightMode = false; + public boolean useEnglishNames = false; + public int defaultColor = 0xf1eee8; + + public RenderingContext() { + } + + + public float leftX; + public float topY; + public int width; + public int height; + + public int zoom; + public float tileDivisor; + public float rotate; + + // debug purpose + public int pointCount = 0; + public int pointInsideCount = 0; + public int visible = 0; + public int allObjects = 0; + public int textRenderingTime = 0; + public int lastRenderedKey = 0; + + // be aware field is using in C++ + public int shadowRenderingMode = ShadowRenderingMode.BLUR_SHADOW.value; + public int shadowRenderingColor = 0xff969696; + public String renderingDebugInfo; + + private float density = 1; + + public void setDensityValue(boolean highResMode, float mapTextSize, float density) { +// boolean highResMode = false; +// float mapTextSize = 1; + if (highResMode && density > 1) { + this.density = density * mapTextSize; + } else { + this.density = mapTextSize; + } + } + + public float getDensityValue(float val) { + return val * density; + } + + protected byte[] getIconRawData(String data) { + return null; + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/Reshaper.java b/OsmAnd-java/src/net/osmand/Reshaper.java new file mode 100644 index 0000000000..78c2247c13 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/Reshaper.java @@ -0,0 +1,88 @@ +package net.osmand; + +import org.apache.commons.logging.Log; + +import com.ibm.icu.text.ArabicShaping; +import com.ibm.icu.text.ArabicShapingException; +import com.ibm.icu.text.Bidi; +import com.ibm.icu.text.BidiRun; + +public class Reshaper { + private final static Log LOG = PlatformUtil.getLog(Reshaper.class); + + public static String reshape(String s) { +// if(true) { +// return s; +// } + try { + ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE | ArabicShaping.LENGTH_GROW_SHRINK); + try { + s = as.shape(s); + } catch (ArabicShapingException e) { + LOG.error(e.getMessage(), e); + } + Bidi line = new Bidi(s.length(), s.length()); + line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null); + byte direction = line.getDirection(); + if (direction != Bidi.MIXED) { + // unidirectional + if(line.isLeftToRight()) { + return s; + } else { + char[] chs = new char[s.length()]; + for(int i = 0; i< chs.length ; i++) { + chs[i] = s.charAt(chs.length - i - 1); + } + return new String(chs); + } + } else { + // // mixed-directional + int count = line.countRuns(); + // if (styleRunCount <= 1) { + // int style = styleRuns[0].style; + // // iterate over directional runs + // for (i = 0; i < count; ++i) { + // run = line.getVisualRun(i); + // renderRun(text, run.getStart(), run.getLimit(), + // run.getDirection(), style); + // } + // } + StringBuilder res = new StringBuilder(); + // iterate over both directional and style runs + for (int i = 0; i < count; ++i) { + BidiRun run = line.getVisualRun(i); + + int st = run.getStart(); + int e = run.getLimit(); + int j = run.getDirection() == Bidi.LTR ? st : e - 1; + int l = run.getDirection() == Bidi.LTR ? e : st - 1; + boolean plus = run.getDirection() == Bidi.LTR; + while (j != l) { + res.append(s.charAt(j)); + if (plus) { + j++; + } else { + j--; + } + } + } + return res.toString(); + } + } catch (RuntimeException e) { + LOG.error(e.getMessage(), e); + return s; + } + + } + /* + public static void main(String[] args) { +// char[] c = new char[] {'א', 'ד','ם', ' ', '1', '2'} ; +// String reshape = "אדם"; + char[] c = new char[] {'א', 'ד','ם'} ; + String reshape = reshape(new String(c)); + for(int i=0; i < reshape.length(); i++) { + System.out.println(reshape.charAt(i)); + } + }*/ + +} diff --git a/OsmAnd-java/src/net/osmand/ResultMatcher.java b/OsmAnd-java/src/net/osmand/ResultMatcher.java new file mode 100644 index 0000000000..cc36986076 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/ResultMatcher.java @@ -0,0 +1,20 @@ +package net.osmand; + +/** + * Easy matcher to be able to publish results immediately + * + */ +public interface ResultMatcher { + + /** + * @param name + * @return true if result should be added to final list + */ + boolean publish(T object); + + /** + * @returns true to stop processing + */ + boolean isCancelled(); + +} diff --git a/OsmAnd-java/src/net/osmand/StateChangedListener.java b/OsmAnd-java/src/net/osmand/StateChangedListener.java new file mode 100644 index 0000000000..f4c9e071e0 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/StateChangedListener.java @@ -0,0 +1,10 @@ +package net.osmand; + +/** + * Abstract listener represents state changed for a particular object + */ +public interface StateChangedListener { + + void stateChanged(T change); + +} diff --git a/OsmAnd-java/src/net/osmand/StringMatcher.java b/OsmAnd-java/src/net/osmand/StringMatcher.java new file mode 100644 index 0000000000..38182ed1fe --- /dev/null +++ b/OsmAnd-java/src/net/osmand/StringMatcher.java @@ -0,0 +1,17 @@ +package net.osmand; + +/** + * Easy matcher to be able to filter streets,buildings, etc.. using custom + * rules + * + * @author pavol.zibrita + */ +public interface StringMatcher { + + /** + * @param name + * @return true if this matcher matches the name String + */ + boolean matches(String name); + +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryIndexPart.java b/OsmAnd-java/src/net/osmand/binary/BinaryIndexPart.java new file mode 100644 index 0000000000..361a8fb92d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryIndexPart.java @@ -0,0 +1,32 @@ +package net.osmand.binary; + +public class BinaryIndexPart { + + String name; + int length; + int filePointer; + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + + public int getFilePointer() { + return filePointer; + } + + public void setFilePointer(int filePointer) { + this.filePointer = filePointer; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java new file mode 100644 index 0000000000..862a35cce3 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java @@ -0,0 +1,667 @@ +package net.osmand.binary; + + +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.map.hash.TIntObjectHashMap; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import net.osmand.ResultMatcher; +import net.osmand.binary.BinaryMapAddressReaderAdapter.AddressRegion; +import net.osmand.binary.BinaryMapAddressReaderAdapter.CitiesBlock; +import net.osmand.binary.BinaryMapIndexReader.MapIndex; +import net.osmand.binary.BinaryMapIndexReader.MapRoot; +import net.osmand.binary.BinaryMapIndexReader.SearchFilter; +import net.osmand.binary.BinaryMapIndexReader.SearchPoiTypeFilter; +import net.osmand.binary.BinaryMapIndexReader.SearchRequest; +import net.osmand.binary.BinaryMapIndexReader.TagValuePair; +import net.osmand.binary.BinaryMapPoiReaderAdapter.PoiRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapTransportReaderAdapter.TransportIndex; +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.data.Building; +import net.osmand.data.City; +import net.osmand.data.MapObject; +import net.osmand.data.Street; +import net.osmand.util.MapUtils; + +import com.google.protobuf.CodedOutputStream; +import com.google.protobuf.WireFormat; + +public class BinaryInspector { + + + public static final int BUFFER_SIZE = 1 << 20; + + public static void main(String[] args) throws IOException { + inspector(args); + // test cases show info + +// inspector(new String[]{"-vaddress", "-vcities", "-vstreets", "-bbox=14.4,50.1,14.5,50.01", "/home/victor/projects/OsmAnd/data/osm-gen/Map.obf"}); + // test case extract parts + // test case + } + + private static void println(String s) { + System.out.println(s); + } + + private static void print(String s) { + System.out.print(s); + } + + protected static class VerboseInfo { + boolean vaddress; + boolean vcities; + boolean vstreetgroups; + boolean vstreets; + boolean vbuildings; + boolean vintersections; + boolean vtransport; + boolean vpoi; + boolean vmap; + boolean vmapObjects; + double lattop = 85; + double latbottom = -85; + double lonleft = -180; + double lonright = 180; + int zoom = -1; + + public boolean isVaddress() { + return vaddress; + } + + public int getZoom() { + return zoom; + } + + public boolean isVmap() { + return vmap; + } + public boolean isVpoi() { + return vpoi; + } + + public boolean isVtransport() { + return vtransport; + } + + public VerboseInfo(String[] params){ + for(int i=0;i= o.getLocation().getLatitude() && latbottom <= o.getLocation().getLatitude() + && lonleft <= o.getLocation().getLongitude() && lonright >= o.getLocation().getLongitude(); + + } + } + + public static void inspector(String[] args) throws IOException { + if(args == null || args.length == 0){ + printUsage(null); + return; + } + String f = args[0]; + if (f.charAt(0) == '-') { + // command + if (f.equals("-c") || f.equals("-combine")) { + if (args.length < 4) { + printUsage("Too few parameters to extract (require minimum 4)"); + } else { + Map parts = new HashMap(); + for (int i = 2; i < args.length; i++) { + File file = new File(args[i]); + if (!file.exists()) { + System.err.println("File to extract from doesn't exist " + args[i]); + return; + } + parts.put(file, null); + if (i < args.length - 1) { + if (args[i + 1].startsWith("-") || args[i + 1].startsWith("+")) { + parts.put(file, args[i + 1]); + i++; + } + } + } + List extracted = combineParts(new File(args[1]), parts); + if (extracted != null) { + println("\n" + extracted.size() + " parts were successfully extracted to " + args[1]); + } + } + } else if (f.startsWith("-v")) { + if (args.length < 2) { + printUsage("Missing file parameter"); + } else { + VerboseInfo vinfo = new VerboseInfo(args); + printFileInformation(args[args.length - 1], vinfo); + } + } else { + printUsage("Unknown command : " + f); + } + } else { + printFileInformation(f, null); + } + } + public static final void writeInt(CodedOutputStream ous, int v) throws IOException { + ous.writeRawByte((v >>> 24) & 0xFF); + ous.writeRawByte((v >>> 16) & 0xFF); + ous.writeRawByte((v >>> 8) & 0xFF); + ous.writeRawByte((v >>> 0) & 0xFF); + //written += 4; + } + + @SuppressWarnings("unchecked") + public static List combineParts(File fileToExtract, Map partsToExtractFrom) throws IOException { + BinaryMapIndexReader[] indexes = new BinaryMapIndexReader[partsToExtractFrom.size()]; + RandomAccessFile[] rafs = new RandomAccessFile[partsToExtractFrom.size()]; + + LinkedHashSet[] partsSet = new LinkedHashSet[partsToExtractFrom.size()]; + int c = 0; + Set addressNames = new LinkedHashSet(); + + + int version = -1; + // Go through all files and validate conistency + for(File f : partsToExtractFrom.keySet()){ + if(f.getAbsolutePath().equals(fileToExtract.getAbsolutePath())){ + System.err.println("Error : Input file is equal to output file " + f.getAbsolutePath()); + return null; + } + rafs[c] = new RandomAccessFile(f.getAbsolutePath(), "r"); + indexes[c] = new BinaryMapIndexReader(rafs[c]); + partsSet[c] = new LinkedHashSet(); + if(version == -1){ + version = indexes[c].getVersion(); + } else { + if(indexes[c].getVersion() != version){ + System.err.println("Error : Different input files has different input versions " + indexes[c].getVersion() + " != " + version); + return null; + } + } + + LinkedHashSet temp = new LinkedHashSet(); + String pattern = partsToExtractFrom.get(f); + boolean minus = true; + for (int i = 0; i < indexes[c].getIndexes().size(); i++) { + partsSet[c].add(new Float(i + 1f)); + BinaryIndexPart part = indexes[c].getIndexes().get(i); + if(part instanceof MapIndex){ + List roots = ((MapIndex) part).getRoots(); + int rsize = roots.size(); + for(int j=0; j p = partsSet[c].iterator(); + while (p.hasNext()) { + Float part = p.next(); + if (minus) { + if (temp.contains(part)) { + p.remove(); + } + } else { + if (!temp.contains(part)) { + p.remove(); + } + } + } + + c++; + } + + // write files + FileOutputStream fout = new FileOutputStream(fileToExtract); + CodedOutputStream ous = CodedOutputStream.newInstance(fout, BUFFER_SIZE); + List list = new ArrayList(); + byte[] BUFFER_TO_READ = new byte[BUFFER_SIZE]; + + ous.writeInt32(OsmandOdb.OsmAndStructure.VERSION_FIELD_NUMBER, version); + ous.writeInt64(OsmandOdb.OsmAndStructure.DATECREATED_FIELD_NUMBER, System.currentTimeMillis()); + + + for (int k = 0; k < indexes.length; k++) { + LinkedHashSet partSet = partsSet[k]; + BinaryMapIndexReader index = indexes[k]; + RandomAccessFile raf = rafs[k]; + for (int i = 0; i < index.getIndexes().size(); i++) { + if (!partSet.contains(Float.valueOf(i + 1f))) { + continue; + } + list.add(new Float(i + 1f)); + + BinaryIndexPart part = index.getIndexes().get(i); + String map; + + if (part instanceof MapIndex) { + ous.writeTag(OsmandOdb.OsmAndStructure.MAPINDEX_FIELD_NUMBER, WireFormat.WIRETYPE_FIXED32_LENGTH_DELIMITED); + map = "Map"; + } else if (part instanceof AddressRegion) { + ous.writeTag(OsmandOdb.OsmAndStructure.ADDRESSINDEX_FIELD_NUMBER, WireFormat.WIRETYPE_FIXED32_LENGTH_DELIMITED); + map = "Address"; + if (addressNames.contains(part.getName())) { + System.err.println("Error : going to merge 2 addresses with same names. Skip " + part.getName()); + continue; + } + addressNames.add(part.getName()); + } else if (part instanceof TransportIndex) { + ous.writeTag(OsmandOdb.OsmAndStructure.TRANSPORTINDEX_FIELD_NUMBER, WireFormat.WIRETYPE_FIXED32_LENGTH_DELIMITED); + map = "Transport"; + } else if (part instanceof PoiRegion) { + ous.writeTag(OsmandOdb.OsmAndStructure.POIINDEX_FIELD_NUMBER, WireFormat.WIRETYPE_FIXED32_LENGTH_DELIMITED); + map = "POI"; + } else if (part instanceof RouteRegion) { + ous.writeTag(OsmandOdb.OsmAndStructure.ROUTINGINDEX_FIELD_NUMBER, WireFormat.WIRETYPE_FIXED32_LENGTH_DELIMITED); + map = "Routing"; + } else { + throw new UnsupportedOperationException(); + } + writeInt(ous, part.getLength()); + copyBinaryPart(ous, BUFFER_TO_READ, raf, part.getFilePointer(), part.getLength()); + println(MessageFormat.format("{2} part {0} is extracted {1} bytes", + new Object[]{part.getName(), part.getLength(), map})); + + } + } + + ous.writeInt32(OsmandOdb.OsmAndStructure.VERSIONCONFIRM_FIELD_NUMBER, version); + ous.flush(); + fout.close(); + + + return list; + } + + + private static void copyBinaryPart(CodedOutputStream ous, byte[] BUFFER, RandomAccessFile raf, long fp, int length) + throws IOException { + raf.seek(fp); + int toRead = length; + while (toRead > 0) { + int read = raf.read(BUFFER); + if (read == -1) { + throw new IllegalArgumentException("Unexpected end of file"); + } + if (toRead < read) { + read = toRead; + } + ous.writeRawBytes(BUFFER, 0, read); + toRead -= read; + } + } + + + protected static String formatBounds(int left, int right, int top, int bottom){ + double l = MapUtils.get31LongitudeX(left); + double r = MapUtils.get31LongitudeX(right); + double t = MapUtils.get31LatitudeY(top); + double b = MapUtils.get31LatitudeY(bottom); + return formatLatBounds(l, r, t, b); + } + + protected static String formatLatBounds(double l, double r, double t, double b){ + MessageFormat format = new MessageFormat("(left top - right bottom) : {0,number,#.####}, {1,number,#.####} NE - {2,number,#.####}, {3,number,#.####} NE", new Locale("EN", "US")); + return format.format(new Object[]{l, t, r, b}); + } + + public static void printFileInformation(String fileName,VerboseInfo verbose) throws IOException { + File file = new File(fileName); + if(!file.exists()){ + println("Binary OsmAnd index " + fileName + " was not found."); + return; + } + printFileInformation(file,verbose); + } + + + + public static void printFileInformation(File file, VerboseInfo verbose) throws IOException { + RandomAccessFile r = new RandomAccessFile(file.getAbsolutePath(), "r"); + try { + BinaryMapIndexReader index = new BinaryMapIndexReader(r); + int i = 1; + println("Binary index " + file.getName() + " version = " + index.getVersion()); + for(BinaryIndexPart p : index.getIndexes()){ + String partname = ""; + if(p instanceof MapIndex ){ + partname = "Map"; + } else if(p instanceof TransportIndex){ + partname = "Transport"; + } else if(p instanceof RouteRegion){ + partname = "Routing"; + } else if(p instanceof PoiRegion){ + partname = "Poi"; + } else if(p instanceof AddressRegion){ + partname = "Address"; + } + String name = p.getName() == null ? "" : p.getName(); + println(MessageFormat.format("{0} {1} data {3} - {2,number,#} bytes", + new Object[]{Integer.valueOf(i), partname, p.getLength(), name})); + if(p instanceof TransportIndex){ + TransportIndex ti = ((TransportIndex) p); + int sh = (31 - BinaryMapIndexReader.TRANSPORT_STOP_ZOOM); + println("\tBounds " + formatBounds(ti.getLeft() << sh, ti.getRight() << sh, + ti.getTop() << sh, ti.getBottom() << sh)); + } else if(p instanceof RouteRegion){ + RouteRegion ri = ((RouteRegion) p); + println("\tBounds " + formatLatBounds(ri.getLeftLongitude(), ri.getRightLongitude(), + ri.getTopLatitude(), ri.getBottomLatitude())); + } else if(p instanceof MapIndex){ + MapIndex m = ((MapIndex) p); + int j = 1; + for(MapRoot mi : m.getRoots()){ + println(MessageFormat.format("\t{4}.{5} Map level minZoom = {0}, maxZoom = {1}, size = {2,number,#} bytes \n\t\tBounds {3}", + new Object[] { + mi.getMinZoom(), mi.getMaxZoom(), mi.getLength(), + formatBounds(mi.getLeft(), mi.getRight(), mi.getTop(), mi.getBottom()), + i, j++})); + } + if((verbose != null && verbose.isVmap())){ + printMapDetailInfo(verbose, index, m); + } + } else if(p instanceof PoiRegion && (verbose != null && verbose.isVpoi())){ + printPOIDetailInfo(verbose, index, (PoiRegion) p); + } else if (p instanceof AddressRegion) { + List cities = ((AddressRegion) p).cities; + for (CitiesBlock c : cities) { + println("\t" + i + "." + c.type + " Address part size=" + c.length + " bytes"); + } + if (verbose != null && verbose.isVaddress()) { + printAddressDetailedInfo(verbose, index, (AddressRegion) p); + } + } + i++; + } + + + } catch (IOException e) { + System.err.println("File is not valid index : " + file.getAbsolutePath()); + throw e; + } + + } + + private static void printAddressDetailedInfo(VerboseInfo verbose, BinaryMapIndexReader index, AddressRegion region) throws IOException { + String[] cityType_String = new String[] { + "Cities/Towns section", + "Villages section", + "Postcodes section", + }; + int[] cityType = new int[] { + BinaryMapAddressReaderAdapter.CITY_TOWN_TYPE, + BinaryMapAddressReaderAdapter.VILLAGES_TYPE, + BinaryMapAddressReaderAdapter.POSTCODES_TYPE + }; + + for (int j = 0; j < cityType.length; j++) { + int type = cityType[j]; + final List cities = index.getCities(region, null, type); + + print(MessageFormat.format("\t{0}, {1,number,#} group(s)", new Object[]{cityType_String[j], Integer.valueOf(cities.size())})); + if (BinaryMapAddressReaderAdapter.CITY_TOWN_TYPE == type) { + if (!verbose.vstreetgroups && !verbose.vcities) { + println(""); + continue; + } + } else if (!verbose.vstreetgroups) { + println(""); + continue; + } + println(":"); + + for (City c : cities) { + int size = index.preloadStreets(c, null); + List streets = new ArrayList(c.getStreets()); + print(MessageFormat.format("\t\t''{0}'' [{1,number,#}], {2,number,#} street(s) size {3,number,#} bytes", + new Object[]{c.getEnName(), Long.valueOf(c.getId()), Integer.valueOf(streets.size()), Integer.valueOf(size)})); + if(!verbose.vstreets) + { + println(""); + continue; + } + println(":"); + if (!verbose.contains(c)) + continue; + + for (Street t : streets) { + if (!verbose.contains(t)) + continue; + index.preloadBuildings(t, null); + final List buildings = t.getBuildings(); + final List intersections = t.getIntersectedStreets(); + + println(MessageFormat.format("\t\t\t''{0}'' [{1,number,#}], {2,number,#} building(s), {3,number,#} intersections(s)", + new Object[]{t.getEnName(), Long.valueOf(t.getId()), Integer.valueOf(buildings.size()), Integer.valueOf(intersections.size())})); + + if (buildings != null && !buildings.isEmpty() && verbose.vbuildings) { + println("\t\t\t\tBuildings:"); + for (Building b : buildings) { + println(MessageFormat.format("\t\t\t\t{0} [{1,number,#}]", + new Object[]{b.getName(true), Long.valueOf(b.getId())})); + } + } + + if (intersections != null && !intersections.isEmpty() && verbose.vintersections) { + print("\t\t\t\tIntersects with:"); + for (Street s : intersections) { + println("\t\t\t\t\t" + s.getEnName()); + } + } + } + } + } + } + private static class DamnCounter + { + int value; + } + private static void printMapDetailInfo(final VerboseInfo verbose, BinaryMapIndexReader index, MapIndex mapIndex) throws IOException { + final StringBuilder b = new StringBuilder(); + final DamnCounter mapObjectsCounter = new DamnCounter(); + SearchRequest req = BinaryMapIndexReader.buildSearchRequest( + MapUtils.get31TileNumberX(verbose.lonleft), + MapUtils.get31TileNumberX(verbose.lonright), + MapUtils.get31TileNumberY(verbose.lattop), + MapUtils.get31TileNumberY(verbose.latbottom), + verbose.getZoom(), + new SearchFilter() { + @Override + public boolean accept(TIntArrayList types, MapIndex index) { + return true; + } + }, + new ResultMatcher() { + @Override + public boolean publish(BinaryMapDataObject obj) { + mapObjectsCounter.value++; + if(verbose.vmapObjects) + { + b.setLength(0); + boolean multipolygon = obj.getPolygonInnerCoordinates() != null && obj.getPolygonInnerCoordinates().length > 0; + if(multipolygon ) { + b.append("Multipolygon"); + } else { + b.append(obj.area? "Area" : (obj.getPointsLength() > 1? "Way" : "Point")); + } + int[] types = obj.getTypes(); + b.append(" types ["); + for(int j = 0; j 0) { + b.append(", "); + } + TagValuePair pair = obj.getMapIndex().decodeType(types[j]); + if(pair == null) { + System.err.println("Type " + types[j] + "was not found"); + continue; + // throw new NullPointerException("Type " + obj.getAdditionalTypes()[j] + "was not found"); + } + b.append(pair.toSimpleString()+" ("+types[j]+")"); + } + b.append("]"); + if(obj.getAdditionalTypes() != null && obj.getAdditionalTypes().length > 0){ + b.append(" add_types ["); + for(int j = 0; j 0) { + b.append(", "); + } + TagValuePair pair = obj.getMapIndex().decodeType(obj.getAdditionalTypes()[j]); + if(pair == null) { + System.err.println("Type " + obj.getAdditionalTypes()[j] + "was not found"); + continue; + // throw new NullPointerException("Type " + obj.getAdditionalTypes()[j] + "was not found"); + } + b.append(pair.toSimpleString()+"("+obj.getAdditionalTypes()[j]+")"); + + } + b.append("]"); + } + TIntObjectHashMap names = obj.getObjectNames(); + if(names != null && !names.isEmpty()) { + b.append(" Names ["); + int[] keys = names.keys(); + for(int j = 0; j 0) { + b.append(", "); + } + TagValuePair pair = obj.getMapIndex().decodeType(keys[j]); + if(pair == null) { + throw new NullPointerException("Type " + keys[j] + "was not found"); + } + b.append(pair.toSimpleString()+"("+keys[j]+")"); + b.append(" - ").append(names.get(keys[j])); + } + b.append("]"); + } + + b.append(" id ").append((obj.getId() >> 1)); + b.append(" lat/lon : "); + for(int i=0; i req = BinaryMapIndexReader.buildSearchPoiRequest( + MapUtils.get31TileNumberX(verbose.lonleft), + MapUtils.get31TileNumberX(verbose.lonright), + MapUtils.get31TileNumberY(verbose.lattop), + MapUtils.get31TileNumberY(verbose.latbottom), + verbose.getZoom(), + new SearchPoiTypeFilter() { + @Override + public boolean accept(AmenityType type, String subcategory) { + return true; + } + }, + new ResultMatcher() { + @Override + public boolean publish(Amenity object) { + println(object.getType().toString() + " : " + object.getSubType() + " " + object.getEnName() + " " + object.getLocation() + " id=" + (object.getId() >> 1)); + return false; + } + @Override + public boolean isCancelled() { + return false; + } + }); + + index.initCategories(p); + println("\tRegion: " + p.name); + println("\t\tBounds " + formatLatBounds(p.getLeftLongitude(), p.getRightLongitude(), + p.getTopLatitude(), p.getBottomLatitude())); + println("\t\tCategories:"); + for(int i =0; i< p.categories.size(); i++) { + println("\t\t\t" + p.categories.get(i)); + for(int j = 0; j < p.subcategories.get(i).size(); j++) + println("\t\t\t\t" + p.subcategories.get(i).get(j)); + } + req.poiTypeFilter = null;//TODO: for test only + index.searchPoi(p, req); + + } + + public static void printUsage(String warning) { + if(warning != null){ + println(warning); + } + println("Inspector is console utility for working with binary indexes of OsmAnd."); + println("It allows print info about file, extract parts and merge indexes."); + println("\nUsage for print info : inspector [-vaddress] [-vstreetgroups] [-vstreets] [-vbuildings] [-vintersections] [-vmap] [-vpoi] [-vtransport] [-zoom=Zoom] [-bbox=LeftLon,TopLat,RightLon,BottomLan] [file]"); + println(" Prints information about [file] binary index of OsmAnd."); + println(" -v.. more verbouse output (like all cities and their streets or all map objects with tags/values and coordinates)"); + println("\nUsage for combining indexes : inspector -c file_to_create (file_from_extract ((+|-)parts_to_extract)? )*"); + println("\tCreate new file of extracted parts from input file. [parts_to_extract] could be parts to include or exclude."); + println(" Example : inspector -c output_file input_file +1,2,3\n\tExtracts 1, 2, 3 parts (could be find in print info)"); + println(" Example : inspector -c output_file input_file -2,3\n\tExtracts all parts excluding 2, 3"); + println(" Example : inspector -c output_file input_file1 input_file2 input_file3\n\tSimply combine 3 files"); + println(" Example : inspector -c output_file input_file1 input_file2 -4\n\tCombine all parts of 1st file and all parts excluding 4th part of 2nd file"); + + + } + +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryInspectorNative.java b/OsmAnd-java/src/net/osmand/binary/BinaryInspectorNative.java new file mode 100644 index 0000000000..8cc8e93000 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryInspectorNative.java @@ -0,0 +1,52 @@ +package net.osmand.binary; + + +import java.io.IOException; + +import net.osmand.NativeLibrary; +import net.osmand.bridge.ObfInspector; +import net.osmand.bridge.StringVector; + +public class BinaryInspectorNative { + + + public static final int BUFFER_SIZE = 1 << 20; + + public static void main(String[] args) throws IOException { + if(args == null || args.length == 0) { + printUsage(null); + return; + } + args = new String[]{"-vmap", "-bbox=11.3,47.1,11.6,47", "/home/victor/projects/OsmAnd/data/osm-gen/Austria_2.obf"}; + // test cases show info + NativeLibrary.loadAllLibs(null); + StringVector vector = new StringVector(); + for(int i = 0; i < args.length; i++) { + vector.add(args[i]); + } + ObfInspector.inspector(vector); + } + + public static void printUsage(String warning) { + if(warning != null){ + println(warning); + } + println("Inspector is console utility for working with binary indexes of OsmAnd."); + println("It allows print info about file, extract parts and merge indexes."); + println("\nUsage for print info : inspector [-vaddress] [-vstreetgroups] [-vstreets] [-vbuildings] [-vintersections] [-vmap] [-vpoi] [-vtransport] [-zoom=Zoom] [-bbox=LeftLon,TopLat,RightLon,BottomLan] [file]"); + println(" Prints information about [file] binary index of OsmAnd."); + println(" -v.. more verbouse output (like all cities and their streets or all map objects with tags/values and coordinates)"); + println("\nUsage for combining indexes : inspector -c file_to_create (file_from_extract ((+|-)parts_to_extract)? )*"); + println("\tCreate new file of extracted parts from input file. [parts_to_extract] could be parts to include or exclude."); + println(" Example : inspector -c output_file input_file +1,2,3\n\tExtracts 1, 2, 3 parts (could be find in print info)"); + println(" Example : inspector -c output_file input_file -2,3\n\tExtracts all parts excluding 2, 3"); + println(" Example : inspector -c output_file input_file1 input_file2 input_file3\n\tSimply combine 3 files"); + println(" Example : inspector -c output_file input_file1 input_file2 -4\n\tCombine all parts of 1st file and all parts excluding 4th part of 2nd file"); + + + } + + private static void println(String string) { + System.out.println(string); + } +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryMapAddressReaderAdapter.java b/OsmAnd-java/src/net/osmand/binary/BinaryMapAddressReaderAdapter.java new file mode 100644 index 0000000000..0cb4222515 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryMapAddressReaderAdapter.java @@ -0,0 +1,593 @@ +package net.osmand.binary; + +import gnu.trove.list.array.TIntArrayList; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import net.osmand.CollatorStringMatcher; +import net.osmand.CollatorStringMatcher.StringMatcherMode; +import net.osmand.PlatformUtil; +import net.osmand.StringMatcher; +import net.osmand.binary.BinaryMapIndexReader.SearchRequest; +import net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom; +import net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex; +import net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData; +import net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData; +import net.osmand.data.Building; +import net.osmand.data.Building.BuildingInterpolation; +import net.osmand.data.City; +import net.osmand.data.City.CityType; +import net.osmand.data.LatLon; +import net.osmand.data.MapObject; +import net.osmand.data.Street; +import net.osmand.util.MapUtils; +import net.sf.junidecode.Junidecode; + +import org.apache.commons.logging.Log; + +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.WireFormat; + +public class BinaryMapAddressReaderAdapter { + + public final static int CITY_TOWN_TYPE = 1; + public final static int POSTCODES_TYPE = 2; + public final static int VILLAGES_TYPE = 3; + public final static int STREET_TYPE = 4; + + private static final Log LOG = PlatformUtil.getLog(BinaryMapAddressReaderAdapter.class); + + public static class AddressRegion extends BinaryIndexPart { + String enName; + int indexNameOffset = -1; + List cities = new ArrayList(); + + LatLon calculatedCenter = null; + + public String getEnName() { + return enName; + } + + public List getCities() { + return cities; + } + + public int getIndexNameOffset() { + return indexNameOffset; + } + } + + public static class CitiesBlock extends BinaryIndexPart { + int type; + } + + private CodedInputStream codedIS; + private final BinaryMapIndexReader map; + + protected BinaryMapAddressReaderAdapter(BinaryMapIndexReader map){ + this.codedIS = map.codedIS; + this.map = map; + } + + private void skipUnknownField(int t) throws IOException { + map.skipUnknownField(t); + } + + private int readInt() throws IOException { + return map.readInt(); + } + + + protected void readAddressIndex(AddressRegion region) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + if(region.enName == null || region.enName.length() == 0){ + region.enName = Junidecode.unidecode(region.name); + } + return; + case OsmandOdb.OsmAndAddressIndex.NAME_FIELD_NUMBER : + region.name = codedIS.readString(); + break; + case OsmandOdb.OsmAndAddressIndex.NAME_EN_FIELD_NUMBER : + region.enName = codedIS.readString(); + break; + case OsmandOdb.OsmAndAddressIndex.CITIES_FIELD_NUMBER : + CitiesBlock block = new CitiesBlock(); + region.cities.add(block); + block.type = 1; + block.length = readInt(); + block.filePointer = codedIS.getTotalBytesRead(); + while(true){ + int tt = codedIS.readTag(); + int ttag = WireFormat.getTagFieldNumber(tt); + if(ttag == 0) { + break; + } else if(ttag == CitiesIndex.TYPE_FIELD_NUMBER){ + block.type = codedIS.readUInt32(); + break; + } else { + skipUnknownField(tt); + } + } + + + codedIS.seek(block.filePointer + block.length); + + break; + case OsmandOdb.OsmAndAddressIndex.NAMEINDEX_FIELD_NUMBER : + region.indexNameOffset = codedIS.getTotalBytesRead(); + int length = readInt(); + codedIS.seek(region.indexNameOffset + length + 4); + break; + default: + skipUnknownField(t); + break; + } + } + } + + protected void readCities(List cities, SearchRequest resultMatcher, StringMatcher matcher, boolean useEn) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case CitiesIndex.CITIES_FIELD_NUMBER : + int fp = codedIS.getTotalBytesRead(); + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + City c = readCityHeader(matcher, fp, useEn); + if(c != null){ + if (resultMatcher == null || resultMatcher.publish(c)) { + cities.add(c); + } + } + codedIS.popLimit(oldLimit); + if(resultMatcher != null && resultMatcher.isCancelled()){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + + protected void readCityStreets(SearchRequest resultMatcher, City city) throws IOException{ + int x = MapUtils.get31TileNumberX(city.getLocation().getLongitude()); + int y = MapUtils.get31TileNumberY(city.getLocation().getLatitude()); + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.CityBlockIndex.STREETS_FIELD_NUMBER : + Street s = new Street(city); + s.setFileOffset(codedIS.getTotalBytesRead()); + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + readStreet(s, null, false, x >> 7, y >> 7, city.isPostcode() ? city.getName() : null); + if(resultMatcher == null || resultMatcher.publish(s)){ + city.registerStreet(s); + } + if(resultMatcher != null && resultMatcher.isCancelled()) { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + } + codedIS.popLimit(oldLimit); + break; + case OsmandOdb.CityBlockIndex.BUILDINGS_FIELD_NUMBER : + // buildings for the town are not used now + skipUnknownField(t); + default: + skipUnknownField(t); + break; + } + } + } + + protected City readCityHeader(StringMatcher nameMatcher, int filePointer, boolean useEn) throws IOException{ + int x = 0; + int y = 0; + City c = null; + boolean englishNameMatched = false; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return c; + case OsmandOdb.CityIndex.CITY_TYPE_FIELD_NUMBER : + int type = codedIS.readUInt32(); + c = new City(CityType.values()[type]); + break; + case OsmandOdb.CityIndex.ID_FIELD_NUMBER : + c.setId(codedIS.readUInt64()); + if(nameMatcher != null && useEn && !englishNameMatched){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + break; + case OsmandOdb.CityIndex.NAME_EN_FIELD_NUMBER : + String enName = codedIS.readString(); + if (nameMatcher != null && enName.length() > 0 && nameMatcher.matches(enName)) { + englishNameMatched = true; + } + c.setEnName(enName); + break; + case OsmandOdb.CityIndex.NAME_FIELD_NUMBER : + String name = codedIS.readString(); + if(nameMatcher != null){ + if(!useEn){ + if(!nameMatcher.matches(name)) { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + } else if(nameMatcher.matches(Junidecode.unidecode(name))){ + englishNameMatched = true; + } + } + if(c == null) { + c = City.createPostcode(name); + } + c.setName(name); + break; + case OsmandOdb.CityIndex.X_FIELD_NUMBER : + x = codedIS.readUInt32(); + break; + case OsmandOdb.CityIndex.Y_FIELD_NUMBER : + y = codedIS.readUInt32(); + c.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x)); + if(c.getEnName().length() == 0){ + c.setEnName(Junidecode.unidecode(c.getName())); + } + break; + case OsmandOdb.CityIndex.SHIFTTOCITYBLOCKINDEX_FIELD_NUMBER : + int offset = readInt(); + offset += filePointer; + c.setFileOffset(offset); + break; + default: + skipUnknownField(t); + break; + } + } + } + + protected Street readStreet(Street s, SearchRequest buildingsMatcher, boolean loadBuildingsAndIntersected, int city24X, int city24Y, String postcodeFilter) throws IOException{ + int x = 0; + int y = 0; + boolean loadLocation = city24X != 0 || city24Y != 0; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + if(loadLocation){ + s.setLocation(MapUtils.getLatitudeFromTile(24, y), MapUtils.getLongitudeFromTile(24, x)); + } + if(s.getEnName().length() == 0){ + s.setEnName(Junidecode.unidecode(s.getName())); + } + return s; + case OsmandOdb.StreetIndex.ID_FIELD_NUMBER : + s.setId(codedIS.readUInt64()); + break; + case OsmandOdb.StreetIndex.NAME_EN_FIELD_NUMBER : + s.setEnName(codedIS.readString()); + break; + case OsmandOdb.StreetIndex.NAME_FIELD_NUMBER : + s.setName(codedIS.readString()); + break; + case OsmandOdb.StreetIndex.X_FIELD_NUMBER : + int sx = codedIS.readSInt32(); + if(loadLocation){ + x = sx + city24X; + } else { + x = (int) MapUtils.getTileNumberX(24, s.getLocation().getLongitude()); + } + break; + case OsmandOdb.StreetIndex.Y_FIELD_NUMBER : + int sy = codedIS.readSInt32(); + if(loadLocation){ + y = sy + city24Y; + } else { + y = (int) MapUtils.getTileNumberY(24, s.getLocation().getLatitude()); + } + break; + case OsmandOdb.StreetIndex.INTERSECTIONS_FIELD_NUMBER : + int length = codedIS.readRawVarint32(); + if(loadBuildingsAndIntersected){ + int oldLimit = codedIS.pushLimit(length); + Street si = readIntersectedStreet(s.getCity(), x, y); + s.addIntersectedStreet(si); + codedIS.popLimit(oldLimit); + } else { + codedIS.skipRawBytes(length); + } + break; + case OsmandOdb.StreetIndex.BUILDINGS_FIELD_NUMBER : + int offset = codedIS.getTotalBytesRead(); + length = codedIS.readRawVarint32(); + if(loadBuildingsAndIntersected){ + int oldLimit = codedIS.pushLimit(length); + Building b = readBuilding(offset, x, y); + if (postcodeFilter == null || postcodeFilter.equalsIgnoreCase(b.getPostcode())) { + if (buildingsMatcher == null || buildingsMatcher.publish(b)) { + s.addBuilding(b); + } + } + codedIS.popLimit(oldLimit); + } else { + codedIS.skipRawBytes(length); + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + protected Street readIntersectedStreet(City c, int street24X, int street24Y) throws IOException{ + int x = 0; + int y = 0; + Street s = new Street(c); + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + s.setLocation(MapUtils.getLatitudeFromTile(24, y), MapUtils.getLongitudeFromTile(24, x)); + if(s.getEnName().length() == 0){ + s.setEnName(Junidecode.unidecode(s.getName())); + } + return s; + case OsmandOdb.BuildingIndex.ID_FIELD_NUMBER : + s.setId(codedIS.readUInt64()); + break; + case OsmandOdb.StreetIntersection.NAME_EN_FIELD_NUMBER: + s.setEnName(codedIS.readString()); + break; + case OsmandOdb.StreetIntersection.NAME_FIELD_NUMBER: + s.setName(codedIS.readString()); + break; + case OsmandOdb.StreetIntersection.INTERSECTEDX_FIELD_NUMBER : + x = codedIS.readSInt32() + street24X; + break; + case OsmandOdb.StreetIntersection.INTERSECTEDY_FIELD_NUMBER : + y = codedIS.readSInt32() + street24Y; + break; + default: + skipUnknownField(t); + break; + } + } + } + + protected Building readBuilding(int fileOffset, int street24X, int street24Y) throws IOException{ + int x = 0; + int y = 0; + int x2 = 0; + int y2 = 0; + Building b = new Building(); + b.setFileOffset(fileOffset); + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + b.setLocation(MapUtils.getLatitudeFromTile(24, y), MapUtils.getLongitudeFromTile(24, x)); + if(x2 != 0 && y2 != 0) { + b.setLatLon2(new LatLon(MapUtils.getLatitudeFromTile(24, y2), MapUtils.getLongitudeFromTile(24, x2))); + } + if(b.getEnName().length() == 0){ + b.setEnName(Junidecode.unidecode(b.getName())); + } + return b; + case OsmandOdb.BuildingIndex.ID_FIELD_NUMBER : + b.setId(codedIS.readUInt64()); + break; + + case OsmandOdb.BuildingIndex.NAME_EN_FIELD_NUMBER : + b.setEnName(codedIS.readString()); + break; + case OsmandOdb.BuildingIndex.NAME_FIELD_NUMBER : + b.setName(codedIS.readString()); + break; + case OsmandOdb.BuildingIndex.NAME_EN2_FIELD_NUMBER : + // no where to set now + codedIS.readString(); + break; + case OsmandOdb.BuildingIndex.NAME2_FIELD_NUMBER : + b.setName2(codedIS.readString()); + break; + case OsmandOdb.BuildingIndex.INTERPOLATION_FIELD_NUMBER : + int sint = codedIS.readSInt32(); + if(sint > 0) { + b.setInterpolationInterval(sint); + } else { + b.setInterpolationType(BuildingInterpolation.fromValue(sint)); + } + break; + case OsmandOdb.BuildingIndex.X_FIELD_NUMBER : + x = codedIS.readSInt32() + street24X; + break; + case OsmandOdb.BuildingIndex.X2_FIELD_NUMBER : + x2 = codedIS.readSInt32() + street24X; + break; + case OsmandOdb.BuildingIndex.Y_FIELD_NUMBER : + y = codedIS.readSInt32() + street24Y; + break; + case OsmandOdb.BuildingIndex.Y2_FIELD_NUMBER : + y2 = codedIS.readSInt32() + street24Y; + break; + case OsmandOdb.BuildingIndex.POSTCODE_FIELD_NUMBER : + b.setPostcode(codedIS.readString()); + break; + default: + skipUnknownField(t); + break; + } + } + } + + public void searchAddressDataByName(AddressRegion reg, SearchRequest req, int[] typeFilter) throws IOException { + TIntArrayList loffsets = new TIntArrayList(); + CollatorStringMatcher matcher = new CollatorStringMatcher( req.nameQuery, StringMatcherMode.CHECK_STARTS_FROM_SPACE); + long time = System.currentTimeMillis(); + int indexOffset = 0; + while (true) { + if (req.isCancelled()) { + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmAndAddressNameIndexData.TABLE_FIELD_NUMBER: + int length = readInt(); + indexOffset = codedIS.getTotalBytesRead(); + int oldLimit = codedIS.pushLimit(length); + // here offsets are sorted by distance + map.readIndexedStringTable(matcher.getCollator(), req.nameQuery, "", loffsets, 0); + codedIS.popLimit(oldLimit); + break; + case OsmAndAddressNameIndexData.ATOM_FIELD_NUMBER: + // also offsets can be randomly skipped by limit + loffsets.sort(); + TIntArrayList[] refs = new TIntArrayList[5]; + for (int i = 0; i < refs.length; i++) { + refs[i] = new TIntArrayList(); + } + + LOG.info("Searched address structure in " + (System.currentTimeMillis() - time) + "ms. Found " + loffsets.size() + + " subtress"); + for (int j = 0; j < loffsets.size(); j++) { + int fp = indexOffset + loffsets.get(j); + codedIS.seek(fp); + int len = codedIS.readRawVarint32(); + int oldLim = codedIS.pushLimit(len); + int stag = 0; + do { + int st = codedIS.readTag(); + stag = WireFormat.getTagFieldNumber(st); + if(stag == AddressNameIndexData.ATOM_FIELD_NUMBER) { + int slen = codedIS.readRawVarint32(); + int soldLim = codedIS.pushLimit(slen); + readAddressNameData(req, refs, fp); + codedIS.popLimit(soldLim); + } else if(stag != 0){ + skipUnknownField(st); + } + } while(stag != 0); + + codedIS.popLimit(oldLim); + if (req.isCancelled()) { + return; + } + } + if (typeFilter == null) { + typeFilter = new int[] { CITY_TOWN_TYPE, POSTCODES_TYPE, VILLAGES_TYPE, STREET_TYPE }; + } + for (int i = 0; i < typeFilter.length && !req.isCancelled(); i++) { + TIntArrayList list = refs[typeFilter[i]]; + if (typeFilter[i] == STREET_TYPE) { + for (int j = 0; j < list.size() && !req.isCancelled(); j += 2) { + City obj = null; + { + codedIS.seek(list.get(j + 1)); + int len = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(len); + obj = readCityHeader(null, list.get(j + 1), false); + codedIS.popLimit(old); + } + if (obj != null) { + codedIS.seek(list.get(j)); + int len = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(len); + LatLon l = obj.getLocation(); + Street s = new Street(obj); + readStreet(s, null, false, MapUtils.get31TileNumberX(l.getLongitude()) >> 7, + MapUtils.get31TileNumberY(l.getLatitude()) >> 7, obj.isPostcode() ? obj.getName() : null); + + if (matcher.matches(s.getName())) { + req.publish(s); + } + codedIS.popLimit(old); + } + } + } else { + list.sort(); + for (int j = 0; j < list.size() && !req.isCancelled(); j++) { + codedIS.seek(list.get(j)); + int len = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(len); + City obj = readCityHeader(matcher, list.get(j), false); + if (obj != null) { + req.publish(obj); + } + codedIS.popLimit(old); + } + } + } + LOG.info("Whole address search by name is done in " + (System.currentTimeMillis() - time) + "ms. Found " + + req.getSearchResults().size()); + return; + default: + skipUnknownField(t); + break; + } + } + + } + + private void readAddressNameData(SearchRequest req, TIntArrayList[] refs, int fp) throws IOException { + TIntArrayList toAdd = null; + while(true){ + if(req.isCancelled()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case AddressNameIndexDataAtom.NAMEEN_FIELD_NUMBER : + codedIS.readString(); + break; + case AddressNameIndexDataAtom.NAME_FIELD_NUMBER : + codedIS.readString(); + break; + case AddressNameIndexDataAtom.SHIFTTOCITYINDEX_FIELD_NUMBER : + if(toAdd != null) { + toAdd.add(fp - codedIS.readInt32()); + } + break; + case AddressNameIndexDataAtom.SHIFTTOINDEX_FIELD_NUMBER : + if(toAdd != null) { + toAdd.add(fp - codedIS.readInt32()); + } + break; + case AddressNameIndexDataAtom.TYPE_FIELD_NUMBER : + int type = codedIS.readInt32(); + toAdd = refs[type]; + break; + default: + skipUnknownField(t); + break; + } + } + } + + +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryMapDataObject.java b/OsmAnd-java/src/net/osmand/binary/BinaryMapDataObject.java new file mode 100644 index 0000000000..6032ee1e89 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryMapDataObject.java @@ -0,0 +1,166 @@ +package net.osmand.binary; + +import gnu.trove.map.hash.TIntObjectHashMap; +import net.osmand.binary.BinaryMapIndexReader.MapIndex; +import net.osmand.render.RenderingRulesStorage; + +public class BinaryMapDataObject { + protected int[] coordinates = null; + protected int[][] polygonInnerCoordinates = null; + protected boolean area = false; + protected int[] types = null; + protected int[] additionalTypes = null; + protected int objectType = RenderingRulesStorage.POINT_RULES; + + protected TIntObjectHashMap objectNames = null; + protected long id = 0; + + protected MapIndex mapIndex = null; + + + public BinaryMapDataObject(){ + } + + public BinaryMapDataObject(int[] coordinates, int[] types, int[][] polygonInnerCoordinates, long id){ + this.polygonInnerCoordinates = polygonInnerCoordinates; + this.coordinates = coordinates; + this.additionalTypes = new int[0]; + this.types = types; + this.id = id; + } + + protected void setCoordinates(int[] coordinates) { + this.coordinates = coordinates; + } + + public String getName(){ + if(objectNames == null){ + return ""; + } + String name = objectNames.get(mapIndex.nameEncodingType); + if(name == null){ + return ""; + } + return name; + } + + + public TIntObjectHashMap getObjectNames() { + return objectNames; + } + + public void putObjectName(int type, String name){ + if(objectNames == null){ + objectNames = new TIntObjectHashMap(); + } + objectNames.put(type, name); + } + + public int[][] getPolygonInnerCoordinates() { + return polygonInnerCoordinates; + } + + public int[] getTypes(){ + return types; + } + + public boolean containsType(int cachedType) { + if(cachedType != -1) { + for(int i=0; i map = new HashMap(); + SearchFilter sf = new SearchFilter() { + @Override + public boolean accept(TIntArrayList types, MapIndex index) { + boolean polygon = false; + boolean polyline = false; + for (int j = 0; j < types.size(); j++) { + int wholeType = types.get(j); + TagValuePair pair = index.decodeType(wholeType); + if (pair != null) { + int t = wholeType & 3; + if (t == RenderingRulesStorage.POINT_RULES) { + stat.pointCount++; + } else if (t == RenderingRulesStorage.LINE_RULES) { + stat.wayCount++; + polyline = true; + } else { + polygon = true; + stat.polygonCount++; + if (!map.containsKey(pair)) { + map.put(pair, 0); + } + map.put(pair, map.get(pair) + 1); + } + } + } + stat.totalCount++; + return polyline; + } + }; + ResultMatcher matcher = new ResultMatcher() { + TIntHashSet set = new TIntHashSet(); + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean publish(BinaryMapDataObject object) { +// double area = calculateArea(object, zoom); + double len = calculateLength(object, zoom); + if(/*tilesCovers(object, zoom, set) >= 2 && */ len > 100){ + stat.polygonBigSize ++; + if(stat.polygonBigSize % 10000 == 0){ + return true; + } + } + + return false; + } + }; + SearchRequest req = BinaryMapIndexReader.buildSearchRequest(0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, zoom, + sf, matcher); + List result = reader.searchMapIndex(req); + + ArrayList list = new ArrayList(map.keySet()); + Collections.sort(list, new Comparator() { + @Override + public int compare(TagValuePair o1, TagValuePair o2) { + return -map.get(o1) + map.get(o2); + } + + }); + for(TagValuePair tp : list){ + Integer i = map.get(tp); + if(i > 10){ +// System.out.println(tp.toString() + " " + i); + } + } + + for(BinaryMapDataObject obj : result){ + System.out.println("id " + (obj.getId() >> 3) + " " + calculateArea(obj, zoom)); + } + return stat; + } + + public static void main(String[] iargs) throws IOException { + BinaryMapIndexFilter filter = new BinaryMapIndexFilter(new File("")); + for (int i = 10; i <= 14; i++) { + Stat st = filter.process(i); + System.out.println(i + " zoom -> " + st); + } + + } + + +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryMapIndexReader.java b/OsmAnd-java/src/net/osmand/binary/BinaryMapIndexReader.java new file mode 100644 index 0000000000..e1a5ce2c7e --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryMapIndexReader.java @@ -0,0 +1,2109 @@ +package net.osmand.binary; + + +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.set.hash.TIntHashSet; + +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.osmand.Collator; +import net.osmand.CollatorStringMatcher; +import net.osmand.CollatorStringMatcher.StringMatcherMode; +import net.osmand.PlatformUtil; +import net.osmand.ResultMatcher; +import net.osmand.StringMatcher; +import net.osmand.binary.BinaryMapAddressReaderAdapter.AddressRegion; +import net.osmand.binary.BinaryMapAddressReaderAdapter.CitiesBlock; +import net.osmand.binary.BinaryMapPoiReaderAdapter.PoiRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteSubregion; +import net.osmand.binary.BinaryMapTransportReaderAdapter.TransportIndex; +import net.osmand.binary.OsmandOdb.MapDataBlock; +import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox; +import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule; +import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel; +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.data.Building; +import net.osmand.data.City; +import net.osmand.data.LatLon; +import net.osmand.data.MapObject; +import net.osmand.data.Street; +import net.osmand.data.TransportRoute; +import net.osmand.data.TransportStop; +import net.osmand.util.Algorithms; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.WireFormat; + +public class BinaryMapIndexReader { + + public final static int TRANSPORT_STOP_ZOOM = 24; + public static final int SHIFT_COORDINATES = 5; + private final static Log log = PlatformUtil.getLog(BinaryMapIndexReader.class); + + private final RandomAccessFile raf; + /*private*/ int version; + /*private */long dateCreated; + // keep them immutable inside + /*private */ boolean basemap = false; + /*private */List mapIndexes = new ArrayList(); + /*private */List poiIndexes = new ArrayList(); + /*private */List addressIndexes = new ArrayList(); + /*private */List transportIndexes = new ArrayList(); + /*private */List routingIndexes = new ArrayList(); + /*private */List indexes = new ArrayList(); + + protected CodedInputStream codedIS; + + private final BinaryMapTransportReaderAdapter transportAdapter; + private final BinaryMapPoiReaderAdapter poiAdapter; + private final BinaryMapAddressReaderAdapter addressAdapter; + private final BinaryMapRouteReaderAdapter routeAdapter; + + private static String BASEMAP_NAME = "basemap"; + + + public BinaryMapIndexReader(final RandomAccessFile raf) throws IOException { + this.raf = raf; + codedIS = CodedInputStream.newInstance(raf); + codedIS.setSizeLimit(Integer.MAX_VALUE); // 2048 MB + transportAdapter = new BinaryMapTransportReaderAdapter(this); + addressAdapter = new BinaryMapAddressReaderAdapter(this); + poiAdapter = new BinaryMapPoiReaderAdapter(this); + routeAdapter = new BinaryMapRouteReaderAdapter(this); + init(); + } + + /*private */BinaryMapIndexReader(final RandomAccessFile raf, boolean init) throws IOException { + this.raf = raf; + codedIS = CodedInputStream.newInstance(raf); + codedIS.setSizeLimit(Integer.MAX_VALUE); // 2048 MB + transportAdapter = new BinaryMapTransportReaderAdapter(this); + addressAdapter = new BinaryMapAddressReaderAdapter(this); + poiAdapter = new BinaryMapPoiReaderAdapter(this); + routeAdapter = new BinaryMapRouteReaderAdapter(this); + if(init) { + init(); + } + } + + public BinaryMapIndexReader(final RandomAccessFile raf, BinaryMapIndexReader referenceToSameFile) throws IOException { + this.raf = raf; + codedIS = CodedInputStream.newInstance(raf); + codedIS.setSizeLimit(Integer.MAX_VALUE); // 2048 MB + version = referenceToSameFile.version; + transportAdapter = new BinaryMapTransportReaderAdapter(this); + addressAdapter = new BinaryMapAddressReaderAdapter(this); + poiAdapter = new BinaryMapPoiReaderAdapter(this); + routeAdapter = new BinaryMapRouteReaderAdapter(this); + mapIndexes = new ArrayList(referenceToSameFile.mapIndexes); + poiIndexes = new ArrayList(referenceToSameFile.poiIndexes); + addressIndexes = new ArrayList(referenceToSameFile.addressIndexes); + transportIndexes = new ArrayList(referenceToSameFile.transportIndexes); + routingIndexes = new ArrayList(referenceToSameFile.routingIndexes); + indexes = new ArrayList(referenceToSameFile.indexes); + basemap = referenceToSameFile.basemap; + } + + + public long getDateCreated() { + return dateCreated; + } + + private void init() throws IOException { + boolean initCorrectly = false; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + if(!initCorrectly){ + throw new IOException("Corrupted file. It should be ended as it starts with version"); //$NON-NLS-1$ + } + return; + case OsmandOdb.OsmAndStructure.VERSION_FIELD_NUMBER : + version = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndStructure.DATECREATED_FIELD_NUMBER : + dateCreated = codedIS.readInt64(); + break; + case OsmandOdb.OsmAndStructure.MAPINDEX_FIELD_NUMBER: + MapIndex mapIndex = new MapIndex(); + mapIndex.length = readInt(); + mapIndex.filePointer = codedIS.getTotalBytesRead(); + int oldLimit = codedIS.pushLimit(mapIndex.length); + readMapIndex(mapIndex, false); + basemap = basemap || mapIndex.isBaseMap(); + codedIS.popLimit(oldLimit); + codedIS.seek(mapIndex.filePointer + mapIndex.length); + mapIndexes.add(mapIndex); + indexes.add(mapIndex); + break; + case OsmandOdb.OsmAndStructure.ADDRESSINDEX_FIELD_NUMBER: + AddressRegion region = new AddressRegion(); + region.length = readInt(); + region.filePointer = codedIS.getTotalBytesRead(); + if(addressAdapter != null){ + oldLimit = codedIS.pushLimit(region.length); + addressAdapter.readAddressIndex(region); + if(region.name != null){ + addressIndexes.add(region); + indexes.add(region); + } + codedIS.popLimit(oldLimit); + } + codedIS.seek(region.filePointer + region.length); + break; + case OsmandOdb.OsmAndStructure.TRANSPORTINDEX_FIELD_NUMBER: + TransportIndex ind = new TransportIndex(); + ind.length = readInt(); + ind.filePointer = codedIS.getTotalBytesRead(); + if (transportAdapter != null) { + oldLimit = codedIS.pushLimit(ind.length); + transportAdapter.readTransportIndex(ind); + codedIS.popLimit(oldLimit); + transportIndexes.add(ind); + indexes.add(ind); + } + codedIS.seek(ind.filePointer + ind.length); + break; + case OsmandOdb.OsmAndStructure.ROUTINGINDEX_FIELD_NUMBER: + RouteRegion routeReg = new RouteRegion(); + routeReg.length = readInt(); + routeReg.filePointer = codedIS.getTotalBytesRead(); + if (routeAdapter != null) { + oldLimit = codedIS.pushLimit(routeReg.length); + routeAdapter.readRouteIndex(routeReg); + codedIS.popLimit(oldLimit); + routingIndexes.add(routeReg); + indexes.add(routeReg); + } + codedIS.seek(routeReg.filePointer + routeReg.length); + break; + case OsmandOdb.OsmAndStructure.POIINDEX_FIELD_NUMBER: + PoiRegion poiInd = new PoiRegion(); + poiInd.length = readInt(); + poiInd.filePointer = codedIS.getTotalBytesRead(); + if (poiAdapter != null) { + oldLimit = codedIS.pushLimit(poiInd.length); + poiAdapter.readPoiIndex(poiInd, false); + codedIS.popLimit(oldLimit); + poiIndexes.add(poiInd); + indexes.add(poiInd); + } + codedIS.seek(poiInd.filePointer + poiInd.length); + break; + case OsmandOdb.OsmAndStructure.VERSIONCONFIRM_FIELD_NUMBER : + int cversion = codedIS.readUInt32(); + calculateCenterPointForRegions(); + initCorrectly = cversion == version; + break; + default: + skipUnknownField(t); + break; + } + } + } + + private void calculateCenterPointForRegions(){ + for(AddressRegion reg : addressIndexes){ + for(MapIndex map : mapIndexes){ + if(Algorithms.objectEquals(reg.name, map.name)){ + if(map.getRoots().size() > 0){ + MapRoot mapRoot = map.getRoots().get(map.getRoots().size() - 1); + double cy = (MapUtils.get31LatitudeY(mapRoot.getBottom()) + MapUtils.get31LatitudeY(mapRoot.getTop())) / 2; + double cx = (MapUtils.get31LongitudeX(mapRoot.getLeft()) + MapUtils.get31LongitudeX(mapRoot.getRight())) / 2; + reg.calculatedCenter = new LatLon(cy, cx); + break; + } + } + } + } + } + + public List getIndexes() { + return indexes; + } + + public List getMapIndexes() { + return mapIndexes; + } + + public List getRoutingIndexes() { + return routingIndexes; + } + + public boolean isBasemap() { + return basemap; + } + + public boolean containsMapData(){ + return mapIndexes.size() > 0; + } + + public boolean containsPoiData(){ + return poiIndexes.size() > 0; + } + + public boolean containsRouteData(){ + return routingIndexes.size() > 0; + } + + public boolean containsPoiData(double latitude, double longitude) { + for (PoiRegion index : poiIndexes) { + if (index.rightLongitude >= longitude && index.leftLongitude <= longitude && + index.topLatitude >= latitude && index.bottomLatitude <= latitude) { + return true; + } + } + return false; + } + + + public boolean containsPoiData(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude) { + for (PoiRegion index : poiIndexes) { + if (index.rightLongitude >= leftLongitude && index.leftLongitude <= rightLongitude && + index.topLatitude >= bottomLatitude && index.bottomLatitude <= topLatitude) { + return true; + } + } + return false; + } + + public boolean containsMapData(int tile31x, int tile31y, int zoom){ + for(MapIndex mapIndex : mapIndexes){ + for(MapRoot root : mapIndex.getRoots()){ + if (root.minZoom <= zoom && root.maxZoom >= zoom) { + if (tile31x >= root.left && tile31x <= root.right && root.top <= tile31y && root.bottom >= tile31y) { + return true; + } + } + } + } + return false; + } + + public boolean containsMapData(int left31x, int top31y, int right31x, int bottom31y, int zoom){ + for(MapIndex mapIndex : mapIndexes){ + for(MapRoot root : mapIndex.getRoots()){ + if (root.minZoom <= zoom && root.maxZoom >= zoom) { + if (right31x >= root.left && left31x <= root.right && root.top <= bottom31y && root.bottom >= top31y) { + return true; + } + } + } + } + return false; + } + + public boolean containsAddressData(){ + return addressIndexes.size() > 0; + } + + public boolean hasTransportData(){ + return transportIndexes.size() > 0; + } + + + + public RandomAccessFile getRaf() { + return raf; + } + + public int readByte() throws IOException{ + byte b = codedIS.readRawByte(); + if(b < 0){ + return b + 256; + } else { + return b; + } + } + + public final int readInt() throws IOException { + int ch1 = readByte(); + int ch2 = readByte(); + int ch3 = readByte(); + int ch4 = readByte(); + return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); + } + + + public int getVersion() { + return version; + } + + + + protected void skipUnknownField(int tag) throws IOException { + int wireType = WireFormat.getTagWireType(tag); + if(wireType == WireFormat.WIRETYPE_FIXED32_LENGTH_DELIMITED){ + int length = readInt(); + codedIS.skipRawBytes(length); + } else { + codedIS.skipField(tag); + } + } + + + /** + * Transport public methods + */ + public TIntObjectHashMap getTransportRoutes(int[] filePointers) throws IOException { + TIntObjectHashMap result = new TIntObjectHashMap(); + Map groupPoints = new HashMap(); + for(int filePointer : filePointers){ + TransportIndex ind = getTransportIndex(filePointer); + if (ind != null) { + if (!groupPoints.containsKey(ind)) { + groupPoints.put(ind, new TIntArrayList()); + } + groupPoints.get(ind).add(filePointer); + } + } + Iterator > it = groupPoints.entrySet().iterator(); + if(it.hasNext()){ + Entry e = it.next(); + TransportIndex ind = e.getKey(); + TIntArrayList pointers = e.getValue(); + pointers.sort(); + TIntObjectHashMap stringTable = new TIntObjectHashMap(); + for (int i = 0; i < pointers.size(); i++) { + int filePointer = pointers.get(i); + TransportRoute transportRoute = transportAdapter.getTransportRoute(filePointer, stringTable, false); + result.put(filePointer, transportRoute); + } + transportAdapter.initializeStringTable(ind, stringTable); + for(TransportRoute r : result.values(new TransportRoute[result.size()])){ + transportAdapter.initializeNames(false, r, stringTable); + } + } + return result; + } + + /** + * Transport public methods + */ + public List getTransportRouteDescriptions(TransportStop stop) throws IOException { + TransportIndex ind = getTransportIndex(stop.getFileOffset()); + if(ind == null){ + return null; + } + List list = new ArrayList(); + TIntObjectHashMap stringTable = new TIntObjectHashMap(); + for(int filePointer : stop.getReferencesToRoutes()){ + TransportRoute tr = transportAdapter.getTransportRoute(filePointer, stringTable, true); + if(tr != null){ + list.add(tr); + } + } + transportAdapter.initializeStringTable(ind, stringTable); + for(TransportRoute route : list){ + transportAdapter.initializeNames(true, route, stringTable); + } + return list; + } + + public boolean transportStopBelongsTo(TransportStop s){ + return getTransportIndex(s.getFileOffset()) != null; + } + + public List getTransportIndexes() { + return transportIndexes; + } + + private TransportIndex getTransportIndex(int filePointer) { + TransportIndex ind = null; + for(TransportIndex i : transportIndexes){ + if(i.filePointer <= filePointer && (filePointer - i.filePointer) < i.length){ + ind = i; + break; + } + } + return ind; + } + + public boolean containTransportData(double latitude, double longitude) { + double x = MapUtils.getTileNumberX(TRANSPORT_STOP_ZOOM, longitude); + double y = MapUtils.getTileNumberY(TRANSPORT_STOP_ZOOM, latitude); + for (TransportIndex index : transportIndexes) { + if (index.right >= x && index.left <= x && index.top <= y && index.bottom >= y) { + return true; + } + } + return false; + } + + public boolean containTransportData(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude){ + double leftX = MapUtils.getTileNumberX(TRANSPORT_STOP_ZOOM, leftLongitude); + double topY = MapUtils.getTileNumberY(TRANSPORT_STOP_ZOOM, topLatitude); + double rightX = MapUtils.getTileNumberX(TRANSPORT_STOP_ZOOM, rightLongitude); + double bottomY = MapUtils.getTileNumberY(TRANSPORT_STOP_ZOOM, bottomLatitude); + for (TransportIndex index : transportIndexes) { + if (index.right >= leftX && index.left <= rightX && index.top <= bottomY && index.bottom >= topY) { + return true; + } + } + return false; + } + + public List searchTransportIndex(SearchRequest req) throws IOException { + for (TransportIndex index : transportIndexes) { + if (index.stopsFileLength == 0 || index.right < req.left || index.left > req.right || index.top > req.bottom + || index.bottom < req.top) { + continue; + } + codedIS.seek(index.stopsFileOffset); + int oldLimit = codedIS.pushLimit(index.stopsFileLength); + int offset = req.searchResults.size(); + transportAdapter.searchTransportTreeBounds(0, 0, 0, 0, req); + codedIS.popLimit(oldLimit); + if (req.stringTable != null) { + transportAdapter.initializeStringTable(index, req.stringTable); + for (int i = offset; i < req.searchResults.size(); i++) { + TransportStop st = req.searchResults.get(i); + transportAdapter.initializeNames(req.stringTable, st); + } + } + } + log.info("Search is done. Visit " + req.numberOfVisitedObjects + " objects. Read " + req.numberOfAcceptedObjects + " objects."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + log.info("Read " + req.numberOfReadSubtrees + " subtrees. Go through " + req.numberOfAcceptedSubtrees + " subtrees."); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + return req.getSearchResults(); + } + + /** + * Address public methods + */ + public List getRegionNames(){ + List names = new ArrayList(); + for(AddressRegion r : addressIndexes){ + names.add(r.name); + } + return names; + } + + public LatLon getRegionCenter(String name) { + AddressRegion rg = getRegionByName(name); + if (rg != null) { + return rg.calculatedCenter; + } + return null; + } + + private AddressRegion getRegionByName(String name){ + for(AddressRegion r : addressIndexes){ + if(r.name.equals(name)){ + return r; + } + } + throw new IllegalArgumentException(name); + } + + public List getCities(String region, SearchRequest resultMatcher, + int cityType) throws IOException { + return getCities(region, resultMatcher, null, false, cityType); + } + public List getCities(String region, SearchRequest resultMatcher, StringMatcher matcher, boolean useEn, + int cityType) throws IOException { + List cities = new ArrayList(); + AddressRegion r = getRegionByName(region); + for(CitiesBlock block : r.cities) { + if(block.type == cityType) { + codedIS.seek(block.filePointer); + int old = codedIS.pushLimit(block.length); + addressAdapter.readCities(cities, resultMatcher, matcher, useEn); + codedIS.popLimit(old); + } + } + return cities; + } + + public List getCities(AddressRegion region, SearchRequest resultMatcher, + int cityType) throws IOException { + return getCities(region, resultMatcher, null, false, cityType); + } + public List getCities(AddressRegion region, SearchRequest resultMatcher, StringMatcher matcher, boolean useEn, + int cityType) throws IOException { + List cities = new ArrayList(); + for(CitiesBlock block : region.cities) { + if(block.type == cityType) { + codedIS.seek(block.filePointer); + int old = codedIS.pushLimit(block.length); + addressAdapter.readCities(cities, resultMatcher, matcher, useEn); + codedIS.popLimit(old); + } + } + return cities; + } + + public int preloadStreets(City c, SearchRequest resultMatcher) throws IOException { + checkAddressIndex(c.getFileOffset()); + codedIS.seek(c.getFileOffset()); + int size = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(size); + addressAdapter.readCityStreets(resultMatcher, c); + codedIS.popLimit(old); + return size; + } + + private void checkAddressIndex(int offset){ + boolean ok = false; + for(AddressRegion r : addressIndexes){ + if(offset >= r.filePointer && offset <= (r.length + r.filePointer)){ + ok = true; + break; + } + } + if(!ok){ + throw new IllegalArgumentException("Illegal offset " + offset); //$NON-NLS-1$ + } + } + + public void preloadBuildings(Street s, SearchRequest resultMatcher) throws IOException { + checkAddressIndex(s.getFileOffset()); + codedIS.seek(s.getFileOffset()); + int size = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(size); + City city = s.getCity(); + addressAdapter.readStreet(s, resultMatcher, true, 0, 0, city != null && city.isPostcode() ? city.getName() : null); + codedIS.popLimit(old); + } + + + /** + * Map public methods + */ + + private void readMapIndex(MapIndex index, boolean onlyInitEncodingRules) throws IOException { + int defaultId = 1; + int oldLimit ; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + + switch (tag) { + case 0: + // encoding rules are required! + if (onlyInitEncodingRules) { + index.finishInitializingTags(); + } + return; + case OsmandOdb.OsmAndMapIndex.NAME_FIELD_NUMBER : + index.setName(codedIS.readString()); + break; + case OsmandOdb.OsmAndMapIndex.RULES_FIELD_NUMBER : + if (onlyInitEncodingRules) { + int len = codedIS.readInt32(); + oldLimit = codedIS.pushLimit(len); + readMapEncodingRule(index, defaultId++); + codedIS.popLimit(oldLimit); + } else { + skipUnknownField(t); + } + break; + case OsmandOdb.OsmAndMapIndex.LEVELS_FIELD_NUMBER : + int length = readInt(); + int filePointer = codedIS.getTotalBytesRead(); + if (!onlyInitEncodingRules) { + oldLimit = codedIS.pushLimit(length); + MapRoot mapRoot = readMapLevel(new MapRoot()); + mapRoot.length = length; + mapRoot.filePointer = filePointer; + index.getRoots().add(mapRoot); + codedIS.popLimit(oldLimit); + } + codedIS.seek(filePointer + length); + break; + default: + skipUnknownField(t); + break; + } + } + } + + + private void readMapEncodingRule(MapIndex index, int id) throws IOException { + int type = 0; + String tags = null; + String val = null; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + index.initMapEncodingRule(type, id, tags, val); + return; + case MapEncodingRule.VALUE_FIELD_NUMBER : + val = codedIS.readString().intern(); + break; + case MapEncodingRule.TAG_FIELD_NUMBER : + tags = codedIS.readString().intern(); + break; + case MapEncodingRule.TYPE_FIELD_NUMBER : + type = codedIS.readUInt32(); + break; + case MapEncodingRule.ID_FIELD_NUMBER : + id = codedIS.readUInt32(); + break; + default: + skipUnknownField(t); + break; + } + } + } + + + private MapRoot readMapLevel(MapRoot root) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return root; + case MapRootLevel.BOTTOM_FIELD_NUMBER : + root.bottom = codedIS.readInt32(); + break; + case MapRootLevel.LEFT_FIELD_NUMBER : + root.left = codedIS.readInt32(); + break; + case MapRootLevel.RIGHT_FIELD_NUMBER : + root.right = codedIS.readInt32(); + break; + case MapRootLevel.TOP_FIELD_NUMBER : + root.top = codedIS.readInt32(); + break; + case MapRootLevel.MAXZOOM_FIELD_NUMBER : + root.maxZoom = codedIS.readInt32(); + break; + case MapRootLevel.MINZOOM_FIELD_NUMBER : + root.minZoom = codedIS.readInt32(); + break; + case MapRootLevel.BOXES_FIELD_NUMBER : + int length = readInt(); + int filePointer = codedIS.getTotalBytesRead(); + if (root.trees != null) { + MapTree r = new MapTree(); + // left, ... already initialized + r.length = length; + r.filePointer = filePointer; + int oldLimit = codedIS.pushLimit(r.length); + readMapTreeBounds(r, root.left, root.right, root.top, root.bottom); + root.trees.add(r); + codedIS.popLimit(oldLimit); + } + codedIS.seek(filePointer + length); + break; + case MapRootLevel.BLOCKS_FIELD_NUMBER : + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + break; + default: + skipUnknownField(t); + break; + } + } + + } + + private void readMapTreeBounds(MapTree tree, int aleft, int aright, int atop, int abottom) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case MapDataBox.BOTTOM_FIELD_NUMBER : + tree.bottom = codedIS.readSInt32() + abottom; + break; + case MapDataBox.LEFT_FIELD_NUMBER : + tree.left = codedIS.readSInt32() + aleft; + break; + case MapDataBox.RIGHT_FIELD_NUMBER : + tree.right = codedIS.readSInt32() + aright; + break; + case MapDataBox.TOP_FIELD_NUMBER : + tree.top = codedIS.readSInt32() + atop; + break; + case MapDataBox.OCEAN_FIELD_NUMBER : + if(codedIS.readBool()) { + tree.ocean = Boolean.TRUE; + } else { + tree.ocean = Boolean.FALSE; + } + break; + case MapDataBox.SHIFTTOMAPDATA_FIELD_NUMBER : + tree.mapDataBlock = readInt() + tree.filePointer; + break; + + default: + skipUnknownField(t); + break; + } + } + } + + + + public List searchMapIndex(SearchRequest req) throws IOException { + req.numberOfVisitedObjects = 0; + req.numberOfAcceptedObjects = 0; + req.numberOfAcceptedSubtrees = 0; + req.numberOfReadSubtrees = 0; + List foundSubtrees = new ArrayList(); + for (MapIndex mapIndex : mapIndexes) { + // lazy initializing rules + if(mapIndex.encodingRules.isEmpty()) { + codedIS.seek(mapIndex.filePointer); + int oldLimit = codedIS.pushLimit(mapIndex.length); + readMapIndex(mapIndex, true); + codedIS.popLimit(oldLimit); + } + for (MapRoot index : mapIndex.getRoots()) { + if (index.minZoom <= req.zoom && index.maxZoom >= req.zoom) { + if (index.right < req.left || index.left > req.right || index.top > req.bottom || index.bottom < req.top) { + continue; + } + + // lazy initializing trees + if(index.trees == null){ + index.trees = new ArrayList(); + codedIS.seek(index.filePointer); + int oldLimit = codedIS.pushLimit(index.length); + readMapLevel(index); + codedIS.popLimit(oldLimit); + } + + for (MapTree tree : index.trees) { + if (tree.right < req.left || tree.left > req.right || tree.top > req.bottom || tree.bottom < req.top) { + continue; + } + codedIS.seek(tree.filePointer); + int oldLimit = codedIS.pushLimit(tree.length); + searchMapTreeBounds(tree, index, req, foundSubtrees); + codedIS.popLimit(oldLimit); + } + + Collections.sort(foundSubtrees, new Comparator() { + @Override + public int compare(MapTree o1, MapTree o2) { + return o1.mapDataBlock < o2.mapDataBlock ? -1 : (o1.mapDataBlock == o2.mapDataBlock ? 0 : 1); + } + }); + for(MapTree tree : foundSubtrees) { + if(!req.isCancelled()){ + codedIS.seek(tree.mapDataBlock); + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + readMapDataBlocks(req, tree, mapIndex); + codedIS.popLimit(oldLimit); + } + } + foundSubtrees.clear(); + } + + } + } + + log.info("Search is done. Visit " + req.numberOfVisitedObjects + " objects. Read " + req.numberOfAcceptedObjects + " objects."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + log.info("Read " + req.numberOfReadSubtrees + " subtrees. Go through " + req.numberOfAcceptedSubtrees + " subtrees."); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + return req.getSearchResults(); + } + + public List searchMapIndex(SearchRequest req, MapIndex mapIndex) throws IOException { + req.numberOfVisitedObjects = 0; + req.numberOfAcceptedObjects = 0; + req.numberOfAcceptedSubtrees = 0; + req.numberOfReadSubtrees = 0; + List foundSubtrees = new ArrayList(); + + // lazy initializing rules + if(mapIndex.encodingRules.isEmpty()) { + codedIS.seek(mapIndex.filePointer); + int oldLimit = codedIS.pushLimit(mapIndex.length); + readMapIndex(mapIndex, true); + codedIS.popLimit(oldLimit); + } + + for (MapRoot level : mapIndex.getRoots()) { + if ((level.minZoom <= req.zoom && level.maxZoom >= req.zoom) || req.zoom == -1) { + if (level.right < req.left || level.left > req.right || level.top > req.bottom || level.bottom < req.top) { + continue; + } + + // lazy initializing trees + if(level.trees == null){ + level.trees = new ArrayList(); + codedIS.seek(level.filePointer); + int oldLimit = codedIS.pushLimit(level.length); + readMapLevel(level); + codedIS.popLimit(oldLimit); + } + + for (MapTree tree : level.trees) { + if (tree.right < req.left || tree.left > req.right || tree.top > req.bottom || tree.bottom < req.top) { + continue; + } + codedIS.seek(tree.filePointer); + int oldLimit = codedIS.pushLimit(tree.length); + searchMapTreeBounds(tree, level, req, foundSubtrees); + codedIS.popLimit(oldLimit); + } + + Collections.sort(foundSubtrees, new Comparator() { + @Override + public int compare(MapTree o1, MapTree o2) { + return o1.mapDataBlock < o2.mapDataBlock ? -1 : (o1.mapDataBlock == o2.mapDataBlock ? 0 : 1); + } + }); + for(MapTree tree : foundSubtrees) { + if(!req.isCancelled()){ + codedIS.seek(tree.mapDataBlock); + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + readMapDataBlocks(req, tree, mapIndex); + codedIS.popLimit(oldLimit); + } + } + foundSubtrees.clear(); + } + + } + + + log.info("Search is done. Visit " + req.numberOfVisitedObjects + " objects. Read " + req.numberOfAcceptedObjects + " objects."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + log.info("Read " + req.numberOfReadSubtrees + " subtrees. Go through " + req.numberOfAcceptedSubtrees + " subtrees."); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + return req.getSearchResults(); + } + + protected void readMapDataBlocks(SearchRequest req, MapTree tree, MapIndex root) throws IOException { + List tempResults = null; + long baseId = 0; + while (true) { + if (req.isCancelled()) { + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + if(tempResults != null) { + for(BinaryMapDataObject obj : tempResults) { + req.publish(obj); + } + } + return; + case MapDataBlock.BASEID_FIELD_NUMBER: + baseId = codedIS.readUInt64(); + break; + case MapDataBlock.DATAOBJECTS_FIELD_NUMBER: + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + BinaryMapDataObject mapObject = readMapDataObject(tree, req, root); + if (mapObject != null) { + mapObject.setId(mapObject.getId() + baseId); + if (tempResults == null) { + tempResults = new ArrayList(); + } + tempResults.add(mapObject); + } + codedIS.popLimit(oldLimit); + break; + case MapDataBlock.STRINGTABLE_FIELD_NUMBER: + length = codedIS.readRawVarint32(); + oldLimit = codedIS.pushLimit(length); + if (tempResults != null) { + List stringTable = readStringTable(); + for (int i = 0; i < tempResults.size(); i++) { + BinaryMapDataObject rs = tempResults.get(i); + if (rs.objectNames != null) { + int[] keys = rs.objectNames.keys(); + for (int j = 0; j < keys.length; j++) { + rs.objectNames.put(keys[j], stringTable.get(rs.objectNames.get(keys[j]).charAt(0))); + } + } + } + } else { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + } + codedIS.popLimit(oldLimit); + break; + default: + skipUnknownField(t); + break; + } + } + + } + + protected void searchMapTreeBounds(MapTree current, MapTree parent, + SearchRequest req, List foundSubtrees) throws IOException { + int init = 0; + req.numberOfReadSubtrees++; + while(true){ + if(req.isCancelled()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + if(init == 0xf){ + init = 0; + // coordinates are init + if(current.right < req.left || current.left > req.right || current.top > req.bottom || current.bottom < req.top){ + return; + } else { + req.numberOfAcceptedSubtrees++; + } + } + switch (tag) { + case 0: + return; + case MapDataBox.BOTTOM_FIELD_NUMBER : + current.bottom = codedIS.readSInt32() + parent.bottom; + init |= 1; + break; + case MapDataBox.LEFT_FIELD_NUMBER : + current.left = codedIS.readSInt32() + parent.left; + init |= 2; + break; + case MapDataBox.RIGHT_FIELD_NUMBER : + current.right = codedIS.readSInt32() + parent.right; + init |= 4; + break; + case MapDataBox.TOP_FIELD_NUMBER : + current.top = codedIS.readSInt32() + parent.top; + init |= 8; + break; + case MapDataBox.SHIFTTOMAPDATA_FIELD_NUMBER : + req.numberOfAcceptedSubtrees ++; + current.mapDataBlock = readInt() + current.filePointer; + foundSubtrees.add(current); + break; + case MapDataBox.OCEAN_FIELD_NUMBER : + if(codedIS.readBool()) { + current.ocean = Boolean.TRUE; + } else { + current.ocean = Boolean.FALSE; + } + req.publishOceanTile(current.ocean); + break; + case MapDataBox.BOXES_FIELD_NUMBER : + // left, ... already initialized + MapTree child = new MapTree(); + child.length = readInt(); + child.filePointer = codedIS.getTotalBytesRead(); + int oldLimit = codedIS.pushLimit(child.length); + if(current.ocean != null ){ + child.ocean = current.ocean; + } + searchMapTreeBounds(child, current, req, foundSubtrees); + codedIS.popLimit(oldLimit); + codedIS.seek(child.filePointer + child.length); + break; + default: + skipUnknownField(t); + break; + } + } + } + + private int MASK_TO_READ = ~((1 << SHIFT_COORDINATES) - 1); + private BinaryMapDataObject readMapDataObject(MapTree tree , SearchRequest req, + MapIndex root) throws IOException { + int tag = WireFormat.getTagFieldNumber(codedIS.readTag()); + boolean area = OsmandOdb.MapData.AREACOORDINATES_FIELD_NUMBER == tag; + if(!area && OsmandOdb.MapData.COORDINATES_FIELD_NUMBER != tag) { + throw new IllegalArgumentException(); + } + req.cacheCoordinates.clear(); + int size = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(size); + int px = tree.left & MASK_TO_READ; + int py = tree.top & MASK_TO_READ; + boolean contains = false; + int minX = Integer.MAX_VALUE; + int maxX = 0; + int minY = Integer.MAX_VALUE; + int maxY = 0; + req.numberOfVisitedObjects++; + while(codedIS.getBytesUntilLimit() > 0){ + int x = (codedIS.readSInt32() << SHIFT_COORDINATES) + px; + int y = (codedIS.readSInt32() << SHIFT_COORDINATES) + py; + req.cacheCoordinates.add(x); + req.cacheCoordinates.add(y); + px = x; + py = y; + if(!contains && req.left <= x && req.right >= x && req.top <= y && req.bottom >= y){ + contains = true; + } + if(!contains){ + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + } + if(!contains){ + if(maxX >= req.left && minX <= req.right && minY <= req.bottom && maxY >= req.top){ + contains = true; + } + + } + codedIS.popLimit(old); + if(!contains){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + + // read + + List innercoordinates = null; + TIntArrayList additionalTypes = null; + TIntObjectHashMap stringNames = null; + long id = 0; + + boolean loop = true; + while (loop) { + int t = codedIS.readTag(); + tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + loop = false; + break; + case OsmandOdb.MapData.POLYGONINNERCOORDINATES_FIELD_NUMBER: + if (innercoordinates == null) { + innercoordinates = new ArrayList(); + } + TIntArrayList polygon = new TIntArrayList(); + innercoordinates.add(polygon); + px = tree.left & MASK_TO_READ; + py = tree.top & MASK_TO_READ; + size = codedIS.readRawVarint32(); + old = codedIS.pushLimit(size); + while (codedIS.getBytesUntilLimit() > 0) { + int x = (codedIS.readSInt32() << SHIFT_COORDINATES) + px; + int y = (codedIS.readSInt32() << SHIFT_COORDINATES) + py; + polygon.add(x); + polygon.add(y); + px = x; + py = y; + } + codedIS.popLimit(old); + break; + case OsmandOdb.MapData.ADDITIONALTYPES_FIELD_NUMBER: + additionalTypes = new TIntArrayList(); + int sizeL = codedIS.readRawVarint32(); + old = codedIS.pushLimit(sizeL); + while (codedIS.getBytesUntilLimit() > 0) { + additionalTypes.add(codedIS.readRawVarint32()); + } + codedIS.popLimit(old); + break; + case OsmandOdb.MapData.TYPES_FIELD_NUMBER: + req.cacheTypes.clear(); + sizeL = codedIS.readRawVarint32(); + old = codedIS.pushLimit(sizeL); + while (codedIS.getBytesUntilLimit() > 0) { + req.cacheTypes.add(codedIS.readRawVarint32()); + } + codedIS.popLimit(old); + boolean accept = true; + if (req.searchFilter != null) { + accept = req.searchFilter.accept(req.cacheTypes, root); + } + if (!accept) { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + req.numberOfAcceptedObjects++; + break; + case OsmandOdb.MapData.ID_FIELD_NUMBER: + id = codedIS.readSInt64(); + break; + case OsmandOdb.MapData.STRINGNAMES_FIELD_NUMBER: + stringNames = new TIntObjectHashMap(); + sizeL = codedIS.readRawVarint32(); + old = codedIS.pushLimit(sizeL); + while (codedIS.getBytesUntilLimit() > 0) { + int stag = codedIS.readRawVarint32(); + int pId = codedIS.readRawVarint32(); + stringNames.put(stag, ((char)pId)+""); + } + codedIS.popLimit(old); + break; + default: + skipUnknownField(t); + break; + } + } +// if(req.cacheCoordinates.size() > 500 && req.cacheTypes.size() > 0) { +// TagValuePair p = root.decodeType(req.cacheTypes.get(0)); +// if("admin_level".equals(p.tag)) { +// log.info("TODO Object is ignored due to performance issues " + p.tag + " "+p.value); +// return null; +// } +// } + BinaryMapDataObject dataObject = new BinaryMapDataObject(); + dataObject.area = area; + dataObject.coordinates = req.cacheCoordinates.toArray(); + dataObject.objectNames = stringNames; + if (innercoordinates == null) { + dataObject.polygonInnerCoordinates = new int[0][0]; + } else { + dataObject.polygonInnerCoordinates = new int[innercoordinates.size()][]; + for (int i = 0; i < innercoordinates.size(); i++) { + dataObject.polygonInnerCoordinates[i] = innercoordinates.get(i).toArray(); + } + } + dataObject.types = req.cacheTypes.toArray(); + if (additionalTypes != null) { + dataObject.additionalTypes = additionalTypes.toArray(); + } else { + dataObject.additionalTypes = new int[0]; + } + dataObject.id = id; + dataObject.area = area; + dataObject.mapIndex = root; + return dataObject; + } + + public List searchAddressDataByName(SearchRequest req) throws IOException { + if (req.nameQuery == null || req.nameQuery.length() == 0) { + throw new IllegalArgumentException(); + } + for (AddressRegion reg : addressIndexes) { + if(reg.indexNameOffset != -1) { + codedIS.seek(reg.indexNameOffset); + int len = readInt(); + int old = codedIS.pushLimit(len); + addressAdapter.searchAddressDataByName(reg, req, null); + codedIS.popLimit(old); + } + } + return req.getSearchResults(); + } + + public void initCategories(PoiRegion poiIndex) throws IOException { + poiAdapter.initCategories(poiIndex); + } + + public List searchPoiByName(SearchRequest req) throws IOException { + if (req.nameQuery == null || req.nameQuery.length() == 0) { + throw new IllegalArgumentException(); + } + for (PoiRegion poiIndex : poiIndexes) { + poiAdapter.initCategories(poiIndex); + codedIS.seek(poiIndex.filePointer); + int old = codedIS.pushLimit(poiIndex.length); + poiAdapter.searchPoiByName(poiIndex, req); + codedIS.popLimit(old); + } + return req.getSearchResults(); + } + + public Map > searchPoiCategoriesByName(String query, Map > map) throws IOException { + if (query == null || query.length() == 0) { + throw new IllegalArgumentException(); + } + Collator collator = PlatformUtil.primaryCollator(); + for (PoiRegion poiIndex : poiIndexes) { + poiAdapter.initCategories(poiIndex); + for (int i = 0; i < poiIndex.categories.size(); i++) { + String cat = poiIndex.categories.get(i); + AmenityType catType = poiIndex.categoriesType.get(i); + if (CollatorStringMatcher.cmatches(collator, cat, query, StringMatcherMode.CHECK_STARTS_FROM_SPACE)) { + map.put(catType, null); + } else { + List subcats = poiIndex.subcategories.get(i); + for (int j = 0; j < subcats.size(); j++) { + if (CollatorStringMatcher.cmatches(collator, subcats.get(j), query, StringMatcherMode.CHECK_STARTS_FROM_SPACE)) { + if (!map.containsKey(catType)) { + map.put(catType, new ArrayList()); + } + List list = map.get(catType); + if (list != null) { + list.add(subcats.get(j)); + } + } + + } + } + } + } + return map; + } + + public List searchPoi(SearchRequest req) throws IOException { + req.numberOfVisitedObjects = 0; + req.numberOfAcceptedObjects = 0; + req.numberOfAcceptedSubtrees = 0; + req.numberOfReadSubtrees = 0; + for (PoiRegion poiIndex : poiIndexes) { + poiAdapter.initCategories(poiIndex); + codedIS.seek(poiIndex.filePointer); + int old = codedIS.pushLimit(poiIndex.length); + poiAdapter.searchPoiIndex(req.left, req.right, req.top, req.bottom, req, poiIndex); + codedIS.popLimit(old); + } + log.info("Read " + req.numberOfReadSubtrees + " subtrees. Go through " + req.numberOfAcceptedSubtrees + " subtrees."); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + log.info("Search poi is done. Visit " + req.numberOfVisitedObjects + " objects. Read " + req.numberOfAcceptedObjects + " objects."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + + return req.getSearchResults(); + } + + public List searchPoi(PoiRegion poiIndex, SearchRequest req) throws IOException { + req.numberOfVisitedObjects = 0; + req.numberOfAcceptedObjects = 0; + req.numberOfAcceptedSubtrees = 0; + req.numberOfReadSubtrees = 0; + + poiAdapter.initCategories(poiIndex); + codedIS.seek(poiIndex.filePointer); + int old = codedIS.pushLimit(poiIndex.length); + poiAdapter.searchPoiIndex(req.left, req.right, req.top, req.bottom, req, poiIndex); + codedIS.popLimit(old); + + log.info("Read " + req.numberOfReadSubtrees + " subtrees. Go through " + req.numberOfAcceptedSubtrees + " subtrees."); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + log.info("Search poi is done. Visit " + req.numberOfVisitedObjects + " objects. Read " + req.numberOfAcceptedObjects + " objects."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + + return req.getSearchResults(); + } + + protected List readStringTable() throws IOException{ + List list = new ArrayList(); + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return list; + case OsmandOdb.StringTable.S_FIELD_NUMBER : + list.add(codedIS.readString()); + break; + default: + skipUnknownField(t); + break; + } + } + } + + + protected List getAddressIndexes() { + return addressIndexes; + } + + protected List getPoiIndexes() { + return poiIndexes; + } + + + public static SearchRequest buildSearchRequest(int sleft, int sright, int stop, int sbottom, int zoom, SearchFilter searchFilter){ + return buildSearchRequest(sleft, sright, stop, sbottom, zoom, searchFilter, null); + } + + public static SearchRequest buildSearchRequest(int sleft, int sright, int stop, int sbottom, int zoom, SearchFilter searchFilter, + ResultMatcher resultMatcher){ + SearchRequest request = new SearchRequest(); + request.left = sleft; + request.right = sright; + request.top = stop; + request.bottom = sbottom; + request.zoom = zoom; + request.searchFilter = searchFilter; + request.resultMatcher = resultMatcher; + return request; + } + + public static SearchRequest buildAddressRequest(ResultMatcher resultMatcher){ + SearchRequest request = new SearchRequest(); + request.resultMatcher = resultMatcher; + return request; + } + + + + public static SearchRequest buildAddressByNameRequest(ResultMatcher resultMatcher, String nameRequest){ + SearchRequest request = new SearchRequest(); + request.resultMatcher = resultMatcher; + request.nameQuery = nameRequest; + return request; + } + + + public static SearchRequest buildSearchPoiRequest(int sleft, int sright, int stop, int sbottom, int zoom, + SearchPoiTypeFilter poiTypeFilter, ResultMatcher matcher){ + SearchRequest request = new SearchRequest(); + request.left = sleft; + request.right = sright; + request.top = stop; + request.bottom = sbottom; + request.zoom = zoom; + request.poiTypeFilter = poiTypeFilter; + request.resultMatcher = matcher; + + return request; + } + + public static SearchRequest buildSearchRouteRequest(int sleft, int sright, int stop, int sbottom, + ResultMatcher matcher){ + SearchRequest request = new SearchRequest(); + request.left = sleft; + request.right = sright; + request.top = stop; + request.bottom = sbottom; + request.resultMatcher = matcher; + + return request; + } + + public static SearchRequest buildSearchRouteBorderRequest(int sleft, int sright, int stop, int sbottom){ + SearchRequest request = new SearchRequest(); + request.left = sleft; + request.right = sright; + request.top = stop; + request.bottom = sbottom; + return request; + } + + + public static SearchRequest buildSearchPoiRequest(int x, int y, String nameFilter, int sleft, int sright, int stop, int sbottom, ResultMatcher resultMatcher){ + SearchRequest request = new SearchRequest(); + request.x = x; + request.y = y; + request.left = sleft; + request.right = sright; + request.top = stop; + request.bottom = sbottom; + request.resultMatcher = resultMatcher; + request.nameQuery = nameFilter; + return request; + } + + + public static SearchRequest buildSearchTransportRequest(int sleft, int sright, int stop, int sbottom, int limit, List stops){ + SearchRequest request = new SearchRequest(); + if (stops != null) { + request.searchResults = stops; + } + request.stringTable = new TIntObjectHashMap(); + request.left = sleft >> (31 - TRANSPORT_STOP_ZOOM); + request.right = sright >> (31 - TRANSPORT_STOP_ZOOM); + request.top = stop >> (31 - TRANSPORT_STOP_ZOOM); + request.bottom = sbottom >> (31 - TRANSPORT_STOP_ZOOM); + request.limit = limit; + return request; + } + + public void close() throws IOException{ + if(codedIS != null){ + raf.close(); + codedIS = null; + mapIndexes.clear(); + addressIndexes.clear(); + transportIndexes.clear(); + } + } + + public static interface SearchFilter { + + public boolean accept(TIntArrayList types, MapIndex index); + + } + + public static interface SearchPoiTypeFilter { + + public boolean accept(AmenityType type, String subcategory); + + } + + public static class SearchRequest { + private List searchResults = new ArrayList(); + private boolean land = false; + private boolean ocean = false; + + private ResultMatcher resultMatcher; + + // 31 zoom tiles + // common variables + int x = 0; + int y = 0; + int left = 0; + int right = 0; + int top = 0; + int bottom = 0; + + int zoom = 15; + int limit = -1; + + + String nameQuery = null; + + SearchFilter searchFilter = null; + + SearchPoiTypeFilter poiTypeFilter = null; + + // internal read information + TIntObjectHashMap stringTable = null; + + // cache information + TIntArrayList cacheCoordinates = new TIntArrayList(); + TIntArrayList cacheTypes = new TIntArrayList(); + + + // TRACE INFO + int numberOfVisitedObjects = 0; + int numberOfAcceptedObjects = 0; + int numberOfReadSubtrees = 0; + int numberOfAcceptedSubtrees = 0; + boolean interrupted = false; + + protected SearchRequest(){ + } + + + public boolean publish(T obj){ + if(resultMatcher == null || resultMatcher.publish(obj)){ + searchResults.add(obj); + return true; + } + return false; + } + + protected void publishOceanTile(boolean ocean){ + if(ocean) { + this.ocean = true; + } else { + this.land = true; + } + } + + public List getSearchResults() { + return searchResults; + } + + public void setInterrupted(boolean interrupted) { + this.interrupted = interrupted; + } + + public boolean limitExceeded() { + return limit != -1 && searchResults.size() > limit; + } + public boolean isCancelled() { + if(this.interrupted){ + return interrupted; + } + if(resultMatcher != null){ + return resultMatcher.isCancelled(); + } + return false; + } + + public boolean isOcean() { + return ocean; + } + + public boolean isLand() { + return land; + } + + public boolean intersects(int l, int t, int r, int b){ + return r >= left && l <= right && t <= bottom && b >= top; + } + + public boolean contains(int l, int t, int r, int b){ + return r <= right && l >= left && b <= bottom && t >= top; + } + + public int getLeft() { + return left; + } + + public int getRight() { + return right; + } + + public int getBottom() { + return bottom; + } + + public int getTop() { + return top; + } + + public void clearSearchResults(){ + // recreate whole list to allow GC collect old data + searchResults = new ArrayList(); + cacheCoordinates.clear(); + cacheTypes.clear(); + land = false; + ocean = false; + numberOfVisitedObjects = 0; + numberOfAcceptedObjects = 0; + numberOfReadSubtrees = 0; + numberOfAcceptedSubtrees = 0; + } + } + + + public static class MapIndex extends BinaryIndexPart { + List roots = new ArrayList(); + + Map > encodingRules = new HashMap >(); + TIntObjectMap decodingRules = new TIntObjectHashMap(); + public int nameEncodingType = 0; + public int refEncodingType = -1; + public int coastlineEncodingType = -1; + public int coastlineBrokenEncodingType = -1; + public int landEncodingType = -1; + public int onewayAttribute = -1; + public int onewayReverseAttribute = -1; + public TIntHashSet positiveLayers = new TIntHashSet(2); + public TIntHashSet negativeLayers = new TIntHashSet(2); + + public Integer getRule(String t, String v){ + Map m = encodingRules.get(t); + if(m != null){ + return m.get(v); + } + return null; + } + + public List getRoots() { + return roots; + } + + public TagValuePair decodeType(int type){ + return decodingRules.get(type); + } + + public void finishInitializingTags() { + int free = decodingRules.size() * 2 + 1; + coastlineBrokenEncodingType = free++; + initMapEncodingRule(0, coastlineBrokenEncodingType, "natural", "coastline_broken"); + if(landEncodingType == -1){ + landEncodingType = free++; + initMapEncodingRule(0, landEncodingType, "natural", "land"); + } + } + + public void initMapEncodingRule(int type, int id, String tag, String val) { + if(!encodingRules.containsKey(tag)){ + encodingRules.put(tag, new HashMap()); + } + encodingRules.get(tag).put(val, id); + if(!decodingRules.containsKey(id)){ + decodingRules.put(id, new TagValuePair(tag, val, type)); + } + + if("name".equals(tag)){ + nameEncodingType = id; + } else if("natural".equals(tag) && "coastline".equals(val)){ + coastlineEncodingType = id; + } else if("natural".equals(tag) && "land".equals(val)){ + landEncodingType = id; + } else if("oneway".equals(tag) && "yes".equals(val)){ + onewayAttribute = id; + } else if("oneway".equals(tag) && "-1".equals(val)){ + onewayReverseAttribute = id; + } else if("ref".equals(tag)){ + refEncodingType = id; + } else if("tunnel".equals(tag)){ + negativeLayers.add(id); + } else if("bridge".equals(tag)){ + positiveLayers.add(id); + } else if("layer".equals(tag)){ + if(val != null && !val.equals("0") && val.length() > 0) { + if(val.startsWith("-")) { + negativeLayers.add(id); + } else { + positiveLayers.add(id); + } + } + } + } + + public boolean isBaseMap(){ + return name != null && name.toLowerCase().contains(BASEMAP_NAME); + } + } + + public static class TagValuePair { + public String tag; + public String value; + public int additionalAttribute; + + + public TagValuePair(String tag, String value, int additionalAttribute) { + super(); + this.tag = tag; + this.value = value; + this.additionalAttribute = additionalAttribute; + } + + public boolean isAdditional(){ + return additionalAttribute % 2 == 1; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + additionalAttribute; + result = prime * result + ((tag == null) ? 0 : tag.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + public String toSimpleString(){ + if(value == null){ + return tag; + } + return tag+"-"+value; + } + + @Override + public String toString() { + return "TagValuePair : " + tag + " - " + value; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TagValuePair other = (TagValuePair) obj; + if (additionalAttribute != other.additionalAttribute) + return false; + if (tag == null) { + if (other.tag != null) + return false; + } else if (!tag.equals(other.tag)) + return false; + if (value == null) { + if (other.value != null) + return false; + } else if (!value.equals(other.value)) + return false; + return true; + } + + } + + + public static class MapRoot extends MapTree { + int minZoom = 0; + int maxZoom = 0; + + + public int getMinZoom() { + return minZoom; + } + public int getMaxZoom() { + return maxZoom; + } + + private List trees = null; + } + + private static class MapTree { + int filePointer = 0; + int length = 0; + + long mapDataBlock = 0; + Boolean ocean = null; + + int left = 0; + int right = 0; + int top = 0; + int bottom = 0; + + public int getLeft() { + return left; + } + public int getRight() { + return right; + } + public int getTop() { + return top; + } + public int getBottom() { + return bottom; + } + + public int getLength() { + return length; + } + public int getFilePointer() { + return filePointer; + } + + @Override + public String toString(){ + return "Top Lat " + ((float) MapUtils.get31LatitudeY(top)) + " lon " + ((float) MapUtils.get31LongitudeX(left)) + + " Bottom lat " + ((float) MapUtils.get31LatitudeY(bottom)) + " lon " + ((float) MapUtils.get31LongitudeX(right)); + } + + } + + + private static boolean testMapSearch = true; + private static boolean testAddressSearch = false; + private static boolean testPoiSearch = false; + private static boolean testTransportSearch = false; + private static int sleft = MapUtils.get31TileNumberX(6.3); + private static int sright = MapUtils.get31TileNumberX(6.5); + private static int stop = MapUtils.get31TileNumberY(49.9); + private static int sbottom = MapUtils.get31TileNumberY(49.7); + private static int szoom = 15; + + private static void println(String s){ + System.out.println(s); + } + + public static void main(String[] args) throws IOException { + RandomAccessFile raf = new RandomAccessFile("", "r"); + + BinaryMapIndexReader reader = new BinaryMapIndexReader(raf); + println("VERSION " + reader.getVersion()); //$NON-NLS-1$ + long time = System.currentTimeMillis(); + + if (testMapSearch) { + testMapSearch(reader); + } + if(testAddressSearch) { + testAddressSearchByName(reader); + testAddressSearch(reader); + } + if(testTransportSearch) { + testTransportSearch(reader); + } + + if (testPoiSearch) { + PoiRegion poiRegion = reader.getPoiIndexes().get(0); + testPoiSearch(reader, poiRegion); + testPoiSearchByName(reader); + } + + println("MEMORY " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())); //$NON-NLS-1$ + println("Time " + (System.currentTimeMillis() - time)); //$NON-NLS-1$ + } + + private static void testPoiSearchByName(BinaryMapIndexReader reader) throws IOException { + println("Searching by name..."); + int tileZ = 31 - 14; + SearchRequest req = buildSearchPoiRequest(sleft/2+sright/2, stop/2+sbottom/2, "kol", + sleft - 1< req = buildSearchPoiRequest(sleft, sright, stop, sbottom, -1, new SearchPoiTypeFilter() { + @Override + public boolean accept(AmenityType type, String subcategory) { +// return type == AmenityType.TRANSPORTATION && "fuel".equals(subcategory); + return true; + } + }, null); + List results = reader.searchPoi(req); + for (Amenity a : results) { + println(a.getType() + " " + a.getSubType() + " " + a.getName() + " " + a.getLocation()); + } + } + + private static void testTransportSearch(BinaryMapIndexReader reader) throws IOException { + // test transport + for (TransportIndex i : reader.transportIndexes) { + println("Transport bounds : " + i.left + " " + i.right + " " + i.top + " " + i.bottom); + } + { + for (TransportStop s : reader.searchTransportIndex(buildSearchTransportRequest(sleft, sright, stop, sbottom, 15, null))) { + println(s.getName()); + TIntObjectHashMap routes = reader.getTransportRoutes(s.getReferencesToRoutes()); + for (net.osmand.data.TransportRoute route : routes.valueCollection()) { + println(" " + route.getRef() + " " + route.getName() + " " + route.getDistance() + " " + + route.getAvgBothDistance()); + } + } + } + { + for (TransportStop s : reader.searchTransportIndex(buildSearchTransportRequest(sleft, sright, stop, sbottom, 16, null))) { + println(s.getName()); + TIntObjectHashMap routes = reader.getTransportRoutes(s.getReferencesToRoutes()); + for (net.osmand.data.TransportRoute route : routes.valueCollection()) { + println(" " + route.getRef() + " " + route.getName() + " " + route.getDistance() + " " + + route.getAvgBothDistance()); + } + } + } + } + + private static void updateFrequence(Map street , String key){ + if(!street.containsKey(key)){ + street.put(key, 1); + } else { + street.put(key, street.get(key) + 1); + } + + } + + int readIndexedStringTable(Collator instance, String query, String prefix, TIntArrayList list, int charMatches) throws IOException { + String key = null; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return charMatches; + case OsmandOdb.IndexedStringTable.KEY_FIELD_NUMBER : + key = codedIS.readString(); + if(prefix.length() > 0){ + key = prefix + key; + } + // check query is part of key (the best matching) + if(CollatorStringMatcher.cmatches(instance, key, query, StringMatcherMode.CHECK_ONLY_STARTS_WITH)){ + if(query.length() >= charMatches){ + if(query.length() > charMatches){ + charMatches = query.length(); + list.clear(); + } + } else { + key = null; + } + // check key is part of query + } else if (CollatorStringMatcher.cmatches(instance, query, key, StringMatcherMode.CHECK_ONLY_STARTS_WITH)) { + if (key.length() >= charMatches) { + if (key.length() > charMatches) { + charMatches = key.length(); + list.clear(); + } + } else { + key = null; + } + } else { + key = null; + } + break; + case OsmandOdb.IndexedStringTable.VAL_FIELD_NUMBER : + int val = readInt(); + if (key != null) { + list.add(val); + } + break; + case OsmandOdb.IndexedStringTable.SUBTABLES_FIELD_NUMBER : + int len = codedIS.readRawVarint32(); + int oldLim = codedIS.pushLimit(len); + if (key != null) { + charMatches = readIndexedStringTable(instance, query, key, list, charMatches); + } else { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + } + codedIS.popLimit(oldLim); + break; + default: + skipUnknownField(t); + break; + } + } + } + + private static void testAddressSearchByName(BinaryMapIndexReader reader) throws IOException { + SearchRequest req = buildAddressByNameRequest(new ResultMatcher() { + @Override + public boolean publish(MapObject object) { + if(object instanceof Street) { + System.out.println(object + " " + ((Street) object).getCity()); + } else { + System.out.println(object); + } + return false; + } + @Override + public boolean isCancelled() { + return false; + } + }, "lux"); + reader.searchAddressDataByName(req); + } + + private static void testAddressSearch(BinaryMapIndexReader reader) throws IOException { + // test address index search + String reg = reader.getRegionNames().get(0); + final Map streetFreq = new HashMap(); + List cs = reader.getCities(reg, null, BinaryMapAddressReaderAdapter.CITY_TOWN_TYPE); + for(City c : cs){ + int buildings = 0; + reader.preloadStreets(c, null); + for(Street s : c.getStreets()){ + updateFrequence(streetFreq, s.getName()); + reader.preloadBuildings(s, buildAddressRequest((ResultMatcher) null)); + buildings += s.getBuildings().size(); + } + println(c.getName() + " " + c.getLocation() + " " + c.getStreets().size() + " " + buildings + " " + c.getEnName()); + } +// int[] count = new int[1]; + List villages = reader.getCities(reg, buildAddressRequest((ResultMatcher) null), BinaryMapAddressReaderAdapter.VILLAGES_TYPE); + for(City v : villages) { + reader.preloadStreets(v, null); + for(Street s : v.getStreets()){ + updateFrequence(streetFreq, s.getName()); + } + } + System.out.println("Villages " + villages.size()); + + List sorted = new ArrayList(streetFreq.keySet()); + Collections.sort(sorted, new Comparator() { + @Override + public int compare(String o1, String o2) { + return - streetFreq.get(o1) + streetFreq.get(o2); + } + }); + System.out.println(streetFreq.size()); + for(String s : sorted) { + System.out.println(s + " " + streetFreq.get(s)); + if(streetFreq.get(s) < 10){ + break; + } + } + + } + + private static void testMapSearch(BinaryMapIndexReader reader) throws IOException { + println(reader.mapIndexes.get(0).encodingRules + ""); + println("SEARCH " + sleft + " " + sright + " " + stop + " " + sbottom); + + reader.searchMapIndex(buildSearchRequest(sleft, sright, stop, sbottom, szoom, null, new ResultMatcher() { + + @Override + public boolean publish(BinaryMapDataObject obj) { + + StringBuilder b = new StringBuilder(); + b.append(obj.area? "Area" : (obj.getPointsLength() > 1? "Way" : "Point")); + int[] types = obj.getTypes(); + b.append(" types ["); + for(int j = 0; j 0) { + b.append(", "); + } + TagValuePair pair = obj.getMapIndex().decodeType(types[j]); + if(pair == null) { + throw new NullPointerException("Type " + types[j] + "was not found"); + } + b.append(pair.toSimpleString()+"("+types[j]+")"); + } + b.append("]"); + if(obj.getAdditionalTypes() != null && obj.getAdditionalTypes().length > 0){ + b.append(" add_types ["); + for(int j = 0; j 0) { + b.append(", "); + } + TagValuePair pair = obj.getMapIndex().decodeType(obj.getAdditionalTypes()[j]); + if(pair == null) { + throw new NullPointerException("Type " + obj.getAdditionalTypes()[j] + "was not found"); + } + b.append(pair.toSimpleString()+"("+obj.getAdditionalTypes()[j]+")"); + + } + b.append("]"); + } + TIntObjectHashMap names = obj.getObjectNames(); + if(names != null && !names.isEmpty()) { + b.append(" Names ["); + int[] keys = names.keys(); + for(int j = 0; j 0) { + b.append(", "); + } + TagValuePair pair = obj.getMapIndex().decodeType(keys[j]); + if(pair == null) { + throw new NullPointerException("Type " + keys[j] + "was not found"); + } + b.append(pair.toSimpleString()+"("+keys[j]+")"); + b.append(" - ").append(names.get(keys[j])); + } + b.append("]"); + } + + b.append(" id ").append((obj.getId() >> 1)); + b.append(" lat/lon : "); + for(int i=0; i searchRouteIndexTree(SearchRequest req, List list) throws IOException { + req.numberOfVisitedObjects = 0; + req.numberOfAcceptedObjects = 0; + req.numberOfAcceptedSubtrees = 0; + req.numberOfReadSubtrees = 0; + if(routeAdapter != null){ + routeAdapter.initRouteTypesIfNeeded(req, list); + return routeAdapter.searchRouteRegionTree(req, list, new ArrayList()); + } + return Collections.emptyList(); + } + + public void loadRouteIndexData(List toLoad, ResultMatcher matcher) throws IOException { + if(routeAdapter != null){ + routeAdapter.loadRouteRegionData(toLoad, matcher); + } + } + + public List searchBorderPoints(SearchRequest req, RouteRegion r) throws IOException { + if(routeAdapter != null){ + routeAdapter.searchBorderPoints(req, r); + } + return Collections.emptyList(); + } + + public List loadRouteIndexData(RouteSubregion rs) throws IOException { + if(routeAdapter != null){ + return routeAdapter.loadRouteRegionData(rs); + } + return Collections.emptyList(); + } + + public void initRouteRegion(RouteRegion routeReg) throws IOException { + if(routeAdapter != null){ + routeAdapter.initRouteRegion(routeReg); + } + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryMapPoiReaderAdapter.java b/OsmAnd-java/src/net/osmand/binary/BinaryMapPoiReaderAdapter.java new file mode 100644 index 0000000000..e9b5a99db6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryMapPoiReaderAdapter.java @@ -0,0 +1,718 @@ +package net.osmand.binary; + + +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.map.hash.TIntLongHashMap; +import gnu.trove.set.hash.TLongHashSet; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +import net.osmand.Collator; +import net.osmand.CollatorStringMatcher; +import net.osmand.CollatorStringMatcher.StringMatcherMode; +import net.osmand.PlatformUtil; +import net.osmand.binary.BinaryMapIndexReader.SearchRequest; +import net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData; +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.util.Algorithms; +import net.osmand.util.MapUtils; +import net.sf.junidecode.Junidecode; + +import org.apache.commons.logging.Log; + +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.WireFormat; + +public class BinaryMapPoiReaderAdapter { + private static final Log LOG = PlatformUtil.getLog(BinaryMapPoiReaderAdapter.class); + + public static final int SHIFT_BITS_CATEGORY = 7; + private static final int CATEGORY_MASK = (1 << SHIFT_BITS_CATEGORY) - 1 ; + private static final int ZOOM_TO_SKIP_FILTER = 3; + private static final int BUCKET_SEARCH_BY_NAME = 5; + + public static class PoiRegion extends BinaryIndexPart { + + List categories = new ArrayList(); + List categoriesType = new ArrayList(); + List > subcategories = new ArrayList >(); + + double leftLongitude; + double rightLongitude; + double topLatitude; + double bottomLatitude; + + public double getLeftLongitude() { + return leftLongitude; + } + + public double getRightLongitude() { + return rightLongitude; + } + + public double getTopLatitude() { + return topLatitude; + } + + public double getBottomLatitude() { + return bottomLatitude; + } + } + + private CodedInputStream codedIS; + private final BinaryMapIndexReader map; + + protected BinaryMapPoiReaderAdapter(BinaryMapIndexReader map){ + this.codedIS = map.codedIS; + this.map = map; + } + + private void skipUnknownField(int t) throws IOException { + map.skipUnknownField(t); + } + + private int readInt() throws IOException { + return map.readInt(); + } + + private void readPoiBoundariesIndex(PoiRegion region) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndTileBox.LEFT_FIELD_NUMBER: + region.leftLongitude = MapUtils.get31LongitudeX(codedIS.readUInt32()); + break; + case OsmandOdb.OsmAndTileBox.RIGHT_FIELD_NUMBER: + region.rightLongitude = MapUtils.get31LongitudeX(codedIS.readUInt32()); + break; + case OsmandOdb.OsmAndTileBox.TOP_FIELD_NUMBER: + region.topLatitude = MapUtils.get31LatitudeY(codedIS.readUInt32()); + break; + case OsmandOdb.OsmAndTileBox.BOTTOM_FIELD_NUMBER: + region.bottomLatitude = MapUtils.get31LatitudeY(codedIS.readUInt32()); + break; + default: + skipUnknownField(t); + break; + } + } + } + + + protected void readPoiIndex(PoiRegion region, boolean readCategories) throws IOException { + int length; + int oldLimit; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndPoiIndex.NAME_FIELD_NUMBER : + region.name = codedIS.readString(); + break; + case OsmandOdb.OsmAndPoiIndex.BOUNDARIES_FIELD_NUMBER: + length = codedIS.readRawVarint32(); + oldLimit = codedIS.pushLimit(length); + readPoiBoundariesIndex(region); + codedIS.popLimit(oldLimit); + break; + case OsmandOdb.OsmAndPoiIndex.CATEGORIESTABLE_FIELD_NUMBER : + if(!readCategories){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return; + } + length = codedIS.readRawVarint32(); + oldLimit = codedIS.pushLimit(length); + readCategory(region); + codedIS.popLimit(oldLimit); + break; + case OsmandOdb.OsmAndPoiIndex.BOXES_FIELD_NUMBER : + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return; + default: + skipUnknownField(t); + break; + } + } + } + + private void readCategory(PoiRegion region) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndCategoryTable.CATEGORY_FIELD_NUMBER : + String cat = codedIS.readString().intern(); + region.categories.add(cat); + region.categoriesType.add(AmenityType.fromString(cat)); + region.subcategories.add(new ArrayList()); + break; + case OsmandOdb.OsmAndCategoryTable.SUBCATEGORIES_FIELD_NUMBER : + region.subcategories.get(region.subcategories.size() - 1).add(codedIS.readString().intern()); + break; + default: + skipUnknownField(t); + break; + } + } + } + + public void initCategories(PoiRegion region) throws IOException { + if(region.categories.isEmpty()) { + codedIS.seek(region.filePointer); + int oldLimit = codedIS.pushLimit(region.length); + readPoiIndex(region, true); + codedIS.popLimit(oldLimit); + } + } + + protected void searchPoiByName( PoiRegion region, SearchRequest req) throws IOException { + TIntLongHashMap offsets = new TIntLongHashMap(); + CollatorStringMatcher matcher = new CollatorStringMatcher(req.nameQuery, + StringMatcherMode.CHECK_STARTS_FROM_SPACE); + long time = System.currentTimeMillis(); + int indexOffset = codedIS.getTotalBytesRead(); + while(true){ + if(req.isCancelled()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndPoiIndex.NAMEINDEX_FIELD_NUMBER : + int length = readInt(); + int oldLimit = codedIS.pushLimit(length); + // here offsets are sorted by distance + offsets = readPoiNameIndex(matcher.getCollator(), req.nameQuery, req); + codedIS.popLimit(oldLimit); + break; + case OsmandOdb.OsmAndPoiIndex.POIDATA_FIELD_NUMBER : + // also offsets can be randomly skipped by limit + Integer[] offKeys = new Integer[offsets.size()]; + if (offsets.size() > 0) { + int[] keys = offsets.keys(); + for (int i = 0; i < keys.length; i++) { + offKeys[i] = keys[i]; + } + final TIntLongHashMap foffsets = offsets; + Arrays.sort(offKeys, new Comparator() { + @Override + public int compare(Integer object1, Integer object2) { + return Double.compare(foffsets.get(object1), foffsets.get(object2)); + } + }); + int p = BUCKET_SEARCH_BY_NAME * 3 ; + if (p < offKeys.length) { + for (int i = p + BUCKET_SEARCH_BY_NAME;; i += BUCKET_SEARCH_BY_NAME) { + if (i > offKeys.length) { + Arrays.sort(offKeys, p, offKeys.length); + break; + } else { + Arrays.sort(offKeys, p, i); + } + p = i; + } + } + } + + + LOG.info("Searched poi structure in "+(System.currentTimeMillis() - time) + + "ms. Found " + offKeys.length +" subtress"); + for (int j = 0; j < offKeys.length; j++) { + codedIS.seek(offKeys[j] + indexOffset); + int len = readInt(); + int oldLim = codedIS.pushLimit(len); + readPoiData(matcher, req, region); + codedIS.popLimit(oldLim); + if(req.isCancelled() || req.limitExceeded()){ + return; + } + } + LOG.info("Whole poi by name search is done in "+(System.currentTimeMillis() - time) + + "ms. Found " + req.getSearchResults().size()); + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return; + default: + skipUnknownField(t); + break; + } + } + } + + private TIntLongHashMap readPoiNameIndex(Collator instance, String query, SearchRequest req) throws IOException { + TIntLongHashMap offsets = new TIntLongHashMap(); + TIntArrayList dataOffsets = null; + int offset = 0; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return offsets; + case OsmandOdb.OsmAndPoiNameIndex.TABLE_FIELD_NUMBER : { + int length = readInt(); + int oldLimit = codedIS.pushLimit(length); + dataOffsets = new TIntArrayList(); + offset = codedIS.getTotalBytesRead(); + map.readIndexedStringTable(instance, query, "", dataOffsets, 0); + codedIS.popLimit(oldLimit); + break; } + case OsmandOdb.OsmAndPoiNameIndex.DATA_FIELD_NUMBER : { + if(dataOffsets != null){ + dataOffsets.sort(); // 1104125 + for (int i = 0; i < dataOffsets.size(); i++) { + codedIS.seek(dataOffsets.get(i) + offset); + int len = codedIS.readRawVarint32(); + int oldLim = codedIS.pushLimit(len); + readPoiNameIndexData(offsets, req); + codedIS.popLimit(oldLim); + if (req.isCancelled()) { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return offsets; + } + } + } + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return offsets; } + default: + skipUnknownField(t); + break; + } + } + + } + + private void readPoiNameIndexData(TIntLongHashMap offsets, SearchRequest req) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmAndPoiNameIndexData.ATOMS_FIELD_NUMBER : + int len = codedIS.readRawVarint32(); + int oldLim = codedIS.pushLimit(len); + readPoiNameIndexDataAtom(offsets, req); + codedIS.popLimit(oldLim); + break; + default: + skipUnknownField(t); + break; + } + } + + } + + private void readPoiNameIndexDataAtom(TIntLongHashMap offsets, SearchRequest req) throws IOException { + int x = 0; + int y = 0; + int zoom = 15; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndPoiNameIndexDataAtom.X_FIELD_NUMBER : + x = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiNameIndexDataAtom.Y_FIELD_NUMBER : + y = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiNameIndexDataAtom.ZOOM_FIELD_NUMBER : + zoom = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiNameIndexDataAtom.SHIFTTO_FIELD_NUMBER : + int x31 = (x << (31 - zoom)); + int y31 = (y << (31 - zoom)); + int shift = readInt(); + if (req.contains(x31, y31, x31, y31)) { + long d = Math.abs(req.x - x31) + Math.abs(req.y - y31); + offsets.put(shift, d); + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + + protected void searchPoiIndex(int left31, int right31, int top31, int bottom31, + SearchRequest req, PoiRegion region) throws IOException { + int indexOffset = codedIS.getTotalBytesRead(); + long time = System.currentTimeMillis(); + TLongHashSet skipTiles = null; + int zoomToSkip = 31; + if(req.zoom != -1){ + skipTiles = new TLongHashSet(); + zoomToSkip = req.zoom + ZOOM_TO_SKIP_FILTER; + } + int length ; + int oldLimit ; + TIntLongHashMap offsetsMap = new TIntLongHashMap(); + while(true){ + if(req.isCancelled()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndPoiIndex.BOXES_FIELD_NUMBER : + length = readInt(); + oldLimit = codedIS.pushLimit(length); + readBoxField(left31, right31, top31, bottom31, 0, 0, 0, offsetsMap, skipTiles, req, region); + codedIS.popLimit(oldLimit); + break; + case OsmandOdb.OsmAndPoiIndex.POIDATA_FIELD_NUMBER : + int[] offsets = offsetsMap.keys(); + // also offsets can be randomly skipped by limit + Arrays.sort(offsets); + if(skipTiles != null){ + skipTiles.clear(); + } + LOG.info("Searched poi structure in "+(System.currentTimeMillis() - time) + + "ms. Found " + offsets.length +" subtress"); + for (int j = 0; j < offsets.length; j++) { + codedIS.seek(offsets[j] + indexOffset); + int len = readInt(); + int oldLim = codedIS.pushLimit(len); + readPoiData(left31, right31, top31, bottom31, req, region, skipTiles, zoomToSkip); + codedIS.popLimit(oldLim); + if(req.isCancelled()){ + return; + } + } + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return; + default: + skipUnknownField(t); + break; + } + } + } + + private void readPoiData(CollatorStringMatcher matcher, SearchRequest req, PoiRegion region) throws IOException { + int x = 0; + int y = 0; + int zoom = 0; + while(true){ + if(req.isCancelled() || req.limitExceeded()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndPoiBoxData.X_FIELD_NUMBER : + x = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiBoxData.ZOOM_FIELD_NUMBER : + zoom = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiBoxData.Y_FIELD_NUMBER : + y = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiBoxData.POIDATA_FIELD_NUMBER: + int len = codedIS.readRawVarint32(); + int oldLim = codedIS.pushLimit(len); + Amenity am = readPoiPoint(0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, x, y, zoom, req, region, false); + codedIS.popLimit(oldLim); + if (am != null) { + if(matcher.matches(am.getName(false)) || matcher.matches(am.getName(true))) { + req.publish(am); + } + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + private void readPoiData(int left31, int right31, int top31, int bottom31, + SearchRequest req, PoiRegion region, TLongHashSet toSkip, int zSkip) throws IOException { + int x = 0; + int y = 0; + int zoom = 0; + while(true){ + if(req.isCancelled()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndPoiBoxData.X_FIELD_NUMBER : + x = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiBoxData.ZOOM_FIELD_NUMBER : + zoom = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiBoxData.Y_FIELD_NUMBER : + y = codedIS.readUInt32(); + break; + case OsmandOdb.OsmAndPoiBoxData.POIDATA_FIELD_NUMBER: + int len = codedIS.readRawVarint32(); + int oldLim = codedIS.pushLimit(len); + Amenity am = readPoiPoint(left31, right31, top31, bottom31, x, y, zoom, req, region, true); + codedIS.popLimit(oldLim); + if (am != null) { + if (toSkip != null) { + int xp = (int) MapUtils.getTileNumberX(zSkip, am.getLocation().getLongitude()); + int yp = (int) MapUtils.getTileNumberY(zSkip, am.getLocation().getLatitude()); + long val = (((long) xp) << zSkip) | yp; + if (!toSkip.contains(val)) { + boolean publish = req.publish(am); + if(publish) { + toSkip.add(val); + } + } + if(zSkip <= zoom){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return; + } + } else { + req.publish(am); + } + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + private Amenity readPoiPoint(int left31, int right31, int top31, int bottom31, + int px, int py, int zoom, SearchRequest req, PoiRegion region, boolean checkBounds) throws IOException { + Amenity am = null; + int x = 0; + int y = 0; + AmenityType amenityType = null; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + if(amenityType == null && (tag > OsmandOdb.OsmAndPoiBoxDataAtom.CATEGORIES_FIELD_NUMBER || tag == 0)) { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + switch (tag) { + case 0: + if(Algorithms.isEmpty(am.getEnName())){ + am.setEnName(Junidecode.unidecode(am.getName())); + } + req.numberOfAcceptedObjects++; + return am; + case OsmandOdb.OsmAndPoiBoxDataAtom.DX_FIELD_NUMBER : + x = (codedIS.readSInt32() + (px << (24 - zoom))) << 7; + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.DY_FIELD_NUMBER : + y = (codedIS.readSInt32() + (py << (24 - zoom))) << 7; + req.numberOfVisitedObjects++; + if (checkBounds) { + if (left31 > x || right31 < x || top31 > y || bottom31 < y) { + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + } + am = new Amenity(); + am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x)); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.CATEGORIES_FIELD_NUMBER : + int cat = codedIS.readUInt32(); + int subcatId = cat >> SHIFT_BITS_CATEGORY; + int catId = cat & CATEGORY_MASK; + AmenityType type = AmenityType.OTHER; + String subtype = ""; + if (catId < region.categoriesType.size()) { + type = region.categoriesType.get(catId); + List subcats = region.subcategories.get(catId); + if (subcatId < subcats.size()) { + subtype = subcats.get(subcatId); + } + } + if (req.poiTypeFilter == null || req.poiTypeFilter.accept(type, subtype)) { + if (amenityType == null) { + amenityType = type; + am.setSubType(subtype); + am.setType(amenityType); + } else { + am.setSubType(am.getSubType() + ";" + subtype); + } + } + + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.ID_FIELD_NUMBER : + am.setId(codedIS.readUInt64()); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.NAME_FIELD_NUMBER : + am.setName(codedIS.readString()); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.NAMEEN_FIELD_NUMBER : + am.setEnName(codedIS.readString()); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.OPENINGHOURS_FIELD_NUMBER : + am.setOpeningHours(codedIS.readString()); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.SITE_FIELD_NUMBER : + am.setSite(codedIS.readString()); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.PHONE_FIELD_NUMBER: + am.setPhone(codedIS.readString()); + break; + case OsmandOdb.OsmAndPoiBoxDataAtom.NOTE_FIELD_NUMBER: + am.setDescription(codedIS.readString()); + break; + default: + skipUnknownField(t); + break; + } + } + } + + private boolean checkCategories(SearchRequest req, PoiRegion region) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return false; + case OsmandOdb.OsmAndPoiCategories.CATEGORIES_FIELD_NUMBER: + AmenityType type = AmenityType.OTHER; + String subcat = ""; + int cat = codedIS.readUInt32(); + int subcatId = cat >> SHIFT_BITS_CATEGORY; + int catId = cat & CATEGORY_MASK; + if(catId < region.categoriesType.size()){ + type = region.categoriesType.get(catId); + List subcats = region.subcategories.get(catId); + if(subcatId < subcats.size()){ + subcat = subcats.get(subcatId); + } + } else { + type = AmenityType.OTHER; + } + if(req.poiTypeFilter.accept(type, subcat)){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return true; + } + + break; + default: + skipUnknownField(t); + break; + } + } + } + + private boolean readBoxField(int left31, int right31, int top31, int bottom31, + int px, int py, int pzoom, TIntLongHashMap offsetsMap, TLongHashSet skipTiles, SearchRequest req, PoiRegion region) throws IOException { + req.numberOfReadSubtrees++; + int zoomToSkip = req.zoom + ZOOM_TO_SKIP_FILTER; + boolean checkBox = true; + boolean existsCategories = false; + int zoom = pzoom; + int dy = py; + int dx = px; + while(true){ + if(req.isCancelled()){ + return false; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return existsCategories; + case OsmandOdb.OsmAndPoiBox.ZOOM_FIELD_NUMBER : + zoom = codedIS.readUInt32() + pzoom; + break; + case OsmandOdb.OsmAndPoiBox.LEFT_FIELD_NUMBER : + dx = codedIS.readSInt32(); + break; + case OsmandOdb.OsmAndPoiBox.TOP_FIELD_NUMBER: + dy = codedIS.readSInt32(); + break; + case OsmandOdb.OsmAndPoiBox.CATEGORIES_FIELD_NUMBER: + if(req.poiTypeFilter == null){ + skipUnknownField(t); + } else { + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + boolean check = checkCategories(req, region); + codedIS.popLimit(oldLimit); + if(!check){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return false; + } + existsCategories = true; + } + break; + + case OsmandOdb.OsmAndPoiBox.SUBBOXES_FIELD_NUMBER: { + int x = dx + (px << (zoom - pzoom)); + int y = dy + (py << (zoom - pzoom)); + if(checkBox){ + int xL = x << (31 - zoom); + int xR = ((x + 1) << (31 - zoom)) - 1; + int yT = y << (31 - zoom); + int yB = ((y + 1) << (31 - zoom)) - 1; + // check intersection + if(left31 > xR || xL > right31 || bottom31 < yT || yB < top31){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return false; + } + req.numberOfAcceptedSubtrees++; + checkBox = false; + } + + int length = readInt(); + int oldLimit = codedIS.pushLimit(length); + boolean exists = readBoxField(left31, right31, top31, bottom31, x, y, zoom, offsetsMap, skipTiles, req, region); + codedIS.popLimit(oldLimit); + + if (skipTiles != null && zoom >= zoomToSkip && exists) { + long val = ((((long) x) >> (zoom - zoomToSkip)) << zoomToSkip) | (((long) y) >> (zoom - zoomToSkip)); + if(skipTiles.contains(val)){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return true; + } + } + } break; + case OsmandOdb.OsmAndPoiBox.SHIFTTODATA_FIELD_NUMBER: { + int x = dx + (px << (zoom - pzoom)); + int y = dy + (py << (zoom - pzoom)); + long l = ((((x << zoom) | y) << 5) | zoom); + offsetsMap.put(readInt(), l); + if(skipTiles != null && zoom >= zoomToSkip){ + long val = ((((long) x) >> (zoom - zoomToSkip)) << zoomToSkip) | (((long) y) >> (zoom - zoomToSkip)); + skipTiles.add(val); + } + } break; + default: + skipUnknownField(t); + break; + } + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryMapRouteReaderAdapter.java b/OsmAnd-java/src/net/osmand/binary/BinaryMapRouteReaderAdapter.java new file mode 100644 index 0000000000..54edf12173 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryMapRouteReaderAdapter.java @@ -0,0 +1,927 @@ +package net.osmand.binary; + +import gnu.trove.iterator.TLongObjectIterator; +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.list.array.TLongArrayList; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.map.hash.TLongObjectHashMap; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.osmand.PlatformUtil; +import net.osmand.ResultMatcher; +import net.osmand.binary.BinaryMapIndexReader.SearchRequest; +import net.osmand.binary.OsmandOdb.IdTable; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox; +import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule; +import net.osmand.binary.OsmandOdb.RestrictionData; +import net.osmand.binary.OsmandOdb.RouteData; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.WireFormat; + +public class BinaryMapRouteReaderAdapter { + protected static final Log LOG = PlatformUtil.getLog(BinaryMapRouteReaderAdapter.class); + private static final int SHIFT_COORDINATES = 4; + + public static class RouteTypeRule { + private final static int ACCESS = 1; + private final static int ONEWAY = 2; + private final static int HIGHWAY_TYPE = 3; + private final static int MAXSPEED = 4; + private final static int ROUNDABOUT = 5; + public final static int TRAFFIC_SIGNALS = 6; + public final static int RAILWAY_CROSSING = 7; + private final static int LANES = 8; + private final String t; + private final String v; + private int intValue; + private float floatValue; + private int type; + + public RouteTypeRule(String t, String v) { + this.t = t.intern(); + if("true".equals(v)) { + v = "yes"; + } + if("false".equals(v)) { + v = "no"; + } + this.v = v == null? null : v.intern(); + analyze(); + } + + public String getTag() { + return t; + } + + public String getValue(){ + return v; + } + + public boolean roundabout(){ + return type == ROUNDABOUT; + } + + public int getType() { + return type; + } + + public int onewayDirection(){ + if(type == ONEWAY){ + return intValue; + } + return 0; + } + + public float maxSpeed(){ + if(type == MAXSPEED){ + return floatValue; + } + return -1; + } + + public int lanes(){ + if(type == LANES){ + return intValue; + } + return -1; + } + + public String highwayRoad(){ + if(type == HIGHWAY_TYPE){ + return v; + } + return null; + } + + private void analyze() { + if(t.equalsIgnoreCase("oneway")){ + type = ONEWAY; + if("-1".equals(v) || "reverse".equals(v)) { + intValue = -1; + } else if("1".equals(v) || "yes".equals(v)) { + intValue = 1; + } else { + intValue = 0; + } + } else if(t.equalsIgnoreCase("highway") && "traffic_signals".equals(v)){ + type = TRAFFIC_SIGNALS; + } else if(t.equalsIgnoreCase("railway") && ("crossing".equals(v) || "level_crossing".equals(v))){ + type = RAILWAY_CROSSING; + } else if(t.equalsIgnoreCase("roundabout") && v != null){ + type = ROUNDABOUT; + } else if(t.equalsIgnoreCase("junction") && "roundabout".equalsIgnoreCase(v)){ + type = ROUNDABOUT; + } else if(t.equalsIgnoreCase("highway") && v != null){ + type = HIGHWAY_TYPE; + } else if(t.startsWith("access") && v != null){ + type = ACCESS; + } else if(t.equalsIgnoreCase("maxspeed") && v != null){ + type = MAXSPEED; + floatValue = -1; + if(v.equals("none")) { + floatValue = RouteDataObject.NONE_MAX_SPEED; + } else { + int i = 0; + while (i < v.length() && Character.isDigit(v.charAt(i))) { + i++; + } + if (i > 0) { + floatValue = Integer.parseInt(v.substring(0, i)); + floatValue /= 3.6; // km/h -> m/s + if (v.contains("mph")) { + floatValue *= 1.6; + } + } + } + } else if (t.equalsIgnoreCase("lanes") && v != null) { + intValue = -1; + int i = 0; + type = LANES; + while (i < v.length() && Character.isDigit(v.charAt(i))) { + i++; + } + if (i > 0) { + intValue = Integer.parseInt(v.substring(0, i)); + } + } + + } + } + + public static class RouteRegion extends BinaryIndexPart { + public int regionsRead; + public int borderBoxPointer = 0; + public int baseBorderBoxPointer = 0; + public int borderBoxLength = 0; + public int baseBorderBoxLength = 0; + + List subregions = new ArrayList(); + List basesubregions = new ArrayList(); + List routeEncodingRules = new ArrayList(); + + int nameTypeRule = -1; + int refTypeRule = -1; + int destinationTypeRule = -1; + + public RouteTypeRule quickGetEncodingRule(int id) { + return routeEncodingRules.get(id); + } + + private void initRouteEncodingRule(int id, String tags, String val) { + while(routeEncodingRules.size() <= id) { + routeEncodingRules.add(null); + } + routeEncodingRules.set(id, new RouteTypeRule(tags, val)); + if(tags.equals("name")) { + nameTypeRule = id; + } else if(tags.equals("ref")) { + refTypeRule = id; + } else if(tags.equals("destination")) { + destinationTypeRule = id; + } + } + + public List getSubregions(){ + return subregions; + } + + public List getBaseSubregions(){ + return basesubregions; + } + + public double getLeftLongitude() { + double l = 180; + for(RouteSubregion s : subregions) { + l = Math.min(l, MapUtils.get31LongitudeX(s.left)); + } + return l; + } + + public double getRightLongitude() { + double l = -180; + for(RouteSubregion s : subregions) { + l = Math.max(l, MapUtils.get31LongitudeX(s.right)); + } + return l; + } + + public double getBottomLatitude() { + double l = 90; + for(RouteSubregion s : subregions) { + l = Math.min(l, MapUtils.get31LatitudeY(s.bottom)); + } + return l; + } + + public double getTopLatitude() { + double l = -90; + for(RouteSubregion s : subregions) { + l = Math.max(l, MapUtils.get31LatitudeY(s.top)); + } + return l; + } + } + + // Used in C++ + public static class RouteSubregion { + private final static int INT_SIZE = 4; + public final RouteRegion routeReg; + public RouteSubregion(RouteSubregion copy) { + this.routeReg = copy.routeReg; + this.left = copy.left; + this.right = copy.right; + this.top = copy.top; + this.bottom = copy.bottom; + this.filePointer = copy.filePointer; + this.length = copy.length; + + } + public RouteSubregion(RouteRegion routeReg) { + this.routeReg = routeReg; + } + public int length; + public int filePointer; + public int left; + public int right; + public int top; + public int bottom; + public int shiftToData; + public List subregions = null; + public List dataObjects = null; + + public int getEstimatedSize(){ + int shallow = 7 * INT_SIZE + 4*3; + if (subregions != null) { + shallow += 8; + for (RouteSubregion s : subregions) { + shallow += s.getEstimatedSize(); + } + } + return shallow; + } + + public int countSubregions(){ + int cnt = 1; + if (subregions != null) { + for (RouteSubregion s : subregions) { + cnt += s.countSubregions(); + } + } + return cnt; + } + } + + private CodedInputStream codedIS; + private final BinaryMapIndexReader map; + + protected BinaryMapRouteReaderAdapter(BinaryMapIndexReader map){ + this.codedIS = map.codedIS; + this.map = map; + } + + private void skipUnknownField(int t) throws IOException { + map.skipUnknownField(t); + } + + private int readInt() throws IOException { + return map.readInt(); + } + + + protected void readRouteIndex(RouteRegion region) throws IOException { + int routeEncodingRule =1; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndRoutingIndex.NAME_FIELD_NUMBER : + region.name = codedIS.readString(); + break; + case OsmandOdb.OsmAndRoutingIndex.RULES_FIELD_NUMBER: { + int len = codedIS.readInt32(); + int oldLimit = codedIS.pushLimit(len); + readRouteEncodingRule(region, routeEncodingRule++); + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + codedIS.popLimit(oldLimit); + } break; + case OsmandOdb.OsmAndRoutingIndex.ROOTBOXES_FIELD_NUMBER : + case OsmandOdb.OsmAndRoutingIndex.BASEMAPBOXES_FIELD_NUMBER :{ + RouteSubregion subregion = new RouteSubregion(region); + subregion.length = readInt(); + subregion.filePointer = codedIS.getTotalBytesRead(); + int oldLimit = codedIS.pushLimit(subregion.length); + readRouteTree(subregion, null, 0, true); + if(tag == OsmandOdb.OsmAndRoutingIndex.ROOTBOXES_FIELD_NUMBER) { + region.subregions.add(subregion); + } else { + region.basesubregions.add(subregion); + } + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + codedIS.popLimit(oldLimit); + break; + } + case OsmandOdb.OsmAndRoutingIndex.BASEBORDERBOX_FIELD_NUMBER: + case OsmandOdb.OsmAndRoutingIndex.BORDERBOX_FIELD_NUMBER: { + int length = readInt(); + int filePointer = codedIS.getTotalBytesRead(); + if(tag == OsmandOdb.OsmAndRoutingIndex.BORDERBOX_FIELD_NUMBER) { + region.borderBoxLength = length; + region.borderBoxPointer = filePointer; + } else { + region.baseBorderBoxLength = length; + region.baseBorderBoxPointer = filePointer; + } + codedIS.skipRawBytes(length); + break; + } + case OsmandOdb.OsmAndRoutingIndex.BLOCKS_FIELD_NUMBER : { + // Finish reading file! + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + break; + } + + + default: + skipUnknownField(t); + break; + } + } + } + + 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 globalpointTypes = new ArrayList(); + 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 0) { + types.add(codedIS.readRawVarint32()); + } + codedIS.popLimit(oldLimit); + break; + case RouteData.STRINGNAMES_FIELD_NUMBER: + o.names = new TIntObjectHashMap(); + 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; + } + } + } + private void readRouteTreeData(RouteSubregion routeTree, TLongArrayList idTables, + TLongObjectHashMap restrictions) throws IOException { + routeTree.dataObjects = new ArrayList(); + idTables.clear(); + restrictions.clear(); + List stringTable = null; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + TLongObjectIterator it = restrictions.iterator(); + while (it.hasNext()) { + it.advance(); + int from = (int) it.key(); + RouteDataObject fromr = routeTree.dataObjects.get(from); + fromr.restrictions = new long[it.value().size()]; + for (int k = 0; k < fromr.restrictions.length; k++) { + int to = (int) (it.value().get(k) >> RouteDataObject.RESTRICTION_SHIFT); + long valto = (idTables.get(to) << RouteDataObject.RESTRICTION_SHIFT) | ((long) it.value().get(k) & RouteDataObject.RESTRICTION_MASK); + fromr.restrictions[k] = valto; + } + } + for (RouteDataObject o : routeTree.dataObjects) { + if (o != null) { + if (o.id < idTables.size()) { + o.id = idTables.get((int) o.id); + } + if (o.names != null && stringTable != null) { + int[] keys = o.names.keys(); + for (int j = 0; j < keys.length; j++) { + o.names.put(keys[j], stringTable.get(o.names.get(keys[j]).charAt(0))); + } + } + } + } + return; + case RouteDataBlock.DATAOBJECTS_FIELD_NUMBER : + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + RouteDataObject obj = readRouteDataObject(routeTree.routeReg, routeTree.left, routeTree.top); + while(obj.id >= routeTree.dataObjects.size()) { + routeTree.dataObjects.add(null); + } + routeTree.dataObjects.set((int) obj.id,obj); + codedIS.popLimit(oldLimit); + break; + case RouteDataBlock.IDTABLE_FIELD_NUMBER : + long routeId = 0; + length = codedIS.readRawVarint32(); + oldLimit = codedIS.pushLimit(length); + idLoop : while(true){ + int ts = codedIS.readTag(); + int tags = WireFormat.getTagFieldNumber(ts); + switch (tags) { + case 0: + break idLoop; + case IdTable.ROUTEID_FIELD_NUMBER : + routeId += codedIS.readSInt64(); + idTables.add(routeId); + break; + default: + skipUnknownField(ts); + break; + } + } + codedIS.popLimit(oldLimit); + break; + case RouteDataBlock.RESTRICTIONS_FIELD_NUMBER : + length = codedIS.readRawVarint32(); + oldLimit = codedIS.pushLimit(length); + long from = 0; + long to = 0; + long type = 0; + idLoop : while(true){ + int ts = codedIS.readTag(); + int tags = WireFormat.getTagFieldNumber(ts); + switch (tags) { + case 0: + break idLoop; + case RestrictionData.FROM_FIELD_NUMBER : + from = codedIS.readInt32(); + break; + case RestrictionData.TO_FIELD_NUMBER : + to = codedIS.readInt32(); + break; + case RestrictionData.TYPE_FIELD_NUMBER : + type = codedIS.readInt32(); + break; + default: + skipUnknownField(ts); + break; + } + } + if(!restrictions.containsKey(from)) { + restrictions.put(from, new TLongArrayList()); + } + restrictions.get(from).add((to << RouteDataObject.RESTRICTION_SHIFT) + type); + codedIS.popLimit(oldLimit); + break; + case RouteDataBlock.STRINGTABLE_FIELD_NUMBER : + length = codedIS.readRawVarint32(); + oldLimit = codedIS.pushLimit(length); + stringTable = map.readStringTable(); +// codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + codedIS.popLimit(oldLimit); + break; + default: + skipUnknownField(t); + break; + } + } + } + + + + private void readRouteEncodingRule(RouteRegion index, int id) throws IOException { + String tags = null; + String val = null; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + index.initRouteEncodingRule(id, tags, val); + return; + case RouteEncodingRule.VALUE_FIELD_NUMBER : + val = codedIS.readString().intern(); + break; + case RouteEncodingRule.TAG_FIELD_NUMBER : + tags = codedIS.readString().intern(); + break; + case RouteEncodingRule.ID_FIELD_NUMBER : + id = codedIS.readUInt32(); + break; + default: + skipUnknownField(t); + break; + } + } + } + + private RouteSubregion readRouteTree(RouteSubregion thisTree, RouteSubregion parentTree, int depth, + boolean readCoordinates) throws IOException { + boolean readChildren = depth != 0; + if(readChildren) { + thisTree.subregions = new ArrayList(); + } + thisTree.routeReg.regionsRead++; + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return thisTree; + case RouteDataBox.LEFT_FIELD_NUMBER : + int i = codedIS.readSInt32(); + if (readCoordinates) { + thisTree.left = i + (parentTree != null ? parentTree.left : 0); + } + break; + case RouteDataBox.RIGHT_FIELD_NUMBER : + i = codedIS.readSInt32(); + if (readCoordinates) { + thisTree.right = i + (parentTree != null ? parentTree.right : 0); + } + break; + case RouteDataBox.TOP_FIELD_NUMBER : + i = codedIS.readSInt32(); + if (readCoordinates) { + thisTree.top = i + (parentTree != null ? parentTree.top : 0); + } + break; + case RouteDataBox.BOTTOM_FIELD_NUMBER : + i = codedIS.readSInt32(); + if (readCoordinates) { + thisTree.bottom = i + (parentTree != null ? parentTree.bottom : 0); + } + break; + case RouteDataBox.SHIFTTODATA_FIELD_NUMBER : + thisTree.shiftToData = readInt(); + if(!readChildren) { + // usually 0 + thisTree.subregions = new ArrayList(); + readChildren = true; + } + break; + case RouteDataBox.BOXES_FIELD_NUMBER : + if(readChildren){ + RouteSubregion subregion = new RouteSubregion(thisTree.routeReg); + subregion.length = readInt(); + subregion.filePointer = codedIS.getTotalBytesRead(); + int oldLimit = codedIS.pushLimit(subregion.length); + readRouteTree(subregion, thisTree, depth - 1, true); + thisTree.subregions.add(subregion); + codedIS.popLimit(oldLimit); + codedIS.seek(subregion.filePointer + subregion.length); + } else { + codedIS.seek(thisTree.filePointer + thisTree.length); + // skipUnknownField(t); + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + public void initRouteTypesIfNeeded(SearchRequest req, List list) throws IOException { + for (RouteSubregion rs : list) { + if (req.intersects(rs.left, rs.top, rs.right, rs.bottom)) { + initRouteRegion(rs.routeReg); + } + } + } + + public void initRouteRegion(RouteRegion routeReg) throws IOException, InvalidProtocolBufferException { + if (routeReg.routeEncodingRules.isEmpty()) { + codedIS.seek(routeReg.filePointer); + int oldLimit = codedIS.pushLimit(routeReg.length); + readRouteIndex(routeReg); + codedIS.popLimit(oldLimit); + } + } + + + public List loadRouteRegionData(RouteSubregion rs) throws IOException { + TLongArrayList idMap = new TLongArrayList(); + TLongObjectHashMap restrictionMap = new TLongObjectHashMap(); + if (rs.dataObjects == null) { + codedIS.seek(rs.filePointer + rs.shiftToData); + int limit = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(limit); + readRouteTreeData(rs, idMap, restrictionMap); + codedIS.popLimit(oldLimit); + } + List res = rs.dataObjects; + rs.dataObjects = null; + return res; + } + + public void loadRouteRegionData(List toLoad, ResultMatcher matcher) throws IOException { + Collections.sort(toLoad, new Comparator() { + @Override + public int compare(RouteSubregion o1, RouteSubregion o2) { + int p1 = o1.filePointer + o1.shiftToData; + int p2 = o2.filePointer + o2.shiftToData; + return p1 == p2 ? 0 : (p1 < p2 ? -1 : 1); + } + }); + TLongArrayList idMap = new TLongArrayList(); + TLongObjectHashMap restrictionMap = new TLongObjectHashMap(); + for (RouteSubregion rs : toLoad) { + if (rs.dataObjects == null) { + codedIS.seek(rs.filePointer + rs.shiftToData); + int limit = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(limit); + readRouteTreeData(rs, idMap, restrictionMap); + codedIS.popLimit(oldLimit); + } + for (RouteDataObject ro : rs.dataObjects) { + if (ro != null) { + matcher.publish(ro); + } + } + // free objects + rs.dataObjects = null; + } + } + + public List searchRouteRegionTree(SearchRequest req, List list, + List 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; + } + + public List searchBorderPoints(SearchRequest req, RouteRegion r) throws IOException { + if(r.borderBoxPointer != 0) { + codedIS.seek(r.borderBoxPointer); + int old = codedIS.pushLimit(r.borderBoxLength); + TIntArrayList blocksToRead = new TIntArrayList(); + readBorderLines(req, blocksToRead); + + blocksToRead.sort(); + for(int j = 0; j< blocksToRead.size() ; j++) { + codedIS.seek(blocksToRead.get(j)); + int len = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(len); + readBorderLinePoints(req, r); + codedIS.popLimit(oldLimit); + } + codedIS.popLimit(old); + + } + return req.getSearchResults(); + } + + + private void readBorderLinePoints(SearchRequest req, RouteRegion r) throws IOException { + int x = 0; + int y = 0; + long id = 0; + while (true) { + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case RouteBorderPointsBlock.X_FIELD_NUMBER: { + x = codedIS.readInt32(); + break; + } + case RouteBorderPointsBlock.Y_FIELD_NUMBER: { + y = codedIS.readInt32(); + break; + } + case RouteBorderPointsBlock.BASEID_FIELD_NUMBER: { + id = codedIS.readInt64(); + break; + } + case RouteBorderPointsBlock.POINTS_FIELD_NUMBER: + int len = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(len); + RouteDataBorderLinePoint p = readBorderLinePoint(new RouteDataBorderLinePoint(r), x, y, id); + codedIS.popLimit(oldLimit); + x = p.x; + y = p.y; + id = p.id; + req.publish(p); + break; + default: + skipUnknownField(t); + break; + } + } + + } + + private RouteDataBorderLinePoint readBorderLinePoint(RouteDataBorderLinePoint p, int x, int y, long id) throws IOException { + while (true) { + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return p; + case RouteBorderPoint.DX_FIELD_NUMBER: + p.x = x + codedIS.readInt32(); + break; + case RouteBorderPoint.DY_FIELD_NUMBER: + p.y = y + codedIS.readInt32(); + break; + case RouteBorderPoint.ROADID_FIELD_NUMBER: + p.id = id + codedIS.readSInt64(); + break; + case RouteBorderPoint.DIRECTION_FIELD_NUMBER: + p.direction = codedIS.readBool(); + break; + case RouteBorderPoint.TYPES_FIELD_NUMBER: + TIntArrayList types = new TIntArrayList(); + int len = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(len); + while(codedIS.getBytesUntilLimit() > 0) { + types.add(codedIS.readRawVarint32()); + } + codedIS.popLimit(oldLimit); + p.types = types.toArray(); + break; + default: + skipUnknownField(t); + break; + } + } + } + + private void readBorderLines(SearchRequest 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; + } + } + + } + + private RouteBorderLine readBorderLine() throws IOException { + Builder bld = RouteBorderLine.newBuilder(); + while (true) { + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return bld.build(); + case RouteBorderLine.X_FIELD_NUMBER: + bld.setX(codedIS.readInt32()); + break; + case RouteBorderLine.Y_FIELD_NUMBER: + bld.setY(codedIS.readInt32()); + break; + case RouteBorderLine.TOX_FIELD_NUMBER: + bld.setTox(codedIS.readInt32()); + break; + case RouteBorderLine.TOY_FIELD_NUMBER: + bld.setToy(codedIS.readInt32()); + break; + case RouteBorderLine.SHIFTTOPOINTSBLOCK_FIELD_NUMBER: + bld.setShiftToPointsBlock(readInt()); + break; + default: + skipUnknownField(t); + break; + } + } + } + + public List loadInteresectedPoints(SearchRequest req, List list, + List 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; + } + +} diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryMapTransportReaderAdapter.java b/OsmAnd-java/src/net/osmand/binary/BinaryMapTransportReaderAdapter.java new file mode 100644 index 0000000000..13adc6242c --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/BinaryMapTransportReaderAdapter.java @@ -0,0 +1,480 @@ +package net.osmand.binary; + +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.map.hash.TIntObjectHashMap; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import net.osmand.binary.BinaryMapIndexReader.SearchRequest; +import net.osmand.data.TransportStop; +import net.osmand.util.MapUtils; +import net.sf.junidecode.Junidecode; + +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.WireFormat; + +public class BinaryMapTransportReaderAdapter { + private CodedInputStream codedIS; + private final BinaryMapIndexReader map; + + protected BinaryMapTransportReaderAdapter(BinaryMapIndexReader map){ + this.codedIS = map.codedIS; + this.map = map; + } + + private void skipUnknownField(int t) throws IOException { + map.skipUnknownField(t); + } + + private int readInt() throws IOException { + return map.readInt(); + } + + public static class TransportIndex extends BinaryIndexPart { + + int left = 0; + int right = 0; + int top = 0; + int bottom = 0; + + int stopsFileOffset = 0; + int stopsFileLength = 0; + + public int getLeft() { + return left; + } + + public int getRight() { + return right; + } + + public int getTop() { + return top; + } + + public int getBottom() { + return bottom; + } + + IndexStringTable stringTable = null; + } + + protected static class IndexStringTable { + int fileOffset = 0; + int length = 0; + + // offset from start for each SIZE_OFFSET_ARRAY elements + // (SIZE_OFFSET_ARRAY + 1) offset = offsets[0] + skipOneString() + TIntArrayList offsets = new TIntArrayList(); + + } + + + protected void readTransportIndex(TransportIndex ind) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.OsmAndTransportIndex.ROUTES_FIELD_NUMBER : + skipUnknownField(t); + break; + case OsmandOdb.OsmAndTransportIndex.NAME_FIELD_NUMBER : + ind.setName(codedIS.readString()); + break; + case OsmandOdb.OsmAndTransportIndex.STOPS_FIELD_NUMBER : + ind.stopsFileLength = readInt(); + ind.stopsFileOffset = codedIS.getTotalBytesRead(); + int old = codedIS.pushLimit(ind.stopsFileLength); + readTransportBounds(ind); + codedIS.popLimit(old); + break; + case OsmandOdb.OsmAndTransportIndex.STRINGTABLE_FIELD_NUMBER : + IndexStringTable st = new IndexStringTable(); + st.length = codedIS.readRawVarint32(); + st.fileOffset = codedIS.getTotalBytesRead(); + // Do not cache for now save memory + // readStringTable(st, 0, 20, true); + ind.stringTable = st; + codedIS.seek(st.length + st.fileOffset); + break; + default: + skipUnknownField(t); + break; + } + } + } + + private void readTransportBounds(TransportIndex ind) throws IOException { + while(true){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + return; + case OsmandOdb.TransportStopsTree.LEFT_FIELD_NUMBER : + ind.left = codedIS.readSInt32(); + break; + case OsmandOdb.TransportStopsTree.RIGHT_FIELD_NUMBER : + ind.right = codedIS.readSInt32(); + break; + case OsmandOdb.TransportStopsTree.TOP_FIELD_NUMBER : + ind.top = codedIS.readSInt32(); + break; + case OsmandOdb.TransportStopsTree.BOTTOM_FIELD_NUMBER : + ind.bottom = codedIS.readSInt32(); + break; + default: + skipUnknownField(t); + break; + } + } + } + + protected void searchTransportTreeBounds(int pleft, int pright, int ptop, int pbottom, + SearchRequest req) throws IOException { + int init = 0; + int lastIndexResult = -1; + int cright = 0; + int cleft = 0; + int ctop = 0; + int cbottom = 0; + req.numberOfReadSubtrees++; + while(true){ + if(req.isCancelled()){ + return; + } + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + if(init == 0xf){ + // coordinates are init + init = 0; + if(cright < req.left || cleft > req.right || ctop > req.bottom || cbottom < req.top){ + return; + } else { + req.numberOfAcceptedSubtrees++; + } + } + switch (tag) { + case 0: + return; + case OsmandOdb.TransportStopsTree.BOTTOM_FIELD_NUMBER : + cbottom = codedIS.readSInt32() + pbottom; + init |= 1; + break; + case OsmandOdb.TransportStopsTree.LEFT_FIELD_NUMBER : + cleft = codedIS.readSInt32() + pleft; + init |= 2; + break; + case OsmandOdb.TransportStopsTree.RIGHT_FIELD_NUMBER : + cright = codedIS.readSInt32() + pright; + init |= 4; + break; + case OsmandOdb.TransportStopsTree.TOP_FIELD_NUMBER : + ctop = codedIS.readSInt32() + ptop; + init |= 8; + break; + case OsmandOdb.TransportStopsTree.LEAFS_FIELD_NUMBER : + int stopOffset = codedIS.getTotalBytesRead(); + int length = codedIS.readRawVarint32(); + int oldLimit = codedIS.pushLimit(length); + if(lastIndexResult == -1){ + lastIndexResult = req.getSearchResults().size(); + } + req.numberOfVisitedObjects++; + TransportStop transportStop = readTransportStop(stopOffset, cleft, cright, ctop, cbottom, req); + if(transportStop != null){ + req.publish(transportStop); + } + codedIS.popLimit(oldLimit); + break; + case OsmandOdb.TransportStopsTree.SUBTREES_FIELD_NUMBER : + // left, ... already initialized + length = readInt(); + int filePointer = codedIS.getTotalBytesRead(); + if (req.limit == -1 || req.limit >= req.getSearchResults().size()) { + oldLimit = codedIS.pushLimit(length); + searchTransportTreeBounds(cleft, cright, ctop, cbottom, req); + codedIS.popLimit(oldLimit); + } + codedIS.seek(filePointer + length); + + if(lastIndexResult >= 0){ + throw new IllegalStateException(); + } + break; + case OsmandOdb.TransportStopsTree.BASEID_FIELD_NUMBER : + long baseId = codedIS.readUInt64(); + if (lastIndexResult != -1) { + for (int i = lastIndexResult; i < req.getSearchResults().size(); i++) { + TransportStop rs = req.getSearchResults().get(i); + rs.setId(rs.getId() + baseId); + } + } + break; + default: + skipUnknownField(t); + break; + } + } + } + + private String regStr(TIntObjectHashMap stringTable) throws IOException{ + int i = codedIS.readUInt32(); + stringTable.putIfAbsent(i, ""); + return ((char) i)+""; + } + + public net.osmand.data.TransportRoute getTransportRoute(int filePointer, TIntObjectHashMap stringTable, + boolean onlyDescription) throws IOException { + codedIS.seek(filePointer); + int routeLength = codedIS.readRawVarint32(); + int old = codedIS.pushLimit(routeLength); + net.osmand.data.TransportRoute dataObject = new net.osmand.data.TransportRoute(); + boolean end = false; + long rid = 0; + int rx = 0; + int ry = 0; + long did = 0; + int dx = 0; + int dy = 0; + while(!end){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + end = true; + break; + case OsmandOdb.TransportRoute.DISTANCE_FIELD_NUMBER : + dataObject.setDistance(codedIS.readUInt32()); + break; + case OsmandOdb.TransportRoute.ID_FIELD_NUMBER : + dataObject.setId(codedIS.readUInt64()); + break; + case OsmandOdb.TransportRoute.REF_FIELD_NUMBER : + dataObject.setRef(codedIS.readString()); + break; + case OsmandOdb.TransportRoute.TYPE_FIELD_NUMBER : + dataObject.setType(regStr(stringTable)); //$NON-NLS-1$ + break; + case OsmandOdb.TransportRoute.NAME_EN_FIELD_NUMBER : + dataObject.setEnName(regStr(stringTable)); //$NON-NLS-1$ + break; + case OsmandOdb.TransportRoute.NAME_FIELD_NUMBER : + dataObject.setName(regStr(stringTable)); //$NON-NLS-1$ + break; + case OsmandOdb.TransportRoute.OPERATOR_FIELD_NUMBER: + dataObject.setOperator(regStr(stringTable)); //$NON-NLS-1$ + break; + case OsmandOdb.TransportRoute.REVERSESTOPS_FIELD_NUMBER: + if(onlyDescription){ + end = true; + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + break; + } + int length = codedIS.readRawVarint32(); + int olds = codedIS.pushLimit(length); + TransportStop stop = readTransportRouteStop(dx, dy, did, stringTable); + dataObject.getBackwardStops().add(stop); + did = stop.getId(); + dx = (int) MapUtils.getTileNumberX(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLongitude()); + dy = (int) MapUtils.getTileNumberY(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLatitude()); + codedIS.popLimit(olds); + break; + case OsmandOdb.TransportRoute.DIRECTSTOPS_FIELD_NUMBER: + if(onlyDescription){ + end = true; + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + break; + } + length = codedIS.readRawVarint32(); + olds = codedIS.pushLimit(length); + stop = readTransportRouteStop(rx, ry, rid, stringTable); + dataObject.getForwardStops().add(stop); + rid = stop.getId(); + rx = (int) MapUtils.getTileNumberX(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLongitude()); + ry = (int) MapUtils.getTileNumberY(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLatitude()); + codedIS.popLimit(olds); + break; + default: + skipUnknownField(t); + break; + } + } + codedIS.popLimit(old); + + + return dataObject; + } + + protected void initializeStringTable(TransportIndex ind, TIntObjectHashMap stringTable) throws IOException { + int[] values = stringTable.keys(); + Arrays.sort(values); + codedIS.seek(ind.stringTable.fileOffset); + int oldLimit = codedIS.pushLimit(ind.stringTable.length); + int current = 0; + int i = 0; + while (i < values.length) { + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + break; + case OsmandOdb.StringTable.S_FIELD_NUMBER: + if (current == values[i]) { + String value = codedIS.readString(); + stringTable.put(values[i], value); + i++; + } else { + skipUnknownField(t); + } + current ++; + break; + default: + skipUnknownField(t); + break; + } + } + codedIS.popLimit(oldLimit); + } + + protected void initializeNames(boolean onlyDescription, net.osmand.data.TransportRoute dataObject, + TIntObjectHashMap stringTable) throws IOException { + if(dataObject.getName().length() > 0){ + dataObject.setName(stringTable.get(dataObject.getName().charAt(0))); + } + if(dataObject.getEnName().length() > 0){ + dataObject.setEnName(stringTable.get(dataObject.getEnName().charAt(0))); + } + if(dataObject.getName().length() > 0 && dataObject.getEnName().length() == 0){ + dataObject.setEnName(Junidecode.unidecode(dataObject.getName())); + } + + if(dataObject.getOperator().length() > 0){ + dataObject.setOperator(stringTable.get(dataObject.getOperator().charAt(0))); + } + if(dataObject.getType().length() > 0){ + dataObject.setType(stringTable.get(dataObject.getType().charAt(0))); + } + for (int i = 0; i < 2 && !onlyDescription; i++) { + List stops = i == 0 ? dataObject.getForwardStops() : dataObject.getBackwardStops(); + for (TransportStop s : stops) { + initializeNames(stringTable, s); + } + } + } + + protected void initializeNames(TIntObjectHashMap stringTable, TransportStop s) { + if (s.getName().length() > 0) { + s.setName(stringTable.get(s.getName().charAt(0))); + } + if (s.getEnName().length() > 0) { + s.setEnName(stringTable.get(s.getEnName().charAt(0))); + } + if (s.getEnName().length() == 0) { + s.setEnName(Junidecode.unidecode(s.getName())); + } + } + + + + private TransportStop readTransportRouteStop(int dx, int dy, long did, TIntObjectHashMap stringTable) throws IOException { + TransportStop dataObject = new TransportStop(); + boolean end = false; + while(!end){ + int t = codedIS.readTag(); + int tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + end = true; + break; + case OsmandOdb.TransportRouteStop.NAME_EN_FIELD_NUMBER : + dataObject.setEnName(regStr(stringTable)); //$NON-NLS-1$ + break; + case OsmandOdb.TransportRouteStop.NAME_FIELD_NUMBER : + dataObject.setName(regStr(stringTable)); //$NON-NLS-1$ + break; + case OsmandOdb.TransportRouteStop.ID_FIELD_NUMBER : + did += codedIS.readSInt64(); + break; + case OsmandOdb.TransportRouteStop.DX_FIELD_NUMBER : + dx += codedIS.readSInt32(); + break; + case OsmandOdb.TransportRouteStop.DY_FIELD_NUMBER : + dy += codedIS.readSInt32(); + break; + default: + skipUnknownField(t); + break; + } + } + dataObject.setId(did); + dataObject.setLocation(MapUtils.getLatitudeFromTile(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, dy), MapUtils.getLongitudeFromTile(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, dx)); + return dataObject; + } + + private TransportStop readTransportStop(int shift, int cleft, int cright, int ctop, int cbottom, SearchRequest req) throws IOException { + int tag = WireFormat.getTagFieldNumber(codedIS.readTag()); + if(OsmandOdb.TransportStop.DX_FIELD_NUMBER != tag) { + throw new IllegalArgumentException(); + } + int x = codedIS.readSInt32() + cleft; + + tag = WireFormat.getTagFieldNumber(codedIS.readTag()); + if(OsmandOdb.TransportStop.DY_FIELD_NUMBER != tag) { + throw new IllegalArgumentException(); + } + int y = codedIS.readSInt32() + ctop; + if(req.right < x || req.left > x || req.top > y || req.bottom < y){ + codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); + return null; + } + + req.numberOfAcceptedObjects++; + req.cacheTypes.clear(); + + TransportStop dataObject = new TransportStop(); + dataObject.setLocation(MapUtils.getLatitudeFromTile(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, y), MapUtils.getLongitudeFromTile(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, x)); + dataObject.setFileOffset(shift); + while(true){ + int t = codedIS.readTag(); + tag = WireFormat.getTagFieldNumber(t); + switch (tag) { + case 0: + dataObject.setReferencesToRoutes(req.cacheTypes.toArray()); + if(dataObject.getEnName().length() == 0){ + dataObject.setEnName(Junidecode.unidecode(dataObject.getName())); + } + return dataObject; + case OsmandOdb.TransportStop.ROUTES_FIELD_NUMBER : + req.cacheTypes.add(shift - codedIS.readUInt32()); + break; + case OsmandOdb.TransportStop.NAME_EN_FIELD_NUMBER : + if (req.stringTable != null) { + dataObject.setEnName(regStr(req.stringTable)); //$NON-NLS-1$ + } else { + skipUnknownField(t); + } + break; + case OsmandOdb.TransportStop.NAME_FIELD_NUMBER : + if (req.stringTable != null) { + dataObject.setName(regStr(req.stringTable)); //$NON-NLS-1$ + } else { + skipUnknownField(t); + } + + break; + case OsmandOdb.TransportStop.ID_FIELD_NUMBER : + dataObject.setId(codedIS.readSInt64()); + break; + default: + skipUnknownField(t); + break; + } + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/binary/CachedOsmandIndexes.java b/OsmAnd-java/src/net/osmand/binary/CachedOsmandIndexes.java new file mode 100644 index 0000000000..7336fc7aee --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/CachedOsmandIndexes.java @@ -0,0 +1,327 @@ +package net.osmand.binary; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; + +import net.osmand.PlatformUtil; +import net.osmand.binary.BinaryMapAddressReaderAdapter.AddressRegion; +import net.osmand.binary.BinaryMapAddressReaderAdapter.CitiesBlock; +import net.osmand.binary.BinaryMapIndexReader.MapIndex; +import net.osmand.binary.BinaryMapIndexReader.MapRoot; +import net.osmand.binary.BinaryMapPoiReaderAdapter.PoiRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteSubregion; +import net.osmand.binary.BinaryMapTransportReaderAdapter.IndexStringTable; +import net.osmand.binary.BinaryMapTransportReaderAdapter.TransportIndex; +import net.osmand.binary.OsmandIndex.AddressPart; +import net.osmand.binary.OsmandIndex.CityBlock; +import net.osmand.binary.OsmandIndex.FileIndex; +import net.osmand.binary.OsmandIndex.MapLevel; +import net.osmand.binary.OsmandIndex.MapPart; +import net.osmand.binary.OsmandIndex.OsmAndStoredIndex; +import net.osmand.binary.OsmandIndex.PoiPart; +import net.osmand.binary.OsmandIndex.RoutingPart; +import net.osmand.binary.OsmandIndex.RoutingSubregion; +import net.osmand.binary.OsmandIndex.TransportPart; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + +public class CachedOsmandIndexes { + + private OsmAndStoredIndex storedIndex; + private OsmAndStoredIndex.Builder storedIndexBuilder; + private Log log = PlatformUtil.getLog(CachedOsmandIndexes.class); + private boolean hasChanged = true; + + public static final int VERSION = 2; + + public void addToCache(BinaryMapIndexReader reader, File f) { + hasChanged = true; + if(storedIndexBuilder == null) { + storedIndexBuilder = OsmandIndex.OsmAndStoredIndex.newBuilder(); + storedIndexBuilder.setVersion(VERSION); + storedIndexBuilder.setDateCreated(System.currentTimeMillis()); + if(storedIndex != null) { + for(FileIndex ex : storedIndex.getFileIndexList()) { + storedIndexBuilder.addFileIndex(ex); + } + } + } + + FileIndex.Builder fileIndex = OsmandIndex.FileIndex.newBuilder(); + long d = reader.getDateCreated(); + fileIndex.setDateModified(d== 0?f.lastModified() : d); + fileIndex.setSize(f.length()); + fileIndex.setVersion(reader.getVersion()); + fileIndex.setFileName(f.getName()); + for(MapIndex index : reader.getMapIndexes()) { + MapPart.Builder map = OsmandIndex.MapPart.newBuilder(); + map.setSize(index.getLength()); + map.setOffset(index.getFilePointer()); + if(index.getName() != null) { + map.setName(index.getName()); + } + for(MapRoot mr : index.getRoots() ) { + MapLevel.Builder lev = OsmandIndex.MapLevel.newBuilder(); + lev.setSize(mr.length); + lev.setOffset(mr.filePointer); + lev.setLeft(mr.left); + lev.setRight(mr.right); + lev.setTop(mr.top); + lev.setBottom(mr.bottom); + lev.setMinzoom(mr.minZoom); + lev.setMaxzoom(mr.maxZoom); + map.addLevels(lev); + } + fileIndex.addMapIndex(map); + } + + for(AddressRegion index : reader.getAddressIndexes()) { + AddressPart.Builder addr = OsmandIndex.AddressPart.newBuilder(); + addr.setSize(index.getLength()); + addr.setOffset(index.getFilePointer()); + if(index.getName() != null) { + addr.setName(index.getName()); + } + if(index.getEnName() != null) { + addr.setNameEn(index.getEnName()); + } + addr.setIndexNameOffset(index.getIndexNameOffset()); + for(CitiesBlock mr : index.getCities() ) { + CityBlock.Builder cblock = OsmandIndex.CityBlock.newBuilder(); + cblock.setSize(mr.length); + cblock.setOffset(mr.filePointer); + cblock.setType(mr.type); + addr.addCities(cblock); + } + fileIndex.addAddressIndex(addr); + } + + for(PoiRegion index : reader.getPoiIndexes()) { + PoiPart.Builder poi = OsmandIndex.PoiPart.newBuilder(); + poi.setSize(index.getLength()); + poi.setOffset(index.getFilePointer()); + if(index.getName() != null) { + poi.setName(index.getName()); + } + poi.setLeft(MapUtils.get31TileNumberX(index.getLeftLongitude())); + poi.setRight(MapUtils.get31TileNumberX(index.getRightLongitude())); + poi.setTop(MapUtils.get31TileNumberY(index.getTopLatitude())); + poi.setBottom(MapUtils.get31TileNumberY(index.getBottomLatitude())); + fileIndex.addPoiIndex(poi.build()); + } + + for(TransportIndex index : reader.getTransportIndexes()) { + TransportPart.Builder transport = OsmandIndex.TransportPart.newBuilder(); + transport.setSize(index.getLength()); + transport.setOffset(index.getFilePointer()); + if(index.getName() != null) { + transport.setName(index.getName()); + } + transport.setLeft(index.getLeft()); + transport.setRight(index.getRight()); + transport.setTop(index.getTop()); + transport.setBottom(index.getBottom()); + transport.setStopsTableLength(index.stopsFileLength); + transport.setStopsTableOffset(index.stopsFileOffset); + transport.setStringTableLength(index.stringTable.length); + transport.setStringTableOffset(index.stringTable.fileOffset); + fileIndex.addTransportIndex(transport); + } + + for(RouteRegion index : reader.getRoutingIndexes()) { + RoutingPart.Builder routing = OsmandIndex.RoutingPart.newBuilder(); + routing.setSize(index.getLength()); + routing.setOffset(index.getFilePointer()); + if(index.getName() != null) { + routing.setName(index.getName()); + } + for(RouteSubregion sub : index.getSubregions()) { + addRouteSubregion(routing, sub, false); + } + for(RouteSubregion sub : index.getBaseSubregions()) { + addRouteSubregion(routing, sub, true); + } + fileIndex.addRoutingIndex(routing); + } + + storedIndexBuilder.addFileIndex(fileIndex); + + } + + private void addRouteSubregion(RoutingPart.Builder routing, RouteSubregion sub, boolean base) { + OsmandIndex.RoutingSubregion.Builder rpart = OsmandIndex.RoutingSubregion.newBuilder(); + rpart.setSize(sub.length); + rpart.setOffset(sub.filePointer); + rpart.setLeft(sub.left); + rpart.setRight(sub.right); + rpart.setTop(sub.top); + rpart.setBasemap(base); + rpart.setBottom(sub.bottom); + rpart.setShifToData(sub.shiftToData); + routing.addSubregions(rpart); + } + + public BinaryMapIndexReader getReader(File f) throws IOException { + RandomAccessFile mf = new RandomAccessFile(f.getPath(), "r"); + FileIndex found = null; + if (storedIndex != null) { + for (int i = 0; i < storedIndex.getFileIndexCount(); i++) { + FileIndex fi = storedIndex.getFileIndex(i); + if (f.length() == fi.getSize() && f.getName().equals(fi.getFileName())) { + // f.lastModified() == fi.getDateModified() + found = fi; + break; + } + } + } + BinaryMapIndexReader reader = null; + if (found == null) { + long val = System.currentTimeMillis(); + reader = new BinaryMapIndexReader(mf); + addToCache(reader, f); + if (log.isDebugEnabled()) { + log.debug("Initializing db " + f.getAbsolutePath() + " " + (System.currentTimeMillis() - val ) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + } else { + reader = initFileIndex(found, mf); + } + return reader; + } + + private BinaryMapIndexReader initFileIndex(FileIndex found, RandomAccessFile mf) throws IOException { + BinaryMapIndexReader reader = new BinaryMapIndexReader(mf, false); + reader.version = found.getVersion(); + reader.dateCreated = found.getDateModified(); + + for(MapPart index : found.getMapIndexList()) { + MapIndex mi = new MapIndex(); + mi.length = (int) index.getSize(); + mi.filePointer = (int) index.getOffset(); + mi.name = index.getName(); + + for(MapLevel mr : index.getLevelsList()) { + MapRoot root = new MapRoot(); + root.length = (int) mr.getSize(); + root.filePointer = (int) mr.getOffset(); + root.left = mr.getLeft(); + root.right = mr.getRight(); + root.top = mr.getTop(); + root.bottom = mr.getBottom(); + root.minZoom = mr.getMinzoom(); + root.maxZoom = mr.getMaxzoom(); + mi.roots.add(root); + } + reader.mapIndexes.add(mi); + reader.indexes.add(mi); + reader.basemap = reader.basemap || mi.isBaseMap(); + } + + for(AddressPart index : found.getAddressIndexList()) { + AddressRegion mi = new AddressRegion(); + mi.length = (int) index.getSize(); + mi.filePointer = (int) index.getOffset(); + mi.name = index.getName(); + mi.enName = index.getNameEn(); + mi.indexNameOffset = index.getIndexNameOffset(); + for(CityBlock mr : index.getCitiesList() ) { + CitiesBlock cblock = new CitiesBlock(); + cblock.length = (int) mr.getSize(); + cblock.filePointer = (int) mr.getOffset(); + cblock.type = mr.getType(); + mi.cities.add(cblock); + } + reader.addressIndexes.add(mi); + reader.indexes.add(mi); + } + + for(PoiPart index : found.getPoiIndexList()) { + PoiRegion mi = new PoiRegion(); + mi.length = (int) index.getSize(); + mi.filePointer = (int) index.getOffset(); + mi.name = index.getName(); + mi.leftLongitude = MapUtils.get31LongitudeX(index.getLeft()); + mi.rightLongitude = MapUtils.get31LongitudeX(index.getRight()); + mi.topLatitude =MapUtils.get31LatitudeY(index.getTop()); + mi.bottomLatitude = MapUtils.get31LatitudeY(index.getBottom()); + reader.poiIndexes.add(mi); + reader.indexes.add(mi); + } + + for(TransportPart index : found.getTransportIndexList()) { + TransportIndex mi = new TransportIndex(); + mi.length = (int) index.getSize(); + mi.filePointer = (int) index.getOffset(); + mi.name = index.getName(); + mi.left = index.getLeft(); + mi.right =index.getRight(); + mi.top = index.getTop(); + mi.bottom = index.getBottom(); + mi.stopsFileLength = index.getStopsTableLength(); + mi.stopsFileOffset = index.getStopsTableOffset(); + mi.stringTable = new IndexStringTable(); + mi.stringTable.fileOffset = index.getStringTableOffset(); + mi.stringTable.length = index.getStringTableLength(); + reader.transportIndexes.add(mi); + reader.indexes.add(mi); + } + + for(RoutingPart index : found.getRoutingIndexList()) { + RouteRegion mi = new RouteRegion(); + mi.length = (int) index.getSize(); + mi.filePointer = (int) index.getOffset(); + mi.name = index.getName(); + + for(RoutingSubregion mr : index.getSubregionsList()) { + RouteSubregion sub = new RouteSubregion(mi); + sub.length = (int) mr.getSize(); + sub.filePointer = (int) mr.getOffset(); + sub.left = mr.getLeft(); + sub.right = mr.getRight(); + sub.top = mr.getTop(); + sub.bottom = mr.getBottom(); + sub.shiftToData = mr.getShifToData(); + if(mr.getBasemap()) { + mi.basesubregions.add(sub); + } else { + mi.subregions.add(sub); + } + } + reader.routingIndexes.add(mi); + reader.indexes.add(mi); + } + + return reader; + } + + public void readFromFile(File f, int version) throws IOException { + long time = System.currentTimeMillis(); + FileInputStream is = new FileInputStream(f); + try { + storedIndex = OsmandIndex.OsmAndStoredIndex.newBuilder().mergeFrom(is).build(); + hasChanged = false; + if(storedIndex.getVersion() != version){ + storedIndex = null; + } + } finally { + is.close(); + } + log.info("Initialize cache " + (System.currentTimeMillis() - time)); + } + + public void writeToFile(File f) throws IOException { + if (hasChanged) { + FileOutputStream outputStream = new FileOutputStream(f); + try { + storedIndexBuilder.build().writeTo(outputStream); + } finally { + outputStream.close(); + } + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/binary/OsmandIndex.java b/OsmAnd-java/src/net/osmand/binary/OsmandIndex.java new file mode 100644 index 0000000000..ddfc7adf4a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/OsmandIndex.java @@ -0,0 +1,5262 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: DataExtractionOSM/src/osmand_index.proto + +package net.osmand.binary; + +public final class OsmandIndex { + private OsmandIndex() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + public static final class OsmAndStoredIndex extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndStoredIndex.newBuilder() to construct. + private OsmAndStoredIndex() { + initFields(); + } + private OsmAndStoredIndex(boolean noInit) {} + + private static final OsmAndStoredIndex defaultInstance; + public static OsmAndStoredIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndStoredIndex getDefaultInstanceForType() { + return defaultInstance; + } + + // required uint32 version = 1; + public static final int VERSION_FIELD_NUMBER = 1; + private boolean hasVersion; + private int version_ = 0; + public boolean hasVersion() { return hasVersion; } + public int getVersion() { return version_; } + + // required int64 dateCreated = 18; + public static final int DATECREATED_FIELD_NUMBER = 18; + private boolean hasDateCreated; + private long dateCreated_ = 0L; + public boolean hasDateCreated() { return hasDateCreated; } + public long getDateCreated() { return dateCreated_; } + + // repeated .FileIndex fileIndex = 7; + public static final int FILEINDEX_FIELD_NUMBER = 7; + private java.util.List fileIndex_ = + java.util.Collections.emptyList(); + public java.util.List getFileIndexList() { + return fileIndex_; + } + public int getFileIndexCount() { return fileIndex_.size(); } + public net.osmand.binary.OsmandIndex.FileIndex getFileIndex(int index) { + return fileIndex_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasVersion) return false; + if (!hasDateCreated) return false; + for (net.osmand.binary.OsmandIndex.FileIndex element : getFileIndexList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasVersion()) { + output.writeUInt32(1, getVersion()); + } + for (net.osmand.binary.OsmandIndex.FileIndex element : getFileIndexList()) { + output.writeMessage(7, element); + } + if (hasDateCreated()) { + output.writeInt64(18, getDateCreated()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasVersion()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, getVersion()); + } + for (net.osmand.binary.OsmandIndex.FileIndex element : getFileIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + if (hasDateCreated()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(18, getDateCreated()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.OsmAndStoredIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.OsmAndStoredIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.OsmAndStoredIndex, Builder> { + private net.osmand.binary.OsmandIndex.OsmAndStoredIndex result; + + // Construct using net.osmand.binary.OsmandIndex.OsmAndStoredIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.OsmAndStoredIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.OsmAndStoredIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.OsmAndStoredIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.OsmAndStoredIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.OsmAndStoredIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.OsmAndStoredIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.OsmAndStoredIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.OsmAndStoredIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.fileIndex_ != java.util.Collections.EMPTY_LIST) { + result.fileIndex_ = + java.util.Collections.unmodifiableList(result.fileIndex_); + } + net.osmand.binary.OsmandIndex.OsmAndStoredIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.OsmAndStoredIndex other) { + if (other == net.osmand.binary.OsmandIndex.OsmAndStoredIndex.getDefaultInstance()) return this; + if (other.hasVersion()) { + setVersion(other.getVersion()); + } + if (other.hasDateCreated()) { + setDateCreated(other.getDateCreated()); + } + if (!other.fileIndex_.isEmpty()) { + if (result.fileIndex_.isEmpty()) { + result.fileIndex_ = new java.util.ArrayList(); + } + result.fileIndex_.addAll(other.fileIndex_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setVersion(input.readUInt32()); + break; + } + case 58: { + net.osmand.binary.OsmandIndex.FileIndex.Builder subBuilder = net.osmand.binary.OsmandIndex.FileIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addFileIndex(subBuilder.buildPartial()); + break; + } + case 144: { + setDateCreated(input.readInt64()); + break; + } + } + } + } + + + // required uint32 version = 1; + public boolean hasVersion() { + return result.hasVersion(); + } + public int getVersion() { + return result.getVersion(); + } + public Builder setVersion(int value) { + result.hasVersion = true; + result.version_ = value; + return this; + } + public Builder clearVersion() { + result.hasVersion = false; + result.version_ = 0; + return this; + } + + // required int64 dateCreated = 18; + public boolean hasDateCreated() { + return result.hasDateCreated(); + } + public long getDateCreated() { + return result.getDateCreated(); + } + public Builder setDateCreated(long value) { + result.hasDateCreated = true; + result.dateCreated_ = value; + return this; + } + public Builder clearDateCreated() { + result.hasDateCreated = false; + result.dateCreated_ = 0L; + return this; + } + + // repeated .FileIndex fileIndex = 7; + public java.util.List getFileIndexList() { + return java.util.Collections.unmodifiableList(result.fileIndex_); + } + public int getFileIndexCount() { + return result.getFileIndexCount(); + } + public net.osmand.binary.OsmandIndex.FileIndex getFileIndex(int index) { + return result.getFileIndex(index); + } + public Builder setFileIndex(int index, net.osmand.binary.OsmandIndex.FileIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.fileIndex_.set(index, value); + return this; + } + public Builder setFileIndex(int index, net.osmand.binary.OsmandIndex.FileIndex.Builder builderForValue) { + result.fileIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addFileIndex(net.osmand.binary.OsmandIndex.FileIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.fileIndex_.isEmpty()) { + result.fileIndex_ = new java.util.ArrayList(); + } + result.fileIndex_.add(value); + return this; + } + public Builder addFileIndex(net.osmand.binary.OsmandIndex.FileIndex.Builder builderForValue) { + if (result.fileIndex_.isEmpty()) { + result.fileIndex_ = new java.util.ArrayList(); + } + result.fileIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllFileIndex( + java.lang.Iterable values) { + if (result.fileIndex_.isEmpty()) { + result.fileIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.fileIndex_); + return this; + } + public Builder clearFileIndex() { + result.fileIndex_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndStoredIndex) + } + + static { + defaultInstance = new OsmAndStoredIndex(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndStoredIndex) + } + + public static final class FileIndex extends + com.google.protobuf.GeneratedMessageLite { + // Use FileIndex.newBuilder() to construct. + private FileIndex() { + initFields(); + } + private FileIndex(boolean noInit) {} + + private static final FileIndex defaultInstance; + public static FileIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public FileIndex getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 dateModified = 2; + public static final int DATEMODIFIED_FIELD_NUMBER = 2; + private boolean hasDateModified; + private long dateModified_ = 0L; + public boolean hasDateModified() { return hasDateModified; } + public long getDateModified() { return dateModified_; } + + // required string fileName = 3; + public static final int FILENAME_FIELD_NUMBER = 3; + private boolean hasFileName; + private java.lang.String fileName_ = ""; + public boolean hasFileName() { return hasFileName; } + public java.lang.String getFileName() { return fileName_; } + + // required int32 version = 4; + public static final int VERSION_FIELD_NUMBER = 4; + private boolean hasVersion; + private int version_ = 0; + public boolean hasVersion() { return hasVersion; } + public int getVersion() { return version_; } + + // repeated .AddressPart addressIndex = 8; + public static final int ADDRESSINDEX_FIELD_NUMBER = 8; + private java.util.List addressIndex_ = + java.util.Collections.emptyList(); + public java.util.List getAddressIndexList() { + return addressIndex_; + } + public int getAddressIndexCount() { return addressIndex_.size(); } + public net.osmand.binary.OsmandIndex.AddressPart getAddressIndex(int index) { + return addressIndex_.get(index); + } + + // repeated .TransportPart transportIndex = 9; + public static final int TRANSPORTINDEX_FIELD_NUMBER = 9; + private java.util.List transportIndex_ = + java.util.Collections.emptyList(); + public java.util.List getTransportIndexList() { + return transportIndex_; + } + public int getTransportIndexCount() { return transportIndex_.size(); } + public net.osmand.binary.OsmandIndex.TransportPart getTransportIndex(int index) { + return transportIndex_.get(index); + } + + // repeated .PoiPart poiIndex = 10; + public static final int POIINDEX_FIELD_NUMBER = 10; + private java.util.List poiIndex_ = + java.util.Collections.emptyList(); + public java.util.List getPoiIndexList() { + return poiIndex_; + } + public int getPoiIndexCount() { return poiIndex_.size(); } + public net.osmand.binary.OsmandIndex.PoiPart getPoiIndex(int index) { + return poiIndex_.get(index); + } + + // repeated .MapPart mapIndex = 11; + public static final int MAPINDEX_FIELD_NUMBER = 11; + private java.util.List mapIndex_ = + java.util.Collections.emptyList(); + public java.util.List getMapIndexList() { + return mapIndex_; + } + public int getMapIndexCount() { return mapIndex_.size(); } + public net.osmand.binary.OsmandIndex.MapPart getMapIndex(int index) { + return mapIndex_.get(index); + } + + // repeated .RoutingPart routingIndex = 12; + public static final int ROUTINGINDEX_FIELD_NUMBER = 12; + private java.util.List routingIndex_ = + java.util.Collections.emptyList(); + public java.util.List getRoutingIndexList() { + return routingIndex_; + } + public int getRoutingIndexCount() { return routingIndex_.size(); } + public net.osmand.binary.OsmandIndex.RoutingPart getRoutingIndex(int index) { + return routingIndex_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasDateModified) return false; + if (!hasFileName) return false; + if (!hasVersion) return false; + for (net.osmand.binary.OsmandIndex.AddressPart element : getAddressIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandIndex.TransportPart element : getTransportIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandIndex.PoiPart element : getPoiIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandIndex.MapPart element : getMapIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandIndex.RoutingPart element : getRoutingIndexList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasDateModified()) { + output.writeInt64(2, getDateModified()); + } + if (hasFileName()) { + output.writeString(3, getFileName()); + } + if (hasVersion()) { + output.writeInt32(4, getVersion()); + } + for (net.osmand.binary.OsmandIndex.AddressPart element : getAddressIndexList()) { + output.writeMessage(8, element); + } + for (net.osmand.binary.OsmandIndex.TransportPart element : getTransportIndexList()) { + output.writeMessage(9, element); + } + for (net.osmand.binary.OsmandIndex.PoiPart element : getPoiIndexList()) { + output.writeMessage(10, element); + } + for (net.osmand.binary.OsmandIndex.MapPart element : getMapIndexList()) { + output.writeMessage(11, element); + } + for (net.osmand.binary.OsmandIndex.RoutingPart element : getRoutingIndexList()) { + output.writeMessage(12, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasDateModified()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getDateModified()); + } + if (hasFileName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getFileName()); + } + if (hasVersion()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getVersion()); + } + for (net.osmand.binary.OsmandIndex.AddressPart element : getAddressIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, element); + } + for (net.osmand.binary.OsmandIndex.TransportPart element : getTransportIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, element); + } + for (net.osmand.binary.OsmandIndex.PoiPart element : getPoiIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, element); + } + for (net.osmand.binary.OsmandIndex.MapPart element : getMapIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(11, element); + } + for (net.osmand.binary.OsmandIndex.RoutingPart element : getRoutingIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.FileIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.FileIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.FileIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.FileIndex, Builder> { + private net.osmand.binary.OsmandIndex.FileIndex result; + + // Construct using net.osmand.binary.OsmandIndex.FileIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.FileIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.FileIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.FileIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.FileIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.FileIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.FileIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.FileIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.FileIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.addressIndex_ != java.util.Collections.EMPTY_LIST) { + result.addressIndex_ = + java.util.Collections.unmodifiableList(result.addressIndex_); + } + if (result.transportIndex_ != java.util.Collections.EMPTY_LIST) { + result.transportIndex_ = + java.util.Collections.unmodifiableList(result.transportIndex_); + } + if (result.poiIndex_ != java.util.Collections.EMPTY_LIST) { + result.poiIndex_ = + java.util.Collections.unmodifiableList(result.poiIndex_); + } + if (result.mapIndex_ != java.util.Collections.EMPTY_LIST) { + result.mapIndex_ = + java.util.Collections.unmodifiableList(result.mapIndex_); + } + if (result.routingIndex_ != java.util.Collections.EMPTY_LIST) { + result.routingIndex_ = + java.util.Collections.unmodifiableList(result.routingIndex_); + } + net.osmand.binary.OsmandIndex.FileIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.FileIndex other) { + if (other == net.osmand.binary.OsmandIndex.FileIndex.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasDateModified()) { + setDateModified(other.getDateModified()); + } + if (other.hasFileName()) { + setFileName(other.getFileName()); + } + if (other.hasVersion()) { + setVersion(other.getVersion()); + } + if (!other.addressIndex_.isEmpty()) { + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + result.addressIndex_.addAll(other.addressIndex_); + } + if (!other.transportIndex_.isEmpty()) { + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + result.transportIndex_.addAll(other.transportIndex_); + } + if (!other.poiIndex_.isEmpty()) { + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + result.poiIndex_.addAll(other.poiIndex_); + } + if (!other.mapIndex_.isEmpty()) { + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + result.mapIndex_.addAll(other.mapIndex_); + } + if (!other.routingIndex_.isEmpty()) { + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + result.routingIndex_.addAll(other.routingIndex_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setDateModified(input.readInt64()); + break; + } + case 26: { + setFileName(input.readString()); + break; + } + case 32: { + setVersion(input.readInt32()); + break; + } + case 66: { + net.osmand.binary.OsmandIndex.AddressPart.Builder subBuilder = net.osmand.binary.OsmandIndex.AddressPart.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAddressIndex(subBuilder.buildPartial()); + break; + } + case 74: { + net.osmand.binary.OsmandIndex.TransportPart.Builder subBuilder = net.osmand.binary.OsmandIndex.TransportPart.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addTransportIndex(subBuilder.buildPartial()); + break; + } + case 82: { + net.osmand.binary.OsmandIndex.PoiPart.Builder subBuilder = net.osmand.binary.OsmandIndex.PoiPart.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPoiIndex(subBuilder.buildPartial()); + break; + } + case 90: { + net.osmand.binary.OsmandIndex.MapPart.Builder subBuilder = net.osmand.binary.OsmandIndex.MapPart.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addMapIndex(subBuilder.buildPartial()); + break; + } + case 98: { + net.osmand.binary.OsmandIndex.RoutingPart.Builder subBuilder = net.osmand.binary.OsmandIndex.RoutingPart.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRoutingIndex(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 dateModified = 2; + public boolean hasDateModified() { + return result.hasDateModified(); + } + public long getDateModified() { + return result.getDateModified(); + } + public Builder setDateModified(long value) { + result.hasDateModified = true; + result.dateModified_ = value; + return this; + } + public Builder clearDateModified() { + result.hasDateModified = false; + result.dateModified_ = 0L; + return this; + } + + // required string fileName = 3; + public boolean hasFileName() { + return result.hasFileName(); + } + public java.lang.String getFileName() { + return result.getFileName(); + } + public Builder setFileName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasFileName = true; + result.fileName_ = value; + return this; + } + public Builder clearFileName() { + result.hasFileName = false; + result.fileName_ = getDefaultInstance().getFileName(); + return this; + } + + // required int32 version = 4; + public boolean hasVersion() { + return result.hasVersion(); + } + public int getVersion() { + return result.getVersion(); + } + public Builder setVersion(int value) { + result.hasVersion = true; + result.version_ = value; + return this; + } + public Builder clearVersion() { + result.hasVersion = false; + result.version_ = 0; + return this; + } + + // repeated .AddressPart addressIndex = 8; + public java.util.List getAddressIndexList() { + return java.util.Collections.unmodifiableList(result.addressIndex_); + } + public int getAddressIndexCount() { + return result.getAddressIndexCount(); + } + public net.osmand.binary.OsmandIndex.AddressPart getAddressIndex(int index) { + return result.getAddressIndex(index); + } + public Builder setAddressIndex(int index, net.osmand.binary.OsmandIndex.AddressPart value) { + if (value == null) { + throw new NullPointerException(); + } + result.addressIndex_.set(index, value); + return this; + } + public Builder setAddressIndex(int index, net.osmand.binary.OsmandIndex.AddressPart.Builder builderForValue) { + result.addressIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addAddressIndex(net.osmand.binary.OsmandIndex.AddressPart value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + result.addressIndex_.add(value); + return this; + } + public Builder addAddressIndex(net.osmand.binary.OsmandIndex.AddressPart.Builder builderForValue) { + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + result.addressIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllAddressIndex( + java.lang.Iterable values) { + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.addressIndex_); + return this; + } + public Builder clearAddressIndex() { + result.addressIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .TransportPart transportIndex = 9; + public java.util.List getTransportIndexList() { + return java.util.Collections.unmodifiableList(result.transportIndex_); + } + public int getTransportIndexCount() { + return result.getTransportIndexCount(); + } + public net.osmand.binary.OsmandIndex.TransportPart getTransportIndex(int index) { + return result.getTransportIndex(index); + } + public Builder setTransportIndex(int index, net.osmand.binary.OsmandIndex.TransportPart value) { + if (value == null) { + throw new NullPointerException(); + } + result.transportIndex_.set(index, value); + return this; + } + public Builder setTransportIndex(int index, net.osmand.binary.OsmandIndex.TransportPart.Builder builderForValue) { + result.transportIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addTransportIndex(net.osmand.binary.OsmandIndex.TransportPart value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + result.transportIndex_.add(value); + return this; + } + public Builder addTransportIndex(net.osmand.binary.OsmandIndex.TransportPart.Builder builderForValue) { + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + result.transportIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllTransportIndex( + java.lang.Iterable values) { + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.transportIndex_); + return this; + } + public Builder clearTransportIndex() { + result.transportIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .PoiPart poiIndex = 10; + public java.util.List getPoiIndexList() { + return java.util.Collections.unmodifiableList(result.poiIndex_); + } + public int getPoiIndexCount() { + return result.getPoiIndexCount(); + } + public net.osmand.binary.OsmandIndex.PoiPart getPoiIndex(int index) { + return result.getPoiIndex(index); + } + public Builder setPoiIndex(int index, net.osmand.binary.OsmandIndex.PoiPart value) { + if (value == null) { + throw new NullPointerException(); + } + result.poiIndex_.set(index, value); + return this; + } + public Builder setPoiIndex(int index, net.osmand.binary.OsmandIndex.PoiPart.Builder builderForValue) { + result.poiIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addPoiIndex(net.osmand.binary.OsmandIndex.PoiPart value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + result.poiIndex_.add(value); + return this; + } + public Builder addPoiIndex(net.osmand.binary.OsmandIndex.PoiPart.Builder builderForValue) { + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + result.poiIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllPoiIndex( + java.lang.Iterable values) { + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.poiIndex_); + return this; + } + public Builder clearPoiIndex() { + result.poiIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .MapPart mapIndex = 11; + public java.util.List getMapIndexList() { + return java.util.Collections.unmodifiableList(result.mapIndex_); + } + public int getMapIndexCount() { + return result.getMapIndexCount(); + } + public net.osmand.binary.OsmandIndex.MapPart getMapIndex(int index) { + return result.getMapIndex(index); + } + public Builder setMapIndex(int index, net.osmand.binary.OsmandIndex.MapPart value) { + if (value == null) { + throw new NullPointerException(); + } + result.mapIndex_.set(index, value); + return this; + } + public Builder setMapIndex(int index, net.osmand.binary.OsmandIndex.MapPart.Builder builderForValue) { + result.mapIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addMapIndex(net.osmand.binary.OsmandIndex.MapPart value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + result.mapIndex_.add(value); + return this; + } + public Builder addMapIndex(net.osmand.binary.OsmandIndex.MapPart.Builder builderForValue) { + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + result.mapIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllMapIndex( + java.lang.Iterable values) { + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.mapIndex_); + return this; + } + public Builder clearMapIndex() { + result.mapIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .RoutingPart routingIndex = 12; + public java.util.List getRoutingIndexList() { + return java.util.Collections.unmodifiableList(result.routingIndex_); + } + public int getRoutingIndexCount() { + return result.getRoutingIndexCount(); + } + public net.osmand.binary.OsmandIndex.RoutingPart getRoutingIndex(int index) { + return result.getRoutingIndex(index); + } + public Builder setRoutingIndex(int index, net.osmand.binary.OsmandIndex.RoutingPart value) { + if (value == null) { + throw new NullPointerException(); + } + result.routingIndex_.set(index, value); + return this; + } + public Builder setRoutingIndex(int index, net.osmand.binary.OsmandIndex.RoutingPart.Builder builderForValue) { + result.routingIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addRoutingIndex(net.osmand.binary.OsmandIndex.RoutingPart value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + result.routingIndex_.add(value); + return this; + } + public Builder addRoutingIndex(net.osmand.binary.OsmandIndex.RoutingPart.Builder builderForValue) { + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + result.routingIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllRoutingIndex( + java.lang.Iterable values) { + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.routingIndex_); + return this; + } + public Builder clearRoutingIndex() { + result.routingIndex_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:FileIndex) + } + + static { + defaultInstance = new FileIndex(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:FileIndex) + } + + public static final class AddressPart extends + com.google.protobuf.GeneratedMessageLite { + // Use AddressPart.newBuilder() to construct. + private AddressPart() { + initFields(); + } + private AddressPart(boolean noInit) {} + + private static final AddressPart defaultInstance; + public static AddressPart getDefaultInstance() { + return defaultInstance; + } + + @Override + public AddressPart getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // optional string name = 3; + public static final int NAME_FIELD_NUMBER = 3; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string nameEn = 4; + public static final int NAMEEN_FIELD_NUMBER = 4; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // optional int32 indexNameOffset = 5; + public static final int INDEXNAMEOFFSET_FIELD_NUMBER = 5; + private boolean hasIndexNameOffset; + private int indexNameOffset_ = 0; + public boolean hasIndexNameOffset() { return hasIndexNameOffset; } + public int getIndexNameOffset() { return indexNameOffset_; } + + // repeated .CityBlock cities = 8; + public static final int CITIES_FIELD_NUMBER = 8; + private java.util.List cities_ = + java.util.Collections.emptyList(); + public java.util.List getCitiesList() { + return cities_; + } + public int getCitiesCount() { return cities_.size(); } + public net.osmand.binary.OsmandIndex.CityBlock getCities(int index) { + return cities_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + for (net.osmand.binary.OsmandIndex.CityBlock element : getCitiesList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasName()) { + output.writeString(3, getName()); + } + if (hasNameEn()) { + output.writeString(4, getNameEn()); + } + if (hasIndexNameOffset()) { + output.writeInt32(5, getIndexNameOffset()); + } + for (net.osmand.binary.OsmandIndex.CityBlock element : getCitiesList()) { + output.writeMessage(8, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(4, getNameEn()); + } + if (hasIndexNameOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, getIndexNameOffset()); + } + for (net.osmand.binary.OsmandIndex.CityBlock element : getCitiesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.AddressPart parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.AddressPart parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.AddressPart prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.AddressPart, Builder> { + private net.osmand.binary.OsmandIndex.AddressPart result; + + // Construct using net.osmand.binary.OsmandIndex.AddressPart.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.AddressPart(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.AddressPart internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.AddressPart(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.AddressPart getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.AddressPart.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.AddressPart build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.AddressPart buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.AddressPart buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.cities_ != java.util.Collections.EMPTY_LIST) { + result.cities_ = + java.util.Collections.unmodifiableList(result.cities_); + } + net.osmand.binary.OsmandIndex.AddressPart returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.AddressPart other) { + if (other == net.osmand.binary.OsmandIndex.AddressPart.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasIndexNameOffset()) { + setIndexNameOffset(other.getIndexNameOffset()); + } + if (!other.cities_.isEmpty()) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.addAll(other.cities_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 26: { + setName(input.readString()); + break; + } + case 34: { + setNameEn(input.readString()); + break; + } + case 40: { + setIndexNameOffset(input.readInt32()); + break; + } + case 66: { + net.osmand.binary.OsmandIndex.CityBlock.Builder subBuilder = net.osmand.binary.OsmandIndex.CityBlock.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCities(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // optional string name = 3; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string nameEn = 4; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // optional int32 indexNameOffset = 5; + public boolean hasIndexNameOffset() { + return result.hasIndexNameOffset(); + } + public int getIndexNameOffset() { + return result.getIndexNameOffset(); + } + public Builder setIndexNameOffset(int value) { + result.hasIndexNameOffset = true; + result.indexNameOffset_ = value; + return this; + } + public Builder clearIndexNameOffset() { + result.hasIndexNameOffset = false; + result.indexNameOffset_ = 0; + return this; + } + + // repeated .CityBlock cities = 8; + public java.util.List getCitiesList() { + return java.util.Collections.unmodifiableList(result.cities_); + } + public int getCitiesCount() { + return result.getCitiesCount(); + } + public net.osmand.binary.OsmandIndex.CityBlock getCities(int index) { + return result.getCities(index); + } + public Builder setCities(int index, net.osmand.binary.OsmandIndex.CityBlock value) { + if (value == null) { + throw new NullPointerException(); + } + result.cities_.set(index, value); + return this; + } + public Builder setCities(int index, net.osmand.binary.OsmandIndex.CityBlock.Builder builderForValue) { + result.cities_.set(index, builderForValue.build()); + return this; + } + public Builder addCities(net.osmand.binary.OsmandIndex.CityBlock value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.add(value); + return this; + } + public Builder addCities(net.osmand.binary.OsmandIndex.CityBlock.Builder builderForValue) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.add(builderForValue.build()); + return this; + } + public Builder addAllCities( + java.lang.Iterable values) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + super.addAll(values, result.cities_); + return this; + } + public Builder clearCities() { + result.cities_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:AddressPart) + } + + static { + defaultInstance = new AddressPart(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:AddressPart) + } + + public static final class CityBlock extends + com.google.protobuf.GeneratedMessageLite { + // Use CityBlock.newBuilder() to construct. + private CityBlock() { + initFields(); + } + private CityBlock(boolean noInit) {} + + private static final CityBlock defaultInstance; + public static CityBlock getDefaultInstance() { + return defaultInstance; + } + + @Override + public CityBlock getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // required int32 type = 3; + public static final int TYPE_FIELD_NUMBER = 3; + private boolean hasType; + private int type_ = 0; + public boolean hasType() { return hasType; } + public int getType() { return type_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + if (!hasType) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasType()) { + output.writeInt32(3, getType()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasType()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, getType()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.CityBlock parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.CityBlock parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.CityBlock prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.CityBlock, Builder> { + private net.osmand.binary.OsmandIndex.CityBlock result; + + // Construct using net.osmand.binary.OsmandIndex.CityBlock.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.CityBlock(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.CityBlock internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.CityBlock(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.CityBlock getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.CityBlock.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.CityBlock build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.CityBlock buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.CityBlock buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandIndex.CityBlock returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.CityBlock other) { + if (other == net.osmand.binary.OsmandIndex.CityBlock.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasType()) { + setType(other.getType()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 24: { + setType(input.readInt32()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // required int32 type = 3; + public boolean hasType() { + return result.hasType(); + } + public int getType() { + return result.getType(); + } + public Builder setType(int value) { + result.hasType = true; + result.type_ = value; + return this; + } + public Builder clearType() { + result.hasType = false; + result.type_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:CityBlock) + } + + static { + defaultInstance = new CityBlock(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:CityBlock) + } + + public static final class PoiPart extends + com.google.protobuf.GeneratedMessageLite { + // Use PoiPart.newBuilder() to construct. + private PoiPart() { + initFields(); + } + private PoiPart(boolean noInit) {} + + private static final PoiPart defaultInstance; + public static PoiPart getDefaultInstance() { + return defaultInstance; + } + + @Override + public PoiPart getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // optional string name = 3; + public static final int NAME_FIELD_NUMBER = 3; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // required int32 left = 4; + public static final int LEFT_FIELD_NUMBER = 4; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required int32 right = 5; + public static final int RIGHT_FIELD_NUMBER = 5; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required int32 top = 6; + public static final int TOP_FIELD_NUMBER = 6; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required int32 bottom = 7; + public static final int BOTTOM_FIELD_NUMBER = 7; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasName()) { + output.writeString(3, getName()); + } + if (hasLeft()) { + output.writeInt32(4, getLeft()); + } + if (hasRight()) { + output.writeInt32(5, getRight()); + } + if (hasTop()) { + output.writeInt32(6, getTop()); + } + if (hasBottom()) { + output.writeInt32(7, getBottom()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getName()); + } + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(7, getBottom()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.PoiPart parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.PoiPart parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.PoiPart prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.PoiPart, Builder> { + private net.osmand.binary.OsmandIndex.PoiPart result; + + // Construct using net.osmand.binary.OsmandIndex.PoiPart.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.PoiPart(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.PoiPart internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.PoiPart(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.PoiPart getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.PoiPart.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.PoiPart build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.PoiPart buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.PoiPart buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandIndex.PoiPart returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.PoiPart other) { + if (other == net.osmand.binary.OsmandIndex.PoiPart.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 26: { + setName(input.readString()); + break; + } + case 32: { + setLeft(input.readInt32()); + break; + } + case 40: { + setRight(input.readInt32()); + break; + } + case 48: { + setTop(input.readInt32()); + break; + } + case 56: { + setBottom(input.readInt32()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // optional string name = 3; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // required int32 left = 4; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required int32 right = 5; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required int32 top = 6; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required int32 bottom = 7; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:PoiPart) + } + + static { + defaultInstance = new PoiPart(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:PoiPart) + } + + public static final class MapLevel extends + com.google.protobuf.GeneratedMessageLite { + // Use MapLevel.newBuilder() to construct. + private MapLevel() { + initFields(); + } + private MapLevel(boolean noInit) {} + + private static final MapLevel defaultInstance; + public static MapLevel getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapLevel getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // required int32 left = 4; + public static final int LEFT_FIELD_NUMBER = 4; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required int32 right = 5; + public static final int RIGHT_FIELD_NUMBER = 5; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required int32 top = 6; + public static final int TOP_FIELD_NUMBER = 6; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required int32 bottom = 7; + public static final int BOTTOM_FIELD_NUMBER = 7; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // optional int32 minzoom = 8; + public static final int MINZOOM_FIELD_NUMBER = 8; + private boolean hasMinzoom; + private int minzoom_ = 0; + public boolean hasMinzoom() { return hasMinzoom; } + public int getMinzoom() { return minzoom_; } + + // optional int32 maxzoom = 9; + public static final int MAXZOOM_FIELD_NUMBER = 9; + private boolean hasMaxzoom; + private int maxzoom_ = 0; + public boolean hasMaxzoom() { return hasMaxzoom; } + public int getMaxzoom() { return maxzoom_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasLeft()) { + output.writeInt32(4, getLeft()); + } + if (hasRight()) { + output.writeInt32(5, getRight()); + } + if (hasTop()) { + output.writeInt32(6, getTop()); + } + if (hasBottom()) { + output.writeInt32(7, getBottom()); + } + if (hasMinzoom()) { + output.writeInt32(8, getMinzoom()); + } + if (hasMaxzoom()) { + output.writeInt32(9, getMaxzoom()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(7, getBottom()); + } + if (hasMinzoom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(8, getMinzoom()); + } + if (hasMaxzoom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(9, getMaxzoom()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.MapLevel parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapLevel parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.MapLevel prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.MapLevel, Builder> { + private net.osmand.binary.OsmandIndex.MapLevel result; + + // Construct using net.osmand.binary.OsmandIndex.MapLevel.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.MapLevel(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.MapLevel internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.MapLevel(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.MapLevel getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.MapLevel.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.MapLevel build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.MapLevel buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.MapLevel buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandIndex.MapLevel returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.MapLevel other) { + if (other == net.osmand.binary.OsmandIndex.MapLevel.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (other.hasMinzoom()) { + setMinzoom(other.getMinzoom()); + } + if (other.hasMaxzoom()) { + setMaxzoom(other.getMaxzoom()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 32: { + setLeft(input.readInt32()); + break; + } + case 40: { + setRight(input.readInt32()); + break; + } + case 48: { + setTop(input.readInt32()); + break; + } + case 56: { + setBottom(input.readInt32()); + break; + } + case 64: { + setMinzoom(input.readInt32()); + break; + } + case 72: { + setMaxzoom(input.readInt32()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // required int32 left = 4; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required int32 right = 5; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required int32 top = 6; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required int32 bottom = 7; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // optional int32 minzoom = 8; + public boolean hasMinzoom() { + return result.hasMinzoom(); + } + public int getMinzoom() { + return result.getMinzoom(); + } + public Builder setMinzoom(int value) { + result.hasMinzoom = true; + result.minzoom_ = value; + return this; + } + public Builder clearMinzoom() { + result.hasMinzoom = false; + result.minzoom_ = 0; + return this; + } + + // optional int32 maxzoom = 9; + public boolean hasMaxzoom() { + return result.hasMaxzoom(); + } + public int getMaxzoom() { + return result.getMaxzoom(); + } + public Builder setMaxzoom(int value) { + result.hasMaxzoom = true; + result.maxzoom_ = value; + return this; + } + public Builder clearMaxzoom() { + result.hasMaxzoom = false; + result.maxzoom_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:MapLevel) + } + + static { + defaultInstance = new MapLevel(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:MapLevel) + } + + public static final class MapPart extends + com.google.protobuf.GeneratedMessageLite { + // Use MapPart.newBuilder() to construct. + private MapPart() { + initFields(); + } + private MapPart(boolean noInit) {} + + private static final MapPart defaultInstance; + public static MapPart getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapPart getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // optional string name = 3; + public static final int NAME_FIELD_NUMBER = 3; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated .MapLevel levels = 5; + public static final int LEVELS_FIELD_NUMBER = 5; + private java.util.List levels_ = + java.util.Collections.emptyList(); + public java.util.List getLevelsList() { + return levels_; + } + public int getLevelsCount() { return levels_.size(); } + public net.osmand.binary.OsmandIndex.MapLevel getLevels(int index) { + return levels_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + for (net.osmand.binary.OsmandIndex.MapLevel element : getLevelsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasName()) { + output.writeString(3, getName()); + } + for (net.osmand.binary.OsmandIndex.MapLevel element : getLevelsList()) { + output.writeMessage(5, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getName()); + } + for (net.osmand.binary.OsmandIndex.MapLevel element : getLevelsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.MapPart parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.MapPart parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.MapPart parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.MapPart prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.MapPart, Builder> { + private net.osmand.binary.OsmandIndex.MapPart result; + + // Construct using net.osmand.binary.OsmandIndex.MapPart.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.MapPart(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.MapPart internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.MapPart(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.MapPart getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.MapPart.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.MapPart build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.MapPart buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.MapPart buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.levels_ != java.util.Collections.EMPTY_LIST) { + result.levels_ = + java.util.Collections.unmodifiableList(result.levels_); + } + net.osmand.binary.OsmandIndex.MapPart returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.MapPart other) { + if (other == net.osmand.binary.OsmandIndex.MapPart.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (!other.levels_.isEmpty()) { + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + result.levels_.addAll(other.levels_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 26: { + setName(input.readString()); + break; + } + case 42: { + net.osmand.binary.OsmandIndex.MapLevel.Builder subBuilder = net.osmand.binary.OsmandIndex.MapLevel.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addLevels(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // optional string name = 3; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated .MapLevel levels = 5; + public java.util.List getLevelsList() { + return java.util.Collections.unmodifiableList(result.levels_); + } + public int getLevelsCount() { + return result.getLevelsCount(); + } + public net.osmand.binary.OsmandIndex.MapLevel getLevels(int index) { + return result.getLevels(index); + } + public Builder setLevels(int index, net.osmand.binary.OsmandIndex.MapLevel value) { + if (value == null) { + throw new NullPointerException(); + } + result.levels_.set(index, value); + return this; + } + public Builder setLevels(int index, net.osmand.binary.OsmandIndex.MapLevel.Builder builderForValue) { + result.levels_.set(index, builderForValue.build()); + return this; + } + public Builder addLevels(net.osmand.binary.OsmandIndex.MapLevel value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + result.levels_.add(value); + return this; + } + public Builder addLevels(net.osmand.binary.OsmandIndex.MapLevel.Builder builderForValue) { + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + result.levels_.add(builderForValue.build()); + return this; + } + public Builder addAllLevels( + java.lang.Iterable values) { + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + super.addAll(values, result.levels_); + return this; + } + public Builder clearLevels() { + result.levels_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:MapPart) + } + + static { + defaultInstance = new MapPart(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:MapPart) + } + + public static final class RoutingSubregion extends + com.google.protobuf.GeneratedMessageLite { + // Use RoutingSubregion.newBuilder() to construct. + private RoutingSubregion() { + initFields(); + } + private RoutingSubregion(boolean noInit) {} + + private static final RoutingSubregion defaultInstance; + public static RoutingSubregion getDefaultInstance() { + return defaultInstance; + } + + @Override + public RoutingSubregion getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // optional bool basemap = 3; + public static final int BASEMAP_FIELD_NUMBER = 3; + private boolean hasBasemap; + private boolean basemap_ = false; + public boolean hasBasemap() { return hasBasemap; } + public boolean getBasemap() { return basemap_; } + + // required int32 left = 4; + public static final int LEFT_FIELD_NUMBER = 4; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required int32 right = 5; + public static final int RIGHT_FIELD_NUMBER = 5; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required int32 top = 6; + public static final int TOP_FIELD_NUMBER = 6; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required int32 bottom = 7; + public static final int BOTTOM_FIELD_NUMBER = 7; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // required uint32 shifToData = 8; + public static final int SHIFTODATA_FIELD_NUMBER = 8; + private boolean hasShifToData; + private int shifToData_ = 0; + public boolean hasShifToData() { return hasShifToData; } + public int getShifToData() { return shifToData_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + if (!hasShifToData) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasBasemap()) { + output.writeBool(3, getBasemap()); + } + if (hasLeft()) { + output.writeInt32(4, getLeft()); + } + if (hasRight()) { + output.writeInt32(5, getRight()); + } + if (hasTop()) { + output.writeInt32(6, getTop()); + } + if (hasBottom()) { + output.writeInt32(7, getBottom()); + } + if (hasShifToData()) { + output.writeUInt32(8, getShifToData()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasBasemap()) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(3, getBasemap()); + } + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(7, getBottom()); + } + if (hasShifToData()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(8, getShifToData()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingSubregion parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.RoutingSubregion prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.RoutingSubregion, Builder> { + private net.osmand.binary.OsmandIndex.RoutingSubregion result; + + // Construct using net.osmand.binary.OsmandIndex.RoutingSubregion.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.RoutingSubregion(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.RoutingSubregion internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.RoutingSubregion(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.RoutingSubregion getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.RoutingSubregion.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.RoutingSubregion build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.RoutingSubregion buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.RoutingSubregion buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandIndex.RoutingSubregion returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.RoutingSubregion other) { + if (other == net.osmand.binary.OsmandIndex.RoutingSubregion.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasBasemap()) { + setBasemap(other.getBasemap()); + } + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (other.hasShifToData()) { + setShifToData(other.getShifToData()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 24: { + setBasemap(input.readBool()); + break; + } + case 32: { + setLeft(input.readInt32()); + break; + } + case 40: { + setRight(input.readInt32()); + break; + } + case 48: { + setTop(input.readInt32()); + break; + } + case 56: { + setBottom(input.readInt32()); + break; + } + case 64: { + setShifToData(input.readUInt32()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // optional bool basemap = 3; + public boolean hasBasemap() { + return result.hasBasemap(); + } + public boolean getBasemap() { + return result.getBasemap(); + } + public Builder setBasemap(boolean value) { + result.hasBasemap = true; + result.basemap_ = value; + return this; + } + public Builder clearBasemap() { + result.hasBasemap = false; + result.basemap_ = false; + return this; + } + + // required int32 left = 4; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required int32 right = 5; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required int32 top = 6; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required int32 bottom = 7; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // required uint32 shifToData = 8; + public boolean hasShifToData() { + return result.hasShifToData(); + } + public int getShifToData() { + return result.getShifToData(); + } + public Builder setShifToData(int value) { + result.hasShifToData = true; + result.shifToData_ = value; + return this; + } + public Builder clearShifToData() { + result.hasShifToData = false; + result.shifToData_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:RoutingSubregion) + } + + static { + defaultInstance = new RoutingSubregion(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:RoutingSubregion) + } + + public static final class RoutingPart extends + com.google.protobuf.GeneratedMessageLite { + // Use RoutingPart.newBuilder() to construct. + private RoutingPart() { + initFields(); + } + private RoutingPart(boolean noInit) {} + + private static final RoutingPart defaultInstance; + public static RoutingPart getDefaultInstance() { + return defaultInstance; + } + + @Override + public RoutingPart getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // optional string name = 3; + public static final int NAME_FIELD_NUMBER = 3; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated .RoutingSubregion subregions = 5; + public static final int SUBREGIONS_FIELD_NUMBER = 5; + private java.util.List subregions_ = + java.util.Collections.emptyList(); + public java.util.List getSubregionsList() { + return subregions_; + } + public int getSubregionsCount() { return subregions_.size(); } + public net.osmand.binary.OsmandIndex.RoutingSubregion getSubregions(int index) { + return subregions_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + for (net.osmand.binary.OsmandIndex.RoutingSubregion element : getSubregionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasName()) { + output.writeString(3, getName()); + } + for (net.osmand.binary.OsmandIndex.RoutingSubregion element : getSubregionsList()) { + output.writeMessage(5, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getName()); + } + for (net.osmand.binary.OsmandIndex.RoutingSubregion element : getSubregionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.RoutingPart parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.RoutingPart prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.RoutingPart, Builder> { + private net.osmand.binary.OsmandIndex.RoutingPart result; + + // Construct using net.osmand.binary.OsmandIndex.RoutingPart.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.RoutingPart(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.RoutingPart internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.RoutingPart(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.RoutingPart getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.RoutingPart.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.RoutingPart build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.RoutingPart buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.RoutingPart buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.subregions_ != java.util.Collections.EMPTY_LIST) { + result.subregions_ = + java.util.Collections.unmodifiableList(result.subregions_); + } + net.osmand.binary.OsmandIndex.RoutingPart returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.RoutingPart other) { + if (other == net.osmand.binary.OsmandIndex.RoutingPart.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (!other.subregions_.isEmpty()) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.addAll(other.subregions_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 26: { + setName(input.readString()); + break; + } + case 42: { + net.osmand.binary.OsmandIndex.RoutingSubregion.Builder subBuilder = net.osmand.binary.OsmandIndex.RoutingSubregion.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubregions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // optional string name = 3; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated .RoutingSubregion subregions = 5; + public java.util.List getSubregionsList() { + return java.util.Collections.unmodifiableList(result.subregions_); + } + public int getSubregionsCount() { + return result.getSubregionsCount(); + } + public net.osmand.binary.OsmandIndex.RoutingSubregion getSubregions(int index) { + return result.getSubregions(index); + } + public Builder setSubregions(int index, net.osmand.binary.OsmandIndex.RoutingSubregion value) { + if (value == null) { + throw new NullPointerException(); + } + result.subregions_.set(index, value); + return this; + } + public Builder setSubregions(int index, net.osmand.binary.OsmandIndex.RoutingSubregion.Builder builderForValue) { + result.subregions_.set(index, builderForValue.build()); + return this; + } + public Builder addSubregions(net.osmand.binary.OsmandIndex.RoutingSubregion value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.add(value); + return this; + } + public Builder addSubregions(net.osmand.binary.OsmandIndex.RoutingSubregion.Builder builderForValue) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.add(builderForValue.build()); + return this; + } + public Builder addAllSubregions( + java.lang.Iterable values) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + super.addAll(values, result.subregions_); + return this; + } + public Builder clearSubregions() { + result.subregions_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:RoutingPart) + } + + static { + defaultInstance = new RoutingPart(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:RoutingPart) + } + + public static final class TransportPart extends + com.google.protobuf.GeneratedMessageLite { + // Use TransportPart.newBuilder() to construct. + private TransportPart() { + initFields(); + } + private TransportPart(boolean noInit) {} + + private static final TransportPart defaultInstance; + public static TransportPart getDefaultInstance() { + return defaultInstance; + } + + @Override + public TransportPart getDefaultInstanceForType() { + return defaultInstance; + } + + // required int64 size = 1; + public static final int SIZE_FIELD_NUMBER = 1; + private boolean hasSize; + private long size_ = 0L; + public boolean hasSize() { return hasSize; } + public long getSize() { return size_; } + + // required int64 offset = 2; + public static final int OFFSET_FIELD_NUMBER = 2; + private boolean hasOffset; + private long offset_ = 0L; + public boolean hasOffset() { return hasOffset; } + public long getOffset() { return offset_; } + + // optional string name = 3; + public static final int NAME_FIELD_NUMBER = 3; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional int32 left = 4; + public static final int LEFT_FIELD_NUMBER = 4; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // optional int32 right = 5; + public static final int RIGHT_FIELD_NUMBER = 5; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // optional int32 top = 6; + public static final int TOP_FIELD_NUMBER = 6; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // optional int32 bottom = 7; + public static final int BOTTOM_FIELD_NUMBER = 7; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // optional uint32 stringTableOffset = 8; + public static final int STRINGTABLEOFFSET_FIELD_NUMBER = 8; + private boolean hasStringTableOffset; + private int stringTableOffset_ = 0; + public boolean hasStringTableOffset() { return hasStringTableOffset; } + public int getStringTableOffset() { return stringTableOffset_; } + + // optional uint32 stringTableLength = 9; + public static final int STRINGTABLELENGTH_FIELD_NUMBER = 9; + private boolean hasStringTableLength; + private int stringTableLength_ = 0; + public boolean hasStringTableLength() { return hasStringTableLength; } + public int getStringTableLength() { return stringTableLength_; } + + // optional uint32 stopsTableOffset = 10; + public static final int STOPSTABLEOFFSET_FIELD_NUMBER = 10; + private boolean hasStopsTableOffset; + private int stopsTableOffset_ = 0; + public boolean hasStopsTableOffset() { return hasStopsTableOffset; } + public int getStopsTableOffset() { return stopsTableOffset_; } + + // optional uint32 stopsTableLength = 11; + public static final int STOPSTABLELENGTH_FIELD_NUMBER = 11; + private boolean hasStopsTableLength; + private int stopsTableLength_ = 0; + public boolean hasStopsTableLength() { return hasStopsTableLength; } + public int getStopsTableLength() { return stopsTableLength_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasSize) return false; + if (!hasOffset) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSize()) { + output.writeInt64(1, getSize()); + } + if (hasOffset()) { + output.writeInt64(2, getOffset()); + } + if (hasName()) { + output.writeString(3, getName()); + } + if (hasLeft()) { + output.writeInt32(4, getLeft()); + } + if (hasRight()) { + output.writeInt32(5, getRight()); + } + if (hasTop()) { + output.writeInt32(6, getTop()); + } + if (hasBottom()) { + output.writeInt32(7, getBottom()); + } + if (hasStringTableOffset()) { + output.writeUInt32(8, getStringTableOffset()); + } + if (hasStringTableLength()) { + output.writeUInt32(9, getStringTableLength()); + } + if (hasStopsTableOffset()) { + output.writeUInt32(10, getStopsTableOffset()); + } + if (hasStopsTableLength()) { + output.writeUInt32(11, getStopsTableLength()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSize()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, getSize()); + } + if (hasOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, getOffset()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getName()); + } + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(7, getBottom()); + } + if (hasStringTableOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(8, getStringTableOffset()); + } + if (hasStringTableLength()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(9, getStringTableLength()); + } + if (hasStopsTableOffset()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(10, getStopsTableOffset()); + } + if (hasStopsTableLength()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(11, getStopsTableLength()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.TransportPart parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandIndex.TransportPart parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandIndex.TransportPart prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.binary.OsmandIndex.TransportPart, Builder> { + private net.osmand.binary.OsmandIndex.TransportPart result; + + // Construct using net.osmand.binary.OsmandIndex.TransportPart.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandIndex.TransportPart(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandIndex.TransportPart internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandIndex.TransportPart(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.binary.OsmandIndex.TransportPart getDefaultInstanceForType() { + return net.osmand.binary.OsmandIndex.TransportPart.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandIndex.TransportPart build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandIndex.TransportPart buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandIndex.TransportPart buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandIndex.TransportPart returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.binary.OsmandIndex.TransportPart other) { + if (other == net.osmand.binary.OsmandIndex.TransportPart.getDefaultInstance()) return this; + if (other.hasSize()) { + setSize(other.getSize()); + } + if (other.hasOffset()) { + setOffset(other.getOffset()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (other.hasStringTableOffset()) { + setStringTableOffset(other.getStringTableOffset()); + } + if (other.hasStringTableLength()) { + setStringTableLength(other.getStringTableLength()); + } + if (other.hasStopsTableOffset()) { + setStopsTableOffset(other.getStopsTableOffset()); + } + if (other.hasStopsTableLength()) { + setStopsTableLength(other.getStopsTableLength()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 8: { + setSize(input.readInt64()); + break; + } + case 16: { + setOffset(input.readInt64()); + break; + } + case 26: { + setName(input.readString()); + break; + } + case 32: { + setLeft(input.readInt32()); + break; + } + case 40: { + setRight(input.readInt32()); + break; + } + case 48: { + setTop(input.readInt32()); + break; + } + case 56: { + setBottom(input.readInt32()); + break; + } + case 64: { + setStringTableOffset(input.readUInt32()); + break; + } + case 72: { + setStringTableLength(input.readUInt32()); + break; + } + case 80: { + setStopsTableOffset(input.readUInt32()); + break; + } + case 88: { + setStopsTableLength(input.readUInt32()); + break; + } + } + } + } + + + // required int64 size = 1; + public boolean hasSize() { + return result.hasSize(); + } + public long getSize() { + return result.getSize(); + } + public Builder setSize(long value) { + result.hasSize = true; + result.size_ = value; + return this; + } + public Builder clearSize() { + result.hasSize = false; + result.size_ = 0L; + return this; + } + + // required int64 offset = 2; + public boolean hasOffset() { + return result.hasOffset(); + } + public long getOffset() { + return result.getOffset(); + } + public Builder setOffset(long value) { + result.hasOffset = true; + result.offset_ = value; + return this; + } + public Builder clearOffset() { + result.hasOffset = false; + result.offset_ = 0L; + return this; + } + + // optional string name = 3; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional int32 left = 4; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // optional int32 right = 5; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // optional int32 top = 6; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // optional int32 bottom = 7; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // optional uint32 stringTableOffset = 8; + public boolean hasStringTableOffset() { + return result.hasStringTableOffset(); + } + public int getStringTableOffset() { + return result.getStringTableOffset(); + } + public Builder setStringTableOffset(int value) { + result.hasStringTableOffset = true; + result.stringTableOffset_ = value; + return this; + } + public Builder clearStringTableOffset() { + result.hasStringTableOffset = false; + result.stringTableOffset_ = 0; + return this; + } + + // optional uint32 stringTableLength = 9; + public boolean hasStringTableLength() { + return result.hasStringTableLength(); + } + public int getStringTableLength() { + return result.getStringTableLength(); + } + public Builder setStringTableLength(int value) { + result.hasStringTableLength = true; + result.stringTableLength_ = value; + return this; + } + public Builder clearStringTableLength() { + result.hasStringTableLength = false; + result.stringTableLength_ = 0; + return this; + } + + // optional uint32 stopsTableOffset = 10; + public boolean hasStopsTableOffset() { + return result.hasStopsTableOffset(); + } + public int getStopsTableOffset() { + return result.getStopsTableOffset(); + } + public Builder setStopsTableOffset(int value) { + result.hasStopsTableOffset = true; + result.stopsTableOffset_ = value; + return this; + } + public Builder clearStopsTableOffset() { + result.hasStopsTableOffset = false; + result.stopsTableOffset_ = 0; + return this; + } + + // optional uint32 stopsTableLength = 11; + public boolean hasStopsTableLength() { + return result.hasStopsTableLength(); + } + public int getStopsTableLength() { + return result.getStopsTableLength(); + } + public Builder setStopsTableLength(int value) { + result.hasStopsTableLength = true; + result.stopsTableLength_ = value; + return this; + } + public Builder clearStopsTableLength() { + result.hasStopsTableLength = false; + result.stopsTableLength_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:TransportPart) + } + + static { + defaultInstance = new TransportPart(true); + net.osmand.binary.OsmandIndex.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:TransportPart) + } + + + static { + } + + public static void internalForceInit() {} + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/OsmAnd-java/src/net/osmand/binary/OsmandOdb.java b/OsmAnd-java/src/net/osmand/binary/OsmandOdb.java new file mode 100644 index 0000000000..1b20c77ce9 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/OsmandOdb.java @@ -0,0 +1,24438 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: DataExtractionOSM/src/osmand_odb.proto + +package net.osmand.binary; + +public final class OsmandOdb { + private OsmandOdb() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public static final class OsmAndStructure extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndStructure.newBuilder() to construct. + private OsmAndStructure() { + initFields(); + } + private OsmAndStructure(boolean noInit) {} + + private static final OsmAndStructure defaultInstance; + public static OsmAndStructure getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndStructure getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndStructure_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndStructure_fieldAccessorTable; + } + + // required uint32 version = 1; + public static final int VERSION_FIELD_NUMBER = 1; + private boolean hasVersion; + private int version_ = 0; + public boolean hasVersion() { return hasVersion; } + public int getVersion() { return version_; } + + // required int64 dateCreated = 18; + public static final int DATECREATED_FIELD_NUMBER = 18; + private boolean hasDateCreated; + private long dateCreated_ = 0L; + public boolean hasDateCreated() { return hasDateCreated; } + public long getDateCreated() { return dateCreated_; } + + // repeated .OsmAndAddressIndex addressIndex = 7; + public static final int ADDRESSINDEX_FIELD_NUMBER = 7; + private java.util.List addressIndex_ = + java.util.Collections.emptyList(); + public java.util.List getAddressIndexList() { + return addressIndex_; + } + public int getAddressIndexCount() { return addressIndex_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getAddressIndex(int index) { + return addressIndex_.get(index); + } + + // repeated .OsmAndTransportIndex transportIndex = 4; + public static final int TRANSPORTINDEX_FIELD_NUMBER = 4; + private java.util.List transportIndex_ = + java.util.Collections.emptyList(); + public java.util.List getTransportIndexList() { + return transportIndex_; + } + public int getTransportIndexCount() { return transportIndex_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getTransportIndex(int index) { + return transportIndex_.get(index); + } + + // repeated .OsmAndPoiIndex poiIndex = 8; + public static final int POIINDEX_FIELD_NUMBER = 8; + private java.util.List poiIndex_ = + java.util.Collections.emptyList(); + public java.util.List getPoiIndexList() { + return poiIndex_; + } + public int getPoiIndexCount() { return poiIndex_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getPoiIndex(int index) { + return poiIndex_.get(index); + } + + // repeated .OsmAndMapIndex mapIndex = 6; + public static final int MAPINDEX_FIELD_NUMBER = 6; + private java.util.List mapIndex_ = + java.util.Collections.emptyList(); + public java.util.List getMapIndexList() { + return mapIndex_; + } + public int getMapIndexCount() { return mapIndex_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex getMapIndex(int index) { + return mapIndex_.get(index); + } + + // repeated .OsmAndRoutingIndex routingIndex = 9; + public static final int ROUTINGINDEX_FIELD_NUMBER = 9; + private java.util.List routingIndex_ = + java.util.Collections.emptyList(); + public java.util.List getRoutingIndexList() { + return routingIndex_; + } + public int getRoutingIndexCount() { return routingIndex_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex getRoutingIndex(int index) { + return routingIndex_.get(index); + } + + // required uint32 versionConfirm = 32; + public static final int VERSIONCONFIRM_FIELD_NUMBER = 32; + private boolean hasVersionConfirm; + private int versionConfirm_ = 0; + public boolean hasVersionConfirm() { return hasVersionConfirm; } + public int getVersionConfirm() { return versionConfirm_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasVersion) return false; + if (!hasDateCreated) return false; + if (!hasVersionConfirm) return false; + for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex element : getRoutingIndexList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasVersion()) { + output.writeUInt32(1, getVersion()); + } + for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) { + output.writeMessage(4, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) { + output.writeMessage(6, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) { + output.writeMessage(7, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) { + output.writeMessage(8, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex element : getRoutingIndexList()) { + output.writeMessage(9, element); + } + if (hasDateCreated()) { + output.writeInt64(18, getDateCreated()); + } + if (hasVersionConfirm()) { + output.writeUInt32(32, getVersionConfirm()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasVersion()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, getVersion()); + } + for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex element : getRoutingIndexList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, element); + } + if (hasDateCreated()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(18, getDateCreated()); + } + if (hasVersionConfirm()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(32, getVersionConfirm()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndStructure prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndStructure result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndStructure.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndStructure(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndStructure internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndStructure(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndStructure.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndStructure getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndStructure.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndStructure build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndStructure buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndStructure buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.addressIndex_ != java.util.Collections.EMPTY_LIST) { + result.addressIndex_ = + java.util.Collections.unmodifiableList(result.addressIndex_); + } + if (result.transportIndex_ != java.util.Collections.EMPTY_LIST) { + result.transportIndex_ = + java.util.Collections.unmodifiableList(result.transportIndex_); + } + if (result.poiIndex_ != java.util.Collections.EMPTY_LIST) { + result.poiIndex_ = + java.util.Collections.unmodifiableList(result.poiIndex_); + } + if (result.mapIndex_ != java.util.Collections.EMPTY_LIST) { + result.mapIndex_ = + java.util.Collections.unmodifiableList(result.mapIndex_); + } + if (result.routingIndex_ != java.util.Collections.EMPTY_LIST) { + result.routingIndex_ = + java.util.Collections.unmodifiableList(result.routingIndex_); + } + net.osmand.binary.OsmandOdb.OsmAndStructure returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndStructure) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndStructure)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndStructure other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndStructure.getDefaultInstance()) return this; + if (other.hasVersion()) { + setVersion(other.getVersion()); + } + if (other.hasDateCreated()) { + setDateCreated(other.getDateCreated()); + } + if (!other.addressIndex_.isEmpty()) { + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + result.addressIndex_.addAll(other.addressIndex_); + } + if (!other.transportIndex_.isEmpty()) { + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + result.transportIndex_.addAll(other.transportIndex_); + } + if (!other.poiIndex_.isEmpty()) { + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + result.poiIndex_.addAll(other.poiIndex_); + } + if (!other.mapIndex_.isEmpty()) { + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + result.mapIndex_.addAll(other.mapIndex_); + } + if (!other.routingIndex_.isEmpty()) { + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + result.routingIndex_.addAll(other.routingIndex_); + } + if (other.hasVersionConfirm()) { + setVersionConfirm(other.getVersionConfirm()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setVersion(input.readUInt32()); + break; + } + case 34: { + net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTransportIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addTransportIndex(subBuilder.buildPartial()); + break; + } + case 50: { + net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addMapIndex(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAddressIndex(subBuilder.buildPartial()); + break; + } + case 66: { + net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPoiIndex(subBuilder.buildPartial()); + break; + } + case 74: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRoutingIndex(subBuilder.buildPartial()); + break; + } + case 144: { + setDateCreated(input.readInt64()); + break; + } + case 256: { + setVersionConfirm(input.readUInt32()); + break; + } + } + } + } + + + // required uint32 version = 1; + public boolean hasVersion() { + return result.hasVersion(); + } + public int getVersion() { + return result.getVersion(); + } + public Builder setVersion(int value) { + result.hasVersion = true; + result.version_ = value; + return this; + } + public Builder clearVersion() { + result.hasVersion = false; + result.version_ = 0; + return this; + } + + // required int64 dateCreated = 18; + public boolean hasDateCreated() { + return result.hasDateCreated(); + } + public long getDateCreated() { + return result.getDateCreated(); + } + public Builder setDateCreated(long value) { + result.hasDateCreated = true; + result.dateCreated_ = value; + return this; + } + public Builder clearDateCreated() { + result.hasDateCreated = false; + result.dateCreated_ = 0L; + return this; + } + + // repeated .OsmAndAddressIndex addressIndex = 7; + public java.util.List getAddressIndexList() { + return java.util.Collections.unmodifiableList(result.addressIndex_); + } + public int getAddressIndexCount() { + return result.getAddressIndexCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getAddressIndex(int index) { + return result.getAddressIndex(index); + } + public Builder setAddressIndex(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.addressIndex_.set(index, value); + return this; + } + public Builder setAddressIndex(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder builderForValue) { + result.addressIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addAddressIndex(net.osmand.binary.OsmandOdb.OsmAndAddressIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + result.addressIndex_.add(value); + return this; + } + public Builder addAddressIndex(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder builderForValue) { + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + result.addressIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllAddressIndex( + java.lang.Iterable values) { + if (result.addressIndex_.isEmpty()) { + result.addressIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.addressIndex_); + return this; + } + public Builder clearAddressIndex() { + result.addressIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndTransportIndex transportIndex = 4; + public java.util.List getTransportIndexList() { + return java.util.Collections.unmodifiableList(result.transportIndex_); + } + public int getTransportIndexCount() { + return result.getTransportIndexCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getTransportIndex(int index) { + return result.getTransportIndex(index); + } + public Builder setTransportIndex(int index, net.osmand.binary.OsmandOdb.OsmAndTransportIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.transportIndex_.set(index, value); + return this; + } + public Builder setTransportIndex(int index, net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder builderForValue) { + result.transportIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addTransportIndex(net.osmand.binary.OsmandOdb.OsmAndTransportIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + result.transportIndex_.add(value); + return this; + } + public Builder addTransportIndex(net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder builderForValue) { + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + result.transportIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllTransportIndex( + java.lang.Iterable values) { + if (result.transportIndex_.isEmpty()) { + result.transportIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.transportIndex_); + return this; + } + public Builder clearTransportIndex() { + result.transportIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndPoiIndex poiIndex = 8; + public java.util.List getPoiIndexList() { + return java.util.Collections.unmodifiableList(result.poiIndex_); + } + public int getPoiIndexCount() { + return result.getPoiIndexCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getPoiIndex(int index) { + return result.getPoiIndex(index); + } + public Builder setPoiIndex(int index, net.osmand.binary.OsmandOdb.OsmAndPoiIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.poiIndex_.set(index, value); + return this; + } + public Builder setPoiIndex(int index, net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder builderForValue) { + result.poiIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addPoiIndex(net.osmand.binary.OsmandOdb.OsmAndPoiIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + result.poiIndex_.add(value); + return this; + } + public Builder addPoiIndex(net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder builderForValue) { + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + result.poiIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllPoiIndex( + java.lang.Iterable values) { + if (result.poiIndex_.isEmpty()) { + result.poiIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.poiIndex_); + return this; + } + public Builder clearPoiIndex() { + result.poiIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndMapIndex mapIndex = 6; + public java.util.List getMapIndexList() { + return java.util.Collections.unmodifiableList(result.mapIndex_); + } + public int getMapIndexCount() { + return result.getMapIndexCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex getMapIndex(int index) { + return result.getMapIndex(index); + } + public Builder setMapIndex(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.mapIndex_.set(index, value); + return this; + } + public Builder setMapIndex(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder builderForValue) { + result.mapIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addMapIndex(net.osmand.binary.OsmandOdb.OsmAndMapIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + result.mapIndex_.add(value); + return this; + } + public Builder addMapIndex(net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder builderForValue) { + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + result.mapIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllMapIndex( + java.lang.Iterable values) { + if (result.mapIndex_.isEmpty()) { + result.mapIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.mapIndex_); + return this; + } + public Builder clearMapIndex() { + result.mapIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndRoutingIndex routingIndex = 9; + public java.util.List getRoutingIndexList() { + return java.util.Collections.unmodifiableList(result.routingIndex_); + } + public int getRoutingIndexCount() { + return result.getRoutingIndexCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex getRoutingIndex(int index) { + return result.getRoutingIndex(index); + } + public Builder setRoutingIndex(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.routingIndex_.set(index, value); + return this; + } + public Builder setRoutingIndex(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder builderForValue) { + result.routingIndex_.set(index, builderForValue.build()); + return this; + } + public Builder addRoutingIndex(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + result.routingIndex_.add(value); + return this; + } + public Builder addRoutingIndex(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder builderForValue) { + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + result.routingIndex_.add(builderForValue.build()); + return this; + } + public Builder addAllRoutingIndex( + java.lang.Iterable values) { + if (result.routingIndex_.isEmpty()) { + result.routingIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.routingIndex_); + return this; + } + public Builder clearRoutingIndex() { + result.routingIndex_ = java.util.Collections.emptyList(); + return this; + } + + // required uint32 versionConfirm = 32; + public boolean hasVersionConfirm() { + return result.hasVersionConfirm(); + } + public int getVersionConfirm() { + return result.getVersionConfirm(); + } + public Builder setVersionConfirm(int value) { + result.hasVersionConfirm = true; + result.versionConfirm_ = value; + return this; + } + public Builder clearVersionConfirm() { + result.hasVersionConfirm = false; + result.versionConfirm_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndStructure) + } + + static { + defaultInstance = new OsmAndStructure(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndStructure) + } + + public static final class OsmAndTileBox extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndTileBox.newBuilder() to construct. + private OsmAndTileBox() { + initFields(); + } + private OsmAndTileBox(boolean noInit) {} + + private static final OsmAndTileBox defaultInstance; + public static OsmAndTileBox getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndTileBox getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndTileBox_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndTileBox_fieldAccessorTable; + } + + // required uint32 left = 1; + public static final int LEFT_FIELD_NUMBER = 1; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required uint32 right = 2; + public static final int RIGHT_FIELD_NUMBER = 2; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required uint32 top = 3; + public static final int TOP_FIELD_NUMBER = 3; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required uint32 bottom = 4; + public static final int BOTTOM_FIELD_NUMBER = 4; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasLeft()) { + output.writeUInt32(1, getLeft()); + } + if (hasRight()) { + output.writeUInt32(2, getRight()); + } + if (hasTop()) { + output.writeUInt32(3, getTop()); + } + if (hasBottom()) { + output.writeUInt32(4, getBottom()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, getBottom()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndTileBox prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndTileBox result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndTileBox(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndTileBox internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndTileBox(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndTileBox.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndTileBox getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndTileBox build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndTileBox buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndTileBox buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndTileBox returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndTileBox) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndTileBox)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndTileBox other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) return this; + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setLeft(input.readUInt32()); + break; + } + case 16: { + setRight(input.readUInt32()); + break; + } + case 24: { + setTop(input.readUInt32()); + break; + } + case 32: { + setBottom(input.readUInt32()); + break; + } + } + } + } + + + // required uint32 left = 1; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required uint32 right = 2; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required uint32 top = 3; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required uint32 bottom = 4; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndTileBox) + } + + static { + defaultInstance = new OsmAndTileBox(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndTileBox) + } + + public static final class StringTable extends + com.google.protobuf.GeneratedMessage { + // Use StringTable.newBuilder() to construct. + private StringTable() { + initFields(); + } + private StringTable(boolean noInit) {} + + private static final StringTable defaultInstance; + public static StringTable getDefaultInstance() { + return defaultInstance; + } + + @Override + public StringTable getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_StringTable_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_StringTable_fieldAccessorTable; + } + + // repeated string s = 1; + public static final int S_FIELD_NUMBER = 1; + private java.util.List s_ = + java.util.Collections.emptyList(); + public java.util.List getSList() { + return s_; + } + public int getSCount() { return s_.size(); } + public java.lang.String getS(int index) { + return s_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (java.lang.String element : getSList()) { + output.writeString(1, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (java.lang.String element : getSList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeStringSizeNoTag(element); + } + size += dataSize; + size += 1 * getSList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.StringTable parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.StringTable parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StringTable parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.StringTable prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.StringTable result; + + // Construct using net.osmand.binary.OsmandOdb.StringTable.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.StringTable(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.StringTable internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.StringTable(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.StringTable.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.StringTable getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.StringTable build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.StringTable buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.StringTable buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.s_ != java.util.Collections.EMPTY_LIST) { + result.s_ = + java.util.Collections.unmodifiableList(result.s_); + } + net.osmand.binary.OsmandOdb.StringTable returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.StringTable) { + return mergeFrom((net.osmand.binary.OsmandOdb.StringTable)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.StringTable other) { + if (other == net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) return this; + if (!other.s_.isEmpty()) { + if (result.s_.isEmpty()) { + result.s_ = new java.util.ArrayList(); + } + result.s_.addAll(other.s_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + addS(input.readString()); + break; + } + } + } + } + + + // repeated string s = 1; + public java.util.List getSList() { + return java.util.Collections.unmodifiableList(result.s_); + } + public int getSCount() { + return result.getSCount(); + } + public java.lang.String getS(int index) { + return result.getS(index); + } + public Builder setS(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.s_.set(index, value); + return this; + } + public Builder addS(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.s_.isEmpty()) { + result.s_ = new java.util.ArrayList(); + } + result.s_.add(value); + return this; + } + public Builder addAllS( + java.lang.Iterable values) { + if (result.s_.isEmpty()) { + result.s_ = new java.util.ArrayList(); + } + super.addAll(values, result.s_); + return this; + } + public Builder clearS() { + result.s_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:StringTable) + } + + static { + defaultInstance = new StringTable(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:StringTable) + } + + public static final class IndexedStringTable extends + com.google.protobuf.GeneratedMessage { + // Use IndexedStringTable.newBuilder() to construct. + private IndexedStringTable() { + initFields(); + } + private IndexedStringTable(boolean noInit) {} + + private static final IndexedStringTable defaultInstance; + public static IndexedStringTable getDefaultInstance() { + return defaultInstance; + } + + @Override + public IndexedStringTable getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_IndexedStringTable_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_IndexedStringTable_fieldAccessorTable; + } + + // optional string prefix = 1; + public static final int PREFIX_FIELD_NUMBER = 1; + private boolean hasPrefix; + private java.lang.String prefix_ = ""; + public boolean hasPrefix() { return hasPrefix; } + public java.lang.String getPrefix() { return prefix_; } + + // repeated string key = 3; + public static final int KEY_FIELD_NUMBER = 3; + private java.util.List key_ = + java.util.Collections.emptyList(); + public java.util.List getKeyList() { + return key_; + } + public int getKeyCount() { return key_.size(); } + public java.lang.String getKey(int index) { + return key_.get(index); + } + + // repeated fixed32 val = 4; + public static final int VAL_FIELD_NUMBER = 4; + private java.util.List val_ = + java.util.Collections.emptyList(); + public java.util.List getValList() { + return val_; + } + public int getValCount() { return val_.size(); } + public int getVal(int index) { + return val_.get(index); + } + + // repeated .IndexedStringTable subtables = 5; + public static final int SUBTABLES_FIELD_NUMBER = 5; + private java.util.List subtables_ = + java.util.Collections.emptyList(); + public java.util.List getSubtablesList() { + return subtables_; + } + public int getSubtablesCount() { return subtables_.size(); } + public net.osmand.binary.OsmandOdb.IndexedStringTable getSubtables(int index) { + return subtables_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasPrefix()) { + output.writeString(1, getPrefix()); + } + for (java.lang.String element : getKeyList()) { + output.writeString(3, element); + } + for (int element : getValList()) { + output.writeFixed32(4, element); + } + for (net.osmand.binary.OsmandOdb.IndexedStringTable element : getSubtablesList()) { + output.writeMessage(5, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasPrefix()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getPrefix()); + } + { + int dataSize = 0; + for (java.lang.String element : getKeyList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeStringSizeNoTag(element); + } + size += dataSize; + size += 1 * getKeyList().size(); + } + { + int dataSize = 0; + dataSize = 4 * getValList().size(); + size += dataSize; + size += 1 * getValList().size(); + } + for (net.osmand.binary.OsmandOdb.IndexedStringTable element : getSubtablesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.IndexedStringTable prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.IndexedStringTable result; + + // Construct using net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.IndexedStringTable(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.IndexedStringTable internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.IndexedStringTable(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.IndexedStringTable.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.IndexedStringTable getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.IndexedStringTable build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.IndexedStringTable buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.IndexedStringTable buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.key_ != java.util.Collections.EMPTY_LIST) { + result.key_ = + java.util.Collections.unmodifiableList(result.key_); + } + if (result.val_ != java.util.Collections.EMPTY_LIST) { + result.val_ = + java.util.Collections.unmodifiableList(result.val_); + } + if (result.subtables_ != java.util.Collections.EMPTY_LIST) { + result.subtables_ = + java.util.Collections.unmodifiableList(result.subtables_); + } + net.osmand.binary.OsmandOdb.IndexedStringTable returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.IndexedStringTable) { + return mergeFrom((net.osmand.binary.OsmandOdb.IndexedStringTable)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.IndexedStringTable other) { + if (other == net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) return this; + if (other.hasPrefix()) { + setPrefix(other.getPrefix()); + } + if (!other.key_.isEmpty()) { + if (result.key_.isEmpty()) { + result.key_ = new java.util.ArrayList(); + } + result.key_.addAll(other.key_); + } + if (!other.val_.isEmpty()) { + if (result.val_.isEmpty()) { + result.val_ = new java.util.ArrayList(); + } + result.val_.addAll(other.val_); + } + if (!other.subtables_.isEmpty()) { + if (result.subtables_.isEmpty()) { + result.subtables_ = new java.util.ArrayList(); + } + result.subtables_.addAll(other.subtables_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setPrefix(input.readString()); + break; + } + case 26: { + addKey(input.readString()); + break; + } + case 37: { + addVal(input.readFixed32()); + break; + } + case 34: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addVal(input.readFixed32()); + } + input.popLimit(limit); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubtables(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional string prefix = 1; + public boolean hasPrefix() { + return result.hasPrefix(); + } + public java.lang.String getPrefix() { + return result.getPrefix(); + } + public Builder setPrefix(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasPrefix = true; + result.prefix_ = value; + return this; + } + public Builder clearPrefix() { + result.hasPrefix = false; + result.prefix_ = getDefaultInstance().getPrefix(); + return this; + } + + // repeated string key = 3; + public java.util.List getKeyList() { + return java.util.Collections.unmodifiableList(result.key_); + } + public int getKeyCount() { + return result.getKeyCount(); + } + public java.lang.String getKey(int index) { + return result.getKey(index); + } + public Builder setKey(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.key_.set(index, value); + return this; + } + public Builder addKey(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.key_.isEmpty()) { + result.key_ = new java.util.ArrayList(); + } + result.key_.add(value); + return this; + } + public Builder addAllKey( + java.lang.Iterable values) { + if (result.key_.isEmpty()) { + result.key_ = new java.util.ArrayList(); + } + super.addAll(values, result.key_); + return this; + } + public Builder clearKey() { + result.key_ = java.util.Collections.emptyList(); + return this; + } + + // repeated fixed32 val = 4; + public java.util.List getValList() { + return java.util.Collections.unmodifiableList(result.val_); + } + public int getValCount() { + return result.getValCount(); + } + public int getVal(int index) { + return result.getVal(index); + } + public Builder setVal(int index, int value) { + result.val_.set(index, value); + return this; + } + public Builder addVal(int value) { + if (result.val_.isEmpty()) { + result.val_ = new java.util.ArrayList(); + } + result.val_.add(value); + return this; + } + public Builder addAllVal( + java.lang.Iterable values) { + if (result.val_.isEmpty()) { + result.val_ = new java.util.ArrayList(); + } + super.addAll(values, result.val_); + return this; + } + public Builder clearVal() { + result.val_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .IndexedStringTable subtables = 5; + public java.util.List getSubtablesList() { + return java.util.Collections.unmodifiableList(result.subtables_); + } + public int getSubtablesCount() { + return result.getSubtablesCount(); + } + public net.osmand.binary.OsmandOdb.IndexedStringTable getSubtables(int index) { + return result.getSubtables(index); + } + public Builder setSubtables(int index, net.osmand.binary.OsmandOdb.IndexedStringTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.subtables_.set(index, value); + return this; + } + public Builder setSubtables(int index, net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) { + result.subtables_.set(index, builderForValue.build()); + return this; + } + public Builder addSubtables(net.osmand.binary.OsmandOdb.IndexedStringTable value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subtables_.isEmpty()) { + result.subtables_ = new java.util.ArrayList(); + } + result.subtables_.add(value); + return this; + } + public Builder addSubtables(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) { + if (result.subtables_.isEmpty()) { + result.subtables_ = new java.util.ArrayList(); + } + result.subtables_.add(builderForValue.build()); + return this; + } + public Builder addAllSubtables( + java.lang.Iterable values) { + if (result.subtables_.isEmpty()) { + result.subtables_ = new java.util.ArrayList(); + } + super.addAll(values, result.subtables_); + return this; + } + public Builder clearSubtables() { + result.subtables_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:IndexedStringTable) + } + + static { + defaultInstance = new IndexedStringTable(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:IndexedStringTable) + } + + public static final class OsmAndMapIndex extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndMapIndex.newBuilder() to construct. + private OsmAndMapIndex() { + initFields(); + } + private OsmAndMapIndex(boolean noInit) {} + + private static final OsmAndMapIndex defaultInstance; + public static OsmAndMapIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndMapIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_fieldAccessorTable; + } + + public static final class MapEncodingRule extends + com.google.protobuf.GeneratedMessage { + // Use MapEncodingRule.newBuilder() to construct. + private MapEncodingRule() { + initFields(); + } + private MapEncodingRule(boolean noInit) {} + + private static final MapEncodingRule defaultInstance; + public static MapEncodingRule getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapEncodingRule getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapEncodingRule_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapEncodingRule_fieldAccessorTable; + } + + // required string tag = 3; + public static final int TAG_FIELD_NUMBER = 3; + private boolean hasTag; + private java.lang.String tag_ = ""; + public boolean hasTag() { return hasTag; } + public java.lang.String getTag() { return tag_; } + + // optional string value = 5; + public static final int VALUE_FIELD_NUMBER = 5; + private boolean hasValue; + private java.lang.String value_ = ""; + public boolean hasValue() { return hasValue; } + public java.lang.String getValue() { return value_; } + + // optional uint32 id = 7; + public static final int ID_FIELD_NUMBER = 7; + private boolean hasId; + private int id_ = 0; + public boolean hasId() { return hasId; } + public int getId() { return id_; } + + // optional uint32 minZoom = 9; + public static final int MINZOOM_FIELD_NUMBER = 9; + private boolean hasMinZoom; + private int minZoom_ = 0; + public boolean hasMinZoom() { return hasMinZoom; } + public int getMinZoom() { return minZoom_; } + + // optional uint32 type = 10; + public static final int TYPE_FIELD_NUMBER = 10; + private boolean hasType; + private int type_ = 0; + public boolean hasType() { return hasType; } + public int getType() { return type_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasTag) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasTag()) { + output.writeString(3, getTag()); + } + if (hasValue()) { + output.writeString(5, getValue()); + } + if (hasId()) { + output.writeUInt32(7, getId()); + } + if (hasMinZoom()) { + output.writeUInt32(9, getMinZoom()); + } + if (hasType()) { + output.writeUInt32(10, getType()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasTag()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getTag()); + } + if (hasValue()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(5, getValue()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(7, getId()); + } + if (hasMinZoom()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(9, getMinZoom()); + } + if (hasType()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(10, getType()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.getDefaultInstance()) return this; + if (other.hasTag()) { + setTag(other.getTag()); + } + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasMinZoom()) { + setMinZoom(other.getMinZoom()); + } + if (other.hasType()) { + setType(other.getType()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 26: { + setTag(input.readString()); + break; + } + case 42: { + setValue(input.readString()); + break; + } + case 56: { + setId(input.readUInt32()); + break; + } + case 72: { + setMinZoom(input.readUInt32()); + break; + } + case 80: { + setType(input.readUInt32()); + break; + } + } + } + } + + + // required string tag = 3; + public boolean hasTag() { + return result.hasTag(); + } + public java.lang.String getTag() { + return result.getTag(); + } + public Builder setTag(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTag = true; + result.tag_ = value; + return this; + } + public Builder clearTag() { + result.hasTag = false; + result.tag_ = getDefaultInstance().getTag(); + return this; + } + + // optional string value = 5; + public boolean hasValue() { + return result.hasValue(); + } + public java.lang.String getValue() { + return result.getValue(); + } + public Builder setValue(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasValue = true; + result.value_ = value; + return this; + } + public Builder clearValue() { + result.hasValue = false; + result.value_ = getDefaultInstance().getValue(); + return this; + } + + // optional uint32 id = 7; + public boolean hasId() { + return result.hasId(); + } + public int getId() { + return result.getId(); + } + public Builder setId(int value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0; + return this; + } + + // optional uint32 minZoom = 9; + public boolean hasMinZoom() { + return result.hasMinZoom(); + } + public int getMinZoom() { + return result.getMinZoom(); + } + public Builder setMinZoom(int value) { + result.hasMinZoom = true; + result.minZoom_ = value; + return this; + } + public Builder clearMinZoom() { + result.hasMinZoom = false; + result.minZoom_ = 0; + return this; + } + + // optional uint32 type = 10; + public boolean hasType() { + return result.hasType(); + } + public int getType() { + return result.getType(); + } + public Builder setType(int value) { + result.hasType = true; + result.type_ = value; + return this; + } + public Builder clearType() { + result.hasType = false; + result.type_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndMapIndex.MapEncodingRule) + } + + static { + defaultInstance = new MapEncodingRule(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndMapIndex.MapEncodingRule) + } + + public static final class MapRootLevel extends + com.google.protobuf.GeneratedMessage { + // Use MapRootLevel.newBuilder() to construct. + private MapRootLevel() { + initFields(); + } + private MapRootLevel(boolean noInit) {} + + private static final MapRootLevel defaultInstance; + public static MapRootLevel getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapRootLevel getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapRootLevel_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapRootLevel_fieldAccessorTable; + } + + // required int32 maxZoom = 1; + public static final int MAXZOOM_FIELD_NUMBER = 1; + private boolean hasMaxZoom; + private int maxZoom_ = 0; + public boolean hasMaxZoom() { return hasMaxZoom; } + public int getMaxZoom() { return maxZoom_; } + + // required int32 minZoom = 2; + public static final int MINZOOM_FIELD_NUMBER = 2; + private boolean hasMinZoom; + private int minZoom_ = 0; + public boolean hasMinZoom() { return hasMinZoom; } + public int getMinZoom() { return minZoom_; } + + // required int32 left = 3; + public static final int LEFT_FIELD_NUMBER = 3; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required int32 right = 4; + public static final int RIGHT_FIELD_NUMBER = 4; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required int32 top = 5; + public static final int TOP_FIELD_NUMBER = 5; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required int32 bottom = 6; + public static final int BOTTOM_FIELD_NUMBER = 6; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // repeated .OsmAndMapIndex.MapDataBox boxes = 7; + public static final int BOXES_FIELD_NUMBER = 7; + private java.util.List boxes_ = + java.util.Collections.emptyList(); + public java.util.List getBoxesList() { + return boxes_; + } + public int getBoxesCount() { return boxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) { + return boxes_.get(index); + } + + // repeated .MapDataBlock blocks = 15; + public static final int BLOCKS_FIELD_NUMBER = 15; + private java.util.List blocks_ = + java.util.Collections.emptyList(); + public java.util.List getBlocksList() { + return blocks_; + } + public int getBlocksCount() { return blocks_.size(); } + public net.osmand.binary.OsmandOdb.MapDataBlock getBlocks(int index) { + return blocks_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasMaxZoom) return false; + if (!hasMinZoom) return false; + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.MapDataBlock element : getBlocksList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasMaxZoom()) { + output.writeInt32(1, getMaxZoom()); + } + if (hasMinZoom()) { + output.writeInt32(2, getMinZoom()); + } + if (hasLeft()) { + output.writeInt32(3, getLeft()); + } + if (hasRight()) { + output.writeInt32(4, getRight()); + } + if (hasTop()) { + output.writeInt32(5, getTop()); + } + if (hasBottom()) { + output.writeInt32(6, getBottom()); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) { + output.writeMessage(7, element); + } + for (net.osmand.binary.OsmandOdb.MapDataBlock element : getBlocksList()) { + output.writeMessage(15, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasMaxZoom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getMaxZoom()); + } + if (hasMinZoom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, getMinZoom()); + } + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, getBottom()); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + for (net.osmand.binary.OsmandOdb.MapDataBlock element : getBlocksList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(15, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.boxes_ != java.util.Collections.EMPTY_LIST) { + result.boxes_ = + java.util.Collections.unmodifiableList(result.boxes_); + } + if (result.blocks_ != java.util.Collections.EMPTY_LIST) { + result.blocks_ = + java.util.Collections.unmodifiableList(result.blocks_); + } + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.getDefaultInstance()) return this; + if (other.hasMaxZoom()) { + setMaxZoom(other.getMaxZoom()); + } + if (other.hasMinZoom()) { + setMinZoom(other.getMinZoom()); + } + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (!other.boxes_.isEmpty()) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.addAll(other.boxes_); + } + if (!other.blocks_.isEmpty()) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.addAll(other.blocks_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setMaxZoom(input.readInt32()); + break; + } + case 16: { + setMinZoom(input.readInt32()); + break; + } + case 24: { + setLeft(input.readInt32()); + break; + } + case 32: { + setRight(input.readInt32()); + break; + } + case 40: { + setTop(input.readInt32()); + break; + } + case 48: { + setBottom(input.readInt32()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBoxes(subBuilder.buildPartial()); + break; + } + case 122: { + net.osmand.binary.OsmandOdb.MapDataBlock.Builder subBuilder = net.osmand.binary.OsmandOdb.MapDataBlock.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBlocks(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required int32 maxZoom = 1; + public boolean hasMaxZoom() { + return result.hasMaxZoom(); + } + public int getMaxZoom() { + return result.getMaxZoom(); + } + public Builder setMaxZoom(int value) { + result.hasMaxZoom = true; + result.maxZoom_ = value; + return this; + } + public Builder clearMaxZoom() { + result.hasMaxZoom = false; + result.maxZoom_ = 0; + return this; + } + + // required int32 minZoom = 2; + public boolean hasMinZoom() { + return result.hasMinZoom(); + } + public int getMinZoom() { + return result.getMinZoom(); + } + public Builder setMinZoom(int value) { + result.hasMinZoom = true; + result.minZoom_ = value; + return this; + } + public Builder clearMinZoom() { + result.hasMinZoom = false; + result.minZoom_ = 0; + return this; + } + + // required int32 left = 3; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required int32 right = 4; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required int32 top = 5; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required int32 bottom = 6; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // repeated .OsmAndMapIndex.MapDataBox boxes = 7; + public java.util.List getBoxesList() { + return java.util.Collections.unmodifiableList(result.boxes_); + } + public int getBoxesCount() { + return result.getBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) { + return result.getBoxes(index); + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.boxes_.set(index, value); + return this; + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) { + result.boxes_.set(index, builderForValue.build()); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(value); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(builderForValue.build()); + return this; + } + public Builder addAllBoxes( + java.lang.Iterable values) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.boxes_); + return this; + } + public Builder clearBoxes() { + result.boxes_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .MapDataBlock blocks = 15; + public java.util.List getBlocksList() { + return java.util.Collections.unmodifiableList(result.blocks_); + } + public int getBlocksCount() { + return result.getBlocksCount(); + } + public net.osmand.binary.OsmandOdb.MapDataBlock getBlocks(int index) { + return result.getBlocks(index); + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.MapDataBlock value) { + if (value == null) { + throw new NullPointerException(); + } + result.blocks_.set(index, value); + return this; + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.MapDataBlock.Builder builderForValue) { + result.blocks_.set(index, builderForValue.build()); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.MapDataBlock value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(value); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.MapDataBlock.Builder builderForValue) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(builderForValue.build()); + return this; + } + public Builder addAllBlocks( + java.lang.Iterable values) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + super.addAll(values, result.blocks_); + return this; + } + public Builder clearBlocks() { + result.blocks_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndMapIndex.MapRootLevel) + } + + static { + defaultInstance = new MapRootLevel(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndMapIndex.MapRootLevel) + } + + public static final class MapDataBox extends + com.google.protobuf.GeneratedMessage { + // Use MapDataBox.newBuilder() to construct. + private MapDataBox() { + initFields(); + } + private MapDataBox(boolean noInit) {} + + private static final MapDataBox defaultInstance; + public static MapDataBox getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapDataBox getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapDataBox_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapDataBox_fieldAccessorTable; + } + + // required sint32 left = 1; + public static final int LEFT_FIELD_NUMBER = 1; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required sint32 right = 2; + public static final int RIGHT_FIELD_NUMBER = 2; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required sint32 top = 3; + public static final int TOP_FIELD_NUMBER = 3; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required sint32 bottom = 4; + public static final int BOTTOM_FIELD_NUMBER = 4; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // optional fixed32 shiftToMapData = 5; + public static final int SHIFTTOMAPDATA_FIELD_NUMBER = 5; + private boolean hasShiftToMapData; + private int shiftToMapData_ = 0; + public boolean hasShiftToMapData() { return hasShiftToMapData; } + public int getShiftToMapData() { return shiftToMapData_; } + + // optional bool ocean = 6; + public static final int OCEAN_FIELD_NUMBER = 6; + private boolean hasOcean; + private boolean ocean_ = false; + public boolean hasOcean() { return hasOcean; } + public boolean getOcean() { return ocean_; } + + // repeated .OsmAndMapIndex.MapDataBox boxes = 7; + public static final int BOXES_FIELD_NUMBER = 7; + private java.util.List boxes_ = + java.util.Collections.emptyList(); + public java.util.List getBoxesList() { + return boxes_; + } + public int getBoxesCount() { return boxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) { + return boxes_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasLeft()) { + output.writeSInt32(1, getLeft()); + } + if (hasRight()) { + output.writeSInt32(2, getRight()); + } + if (hasTop()) { + output.writeSInt32(3, getTop()); + } + if (hasBottom()) { + output.writeSInt32(4, getBottom()); + } + if (hasShiftToMapData()) { + output.writeFixed32(5, getShiftToMapData()); + } + if (hasOcean()) { + output.writeBool(6, getOcean()); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) { + output.writeMessage(7, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(1, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(4, getBottom()); + } + if (hasShiftToMapData()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(5, getShiftToMapData()); + } + if (hasOcean()) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, getOcean()); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.boxes_ != java.util.Collections.EMPTY_LIST) { + result.boxes_ = + java.util.Collections.unmodifiableList(result.boxes_); + } + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.getDefaultInstance()) return this; + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (other.hasShiftToMapData()) { + setShiftToMapData(other.getShiftToMapData()); + } + if (other.hasOcean()) { + setOcean(other.getOcean()); + } + if (!other.boxes_.isEmpty()) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.addAll(other.boxes_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setLeft(input.readSInt32()); + break; + } + case 16: { + setRight(input.readSInt32()); + break; + } + case 24: { + setTop(input.readSInt32()); + break; + } + case 32: { + setBottom(input.readSInt32()); + break; + } + case 45: { + setShiftToMapData(input.readFixed32()); + break; + } + case 48: { + setOcean(input.readBool()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBoxes(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required sint32 left = 1; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required sint32 right = 2; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required sint32 top = 3; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required sint32 bottom = 4; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // optional fixed32 shiftToMapData = 5; + public boolean hasShiftToMapData() { + return result.hasShiftToMapData(); + } + public int getShiftToMapData() { + return result.getShiftToMapData(); + } + public Builder setShiftToMapData(int value) { + result.hasShiftToMapData = true; + result.shiftToMapData_ = value; + return this; + } + public Builder clearShiftToMapData() { + result.hasShiftToMapData = false; + result.shiftToMapData_ = 0; + return this; + } + + // optional bool ocean = 6; + public boolean hasOcean() { + return result.hasOcean(); + } + public boolean getOcean() { + return result.getOcean(); + } + public Builder setOcean(boolean value) { + result.hasOcean = true; + result.ocean_ = value; + return this; + } + public Builder clearOcean() { + result.hasOcean = false; + result.ocean_ = false; + return this; + } + + // repeated .OsmAndMapIndex.MapDataBox boxes = 7; + public java.util.List getBoxesList() { + return java.util.Collections.unmodifiableList(result.boxes_); + } + public int getBoxesCount() { + return result.getBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) { + return result.getBoxes(index); + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.boxes_.set(index, value); + return this; + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) { + result.boxes_.set(index, builderForValue.build()); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(value); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(builderForValue.build()); + return this; + } + public Builder addAllBoxes( + java.lang.Iterable values) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.boxes_); + return this; + } + public Builder clearBoxes() { + result.boxes_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndMapIndex.MapDataBox) + } + + static { + defaultInstance = new MapDataBox(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndMapIndex.MapDataBox) + } + + // required string name = 2; + public static final int NAME_FIELD_NUMBER = 2; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated .OsmAndMapIndex.MapEncodingRule rules = 4; + public static final int RULES_FIELD_NUMBER = 4; + private java.util.List rules_ = + java.util.Collections.emptyList(); + public java.util.List getRulesList() { + return rules_; + } + public int getRulesCount() { return rules_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule getRules(int index) { + return rules_.get(index); + } + + // repeated .OsmAndMapIndex.MapRootLevel levels = 5; + public static final int LEVELS_FIELD_NUMBER = 5; + private java.util.List levels_ = + java.util.Collections.emptyList(); + public java.util.List getLevelsList() { + return levels_; + } + public int getLevelsCount() { return levels_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel getLevels(int index) { + return levels_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule element : getRulesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel element : getLevelsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(2, getName()); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule element : getRulesList()) { + output.writeMessage(4, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel element : getLevelsList()) { + output.writeMessage(5, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getName()); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule element : getRulesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel element : getLevelsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndMapIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndMapIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndMapIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndMapIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.rules_ != java.util.Collections.EMPTY_LIST) { + result.rules_ = + java.util.Collections.unmodifiableList(result.rules_); + } + if (result.levels_ != java.util.Collections.EMPTY_LIST) { + result.levels_ = + java.util.Collections.unmodifiableList(result.levels_); + } + net.osmand.binary.OsmandOdb.OsmAndMapIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (!other.rules_.isEmpty()) { + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + result.rules_.addAll(other.rules_); + } + if (!other.levels_.isEmpty()) { + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + result.levels_.addAll(other.levels_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 18: { + setName(input.readString()); + break; + } + case 34: { + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRules(subBuilder.buildPartial()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addLevels(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required string name = 2; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated .OsmAndMapIndex.MapEncodingRule rules = 4; + public java.util.List getRulesList() { + return java.util.Collections.unmodifiableList(result.rules_); + } + public int getRulesCount() { + return result.getRulesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule getRules(int index) { + return result.getRules(index); + } + public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule value) { + if (value == null) { + throw new NullPointerException(); + } + result.rules_.set(index, value); + return this; + } + public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder builderForValue) { + result.rules_.set(index, builderForValue.build()); + return this; + } + public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + result.rules_.add(value); + return this; + } + public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder builderForValue) { + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + result.rules_.add(builderForValue.build()); + return this; + } + public Builder addAllRules( + java.lang.Iterable values) { + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + super.addAll(values, result.rules_); + return this; + } + public Builder clearRules() { + result.rules_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndMapIndex.MapRootLevel levels = 5; + public java.util.List getLevelsList() { + return java.util.Collections.unmodifiableList(result.levels_); + } + public int getLevelsCount() { + return result.getLevelsCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel getLevels(int index) { + return result.getLevels(index); + } + public Builder setLevels(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel value) { + if (value == null) { + throw new NullPointerException(); + } + result.levels_.set(index, value); + return this; + } + public Builder setLevels(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder builderForValue) { + result.levels_.set(index, builderForValue.build()); + return this; + } + public Builder addLevels(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + result.levels_.add(value); + return this; + } + public Builder addLevels(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder builderForValue) { + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + result.levels_.add(builderForValue.build()); + return this; + } + public Builder addAllLevels( + java.lang.Iterable values) { + if (result.levels_.isEmpty()) { + result.levels_ = new java.util.ArrayList(); + } + super.addAll(values, result.levels_); + return this; + } + public Builder clearLevels() { + result.levels_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndMapIndex) + } + + static { + defaultInstance = new OsmAndMapIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndMapIndex) + } + + public static final class MapDataBlock extends + com.google.protobuf.GeneratedMessage { + // Use MapDataBlock.newBuilder() to construct. + private MapDataBlock() { + initFields(); + } + private MapDataBlock(boolean noInit) {} + + private static final MapDataBlock defaultInstance; + public static MapDataBlock getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapDataBlock getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_MapDataBlock_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_MapDataBlock_fieldAccessorTable; + } + + // optional uint64 baseId = 10; + public static final int BASEID_FIELD_NUMBER = 10; + private boolean hasBaseId; + private long baseId_ = 0L; + public boolean hasBaseId() { return hasBaseId; } + public long getBaseId() { return baseId_; } + + // repeated .MapData dataObjects = 12; + public static final int DATAOBJECTS_FIELD_NUMBER = 12; + private java.util.List dataObjects_ = + java.util.Collections.emptyList(); + public java.util.List getDataObjectsList() { + return dataObjects_; + } + public int getDataObjectsCount() { return dataObjects_.size(); } + public net.osmand.binary.OsmandOdb.MapData getDataObjects(int index) { + return dataObjects_.get(index); + } + + // optional .StringTable stringTable = 15; + public static final int STRINGTABLE_FIELD_NUMBER = 15; + private boolean hasStringTable; + private net.osmand.binary.OsmandOdb.StringTable stringTable_; + public boolean hasStringTable() { return hasStringTable; } + public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; } + + private void initFields() { + stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + for (net.osmand.binary.OsmandOdb.MapData element : getDataObjectsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasBaseId()) { + output.writeUInt64(10, getBaseId()); + } + for (net.osmand.binary.OsmandOdb.MapData element : getDataObjectsList()) { + output.writeMessage(12, element); + } + if (hasStringTable()) { + output.writeMessage(15, getStringTable()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasBaseId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(10, getBaseId()); + } + for (net.osmand.binary.OsmandOdb.MapData element : getDataObjectsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, element); + } + if (hasStringTable()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(15, getStringTable()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapDataBlock prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.MapDataBlock result; + + // Construct using net.osmand.binary.OsmandOdb.MapDataBlock.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.MapDataBlock(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.MapDataBlock internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.MapDataBlock(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.MapDataBlock.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.MapDataBlock getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.MapDataBlock.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.MapDataBlock build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.MapDataBlock buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.MapDataBlock buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.dataObjects_ != java.util.Collections.EMPTY_LIST) { + result.dataObjects_ = + java.util.Collections.unmodifiableList(result.dataObjects_); + } + net.osmand.binary.OsmandOdb.MapDataBlock returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.MapDataBlock) { + return mergeFrom((net.osmand.binary.OsmandOdb.MapDataBlock)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapDataBlock other) { + if (other == net.osmand.binary.OsmandOdb.MapDataBlock.getDefaultInstance()) return this; + if (other.hasBaseId()) { + setBaseId(other.getBaseId()); + } + if (!other.dataObjects_.isEmpty()) { + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + result.dataObjects_.addAll(other.dataObjects_); + } + if (other.hasStringTable()) { + mergeStringTable(other.getStringTable()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 80: { + setBaseId(input.readUInt64()); + break; + } + case 98: { + net.osmand.binary.OsmandOdb.MapData.Builder subBuilder = net.osmand.binary.OsmandOdb.MapData.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addDataObjects(subBuilder.buildPartial()); + break; + } + case 122: { + net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder(); + if (hasStringTable()) { + subBuilder.mergeFrom(getStringTable()); + } + input.readMessage(subBuilder, extensionRegistry); + setStringTable(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional uint64 baseId = 10; + public boolean hasBaseId() { + return result.hasBaseId(); + } + public long getBaseId() { + return result.getBaseId(); + } + public Builder setBaseId(long value) { + result.hasBaseId = true; + result.baseId_ = value; + return this; + } + public Builder clearBaseId() { + result.hasBaseId = false; + result.baseId_ = 0L; + return this; + } + + // repeated .MapData dataObjects = 12; + public java.util.List getDataObjectsList() { + return java.util.Collections.unmodifiableList(result.dataObjects_); + } + public int getDataObjectsCount() { + return result.getDataObjectsCount(); + } + public net.osmand.binary.OsmandOdb.MapData getDataObjects(int index) { + return result.getDataObjects(index); + } + public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.MapData value) { + if (value == null) { + throw new NullPointerException(); + } + result.dataObjects_.set(index, value); + return this; + } + public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.MapData.Builder builderForValue) { + result.dataObjects_.set(index, builderForValue.build()); + return this; + } + public Builder addDataObjects(net.osmand.binary.OsmandOdb.MapData value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + result.dataObjects_.add(value); + return this; + } + public Builder addDataObjects(net.osmand.binary.OsmandOdb.MapData.Builder builderForValue) { + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + result.dataObjects_.add(builderForValue.build()); + return this; + } + public Builder addAllDataObjects( + java.lang.Iterable values) { + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + super.addAll(values, result.dataObjects_); + return this; + } + public Builder clearDataObjects() { + result.dataObjects_ = java.util.Collections.emptyList(); + return this; + } + + // optional .StringTable stringTable = 15; + public boolean hasStringTable() { + return result.hasStringTable(); + } + public net.osmand.binary.OsmandOdb.StringTable getStringTable() { + return result.getStringTable(); + } + public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStringTable = true; + result.stringTable_ = value; + return this; + } + public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) { + result.hasStringTable = true; + result.stringTable_ = builderForValue.build(); + return this; + } + public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) { + if (result.hasStringTable() && + result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) { + result.stringTable_ = + net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial(); + } else { + result.stringTable_ = value; + } + result.hasStringTable = true; + return this; + } + public Builder clearStringTable() { + result.hasStringTable = false; + result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:MapDataBlock) + } + + static { + defaultInstance = new MapDataBlock(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:MapDataBlock) + } + + public static final class MapData extends + com.google.protobuf.GeneratedMessage { + // Use MapData.newBuilder() to construct. + private MapData() { + initFields(); + } + private MapData(boolean noInit) {} + + private static final MapData defaultInstance; + public static MapData getDefaultInstance() { + return defaultInstance; + } + + @Override + public MapData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_MapData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_MapData_fieldAccessorTable; + } + + // optional bytes coordinates = 1; + public static final int COORDINATES_FIELD_NUMBER = 1; + private boolean hasCoordinates; + private com.google.protobuf.ByteString coordinates_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasCoordinates() { return hasCoordinates; } + public com.google.protobuf.ByteString getCoordinates() { return coordinates_; } + + // optional bytes areaCoordinates = 2; + public static final int AREACOORDINATES_FIELD_NUMBER = 2; + private boolean hasAreaCoordinates; + private com.google.protobuf.ByteString areaCoordinates_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasAreaCoordinates() { return hasAreaCoordinates; } + public com.google.protobuf.ByteString getAreaCoordinates() { return areaCoordinates_; } + + // repeated bytes polygonInnerCoordinates = 4; + public static final int POLYGONINNERCOORDINATES_FIELD_NUMBER = 4; + private java.util.List polygonInnerCoordinates_ = + java.util.Collections.emptyList(); + public java.util.List getPolygonInnerCoordinatesList() { + return polygonInnerCoordinates_; + } + public int getPolygonInnerCoordinatesCount() { return polygonInnerCoordinates_.size(); } + public com.google.protobuf.ByteString getPolygonInnerCoordinates(int index) { + return polygonInnerCoordinates_.get(index); + } + + // optional bytes additionalTypes = 6; + public static final int ADDITIONALTYPES_FIELD_NUMBER = 6; + private boolean hasAdditionalTypes; + private com.google.protobuf.ByteString additionalTypes_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasAdditionalTypes() { return hasAdditionalTypes; } + public com.google.protobuf.ByteString getAdditionalTypes() { return additionalTypes_; } + + // required bytes types = 7; + public static final int TYPES_FIELD_NUMBER = 7; + private boolean hasTypes; + private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasTypes() { return hasTypes; } + public com.google.protobuf.ByteString getTypes() { return types_; } + + // optional bytes stringNames = 10; + public static final int STRINGNAMES_FIELD_NUMBER = 10; + private boolean hasStringNames; + private com.google.protobuf.ByteString stringNames_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasStringNames() { return hasStringNames; } + public com.google.protobuf.ByteString getStringNames() { return stringNames_; } + + // required sint64 id = 12; + public static final int ID_FIELD_NUMBER = 12; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // optional bytes rasterBytes = 15; + public static final int RASTERBYTES_FIELD_NUMBER = 15; + private boolean hasRasterBytes; + private com.google.protobuf.ByteString rasterBytes_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasRasterBytes() { return hasRasterBytes; } + public com.google.protobuf.ByteString getRasterBytes() { return rasterBytes_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasTypes) return false; + if (!hasId) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasCoordinates()) { + output.writeBytes(1, getCoordinates()); + } + if (hasAreaCoordinates()) { + output.writeBytes(2, getAreaCoordinates()); + } + for (com.google.protobuf.ByteString element : getPolygonInnerCoordinatesList()) { + output.writeBytes(4, element); + } + if (hasAdditionalTypes()) { + output.writeBytes(6, getAdditionalTypes()); + } + if (hasTypes()) { + output.writeBytes(7, getTypes()); + } + if (hasStringNames()) { + output.writeBytes(10, getStringNames()); + } + if (hasId()) { + output.writeSInt64(12, getId()); + } + if (hasRasterBytes()) { + output.writeBytes(15, getRasterBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasCoordinates()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getCoordinates()); + } + if (hasAreaCoordinates()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getAreaCoordinates()); + } + { + int dataSize = 0; + for (com.google.protobuf.ByteString element : getPolygonInnerCoordinatesList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeBytesSizeNoTag(element); + } + size += dataSize; + size += 1 * getPolygonInnerCoordinatesList().size(); + } + if (hasAdditionalTypes()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, getAdditionalTypes()); + } + if (hasTypes()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(7, getTypes()); + } + if (hasStringNames()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(10, getStringNames()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt64Size(12, getId()); + } + if (hasRasterBytes()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(15, getRasterBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.MapData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.MapData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.MapData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.MapData result; + + // Construct using net.osmand.binary.OsmandOdb.MapData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.MapData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.MapData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.MapData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.MapData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.MapData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.MapData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.MapData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.MapData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.MapData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.polygonInnerCoordinates_ != java.util.Collections.EMPTY_LIST) { + result.polygonInnerCoordinates_ = + java.util.Collections.unmodifiableList(result.polygonInnerCoordinates_); + } + net.osmand.binary.OsmandOdb.MapData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.MapData) { + return mergeFrom((net.osmand.binary.OsmandOdb.MapData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapData other) { + if (other == net.osmand.binary.OsmandOdb.MapData.getDefaultInstance()) return this; + if (other.hasCoordinates()) { + setCoordinates(other.getCoordinates()); + } + if (other.hasAreaCoordinates()) { + setAreaCoordinates(other.getAreaCoordinates()); + } + if (!other.polygonInnerCoordinates_.isEmpty()) { + if (result.polygonInnerCoordinates_.isEmpty()) { + result.polygonInnerCoordinates_ = new java.util.ArrayList(); + } + result.polygonInnerCoordinates_.addAll(other.polygonInnerCoordinates_); + } + if (other.hasAdditionalTypes()) { + setAdditionalTypes(other.getAdditionalTypes()); + } + if (other.hasTypes()) { + setTypes(other.getTypes()); + } + if (other.hasStringNames()) { + setStringNames(other.getStringNames()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasRasterBytes()) { + setRasterBytes(other.getRasterBytes()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setCoordinates(input.readBytes()); + break; + } + case 18: { + setAreaCoordinates(input.readBytes()); + break; + } + case 34: { + addPolygonInnerCoordinates(input.readBytes()); + break; + } + case 50: { + setAdditionalTypes(input.readBytes()); + break; + } + case 58: { + setTypes(input.readBytes()); + break; + } + case 82: { + setStringNames(input.readBytes()); + break; + } + case 96: { + setId(input.readSInt64()); + break; + } + case 122: { + setRasterBytes(input.readBytes()); + break; + } + } + } + } + + + // optional bytes coordinates = 1; + public boolean hasCoordinates() { + return result.hasCoordinates(); + } + public com.google.protobuf.ByteString getCoordinates() { + return result.getCoordinates(); + } + public Builder setCoordinates(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCoordinates = true; + result.coordinates_ = value; + return this; + } + public Builder clearCoordinates() { + result.hasCoordinates = false; + result.coordinates_ = getDefaultInstance().getCoordinates(); + return this; + } + + // optional bytes areaCoordinates = 2; + public boolean hasAreaCoordinates() { + return result.hasAreaCoordinates(); + } + public com.google.protobuf.ByteString getAreaCoordinates() { + return result.getAreaCoordinates(); + } + public Builder setAreaCoordinates(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasAreaCoordinates = true; + result.areaCoordinates_ = value; + return this; + } + public Builder clearAreaCoordinates() { + result.hasAreaCoordinates = false; + result.areaCoordinates_ = getDefaultInstance().getAreaCoordinates(); + return this; + } + + // repeated bytes polygonInnerCoordinates = 4; + public java.util.List getPolygonInnerCoordinatesList() { + return java.util.Collections.unmodifiableList(result.polygonInnerCoordinates_); + } + public int getPolygonInnerCoordinatesCount() { + return result.getPolygonInnerCoordinatesCount(); + } + public com.google.protobuf.ByteString getPolygonInnerCoordinates(int index) { + return result.getPolygonInnerCoordinates(index); + } + public Builder setPolygonInnerCoordinates(int index, com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.polygonInnerCoordinates_.set(index, value); + return this; + } + public Builder addPolygonInnerCoordinates(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.polygonInnerCoordinates_.isEmpty()) { + result.polygonInnerCoordinates_ = new java.util.ArrayList(); + } + result.polygonInnerCoordinates_.add(value); + return this; + } + public Builder addAllPolygonInnerCoordinates( + java.lang.Iterable values) { + if (result.polygonInnerCoordinates_.isEmpty()) { + result.polygonInnerCoordinates_ = new java.util.ArrayList(); + } + super.addAll(values, result.polygonInnerCoordinates_); + return this; + } + public Builder clearPolygonInnerCoordinates() { + result.polygonInnerCoordinates_ = java.util.Collections.emptyList(); + return this; + } + + // optional bytes additionalTypes = 6; + public boolean hasAdditionalTypes() { + return result.hasAdditionalTypes(); + } + public com.google.protobuf.ByteString getAdditionalTypes() { + return result.getAdditionalTypes(); + } + public Builder setAdditionalTypes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasAdditionalTypes = true; + result.additionalTypes_ = value; + return this; + } + public Builder clearAdditionalTypes() { + result.hasAdditionalTypes = false; + result.additionalTypes_ = getDefaultInstance().getAdditionalTypes(); + return this; + } + + // required bytes types = 7; + public boolean hasTypes() { + return result.hasTypes(); + } + public com.google.protobuf.ByteString getTypes() { + return result.getTypes(); + } + public Builder setTypes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTypes = true; + result.types_ = value; + return this; + } + public Builder clearTypes() { + result.hasTypes = false; + result.types_ = getDefaultInstance().getTypes(); + return this; + } + + // optional bytes stringNames = 10; + public boolean hasStringNames() { + return result.hasStringNames(); + } + public com.google.protobuf.ByteString getStringNames() { + return result.getStringNames(); + } + public Builder setStringNames(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStringNames = true; + result.stringNames_ = value; + return this; + } + public Builder clearStringNames() { + result.hasStringNames = false; + result.stringNames_ = getDefaultInstance().getStringNames(); + return this; + } + + // required sint64 id = 12; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // optional bytes rasterBytes = 15; + public boolean hasRasterBytes() { + return result.hasRasterBytes(); + } + public com.google.protobuf.ByteString getRasterBytes() { + return result.getRasterBytes(); + } + public Builder setRasterBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRasterBytes = true; + result.rasterBytes_ = value; + return this; + } + public Builder clearRasterBytes() { + result.hasRasterBytes = false; + result.rasterBytes_ = getDefaultInstance().getRasterBytes(); + return this; + } + + // @@protoc_insertion_point(builder_scope:MapData) + } + + static { + defaultInstance = new MapData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:MapData) + } + + public static final class OsmAndAddressIndex extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndAddressIndex.newBuilder() to construct. + private OsmAndAddressIndex() { + initFields(); + } + private OsmAndAddressIndex(boolean noInit) {} + + private static final OsmAndAddressIndex defaultInstance; + public static OsmAndAddressIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndAddressIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_fieldAccessorTable; + } + + public static final class CitiesIndex extends + com.google.protobuf.GeneratedMessage { + // Use CitiesIndex.newBuilder() to construct. + private CitiesIndex() { + initFields(); + } + private CitiesIndex(boolean noInit) {} + + private static final CitiesIndex defaultInstance; + public static CitiesIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public CitiesIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_CitiesIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_CitiesIndex_fieldAccessorTable; + } + + // required uint32 type = 2; + public static final int TYPE_FIELD_NUMBER = 2; + private boolean hasType; + private int type_ = 0; + public boolean hasType() { return hasType; } + public int getType() { return type_; } + + // repeated .CityIndex cities = 5; + public static final int CITIES_FIELD_NUMBER = 5; + private java.util.List cities_ = + java.util.Collections.emptyList(); + public java.util.List getCitiesList() { + return cities_; + } + public int getCitiesCount() { return cities_.size(); } + public net.osmand.binary.OsmandOdb.CityIndex getCities(int index) { + return cities_.get(index); + } + + // repeated .CityBlockIndex blocks = 7; + public static final int BLOCKS_FIELD_NUMBER = 7; + private java.util.List blocks_ = + java.util.Collections.emptyList(); + public java.util.List getBlocksList() { + return blocks_; + } + public int getBlocksCount() { return blocks_.size(); } + public net.osmand.binary.OsmandOdb.CityBlockIndex getBlocks(int index) { + return blocks_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasType) return false; + for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.CityBlockIndex element : getBlocksList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasType()) { + output.writeUInt32(2, getType()); + } + for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) { + output.writeMessage(5, element); + } + for (net.osmand.binary.OsmandOdb.CityBlockIndex element : getBlocksList()) { + output.writeMessage(7, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasType()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, getType()); + } + for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + for (net.osmand.binary.OsmandOdb.CityBlockIndex element : getBlocksList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.cities_ != java.util.Collections.EMPTY_LIST) { + result.cities_ = + java.util.Collections.unmodifiableList(result.cities_); + } + if (result.blocks_ != java.util.Collections.EMPTY_LIST) { + result.blocks_ = + java.util.Collections.unmodifiableList(result.blocks_); + } + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.getDefaultInstance()) return this; + if (other.hasType()) { + setType(other.getType()); + } + if (!other.cities_.isEmpty()) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.addAll(other.cities_); + } + if (!other.blocks_.isEmpty()) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.addAll(other.blocks_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 16: { + setType(input.readUInt32()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.CityIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CityIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCities(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.CityBlockIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CityBlockIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBlocks(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required uint32 type = 2; + public boolean hasType() { + return result.hasType(); + } + public int getType() { + return result.getType(); + } + public Builder setType(int value) { + result.hasType = true; + result.type_ = value; + return this; + } + public Builder clearType() { + result.hasType = false; + result.type_ = 0; + return this; + } + + // repeated .CityIndex cities = 5; + public java.util.List getCitiesList() { + return java.util.Collections.unmodifiableList(result.cities_); + } + public int getCitiesCount() { + return result.getCitiesCount(); + } + public net.osmand.binary.OsmandOdb.CityIndex getCities(int index) { + return result.getCities(index); + } + public Builder setCities(int index, net.osmand.binary.OsmandOdb.CityIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.cities_.set(index, value); + return this; + } + public Builder setCities(int index, net.osmand.binary.OsmandOdb.CityIndex.Builder builderForValue) { + result.cities_.set(index, builderForValue.build()); + return this; + } + public Builder addCities(net.osmand.binary.OsmandOdb.CityIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.add(value); + return this; + } + public Builder addCities(net.osmand.binary.OsmandOdb.CityIndex.Builder builderForValue) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.add(builderForValue.build()); + return this; + } + public Builder addAllCities( + java.lang.Iterable values) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + super.addAll(values, result.cities_); + return this; + } + public Builder clearCities() { + result.cities_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .CityBlockIndex blocks = 7; + public java.util.List getBlocksList() { + return java.util.Collections.unmodifiableList(result.blocks_); + } + public int getBlocksCount() { + return result.getBlocksCount(); + } + public net.osmand.binary.OsmandOdb.CityBlockIndex getBlocks(int index) { + return result.getBlocks(index); + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.CityBlockIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.blocks_.set(index, value); + return this; + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.CityBlockIndex.Builder builderForValue) { + result.blocks_.set(index, builderForValue.build()); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.CityBlockIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(value); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.CityBlockIndex.Builder builderForValue) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(builderForValue.build()); + return this; + } + public Builder addAllBlocks( + java.lang.Iterable values) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + super.addAll(values, result.blocks_); + return this; + } + public Builder clearBlocks() { + result.blocks_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndAddressIndex.CitiesIndex) + } + + static { + defaultInstance = new CitiesIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndAddressIndex.CitiesIndex) + } + + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string name_en = 2; + public static final int NAME_EN_FIELD_NUMBER = 2; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // optional .OsmAndTileBox boundaries = 3; + public static final int BOUNDARIES_FIELD_NUMBER = 3; + private boolean hasBoundaries; + private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_; + public boolean hasBoundaries() { return hasBoundaries; } + public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; } + + // repeated .OsmAndAddressIndex.CitiesIndex cities = 6; + public static final int CITIES_FIELD_NUMBER = 6; + private java.util.List cities_ = + java.util.Collections.emptyList(); + public java.util.List getCitiesList() { + return cities_; + } + public int getCitiesCount() { return cities_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex getCities(int index) { + return cities_.get(index); + } + + // optional .OsmAndAddressNameIndexData nameIndex = 7; + public static final int NAMEINDEX_FIELD_NUMBER = 7; + private boolean hasNameIndex; + private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData nameIndex_; + public boolean hasNameIndex() { return hasNameIndex; } + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData getNameIndex() { return nameIndex_; } + + private void initFields() { + boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + if (hasBoundaries()) { + if (!getBoundaries().isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex element : getCitiesList()) { + if (!element.isInitialized()) return false; + } + if (hasNameIndex()) { + if (!getNameIndex().isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasNameEn()) { + output.writeString(2, getNameEn()); + } + if (hasBoundaries()) { + output.writeMessage(3, getBoundaries()); + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex element : getCitiesList()) { + output.writeMessage(6, element); + } + if (hasNameIndex()) { + output.writeMessage(7, getNameIndex()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getNameEn()); + } + if (hasBoundaries()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getBoundaries()); + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex element : getCitiesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + if (hasNameIndex()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, getNameIndex()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndAddressIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndAddressIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndAddressIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.cities_ != java.util.Collections.EMPTY_LIST) { + result.cities_ = + java.util.Collections.unmodifiableList(result.cities_); + } + net.osmand.binary.OsmandOdb.OsmAndAddressIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasBoundaries()) { + mergeBoundaries(other.getBoundaries()); + } + if (!other.cities_.isEmpty()) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.addAll(other.cities_); + } + if (other.hasNameIndex()) { + mergeNameIndex(other.getNameIndex()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + setNameEn(input.readString()); + break; + } + case 26: { + net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(); + if (hasBoundaries()) { + subBuilder.mergeFrom(getBoundaries()); + } + input.readMessage(subBuilder, extensionRegistry); + setBoundaries(subBuilder.buildPartial()); + break; + } + case 50: { + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCities(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.newBuilder(); + if (hasNameIndex()) { + subBuilder.mergeFrom(getNameIndex()); + } + input.readMessage(subBuilder, extensionRegistry); + setNameIndex(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string name_en = 2; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // optional .OsmAndTileBox boundaries = 3; + public boolean hasBoundaries() { + return result.hasBoundaries(); + } + public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { + return result.getBoundaries(); + } + public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasBoundaries = true; + result.boundaries_ = value; + return this; + } + public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) { + result.hasBoundaries = true; + result.boundaries_ = builderForValue.build(); + return this; + } + public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) { + if (result.hasBoundaries() && + result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) { + result.boundaries_ = + net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial(); + } else { + result.boundaries_ = value; + } + result.hasBoundaries = true; + return this; + } + public Builder clearBoundaries() { + result.hasBoundaries = false; + result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + return this; + } + + // repeated .OsmAndAddressIndex.CitiesIndex cities = 6; + public java.util.List getCitiesList() { + return java.util.Collections.unmodifiableList(result.cities_); + } + public int getCitiesCount() { + return result.getCitiesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex getCities(int index) { + return result.getCities(index); + } + public Builder setCities(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.cities_.set(index, value); + return this; + } + public Builder setCities(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder builderForValue) { + result.cities_.set(index, builderForValue.build()); + return this; + } + public Builder addCities(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.add(value); + return this; + } + public Builder addCities(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder builderForValue) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + result.cities_.add(builderForValue.build()); + return this; + } + public Builder addAllCities( + java.lang.Iterable values) { + if (result.cities_.isEmpty()) { + result.cities_ = new java.util.ArrayList(); + } + super.addAll(values, result.cities_); + return this; + } + public Builder clearCities() { + result.cities_ = java.util.Collections.emptyList(); + return this; + } + + // optional .OsmAndAddressNameIndexData nameIndex = 7; + public boolean hasNameIndex() { + return result.hasNameIndex(); + } + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData getNameIndex() { + return result.getNameIndex(); + } + public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameIndex = true; + result.nameIndex_ = value; + return this; + } + public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.Builder builderForValue) { + result.hasNameIndex = true; + result.nameIndex_ = builderForValue.build(); + return this; + } + public Builder mergeNameIndex(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData value) { + if (result.hasNameIndex() && + result.nameIndex_ != net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance()) { + result.nameIndex_ = + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.newBuilder(result.nameIndex_).mergeFrom(value).buildPartial(); + } else { + result.nameIndex_ = value; + } + result.hasNameIndex = true; + return this; + } + public Builder clearNameIndex() { + result.hasNameIndex = false; + result.nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndAddressIndex) + } + + static { + defaultInstance = new OsmAndAddressIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndAddressIndex) + } + + public static final class OsmAndAddressNameIndexData extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndAddressNameIndexData.newBuilder() to construct. + private OsmAndAddressNameIndexData() { + initFields(); + } + private OsmAndAddressNameIndexData(boolean noInit) {} + + private static final OsmAndAddressNameIndexData defaultInstance; + public static OsmAndAddressNameIndexData getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndAddressNameIndexData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_fieldAccessorTable; + } + + public static final class AddressNameIndexData extends + com.google.protobuf.GeneratedMessage { + // Use AddressNameIndexData.newBuilder() to construct. + private AddressNameIndexData() { + initFields(); + } + private AddressNameIndexData(boolean noInit) {} + + private static final AddressNameIndexData defaultInstance; + public static AddressNameIndexData getDefaultInstance() { + return defaultInstance; + } + + @Override + public AddressNameIndexData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_fieldAccessorTable; + } + + // repeated .AddressNameIndexDataAtom atom = 4; + public static final int ATOM_FIELD_NUMBER = 4; + private java.util.List atom_ = + java.util.Collections.emptyList(); + public java.util.List getAtomList() { + return atom_; + } + public int getAtomCount() { return atom_.size(); } + public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom getAtom(int index) { + return atom_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom element : getAtomList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom element : getAtomList()) { + output.writeMessage(4, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom element : getAtomList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.atom_ != java.util.Collections.EMPTY_LIST) { + result.atom_ = + java.util.Collections.unmodifiableList(result.atom_); + } + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.getDefaultInstance()) return this; + if (!other.atom_.isEmpty()) { + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + result.atom_.addAll(other.atom_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 34: { + net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAtom(subBuilder.buildPartial()); + break; + } + } + } + } + + + // repeated .AddressNameIndexDataAtom atom = 4; + public java.util.List getAtomList() { + return java.util.Collections.unmodifiableList(result.atom_); + } + public int getAtomCount() { + return result.getAtomCount(); + } + public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom getAtom(int index) { + return result.getAtom(index); + } + public Builder setAtom(int index, net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom value) { + if (value == null) { + throw new NullPointerException(); + } + result.atom_.set(index, value); + return this; + } + public Builder setAtom(int index, net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder builderForValue) { + result.atom_.set(index, builderForValue.build()); + return this; + } + public Builder addAtom(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + result.atom_.add(value); + return this; + } + public Builder addAtom(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder builderForValue) { + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + result.atom_.add(builderForValue.build()); + return this; + } + public Builder addAllAtom( + java.lang.Iterable values) { + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + super.addAll(values, result.atom_); + return this; + } + public Builder clearAtom() { + result.atom_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndAddressNameIndexData.AddressNameIndexData) + } + + static { + defaultInstance = new AddressNameIndexData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndAddressNameIndexData.AddressNameIndexData) + } + + // required .IndexedStringTable table = 4; + public static final int TABLE_FIELD_NUMBER = 4; + private boolean hasTable; + private net.osmand.binary.OsmandOdb.IndexedStringTable table_; + public boolean hasTable() { return hasTable; } + public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { return table_; } + + // repeated .OsmAndAddressNameIndexData.AddressNameIndexData atom = 7; + public static final int ATOM_FIELD_NUMBER = 7; + private java.util.List atom_ = + java.util.Collections.emptyList(); + public java.util.List getAtomList() { + return atom_; + } + public int getAtomCount() { return atom_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData getAtom(int index) { + return atom_.get(index); + } + + private void initFields() { + table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasTable) return false; + for (net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData element : getAtomList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasTable()) { + output.writeMessage(4, getTable()); + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData element : getAtomList()) { + output.writeMessage(7, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasTable()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getTable()); + } + for (net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData element : getAtomList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.atom_ != java.util.Collections.EMPTY_LIST) { + result.atom_ = + java.util.Collections.unmodifiableList(result.atom_); + } + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance()) return this; + if (other.hasTable()) { + mergeTable(other.getTable()); + } + if (!other.atom_.isEmpty()) { + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + result.atom_.addAll(other.atom_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 34: { + net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(); + if (hasTable()) { + subBuilder.mergeFrom(getTable()); + } + input.readMessage(subBuilder, extensionRegistry); + setTable(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAtom(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required .IndexedStringTable table = 4; + public boolean hasTable() { + return result.hasTable(); + } + public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { + return result.getTable(); + } + public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTable = true; + result.table_ = value; + return this; + } + public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) { + result.hasTable = true; + result.table_ = builderForValue.build(); + return this; + } + public Builder mergeTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) { + if (result.hasTable() && + result.table_ != net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) { + result.table_ = + net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(result.table_).mergeFrom(value).buildPartial(); + } else { + result.table_ = value; + } + result.hasTable = true; + return this; + } + public Builder clearTable() { + result.hasTable = false; + result.table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance(); + return this; + } + + // repeated .OsmAndAddressNameIndexData.AddressNameIndexData atom = 7; + public java.util.List getAtomList() { + return java.util.Collections.unmodifiableList(result.atom_); + } + public int getAtomCount() { + return result.getAtomCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData getAtom(int index) { + return result.getAtom(index); + } + public Builder setAtom(int index, net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData value) { + if (value == null) { + throw new NullPointerException(); + } + result.atom_.set(index, value); + return this; + } + public Builder setAtom(int index, net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder builderForValue) { + result.atom_.set(index, builderForValue.build()); + return this; + } + public Builder addAtom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + result.atom_.add(value); + return this; + } + public Builder addAtom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder builderForValue) { + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + result.atom_.add(builderForValue.build()); + return this; + } + public Builder addAllAtom( + java.lang.Iterable values) { + if (result.atom_.isEmpty()) { + result.atom_ = new java.util.ArrayList(); + } + super.addAll(values, result.atom_); + return this; + } + public Builder clearAtom() { + result.atom_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndAddressNameIndexData) + } + + static { + defaultInstance = new OsmAndAddressNameIndexData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndAddressNameIndexData) + } + + public static final class AddressNameIndexDataAtom extends + com.google.protobuf.GeneratedMessage { + // Use AddressNameIndexDataAtom.newBuilder() to construct. + private AddressNameIndexDataAtom() { + initFields(); + } + private AddressNameIndexDataAtom(boolean noInit) {} + + private static final AddressNameIndexDataAtom defaultInstance; + public static AddressNameIndexDataAtom getDefaultInstance() { + return defaultInstance; + } + + @Override + public AddressNameIndexDataAtom getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_AddressNameIndexDataAtom_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_AddressNameIndexDataAtom_fieldAccessorTable; + } + + // optional string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string nameEn = 2; + public static final int NAMEEN_FIELD_NUMBER = 2; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // required uint32 type = 3; + public static final int TYPE_FIELD_NUMBER = 3; + private boolean hasType; + private int type_ = 0; + public boolean hasType() { return hasType; } + public int getType() { return type_; } + + // repeated int32 shiftToIndex = 5; + public static final int SHIFTTOINDEX_FIELD_NUMBER = 5; + private java.util.List shiftToIndex_ = + java.util.Collections.emptyList(); + public java.util.List getShiftToIndexList() { + return shiftToIndex_; + } + public int getShiftToIndexCount() { return shiftToIndex_.size(); } + public int getShiftToIndex(int index) { + return shiftToIndex_.get(index); + } + + // repeated int32 shiftToCityIndex = 6; + public static final int SHIFTTOCITYINDEX_FIELD_NUMBER = 6; + private java.util.List shiftToCityIndex_ = + java.util.Collections.emptyList(); + public java.util.List getShiftToCityIndexList() { + return shiftToCityIndex_; + } + public int getShiftToCityIndexCount() { return shiftToCityIndex_.size(); } + public int getShiftToCityIndex(int index) { + return shiftToCityIndex_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasType) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasNameEn()) { + output.writeString(2, getNameEn()); + } + if (hasType()) { + output.writeUInt32(3, getType()); + } + for (int element : getShiftToIndexList()) { + output.writeInt32(5, element); + } + for (int element : getShiftToCityIndexList()) { + output.writeInt32(6, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getNameEn()); + } + if (hasType()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, getType()); + } + { + int dataSize = 0; + for (int element : getShiftToIndexList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(element); + } + size += dataSize; + size += 1 * getShiftToIndexList().size(); + } + { + int dataSize = 0; + for (int element : getShiftToCityIndexList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(element); + } + size += dataSize; + size += 1 * getShiftToCityIndexList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom result; + + // Construct using net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.shiftToIndex_ != java.util.Collections.EMPTY_LIST) { + result.shiftToIndex_ = + java.util.Collections.unmodifiableList(result.shiftToIndex_); + } + if (result.shiftToCityIndex_ != java.util.Collections.EMPTY_LIST) { + result.shiftToCityIndex_ = + java.util.Collections.unmodifiableList(result.shiftToCityIndex_); + } + net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom) { + return mergeFrom((net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom other) { + if (other == net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasType()) { + setType(other.getType()); + } + if (!other.shiftToIndex_.isEmpty()) { + if (result.shiftToIndex_.isEmpty()) { + result.shiftToIndex_ = new java.util.ArrayList(); + } + result.shiftToIndex_.addAll(other.shiftToIndex_); + } + if (!other.shiftToCityIndex_.isEmpty()) { + if (result.shiftToCityIndex_.isEmpty()) { + result.shiftToCityIndex_ = new java.util.ArrayList(); + } + result.shiftToCityIndex_.addAll(other.shiftToCityIndex_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + setNameEn(input.readString()); + break; + } + case 24: { + setType(input.readUInt32()); + break; + } + case 40: { + addShiftToIndex(input.readInt32()); + break; + } + case 42: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addShiftToIndex(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 48: { + addShiftToCityIndex(input.readInt32()); + break; + } + case 50: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addShiftToCityIndex(input.readInt32()); + } + input.popLimit(limit); + break; + } + } + } + } + + + // optional string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string nameEn = 2; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // required uint32 type = 3; + public boolean hasType() { + return result.hasType(); + } + public int getType() { + return result.getType(); + } + public Builder setType(int value) { + result.hasType = true; + result.type_ = value; + return this; + } + public Builder clearType() { + result.hasType = false; + result.type_ = 0; + return this; + } + + // repeated int32 shiftToIndex = 5; + public java.util.List getShiftToIndexList() { + return java.util.Collections.unmodifiableList(result.shiftToIndex_); + } + public int getShiftToIndexCount() { + return result.getShiftToIndexCount(); + } + public int getShiftToIndex(int index) { + return result.getShiftToIndex(index); + } + public Builder setShiftToIndex(int index, int value) { + result.shiftToIndex_.set(index, value); + return this; + } + public Builder addShiftToIndex(int value) { + if (result.shiftToIndex_.isEmpty()) { + result.shiftToIndex_ = new java.util.ArrayList(); + } + result.shiftToIndex_.add(value); + return this; + } + public Builder addAllShiftToIndex( + java.lang.Iterable values) { + if (result.shiftToIndex_.isEmpty()) { + result.shiftToIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.shiftToIndex_); + return this; + } + public Builder clearShiftToIndex() { + result.shiftToIndex_ = java.util.Collections.emptyList(); + return this; + } + + // repeated int32 shiftToCityIndex = 6; + public java.util.List getShiftToCityIndexList() { + return java.util.Collections.unmodifiableList(result.shiftToCityIndex_); + } + public int getShiftToCityIndexCount() { + return result.getShiftToCityIndexCount(); + } + public int getShiftToCityIndex(int index) { + return result.getShiftToCityIndex(index); + } + public Builder setShiftToCityIndex(int index, int value) { + result.shiftToCityIndex_.set(index, value); + return this; + } + public Builder addShiftToCityIndex(int value) { + if (result.shiftToCityIndex_.isEmpty()) { + result.shiftToCityIndex_ = new java.util.ArrayList(); + } + result.shiftToCityIndex_.add(value); + return this; + } + public Builder addAllShiftToCityIndex( + java.lang.Iterable values) { + if (result.shiftToCityIndex_.isEmpty()) { + result.shiftToCityIndex_ = new java.util.ArrayList(); + } + super.addAll(values, result.shiftToCityIndex_); + return this; + } + public Builder clearShiftToCityIndex() { + result.shiftToCityIndex_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:AddressNameIndexDataAtom) + } + + static { + defaultInstance = new AddressNameIndexDataAtom(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:AddressNameIndexDataAtom) + } + + public static final class CityIndex extends + com.google.protobuf.GeneratedMessage { + // Use CityIndex.newBuilder() to construct. + private CityIndex() { + initFields(); + } + private CityIndex(boolean noInit) {} + + private static final CityIndex defaultInstance; + public static CityIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public CityIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_CityIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_CityIndex_fieldAccessorTable; + } + + // optional uint32 city_type = 1; + public static final int CITY_TYPE_FIELD_NUMBER = 1; + private boolean hasCityType; + private int cityType_ = 0; + public boolean hasCityType() { return hasCityType; } + public int getCityType() { return cityType_; } + + // required string name = 2; + public static final int NAME_FIELD_NUMBER = 2; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string name_en = 3; + public static final int NAME_EN_FIELD_NUMBER = 3; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // optional uint64 id = 4; + public static final int ID_FIELD_NUMBER = 4; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // required uint32 x = 5; + public static final int X_FIELD_NUMBER = 5; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // required uint32 y = 6; + public static final int Y_FIELD_NUMBER = 6; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // optional fixed32 shiftToCityBlockIndex = 10; + public static final int SHIFTTOCITYBLOCKINDEX_FIELD_NUMBER = 10; + private boolean hasShiftToCityBlockIndex; + private int shiftToCityBlockIndex_ = 0; + public boolean hasShiftToCityBlockIndex() { return hasShiftToCityBlockIndex; } + public int getShiftToCityBlockIndex() { return shiftToCityBlockIndex_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + if (!hasX) return false; + if (!hasY) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasCityType()) { + output.writeUInt32(1, getCityType()); + } + if (hasName()) { + output.writeString(2, getName()); + } + if (hasNameEn()) { + output.writeString(3, getNameEn()); + } + if (hasId()) { + output.writeUInt64(4, getId()); + } + if (hasX()) { + output.writeUInt32(5, getX()); + } + if (hasY()) { + output.writeUInt32(6, getY()); + } + if (hasShiftToCityBlockIndex()) { + output.writeFixed32(10, getShiftToCityBlockIndex()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasCityType()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, getCityType()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getNameEn()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(4, getId()); + } + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(5, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(6, getY()); + } + if (hasShiftToCityBlockIndex()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(10, getShiftToCityBlockIndex()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.CityIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.CityIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.CityIndex result; + + // Construct using net.osmand.binary.OsmandOdb.CityIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.CityIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.CityIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.CityIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.CityIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.CityIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.CityIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.CityIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.CityIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.CityIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.CityIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.CityIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.CityIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.CityIndex other) { + if (other == net.osmand.binary.OsmandOdb.CityIndex.getDefaultInstance()) return this; + if (other.hasCityType()) { + setCityType(other.getCityType()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasShiftToCityBlockIndex()) { + setShiftToCityBlockIndex(other.getShiftToCityBlockIndex()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setCityType(input.readUInt32()); + break; + } + case 18: { + setName(input.readString()); + break; + } + case 26: { + setNameEn(input.readString()); + break; + } + case 32: { + setId(input.readUInt64()); + break; + } + case 40: { + setX(input.readUInt32()); + break; + } + case 48: { + setY(input.readUInt32()); + break; + } + case 85: { + setShiftToCityBlockIndex(input.readFixed32()); + break; + } + } + } + } + + + // optional uint32 city_type = 1; + public boolean hasCityType() { + return result.hasCityType(); + } + public int getCityType() { + return result.getCityType(); + } + public Builder setCityType(int value) { + result.hasCityType = true; + result.cityType_ = value; + return this; + } + public Builder clearCityType() { + result.hasCityType = false; + result.cityType_ = 0; + return this; + } + + // required string name = 2; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string name_en = 3; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // optional uint64 id = 4; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // required uint32 x = 5; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // required uint32 y = 6; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // optional fixed32 shiftToCityBlockIndex = 10; + public boolean hasShiftToCityBlockIndex() { + return result.hasShiftToCityBlockIndex(); + } + public int getShiftToCityBlockIndex() { + return result.getShiftToCityBlockIndex(); + } + public Builder setShiftToCityBlockIndex(int value) { + result.hasShiftToCityBlockIndex = true; + result.shiftToCityBlockIndex_ = value; + return this; + } + public Builder clearShiftToCityBlockIndex() { + result.hasShiftToCityBlockIndex = false; + result.shiftToCityBlockIndex_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:CityIndex) + } + + static { + defaultInstance = new CityIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:CityIndex) + } + + public static final class CityBlockIndex extends + com.google.protobuf.GeneratedMessage { + // Use CityBlockIndex.newBuilder() to construct. + private CityBlockIndex() { + initFields(); + } + private CityBlockIndex(boolean noInit) {} + + private static final CityBlockIndex defaultInstance; + public static CityBlockIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public CityBlockIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_CityBlockIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_CityBlockIndex_fieldAccessorTable; + } + + // optional fixed32 shiftToCityIndex = 4; + public static final int SHIFTTOCITYINDEX_FIELD_NUMBER = 4; + private boolean hasShiftToCityIndex; + private int shiftToCityIndex_ = 0; + public boolean hasShiftToCityIndex() { return hasShiftToCityIndex; } + public int getShiftToCityIndex() { return shiftToCityIndex_; } + + // repeated .BuildingIndex buildings = 10; + public static final int BUILDINGS_FIELD_NUMBER = 10; + private java.util.List buildings_ = + java.util.Collections.emptyList(); + public java.util.List getBuildingsList() { + return buildings_; + } + public int getBuildingsCount() { return buildings_.size(); } + public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) { + return buildings_.get(index); + } + + // repeated .StreetIndex streets = 12; + public static final int STREETS_FIELD_NUMBER = 12; + private java.util.List streets_ = + java.util.Collections.emptyList(); + public java.util.List getStreetsList() { + return streets_; + } + public int getStreetsCount() { return streets_.size(); } + public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) { + return streets_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasShiftToCityIndex()) { + output.writeFixed32(4, getShiftToCityIndex()); + } + for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) { + output.writeMessage(10, element); + } + for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) { + output.writeMessage(12, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasShiftToCityIndex()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(4, getShiftToCityIndex()); + } + for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, element); + } + for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.CityBlockIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.CityBlockIndex result; + + // Construct using net.osmand.binary.OsmandOdb.CityBlockIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.CityBlockIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.CityBlockIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.CityBlockIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.CityBlockIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.CityBlockIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.CityBlockIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.CityBlockIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.CityBlockIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.CityBlockIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.buildings_ != java.util.Collections.EMPTY_LIST) { + result.buildings_ = + java.util.Collections.unmodifiableList(result.buildings_); + } + if (result.streets_ != java.util.Collections.EMPTY_LIST) { + result.streets_ = + java.util.Collections.unmodifiableList(result.streets_); + } + net.osmand.binary.OsmandOdb.CityBlockIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.CityBlockIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.CityBlockIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.CityBlockIndex other) { + if (other == net.osmand.binary.OsmandOdb.CityBlockIndex.getDefaultInstance()) return this; + if (other.hasShiftToCityIndex()) { + setShiftToCityIndex(other.getShiftToCityIndex()); + } + if (!other.buildings_.isEmpty()) { + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + result.buildings_.addAll(other.buildings_); + } + if (!other.streets_.isEmpty()) { + if (result.streets_.isEmpty()) { + result.streets_ = new java.util.ArrayList(); + } + result.streets_.addAll(other.streets_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 37: { + setShiftToCityIndex(input.readFixed32()); + break; + } + case 82: { + net.osmand.binary.OsmandOdb.BuildingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBuildings(subBuilder.buildPartial()); + break; + } + case 98: { + net.osmand.binary.OsmandOdb.StreetIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addStreets(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional fixed32 shiftToCityIndex = 4; + public boolean hasShiftToCityIndex() { + return result.hasShiftToCityIndex(); + } + public int getShiftToCityIndex() { + return result.getShiftToCityIndex(); + } + public Builder setShiftToCityIndex(int value) { + result.hasShiftToCityIndex = true; + result.shiftToCityIndex_ = value; + return this; + } + public Builder clearShiftToCityIndex() { + result.hasShiftToCityIndex = false; + result.shiftToCityIndex_ = 0; + return this; + } + + // repeated .BuildingIndex buildings = 10; + public java.util.List getBuildingsList() { + return java.util.Collections.unmodifiableList(result.buildings_); + } + public int getBuildingsCount() { + return result.getBuildingsCount(); + } + public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) { + return result.getBuildings(index); + } + public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.buildings_.set(index, value); + return this; + } + public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) { + result.buildings_.set(index, builderForValue.build()); + return this; + } + public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + result.buildings_.add(value); + return this; + } + public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) { + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + result.buildings_.add(builderForValue.build()); + return this; + } + public Builder addAllBuildings( + java.lang.Iterable values) { + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + super.addAll(values, result.buildings_); + return this; + } + public Builder clearBuildings() { + result.buildings_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .StreetIndex streets = 12; + public java.util.List getStreetsList() { + return java.util.Collections.unmodifiableList(result.streets_); + } + public int getStreetsCount() { + return result.getStreetsCount(); + } + public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) { + return result.getStreets(index); + } + public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.streets_.set(index, value); + return this; + } + public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) { + result.streets_.set(index, builderForValue.build()); + return this; + } + public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.streets_.isEmpty()) { + result.streets_ = new java.util.ArrayList(); + } + result.streets_.add(value); + return this; + } + public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) { + if (result.streets_.isEmpty()) { + result.streets_ = new java.util.ArrayList(); + } + result.streets_.add(builderForValue.build()); + return this; + } + public Builder addAllStreets( + java.lang.Iterable values) { + if (result.streets_.isEmpty()) { + result.streets_ = new java.util.ArrayList(); + } + super.addAll(values, result.streets_); + return this; + } + public Builder clearStreets() { + result.streets_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:CityBlockIndex) + } + + static { + defaultInstance = new CityBlockIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:CityBlockIndex) + } + + public static final class StreetIndex extends + com.google.protobuf.GeneratedMessage { + // Use StreetIndex.newBuilder() to construct. + private StreetIndex() { + initFields(); + } + private StreetIndex(boolean noInit) {} + + private static final StreetIndex defaultInstance; + public static StreetIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public StreetIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_StreetIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_StreetIndex_fieldAccessorTable; + } + + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string name_en = 2; + public static final int NAME_EN_FIELD_NUMBER = 2; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // required sint32 x = 3; + public static final int X_FIELD_NUMBER = 3; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // required sint32 y = 4; + public static final int Y_FIELD_NUMBER = 4; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // optional uint64 id = 6; + public static final int ID_FIELD_NUMBER = 6; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // repeated .BuildingIndex buildings = 12; + public static final int BUILDINGS_FIELD_NUMBER = 12; + private java.util.List buildings_ = + java.util.Collections.emptyList(); + public java.util.List getBuildingsList() { + return buildings_; + } + public int getBuildingsCount() { return buildings_.size(); } + public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) { + return buildings_.get(index); + } + + // repeated .StreetIntersection intersections = 5; + public static final int INTERSECTIONS_FIELD_NUMBER = 5; + private java.util.List intersections_ = + java.util.Collections.emptyList(); + public java.util.List getIntersectionsList() { + return intersections_; + } + public int getIntersectionsCount() { return intersections_.size(); } + public net.osmand.binary.OsmandOdb.StreetIntersection getIntersections(int index) { + return intersections_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + if (!hasX) return false; + if (!hasY) return false; + for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasNameEn()) { + output.writeString(2, getNameEn()); + } + if (hasX()) { + output.writeSInt32(3, getX()); + } + if (hasY()) { + output.writeSInt32(4, getY()); + } + for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) { + output.writeMessage(5, element); + } + if (hasId()) { + output.writeUInt64(6, getId()); + } + for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) { + output.writeMessage(12, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getNameEn()); + } + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(4, getY()); + } + for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(6, getId()); + } + for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(12, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.StreetIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.StreetIndex result; + + // Construct using net.osmand.binary.OsmandOdb.StreetIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.StreetIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.StreetIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.StreetIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.StreetIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.StreetIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.StreetIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.StreetIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.StreetIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.StreetIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.buildings_ != java.util.Collections.EMPTY_LIST) { + result.buildings_ = + java.util.Collections.unmodifiableList(result.buildings_); + } + if (result.intersections_ != java.util.Collections.EMPTY_LIST) { + result.intersections_ = + java.util.Collections.unmodifiableList(result.intersections_); + } + net.osmand.binary.OsmandOdb.StreetIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.StreetIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.StreetIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.StreetIndex other) { + if (other == net.osmand.binary.OsmandOdb.StreetIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (!other.buildings_.isEmpty()) { + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + result.buildings_.addAll(other.buildings_); + } + if (!other.intersections_.isEmpty()) { + if (result.intersections_.isEmpty()) { + result.intersections_ = new java.util.ArrayList(); + } + result.intersections_.addAll(other.intersections_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + setNameEn(input.readString()); + break; + } + case 24: { + setX(input.readSInt32()); + break; + } + case 32: { + setY(input.readSInt32()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.StreetIntersection.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIntersection.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addIntersections(subBuilder.buildPartial()); + break; + } + case 48: { + setId(input.readUInt64()); + break; + } + case 98: { + net.osmand.binary.OsmandOdb.BuildingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBuildings(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string name_en = 2; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // required sint32 x = 3; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // required sint32 y = 4; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // optional uint64 id = 6; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // repeated .BuildingIndex buildings = 12; + public java.util.List getBuildingsList() { + return java.util.Collections.unmodifiableList(result.buildings_); + } + public int getBuildingsCount() { + return result.getBuildingsCount(); + } + public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) { + return result.getBuildings(index); + } + public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.buildings_.set(index, value); + return this; + } + public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) { + result.buildings_.set(index, builderForValue.build()); + return this; + } + public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + result.buildings_.add(value); + return this; + } + public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) { + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + result.buildings_.add(builderForValue.build()); + return this; + } + public Builder addAllBuildings( + java.lang.Iterable values) { + if (result.buildings_.isEmpty()) { + result.buildings_ = new java.util.ArrayList(); + } + super.addAll(values, result.buildings_); + return this; + } + public Builder clearBuildings() { + result.buildings_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .StreetIntersection intersections = 5; + public java.util.List getIntersectionsList() { + return java.util.Collections.unmodifiableList(result.intersections_); + } + public int getIntersectionsCount() { + return result.getIntersectionsCount(); + } + public net.osmand.binary.OsmandOdb.StreetIntersection getIntersections(int index) { + return result.getIntersections(index); + } + public Builder setIntersections(int index, net.osmand.binary.OsmandOdb.StreetIntersection value) { + if (value == null) { + throw new NullPointerException(); + } + result.intersections_.set(index, value); + return this; + } + public Builder setIntersections(int index, net.osmand.binary.OsmandOdb.StreetIntersection.Builder builderForValue) { + result.intersections_.set(index, builderForValue.build()); + return this; + } + public Builder addIntersections(net.osmand.binary.OsmandOdb.StreetIntersection value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.intersections_.isEmpty()) { + result.intersections_ = new java.util.ArrayList(); + } + result.intersections_.add(value); + return this; + } + public Builder addIntersections(net.osmand.binary.OsmandOdb.StreetIntersection.Builder builderForValue) { + if (result.intersections_.isEmpty()) { + result.intersections_ = new java.util.ArrayList(); + } + result.intersections_.add(builderForValue.build()); + return this; + } + public Builder addAllIntersections( + java.lang.Iterable values) { + if (result.intersections_.isEmpty()) { + result.intersections_ = new java.util.ArrayList(); + } + super.addAll(values, result.intersections_); + return this; + } + public Builder clearIntersections() { + result.intersections_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:StreetIndex) + } + + static { + defaultInstance = new StreetIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:StreetIndex) + } + + public static final class StreetIntersection extends + com.google.protobuf.GeneratedMessage { + // Use StreetIntersection.newBuilder() to construct. + private StreetIntersection() { + initFields(); + } + private StreetIntersection(boolean noInit) {} + + private static final StreetIntersection defaultInstance; + public static StreetIntersection getDefaultInstance() { + return defaultInstance; + } + + @Override + public StreetIntersection getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_StreetIntersection_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_StreetIntersection_fieldAccessorTable; + } + + // required string name = 2; + public static final int NAME_FIELD_NUMBER = 2; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string name_en = 3; + public static final int NAME_EN_FIELD_NUMBER = 3; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // required sint32 intersectedX = 4; + public static final int INTERSECTEDX_FIELD_NUMBER = 4; + private boolean hasIntersectedX; + private int intersectedX_ = 0; + public boolean hasIntersectedX() { return hasIntersectedX; } + public int getIntersectedX() { return intersectedX_; } + + // required sint32 intersectedY = 5; + public static final int INTERSECTEDY_FIELD_NUMBER = 5; + private boolean hasIntersectedY; + private int intersectedY_ = 0; + public boolean hasIntersectedY() { return hasIntersectedY; } + public int getIntersectedY() { return intersectedY_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + if (!hasIntersectedX) return false; + if (!hasIntersectedY) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(2, getName()); + } + if (hasNameEn()) { + output.writeString(3, getNameEn()); + } + if (hasIntersectedX()) { + output.writeSInt32(4, getIntersectedX()); + } + if (hasIntersectedY()) { + output.writeSInt32(5, getIntersectedY()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getNameEn()); + } + if (hasIntersectedX()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(4, getIntersectedX()); + } + if (hasIntersectedY()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(5, getIntersectedY()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.StreetIntersection prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.StreetIntersection result; + + // Construct using net.osmand.binary.OsmandOdb.StreetIntersection.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.StreetIntersection(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.StreetIntersection internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.StreetIntersection(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.StreetIntersection.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.StreetIntersection getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.StreetIntersection.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.StreetIntersection build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.StreetIntersection buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.StreetIntersection buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.StreetIntersection returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.StreetIntersection) { + return mergeFrom((net.osmand.binary.OsmandOdb.StreetIntersection)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.StreetIntersection other) { + if (other == net.osmand.binary.OsmandOdb.StreetIntersection.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasIntersectedX()) { + setIntersectedX(other.getIntersectedX()); + } + if (other.hasIntersectedY()) { + setIntersectedY(other.getIntersectedY()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 18: { + setName(input.readString()); + break; + } + case 26: { + setNameEn(input.readString()); + break; + } + case 32: { + setIntersectedX(input.readSInt32()); + break; + } + case 40: { + setIntersectedY(input.readSInt32()); + break; + } + } + } + } + + + // required string name = 2; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string name_en = 3; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // required sint32 intersectedX = 4; + public boolean hasIntersectedX() { + return result.hasIntersectedX(); + } + public int getIntersectedX() { + return result.getIntersectedX(); + } + public Builder setIntersectedX(int value) { + result.hasIntersectedX = true; + result.intersectedX_ = value; + return this; + } + public Builder clearIntersectedX() { + result.hasIntersectedX = false; + result.intersectedX_ = 0; + return this; + } + + // required sint32 intersectedY = 5; + public boolean hasIntersectedY() { + return result.hasIntersectedY(); + } + public int getIntersectedY() { + return result.getIntersectedY(); + } + public Builder setIntersectedY(int value) { + result.hasIntersectedY = true; + result.intersectedY_ = value; + return this; + } + public Builder clearIntersectedY() { + result.hasIntersectedY = false; + result.intersectedY_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:StreetIntersection) + } + + static { + defaultInstance = new StreetIntersection(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:StreetIntersection) + } + + public static final class BuildingIndex extends + com.google.protobuf.GeneratedMessage { + // Use BuildingIndex.newBuilder() to construct. + private BuildingIndex() { + initFields(); + } + private BuildingIndex(boolean noInit) {} + + private static final BuildingIndex defaultInstance; + public static BuildingIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public BuildingIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_BuildingIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_BuildingIndex_fieldAccessorTable; + } + + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string name_en = 2; + public static final int NAME_EN_FIELD_NUMBER = 2; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // optional string name2 = 3; + public static final int NAME2_FIELD_NUMBER = 3; + private boolean hasName2; + private java.lang.String name2_ = ""; + public boolean hasName2() { return hasName2; } + public java.lang.String getName2() { return name2_; } + + // optional string name_en2 = 4; + public static final int NAME_EN2_FIELD_NUMBER = 4; + private boolean hasNameEn2; + private java.lang.String nameEn2_ = ""; + public boolean hasNameEn2() { return hasNameEn2; } + public java.lang.String getNameEn2() { return nameEn2_; } + + // optional sint32 interpolation = 5; + public static final int INTERPOLATION_FIELD_NUMBER = 5; + private boolean hasInterpolation; + private int interpolation_ = 0; + public boolean hasInterpolation() { return hasInterpolation; } + public int getInterpolation() { return interpolation_; } + + // required sint32 x = 7; + public static final int X_FIELD_NUMBER = 7; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // required sint32 y = 8; + public static final int Y_FIELD_NUMBER = 8; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // optional sint32 x2 = 9; + public static final int X2_FIELD_NUMBER = 9; + private boolean hasX2; + private int x2_ = 0; + public boolean hasX2() { return hasX2; } + public int getX2() { return x2_; } + + // optional sint32 y2 = 10; + public static final int Y2_FIELD_NUMBER = 10; + private boolean hasY2; + private int y2_ = 0; + public boolean hasY2() { return hasY2; } + public int getY2() { return y2_; } + + // optional uint64 id = 13; + public static final int ID_FIELD_NUMBER = 13; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // optional string postcode = 14; + public static final int POSTCODE_FIELD_NUMBER = 14; + private boolean hasPostcode; + private java.lang.String postcode_ = ""; + public boolean hasPostcode() { return hasPostcode; } + public java.lang.String getPostcode() { return postcode_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + if (!hasX) return false; + if (!hasY) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasNameEn()) { + output.writeString(2, getNameEn()); + } + if (hasName2()) { + output.writeString(3, getName2()); + } + if (hasNameEn2()) { + output.writeString(4, getNameEn2()); + } + if (hasInterpolation()) { + output.writeSInt32(5, getInterpolation()); + } + if (hasX()) { + output.writeSInt32(7, getX()); + } + if (hasY()) { + output.writeSInt32(8, getY()); + } + if (hasX2()) { + output.writeSInt32(9, getX2()); + } + if (hasY2()) { + output.writeSInt32(10, getY2()); + } + if (hasId()) { + output.writeUInt64(13, getId()); + } + if (hasPostcode()) { + output.writeString(14, getPostcode()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getNameEn()); + } + if (hasName2()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getName2()); + } + if (hasNameEn2()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(4, getNameEn2()); + } + if (hasInterpolation()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(5, getInterpolation()); + } + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(7, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(8, getY()); + } + if (hasX2()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(9, getX2()); + } + if (hasY2()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(10, getY2()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(13, getId()); + } + if (hasPostcode()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(14, getPostcode()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.BuildingIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.BuildingIndex result; + + // Construct using net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.BuildingIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.BuildingIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.BuildingIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.BuildingIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.BuildingIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.BuildingIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.BuildingIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.BuildingIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.BuildingIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.BuildingIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.BuildingIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.BuildingIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.BuildingIndex other) { + if (other == net.osmand.binary.OsmandOdb.BuildingIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasName2()) { + setName2(other.getName2()); + } + if (other.hasNameEn2()) { + setNameEn2(other.getNameEn2()); + } + if (other.hasInterpolation()) { + setInterpolation(other.getInterpolation()); + } + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasX2()) { + setX2(other.getX2()); + } + if (other.hasY2()) { + setY2(other.getY2()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasPostcode()) { + setPostcode(other.getPostcode()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + setNameEn(input.readString()); + break; + } + case 26: { + setName2(input.readString()); + break; + } + case 34: { + setNameEn2(input.readString()); + break; + } + case 40: { + setInterpolation(input.readSInt32()); + break; + } + case 56: { + setX(input.readSInt32()); + break; + } + case 64: { + setY(input.readSInt32()); + break; + } + case 72: { + setX2(input.readSInt32()); + break; + } + case 80: { + setY2(input.readSInt32()); + break; + } + case 104: { + setId(input.readUInt64()); + break; + } + case 114: { + setPostcode(input.readString()); + break; + } + } + } + } + + + // required string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string name_en = 2; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // optional string name2 = 3; + public boolean hasName2() { + return result.hasName2(); + } + public java.lang.String getName2() { + return result.getName2(); + } + public Builder setName2(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName2 = true; + result.name2_ = value; + return this; + } + public Builder clearName2() { + result.hasName2 = false; + result.name2_ = getDefaultInstance().getName2(); + return this; + } + + // optional string name_en2 = 4; + public boolean hasNameEn2() { + return result.hasNameEn2(); + } + public java.lang.String getNameEn2() { + return result.getNameEn2(); + } + public Builder setNameEn2(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn2 = true; + result.nameEn2_ = value; + return this; + } + public Builder clearNameEn2() { + result.hasNameEn2 = false; + result.nameEn2_ = getDefaultInstance().getNameEn2(); + return this; + } + + // optional sint32 interpolation = 5; + public boolean hasInterpolation() { + return result.hasInterpolation(); + } + public int getInterpolation() { + return result.getInterpolation(); + } + public Builder setInterpolation(int value) { + result.hasInterpolation = true; + result.interpolation_ = value; + return this; + } + public Builder clearInterpolation() { + result.hasInterpolation = false; + result.interpolation_ = 0; + return this; + } + + // required sint32 x = 7; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // required sint32 y = 8; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // optional sint32 x2 = 9; + public boolean hasX2() { + return result.hasX2(); + } + public int getX2() { + return result.getX2(); + } + public Builder setX2(int value) { + result.hasX2 = true; + result.x2_ = value; + return this; + } + public Builder clearX2() { + result.hasX2 = false; + result.x2_ = 0; + return this; + } + + // optional sint32 y2 = 10; + public boolean hasY2() { + return result.hasY2(); + } + public int getY2() { + return result.getY2(); + } + public Builder setY2(int value) { + result.hasY2 = true; + result.y2_ = value; + return this; + } + public Builder clearY2() { + result.hasY2 = false; + result.y2_ = 0; + return this; + } + + // optional uint64 id = 13; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // optional string postcode = 14; + public boolean hasPostcode() { + return result.hasPostcode(); + } + public java.lang.String getPostcode() { + return result.getPostcode(); + } + public Builder setPostcode(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasPostcode = true; + result.postcode_ = value; + return this; + } + public Builder clearPostcode() { + result.hasPostcode = false; + result.postcode_ = getDefaultInstance().getPostcode(); + return this; + } + + // @@protoc_insertion_point(builder_scope:BuildingIndex) + } + + static { + defaultInstance = new BuildingIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:BuildingIndex) + } + + public static final class TransportRoutes extends + com.google.protobuf.GeneratedMessage { + // Use TransportRoutes.newBuilder() to construct. + private TransportRoutes() { + initFields(); + } + private TransportRoutes(boolean noInit) {} + + private static final TransportRoutes defaultInstance; + public static TransportRoutes getDefaultInstance() { + return defaultInstance; + } + + @Override + public TransportRoutes getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_TransportRoutes_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_TransportRoutes_fieldAccessorTable; + } + + // repeated .TransportRoute routes = 6; + public static final int ROUTES_FIELD_NUMBER = 6; + private java.util.List routes_ = + java.util.Collections.emptyList(); + public java.util.List getRoutesList() { + return routes_; + } + public int getRoutesCount() { return routes_.size(); } + public net.osmand.binary.OsmandOdb.TransportRoute getRoutes(int index) { + return routes_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) { + output.writeMessage(6, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRoutes prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.TransportRoutes result; + + // Construct using net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.TransportRoutes(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.TransportRoutes internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.TransportRoutes(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.TransportRoutes.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportRoutes getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.TransportRoutes build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.TransportRoutes buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportRoutes buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.routes_ != java.util.Collections.EMPTY_LIST) { + result.routes_ = + java.util.Collections.unmodifiableList(result.routes_); + } + net.osmand.binary.OsmandOdb.TransportRoutes returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.TransportRoutes) { + return mergeFrom((net.osmand.binary.OsmandOdb.TransportRoutes)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRoutes other) { + if (other == net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance()) return this; + if (!other.routes_.isEmpty()) { + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + result.routes_.addAll(other.routes_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 50: { + net.osmand.binary.OsmandOdb.TransportRoute.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRoute.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRoutes(subBuilder.buildPartial()); + break; + } + } + } + } + + + // repeated .TransportRoute routes = 6; + public java.util.List getRoutesList() { + return java.util.Collections.unmodifiableList(result.routes_); + } + public int getRoutesCount() { + return result.getRoutesCount(); + } + public net.osmand.binary.OsmandOdb.TransportRoute getRoutes(int index) { + return result.getRoutes(index); + } + public Builder setRoutes(int index, net.osmand.binary.OsmandOdb.TransportRoute value) { + if (value == null) { + throw new NullPointerException(); + } + result.routes_.set(index, value); + return this; + } + public Builder setRoutes(int index, net.osmand.binary.OsmandOdb.TransportRoute.Builder builderForValue) { + result.routes_.set(index, builderForValue.build()); + return this; + } + public Builder addRoutes(net.osmand.binary.OsmandOdb.TransportRoute value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + result.routes_.add(value); + return this; + } + public Builder addRoutes(net.osmand.binary.OsmandOdb.TransportRoute.Builder builderForValue) { + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + result.routes_.add(builderForValue.build()); + return this; + } + public Builder addAllRoutes( + java.lang.Iterable values) { + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + super.addAll(values, result.routes_); + return this; + } + public Builder clearRoutes() { + result.routes_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:TransportRoutes) + } + + static { + defaultInstance = new TransportRoutes(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:TransportRoutes) + } + + public static final class TransportRoute extends + com.google.protobuf.GeneratedMessage { + // Use TransportRoute.newBuilder() to construct. + private TransportRoute() { + initFields(); + } + private TransportRoute(boolean noInit) {} + + private static final TransportRoute defaultInstance; + public static TransportRoute getDefaultInstance() { + return defaultInstance; + } + + @Override + public TransportRoute getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_TransportRoute_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_TransportRoute_fieldAccessorTable; + } + + // required uint64 id = 1; + public static final int ID_FIELD_NUMBER = 1; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // optional uint32 type = 3; + public static final int TYPE_FIELD_NUMBER = 3; + private boolean hasType; + private int type_ = 0; + public boolean hasType() { return hasType; } + public int getType() { return type_; } + + // optional uint32 operator = 4; + public static final int OPERATOR_FIELD_NUMBER = 4; + private boolean hasOperator; + private int operator_ = 0; + public boolean hasOperator() { return hasOperator; } + public int getOperator() { return operator_; } + + // optional string ref = 5; + public static final int REF_FIELD_NUMBER = 5; + private boolean hasRef; + private java.lang.String ref_ = ""; + public boolean hasRef() { return hasRef; } + public java.lang.String getRef() { return ref_; } + + // optional uint32 name = 6; + public static final int NAME_FIELD_NUMBER = 6; + private boolean hasName; + private int name_ = 0; + public boolean hasName() { return hasName; } + public int getName() { return name_; } + + // optional uint32 name_en = 7; + public static final int NAME_EN_FIELD_NUMBER = 7; + private boolean hasNameEn; + private int nameEn_ = 0; + public boolean hasNameEn() { return hasNameEn; } + public int getNameEn() { return nameEn_; } + + // optional uint32 distance = 8; + public static final int DISTANCE_FIELD_NUMBER = 8; + private boolean hasDistance; + private int distance_ = 0; + public boolean hasDistance() { return hasDistance; } + public int getDistance() { return distance_; } + + // repeated .TransportRouteStop directStops = 15; + public static final int DIRECTSTOPS_FIELD_NUMBER = 15; + private java.util.List directStops_ = + java.util.Collections.emptyList(); + public java.util.List getDirectStopsList() { + return directStops_; + } + public int getDirectStopsCount() { return directStops_.size(); } + public net.osmand.binary.OsmandOdb.TransportRouteStop getDirectStops(int index) { + return directStops_.get(index); + } + + // repeated .TransportRouteStop reverseStops = 16; + public static final int REVERSESTOPS_FIELD_NUMBER = 16; + private java.util.List reverseStops_ = + java.util.Collections.emptyList(); + public java.util.List getReverseStopsList() { + return reverseStops_; + } + public int getReverseStopsCount() { return reverseStops_.size(); } + public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) { + return reverseStops_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasId) return false; + for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasId()) { + output.writeUInt64(1, getId()); + } + if (hasType()) { + output.writeUInt32(3, getType()); + } + if (hasOperator()) { + output.writeUInt32(4, getOperator()); + } + if (hasRef()) { + output.writeString(5, getRef()); + } + if (hasName()) { + output.writeUInt32(6, getName()); + } + if (hasNameEn()) { + output.writeUInt32(7, getNameEn()); + } + if (hasDistance()) { + output.writeUInt32(8, getDistance()); + } + for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) { + output.writeMessage(15, element); + } + for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) { + output.writeMessage(16, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(1, getId()); + } + if (hasType()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, getType()); + } + if (hasOperator()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, getOperator()); + } + if (hasRef()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(5, getRef()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(6, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(7, getNameEn()); + } + if (hasDistance()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(8, getDistance()); + } + for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(15, element); + } + for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(16, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRoute prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.TransportRoute result; + + // Construct using net.osmand.binary.OsmandOdb.TransportRoute.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.TransportRoute(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.TransportRoute internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.TransportRoute(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.TransportRoute.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportRoute getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.TransportRoute.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.TransportRoute build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.TransportRoute buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportRoute buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.directStops_ != java.util.Collections.EMPTY_LIST) { + result.directStops_ = + java.util.Collections.unmodifiableList(result.directStops_); + } + if (result.reverseStops_ != java.util.Collections.EMPTY_LIST) { + result.reverseStops_ = + java.util.Collections.unmodifiableList(result.reverseStops_); + } + net.osmand.binary.OsmandOdb.TransportRoute returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.TransportRoute) { + return mergeFrom((net.osmand.binary.OsmandOdb.TransportRoute)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRoute other) { + if (other == net.osmand.binary.OsmandOdb.TransportRoute.getDefaultInstance()) return this; + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasType()) { + setType(other.getType()); + } + if (other.hasOperator()) { + setOperator(other.getOperator()); + } + if (other.hasRef()) { + setRef(other.getRef()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasDistance()) { + setDistance(other.getDistance()); + } + if (!other.directStops_.isEmpty()) { + if (result.directStops_.isEmpty()) { + result.directStops_ = new java.util.ArrayList(); + } + result.directStops_.addAll(other.directStops_); + } + if (!other.reverseStops_.isEmpty()) { + if (result.reverseStops_.isEmpty()) { + result.reverseStops_ = new java.util.ArrayList(); + } + result.reverseStops_.addAll(other.reverseStops_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setId(input.readUInt64()); + break; + } + case 24: { + setType(input.readUInt32()); + break; + } + case 32: { + setOperator(input.readUInt32()); + break; + } + case 42: { + setRef(input.readString()); + break; + } + case 48: { + setName(input.readUInt32()); + break; + } + case 56: { + setNameEn(input.readUInt32()); + break; + } + case 64: { + setDistance(input.readUInt32()); + break; + } + case 122: { + net.osmand.binary.OsmandOdb.TransportRouteStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addDirectStops(subBuilder.buildPartial()); + break; + } + case 130: { + net.osmand.binary.OsmandOdb.TransportRouteStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addReverseStops(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required uint64 id = 1; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // optional uint32 type = 3; + public boolean hasType() { + return result.hasType(); + } + public int getType() { + return result.getType(); + } + public Builder setType(int value) { + result.hasType = true; + result.type_ = value; + return this; + } + public Builder clearType() { + result.hasType = false; + result.type_ = 0; + return this; + } + + // optional uint32 operator = 4; + public boolean hasOperator() { + return result.hasOperator(); + } + public int getOperator() { + return result.getOperator(); + } + public Builder setOperator(int value) { + result.hasOperator = true; + result.operator_ = value; + return this; + } + public Builder clearOperator() { + result.hasOperator = false; + result.operator_ = 0; + return this; + } + + // optional string ref = 5; + public boolean hasRef() { + return result.hasRef(); + } + public java.lang.String getRef() { + return result.getRef(); + } + public Builder setRef(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRef = true; + result.ref_ = value; + return this; + } + public Builder clearRef() { + result.hasRef = false; + result.ref_ = getDefaultInstance().getRef(); + return this; + } + + // optional uint32 name = 6; + public boolean hasName() { + return result.hasName(); + } + public int getName() { + return result.getName(); + } + public Builder setName(int value) { + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = 0; + return this; + } + + // optional uint32 name_en = 7; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public int getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(int value) { + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = 0; + return this; + } + + // optional uint32 distance = 8; + public boolean hasDistance() { + return result.hasDistance(); + } + public int getDistance() { + return result.getDistance(); + } + public Builder setDistance(int value) { + result.hasDistance = true; + result.distance_ = value; + return this; + } + public Builder clearDistance() { + result.hasDistance = false; + result.distance_ = 0; + return this; + } + + // repeated .TransportRouteStop directStops = 15; + public java.util.List getDirectStopsList() { + return java.util.Collections.unmodifiableList(result.directStops_); + } + public int getDirectStopsCount() { + return result.getDirectStopsCount(); + } + public net.osmand.binary.OsmandOdb.TransportRouteStop getDirectStops(int index) { + return result.getDirectStops(index); + } + public Builder setDirectStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) { + if (value == null) { + throw new NullPointerException(); + } + result.directStops_.set(index, value); + return this; + } + public Builder setDirectStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { + result.directStops_.set(index, builderForValue.build()); + return this; + } + public Builder addDirectStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.directStops_.isEmpty()) { + result.directStops_ = new java.util.ArrayList(); + } + result.directStops_.add(value); + return this; + } + public Builder addDirectStops(net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { + if (result.directStops_.isEmpty()) { + result.directStops_ = new java.util.ArrayList(); + } + result.directStops_.add(builderForValue.build()); + return this; + } + public Builder addAllDirectStops( + java.lang.Iterable values) { + if (result.directStops_.isEmpty()) { + result.directStops_ = new java.util.ArrayList(); + } + super.addAll(values, result.directStops_); + return this; + } + public Builder clearDirectStops() { + result.directStops_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .TransportRouteStop reverseStops = 16; + public java.util.List getReverseStopsList() { + return java.util.Collections.unmodifiableList(result.reverseStops_); + } + public int getReverseStopsCount() { + return result.getReverseStopsCount(); + } + public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) { + return result.getReverseStops(index); + } + public Builder setReverseStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) { + if (value == null) { + throw new NullPointerException(); + } + result.reverseStops_.set(index, value); + return this; + } + public Builder setReverseStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { + result.reverseStops_.set(index, builderForValue.build()); + return this; + } + public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.reverseStops_.isEmpty()) { + result.reverseStops_ = new java.util.ArrayList(); + } + result.reverseStops_.add(value); + return this; + } + public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { + if (result.reverseStops_.isEmpty()) { + result.reverseStops_ = new java.util.ArrayList(); + } + result.reverseStops_.add(builderForValue.build()); + return this; + } + public Builder addAllReverseStops( + java.lang.Iterable values) { + if (result.reverseStops_.isEmpty()) { + result.reverseStops_ = new java.util.ArrayList(); + } + super.addAll(values, result.reverseStops_); + return this; + } + public Builder clearReverseStops() { + result.reverseStops_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:TransportRoute) + } + + static { + defaultInstance = new TransportRoute(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:TransportRoute) + } + + public static final class TransportRouteStop extends + com.google.protobuf.GeneratedMessage { + // Use TransportRouteStop.newBuilder() to construct. + private TransportRouteStop() { + initFields(); + } + private TransportRouteStop(boolean noInit) {} + + private static final TransportRouteStop defaultInstance; + public static TransportRouteStop getDefaultInstance() { + return defaultInstance; + } + + @Override + public TransportRouteStop getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_TransportRouteStop_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_TransportRouteStop_fieldAccessorTable; + } + + // required sint64 id = 1; + public static final int ID_FIELD_NUMBER = 1; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // required sint32 dx = 2; + public static final int DX_FIELD_NUMBER = 2; + private boolean hasDx; + private int dx_ = 0; + public boolean hasDx() { return hasDx; } + public int getDx() { return dx_; } + + // required sint32 dy = 3; + public static final int DY_FIELD_NUMBER = 3; + private boolean hasDy; + private int dy_ = 0; + public boolean hasDy() { return hasDy; } + public int getDy() { return dy_; } + + // required uint32 name = 6; + public static final int NAME_FIELD_NUMBER = 6; + private boolean hasName; + private int name_ = 0; + public boolean hasName() { return hasName; } + public int getName() { return name_; } + + // optional uint32 name_en = 7; + public static final int NAME_EN_FIELD_NUMBER = 7; + private boolean hasNameEn; + private int nameEn_ = 0; + public boolean hasNameEn() { return hasNameEn; } + public int getNameEn() { return nameEn_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasId) return false; + if (!hasDx) return false; + if (!hasDy) return false; + if (!hasName) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasId()) { + output.writeSInt64(1, getId()); + } + if (hasDx()) { + output.writeSInt32(2, getDx()); + } + if (hasDy()) { + output.writeSInt32(3, getDy()); + } + if (hasName()) { + output.writeUInt32(6, getName()); + } + if (hasNameEn()) { + output.writeUInt32(7, getNameEn()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt64Size(1, getId()); + } + if (hasDx()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getDx()); + } + if (hasDy()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getDy()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(6, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(7, getNameEn()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRouteStop prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.TransportRouteStop result; + + // Construct using net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.TransportRouteStop(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.TransportRouteStop internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.TransportRouteStop(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.TransportRouteStop.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportRouteStop getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.TransportRouteStop.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.TransportRouteStop build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.TransportRouteStop buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportRouteStop buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.TransportRouteStop returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.TransportRouteStop) { + return mergeFrom((net.osmand.binary.OsmandOdb.TransportRouteStop)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRouteStop other) { + if (other == net.osmand.binary.OsmandOdb.TransportRouteStop.getDefaultInstance()) return this; + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasDx()) { + setDx(other.getDx()); + } + if (other.hasDy()) { + setDy(other.getDy()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setId(input.readSInt64()); + break; + } + case 16: { + setDx(input.readSInt32()); + break; + } + case 24: { + setDy(input.readSInt32()); + break; + } + case 48: { + setName(input.readUInt32()); + break; + } + case 56: { + setNameEn(input.readUInt32()); + break; + } + } + } + } + + + // required sint64 id = 1; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // required sint32 dx = 2; + public boolean hasDx() { + return result.hasDx(); + } + public int getDx() { + return result.getDx(); + } + public Builder setDx(int value) { + result.hasDx = true; + result.dx_ = value; + return this; + } + public Builder clearDx() { + result.hasDx = false; + result.dx_ = 0; + return this; + } + + // required sint32 dy = 3; + public boolean hasDy() { + return result.hasDy(); + } + public int getDy() { + return result.getDy(); + } + public Builder setDy(int value) { + result.hasDy = true; + result.dy_ = value; + return this; + } + public Builder clearDy() { + result.hasDy = false; + result.dy_ = 0; + return this; + } + + // required uint32 name = 6; + public boolean hasName() { + return result.hasName(); + } + public int getName() { + return result.getName(); + } + public Builder setName(int value) { + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = 0; + return this; + } + + // optional uint32 name_en = 7; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public int getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(int value) { + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:TransportRouteStop) + } + + static { + defaultInstance = new TransportRouteStop(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:TransportRouteStop) + } + + public static final class TransportStop extends + com.google.protobuf.GeneratedMessage { + // Use TransportStop.newBuilder() to construct. + private TransportStop() { + initFields(); + } + private TransportStop(boolean noInit) {} + + private static final TransportStop defaultInstance; + public static TransportStop getDefaultInstance() { + return defaultInstance; + } + + @Override + public TransportStop getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_TransportStop_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_TransportStop_fieldAccessorTable; + } + + // required sint32 dx = 1; + public static final int DX_FIELD_NUMBER = 1; + private boolean hasDx; + private int dx_ = 0; + public boolean hasDx() { return hasDx; } + public int getDx() { return dx_; } + + // required sint32 dy = 2; + public static final int DY_FIELD_NUMBER = 2; + private boolean hasDy; + private int dy_ = 0; + public boolean hasDy() { return hasDy; } + public int getDy() { return dy_; } + + // required sint64 id = 5; + public static final int ID_FIELD_NUMBER = 5; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // required uint32 name = 6; + public static final int NAME_FIELD_NUMBER = 6; + private boolean hasName; + private int name_ = 0; + public boolean hasName() { return hasName; } + public int getName() { return name_; } + + // optional uint32 name_en = 7; + public static final int NAME_EN_FIELD_NUMBER = 7; + private boolean hasNameEn; + private int nameEn_ = 0; + public boolean hasNameEn() { return hasNameEn; } + public int getNameEn() { return nameEn_; } + + // repeated uint32 routes = 16; + public static final int ROUTES_FIELD_NUMBER = 16; + private java.util.List routes_ = + java.util.Collections.emptyList(); + public java.util.List getRoutesList() { + return routes_; + } + public int getRoutesCount() { return routes_.size(); } + public int getRoutes(int index) { + return routes_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasDx) return false; + if (!hasDy) return false; + if (!hasId) return false; + if (!hasName) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasDx()) { + output.writeSInt32(1, getDx()); + } + if (hasDy()) { + output.writeSInt32(2, getDy()); + } + if (hasId()) { + output.writeSInt64(5, getId()); + } + if (hasName()) { + output.writeUInt32(6, getName()); + } + if (hasNameEn()) { + output.writeUInt32(7, getNameEn()); + } + for (int element : getRoutesList()) { + output.writeUInt32(16, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasDx()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(1, getDx()); + } + if (hasDy()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getDy()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt64Size(5, getId()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(6, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(7, getNameEn()); + } + { + int dataSize = 0; + for (int element : getRoutesList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(element); + } + size += dataSize; + size += 2 * getRoutesList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportStop parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStop parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportStop prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.TransportStop result; + + // Construct using net.osmand.binary.OsmandOdb.TransportStop.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.TransportStop(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.TransportStop internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.TransportStop(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.TransportStop.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportStop getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.TransportStop.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.TransportStop build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.TransportStop buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportStop buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.routes_ != java.util.Collections.EMPTY_LIST) { + result.routes_ = + java.util.Collections.unmodifiableList(result.routes_); + } + net.osmand.binary.OsmandOdb.TransportStop returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.TransportStop) { + return mergeFrom((net.osmand.binary.OsmandOdb.TransportStop)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportStop other) { + if (other == net.osmand.binary.OsmandOdb.TransportStop.getDefaultInstance()) return this; + if (other.hasDx()) { + setDx(other.getDx()); + } + if (other.hasDy()) { + setDy(other.getDy()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (!other.routes_.isEmpty()) { + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + result.routes_.addAll(other.routes_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setDx(input.readSInt32()); + break; + } + case 16: { + setDy(input.readSInt32()); + break; + } + case 40: { + setId(input.readSInt64()); + break; + } + case 48: { + setName(input.readUInt32()); + break; + } + case 56: { + setNameEn(input.readUInt32()); + break; + } + case 128: { + addRoutes(input.readUInt32()); + break; + } + case 130: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addRoutes(input.readUInt32()); + } + input.popLimit(limit); + break; + } + } + } + } + + + // required sint32 dx = 1; + public boolean hasDx() { + return result.hasDx(); + } + public int getDx() { + return result.getDx(); + } + public Builder setDx(int value) { + result.hasDx = true; + result.dx_ = value; + return this; + } + public Builder clearDx() { + result.hasDx = false; + result.dx_ = 0; + return this; + } + + // required sint32 dy = 2; + public boolean hasDy() { + return result.hasDy(); + } + public int getDy() { + return result.getDy(); + } + public Builder setDy(int value) { + result.hasDy = true; + result.dy_ = value; + return this; + } + public Builder clearDy() { + result.hasDy = false; + result.dy_ = 0; + return this; + } + + // required sint64 id = 5; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // required uint32 name = 6; + public boolean hasName() { + return result.hasName(); + } + public int getName() { + return result.getName(); + } + public Builder setName(int value) { + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = 0; + return this; + } + + // optional uint32 name_en = 7; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public int getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(int value) { + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = 0; + return this; + } + + // repeated uint32 routes = 16; + public java.util.List getRoutesList() { + return java.util.Collections.unmodifiableList(result.routes_); + } + public int getRoutesCount() { + return result.getRoutesCount(); + } + public int getRoutes(int index) { + return result.getRoutes(index); + } + public Builder setRoutes(int index, int value) { + result.routes_.set(index, value); + return this; + } + public Builder addRoutes(int value) { + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + result.routes_.add(value); + return this; + } + public Builder addAllRoutes( + java.lang.Iterable values) { + if (result.routes_.isEmpty()) { + result.routes_ = new java.util.ArrayList(); + } + super.addAll(values, result.routes_); + return this; + } + public Builder clearRoutes() { + result.routes_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:TransportStop) + } + + static { + defaultInstance = new TransportStop(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:TransportStop) + } + + public static final class TransportStopsTree extends + com.google.protobuf.GeneratedMessage { + // Use TransportStopsTree.newBuilder() to construct. + private TransportStopsTree() { + initFields(); + } + private TransportStopsTree(boolean noInit) {} + + private static final TransportStopsTree defaultInstance; + public static TransportStopsTree getDefaultInstance() { + return defaultInstance; + } + + @Override + public TransportStopsTree getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_TransportStopsTree_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_TransportStopsTree_fieldAccessorTable; + } + + // required sint32 left = 1; + public static final int LEFT_FIELD_NUMBER = 1; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required sint32 right = 2; + public static final int RIGHT_FIELD_NUMBER = 2; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required sint32 top = 3; + public static final int TOP_FIELD_NUMBER = 3; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required sint32 bottom = 4; + public static final int BOTTOM_FIELD_NUMBER = 4; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // repeated .TransportStopsTree subtrees = 7; + public static final int SUBTREES_FIELD_NUMBER = 7; + private java.util.List subtrees_ = + java.util.Collections.emptyList(); + public java.util.List getSubtreesList() { + return subtrees_; + } + public int getSubtreesCount() { return subtrees_.size(); } + public net.osmand.binary.OsmandOdb.TransportStopsTree getSubtrees(int index) { + return subtrees_.get(index); + } + + // repeated .TransportStop leafs = 8; + public static final int LEAFS_FIELD_NUMBER = 8; + private java.util.List leafs_ = + java.util.Collections.emptyList(); + public java.util.List getLeafsList() { + return leafs_; + } + public int getLeafsCount() { return leafs_.size(); } + public net.osmand.binary.OsmandOdb.TransportStop getLeafs(int index) { + return leafs_.get(index); + } + + // optional uint64 baseId = 16; + public static final int BASEID_FIELD_NUMBER = 16; + private boolean hasBaseId; + private long baseId_ = 0L; + public boolean hasBaseId() { return hasBaseId; } + public long getBaseId() { return baseId_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasLeft()) { + output.writeSInt32(1, getLeft()); + } + if (hasRight()) { + output.writeSInt32(2, getRight()); + } + if (hasTop()) { + output.writeSInt32(3, getTop()); + } + if (hasBottom()) { + output.writeSInt32(4, getBottom()); + } + for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) { + output.writeMessage(7, element); + } + for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) { + output.writeMessage(8, element); + } + if (hasBaseId()) { + output.writeUInt64(16, getBaseId()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(1, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(4, getBottom()); + } + for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, element); + } + if (hasBaseId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(16, getBaseId()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportStopsTree prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.TransportStopsTree result; + + // Construct using net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.TransportStopsTree(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.TransportStopsTree internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.TransportStopsTree(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.TransportStopsTree.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportStopsTree getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.TransportStopsTree build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.TransportStopsTree buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.TransportStopsTree buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.subtrees_ != java.util.Collections.EMPTY_LIST) { + result.subtrees_ = + java.util.Collections.unmodifiableList(result.subtrees_); + } + if (result.leafs_ != java.util.Collections.EMPTY_LIST) { + result.leafs_ = + java.util.Collections.unmodifiableList(result.leafs_); + } + net.osmand.binary.OsmandOdb.TransportStopsTree returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.TransportStopsTree) { + return mergeFrom((net.osmand.binary.OsmandOdb.TransportStopsTree)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportStopsTree other) { + if (other == net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance()) return this; + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (!other.subtrees_.isEmpty()) { + if (result.subtrees_.isEmpty()) { + result.subtrees_ = new java.util.ArrayList(); + } + result.subtrees_.addAll(other.subtrees_); + } + if (!other.leafs_.isEmpty()) { + if (result.leafs_.isEmpty()) { + result.leafs_ = new java.util.ArrayList(); + } + result.leafs_.addAll(other.leafs_); + } + if (other.hasBaseId()) { + setBaseId(other.getBaseId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setLeft(input.readSInt32()); + break; + } + case 16: { + setRight(input.readSInt32()); + break; + } + case 24: { + setTop(input.readSInt32()); + break; + } + case 32: { + setBottom(input.readSInt32()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.TransportStopsTree.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubtrees(subBuilder.buildPartial()); + break; + } + case 66: { + net.osmand.binary.OsmandOdb.TransportStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStop.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addLeafs(subBuilder.buildPartial()); + break; + } + case 128: { + setBaseId(input.readUInt64()); + break; + } + } + } + } + + + // required sint32 left = 1; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required sint32 right = 2; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required sint32 top = 3; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required sint32 bottom = 4; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // repeated .TransportStopsTree subtrees = 7; + public java.util.List getSubtreesList() { + return java.util.Collections.unmodifiableList(result.subtrees_); + } + public int getSubtreesCount() { + return result.getSubtreesCount(); + } + public net.osmand.binary.OsmandOdb.TransportStopsTree getSubtrees(int index) { + return result.getSubtrees(index); + } + public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.TransportStopsTree value) { + if (value == null) { + throw new NullPointerException(); + } + result.subtrees_.set(index, value); + return this; + } + public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) { + result.subtrees_.set(index, builderForValue.build()); + return this; + } + public Builder addSubtrees(net.osmand.binary.OsmandOdb.TransportStopsTree value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subtrees_.isEmpty()) { + result.subtrees_ = new java.util.ArrayList(); + } + result.subtrees_.add(value); + return this; + } + public Builder addSubtrees(net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) { + if (result.subtrees_.isEmpty()) { + result.subtrees_ = new java.util.ArrayList(); + } + result.subtrees_.add(builderForValue.build()); + return this; + } + public Builder addAllSubtrees( + java.lang.Iterable values) { + if (result.subtrees_.isEmpty()) { + result.subtrees_ = new java.util.ArrayList(); + } + super.addAll(values, result.subtrees_); + return this; + } + public Builder clearSubtrees() { + result.subtrees_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .TransportStop leafs = 8; + public java.util.List getLeafsList() { + return java.util.Collections.unmodifiableList(result.leafs_); + } + public int getLeafsCount() { + return result.getLeafsCount(); + } + public net.osmand.binary.OsmandOdb.TransportStop getLeafs(int index) { + return result.getLeafs(index); + } + public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.TransportStop value) { + if (value == null) { + throw new NullPointerException(); + } + result.leafs_.set(index, value); + return this; + } + public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.TransportStop.Builder builderForValue) { + result.leafs_.set(index, builderForValue.build()); + return this; + } + public Builder addLeafs(net.osmand.binary.OsmandOdb.TransportStop value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.leafs_.isEmpty()) { + result.leafs_ = new java.util.ArrayList(); + } + result.leafs_.add(value); + return this; + } + public Builder addLeafs(net.osmand.binary.OsmandOdb.TransportStop.Builder builderForValue) { + if (result.leafs_.isEmpty()) { + result.leafs_ = new java.util.ArrayList(); + } + result.leafs_.add(builderForValue.build()); + return this; + } + public Builder addAllLeafs( + java.lang.Iterable values) { + if (result.leafs_.isEmpty()) { + result.leafs_ = new java.util.ArrayList(); + } + super.addAll(values, result.leafs_); + return this; + } + public Builder clearLeafs() { + result.leafs_ = java.util.Collections.emptyList(); + return this; + } + + // optional uint64 baseId = 16; + public boolean hasBaseId() { + return result.hasBaseId(); + } + public long getBaseId() { + return result.getBaseId(); + } + public Builder setBaseId(long value) { + result.hasBaseId = true; + result.baseId_ = value; + return this; + } + public Builder clearBaseId() { + result.hasBaseId = false; + result.baseId_ = 0L; + return this; + } + + // @@protoc_insertion_point(builder_scope:TransportStopsTree) + } + + static { + defaultInstance = new TransportStopsTree(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:TransportStopsTree) + } + + public static final class OsmAndTransportIndex extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndTransportIndex.newBuilder() to construct. + private OsmAndTransportIndex() { + initFields(); + } + private OsmAndTransportIndex(boolean noInit) {} + + private static final OsmAndTransportIndex defaultInstance; + public static OsmAndTransportIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndTransportIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndTransportIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndTransportIndex_fieldAccessorTable; + } + + // optional string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional .TransportRoutes routes = 3; + public static final int ROUTES_FIELD_NUMBER = 3; + private boolean hasRoutes; + private net.osmand.binary.OsmandOdb.TransportRoutes routes_; + public boolean hasRoutes() { return hasRoutes; } + public net.osmand.binary.OsmandOdb.TransportRoutes getRoutes() { return routes_; } + + // optional .TransportStopsTree stops = 6; + public static final int STOPS_FIELD_NUMBER = 6; + private boolean hasStops; + private net.osmand.binary.OsmandOdb.TransportStopsTree stops_; + public boolean hasStops() { return hasStops; } + public net.osmand.binary.OsmandOdb.TransportStopsTree getStops() { return stops_; } + + // required .StringTable stringTable = 9; + public static final int STRINGTABLE_FIELD_NUMBER = 9; + private boolean hasStringTable; + private net.osmand.binary.OsmandOdb.StringTable stringTable_; + public boolean hasStringTable() { return hasStringTable; } + public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; } + + private void initFields() { + routes_ = net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance(); + stops_ = net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance(); + stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasStringTable) return false; + if (hasRoutes()) { + if (!getRoutes().isInitialized()) return false; + } + if (hasStops()) { + if (!getStops().isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasRoutes()) { + output.writeMessage(3, getRoutes()); + } + if (hasStops()) { + output.writeMessage(6, getStops()); + } + if (hasStringTable()) { + output.writeMessage(9, getStringTable()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasRoutes()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getRoutes()); + } + if (hasStops()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, getStops()); + } + if (hasStringTable()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, getStringTable()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndTransportIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndTransportIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndTransportIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndTransportIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndTransportIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndTransportIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndTransportIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndTransportIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndTransportIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndTransportIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndTransportIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndTransportIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndTransportIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasRoutes()) { + mergeRoutes(other.getRoutes()); + } + if (other.hasStops()) { + mergeStops(other.getStops()); + } + if (other.hasStringTable()) { + mergeStringTable(other.getStringTable()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 26: { + net.osmand.binary.OsmandOdb.TransportRoutes.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder(); + if (hasRoutes()) { + subBuilder.mergeFrom(getRoutes()); + } + input.readMessage(subBuilder, extensionRegistry); + setRoutes(subBuilder.buildPartial()); + break; + } + case 50: { + net.osmand.binary.OsmandOdb.TransportStopsTree.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder(); + if (hasStops()) { + subBuilder.mergeFrom(getStops()); + } + input.readMessage(subBuilder, extensionRegistry); + setStops(subBuilder.buildPartial()); + break; + } + case 74: { + net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder(); + if (hasStringTable()) { + subBuilder.mergeFrom(getStringTable()); + } + input.readMessage(subBuilder, extensionRegistry); + setStringTable(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional .TransportRoutes routes = 3; + public boolean hasRoutes() { + return result.hasRoutes(); + } + public net.osmand.binary.OsmandOdb.TransportRoutes getRoutes() { + return result.getRoutes(); + } + public Builder setRoutes(net.osmand.binary.OsmandOdb.TransportRoutes value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRoutes = true; + result.routes_ = value; + return this; + } + public Builder setRoutes(net.osmand.binary.OsmandOdb.TransportRoutes.Builder builderForValue) { + result.hasRoutes = true; + result.routes_ = builderForValue.build(); + return this; + } + public Builder mergeRoutes(net.osmand.binary.OsmandOdb.TransportRoutes value) { + if (result.hasRoutes() && + result.routes_ != net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance()) { + result.routes_ = + net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder(result.routes_).mergeFrom(value).buildPartial(); + } else { + result.routes_ = value; + } + result.hasRoutes = true; + return this; + } + public Builder clearRoutes() { + result.hasRoutes = false; + result.routes_ = net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance(); + return this; + } + + // optional .TransportStopsTree stops = 6; + public boolean hasStops() { + return result.hasStops(); + } + public net.osmand.binary.OsmandOdb.TransportStopsTree getStops() { + return result.getStops(); + } + public Builder setStops(net.osmand.binary.OsmandOdb.TransportStopsTree value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStops = true; + result.stops_ = value; + return this; + } + public Builder setStops(net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) { + result.hasStops = true; + result.stops_ = builderForValue.build(); + return this; + } + public Builder mergeStops(net.osmand.binary.OsmandOdb.TransportStopsTree value) { + if (result.hasStops() && + result.stops_ != net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance()) { + result.stops_ = + net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder(result.stops_).mergeFrom(value).buildPartial(); + } else { + result.stops_ = value; + } + result.hasStops = true; + return this; + } + public Builder clearStops() { + result.hasStops = false; + result.stops_ = net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance(); + return this; + } + + // required .StringTable stringTable = 9; + public boolean hasStringTable() { + return result.hasStringTable(); + } + public net.osmand.binary.OsmandOdb.StringTable getStringTable() { + return result.getStringTable(); + } + public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStringTable = true; + result.stringTable_ = value; + return this; + } + public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) { + result.hasStringTable = true; + result.stringTable_ = builderForValue.build(); + return this; + } + public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) { + if (result.hasStringTable() && + result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) { + result.stringTable_ = + net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial(); + } else { + result.stringTable_ = value; + } + result.hasStringTable = true; + return this; + } + public Builder clearStringTable() { + result.hasStringTable = false; + result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndTransportIndex) + } + + static { + defaultInstance = new OsmAndTransportIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndTransportIndex) + } + + public static final class OsmAndPoiIndex extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiIndex.newBuilder() to construct. + private OsmAndPoiIndex() { + initFields(); + } + private OsmAndPoiIndex(boolean noInit) {} + + private static final OsmAndPoiIndex defaultInstance; + public static OsmAndPoiIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiIndex_fieldAccessorTable; + } + + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // required .OsmAndTileBox boundaries = 2; + public static final int BOUNDARIES_FIELD_NUMBER = 2; + private boolean hasBoundaries; + private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_; + public boolean hasBoundaries() { return hasBoundaries; } + public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; } + + // repeated .OsmAndCategoryTable categoriesTable = 3; + public static final int CATEGORIESTABLE_FIELD_NUMBER = 3; + private java.util.List categoriesTable_ = + java.util.Collections.emptyList(); + public java.util.List getCategoriesTableList() { + return categoriesTable_; + } + public int getCategoriesTableCount() { return categoriesTable_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getCategoriesTable(int index) { + return categoriesTable_.get(index); + } + + // optional .OsmAndPoiNameIndex nameIndex = 4; + public static final int NAMEINDEX_FIELD_NUMBER = 4; + private boolean hasNameIndex; + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex nameIndex_; + public boolean hasNameIndex() { return hasNameIndex; } + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getNameIndex() { return nameIndex_; } + + // repeated .OsmAndPoiBox boxes = 6; + public static final int BOXES_FIELD_NUMBER = 6; + private java.util.List boxes_ = + java.util.Collections.emptyList(); + public java.util.List getBoxesList() { + return boxes_; + } + public int getBoxesCount() { return boxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiBox getBoxes(int index) { + return boxes_.get(index); + } + + // repeated .OsmAndPoiBoxData poiData = 9; + public static final int POIDATA_FIELD_NUMBER = 9; + private java.util.List poiData_ = + java.util.Collections.emptyList(); + public java.util.List getPoiDataList() { + return poiData_; + } + public int getPoiDataCount() { return poiData_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getPoiData(int index) { + return poiData_.get(index); + } + + private void initFields() { + boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + if (!hasBoundaries) return false; + if (!getBoundaries().isInitialized()) return false; + for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) { + if (!element.isInitialized()) return false; + } + if (hasNameIndex()) { + if (!getNameIndex().isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasBoundaries()) { + output.writeMessage(2, getBoundaries()); + } + for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) { + output.writeMessage(3, element); + } + if (hasNameIndex()) { + output.writeMessage(4, getNameIndex()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) { + output.writeMessage(6, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) { + output.writeMessage(9, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasBoundaries()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getBoundaries()); + } + for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, element); + } + if (hasNameIndex()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getNameIndex()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.categoriesTable_ != java.util.Collections.EMPTY_LIST) { + result.categoriesTable_ = + java.util.Collections.unmodifiableList(result.categoriesTable_); + } + if (result.boxes_ != java.util.Collections.EMPTY_LIST) { + result.boxes_ = + java.util.Collections.unmodifiableList(result.boxes_); + } + if (result.poiData_ != java.util.Collections.EMPTY_LIST) { + result.poiData_ = + java.util.Collections.unmodifiableList(result.poiData_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasBoundaries()) { + mergeBoundaries(other.getBoundaries()); + } + if (!other.categoriesTable_.isEmpty()) { + if (result.categoriesTable_.isEmpty()) { + result.categoriesTable_ = new java.util.ArrayList(); + } + result.categoriesTable_.addAll(other.categoriesTable_); + } + if (other.hasNameIndex()) { + mergeNameIndex(other.getNameIndex()); + } + if (!other.boxes_.isEmpty()) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.addAll(other.boxes_); + } + if (!other.poiData_.isEmpty()) { + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + result.poiData_.addAll(other.poiData_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(); + if (hasBoundaries()) { + subBuilder.mergeFrom(getBoundaries()); + } + input.readMessage(subBuilder, extensionRegistry); + setBoundaries(subBuilder.buildPartial()); + break; + } + case 26: { + net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndCategoryTable.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addCategoriesTable(subBuilder.buildPartial()); + break; + } + case 34: { + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder(); + if (hasNameIndex()) { + subBuilder.mergeFrom(getNameIndex()); + } + input.readMessage(subBuilder, extensionRegistry); + setNameIndex(subBuilder.buildPartial()); + break; + } + case 50: { + net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBoxes(subBuilder.buildPartial()); + break; + } + case 74: { + net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPoiData(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // required .OsmAndTileBox boundaries = 2; + public boolean hasBoundaries() { + return result.hasBoundaries(); + } + public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { + return result.getBoundaries(); + } + public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasBoundaries = true; + result.boundaries_ = value; + return this; + } + public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) { + result.hasBoundaries = true; + result.boundaries_ = builderForValue.build(); + return this; + } + public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) { + if (result.hasBoundaries() && + result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) { + result.boundaries_ = + net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial(); + } else { + result.boundaries_ = value; + } + result.hasBoundaries = true; + return this; + } + public Builder clearBoundaries() { + result.hasBoundaries = false; + result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + return this; + } + + // repeated .OsmAndCategoryTable categoriesTable = 3; + public java.util.List getCategoriesTableList() { + return java.util.Collections.unmodifiableList(result.categoriesTable_); + } + public int getCategoriesTableCount() { + return result.getCategoriesTableCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getCategoriesTable(int index) { + return result.getCategoriesTable(index); + } + public Builder setCategoriesTable(int index, net.osmand.binary.OsmandOdb.OsmAndCategoryTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.categoriesTable_.set(index, value); + return this; + } + public Builder setCategoriesTable(int index, net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder builderForValue) { + result.categoriesTable_.set(index, builderForValue.build()); + return this; + } + public Builder addCategoriesTable(net.osmand.binary.OsmandOdb.OsmAndCategoryTable value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.categoriesTable_.isEmpty()) { + result.categoriesTable_ = new java.util.ArrayList(); + } + result.categoriesTable_.add(value); + return this; + } + public Builder addCategoriesTable(net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder builderForValue) { + if (result.categoriesTable_.isEmpty()) { + result.categoriesTable_ = new java.util.ArrayList(); + } + result.categoriesTable_.add(builderForValue.build()); + return this; + } + public Builder addAllCategoriesTable( + java.lang.Iterable values) { + if (result.categoriesTable_.isEmpty()) { + result.categoriesTable_ = new java.util.ArrayList(); + } + super.addAll(values, result.categoriesTable_); + return this; + } + public Builder clearCategoriesTable() { + result.categoriesTable_ = java.util.Collections.emptyList(); + return this; + } + + // optional .OsmAndPoiNameIndex nameIndex = 4; + public boolean hasNameIndex() { + return result.hasNameIndex(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getNameIndex() { + return result.getNameIndex(); + } + public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameIndex = true; + result.nameIndex_ = value; + return this; + } + public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder builderForValue) { + result.hasNameIndex = true; + result.nameIndex_ = builderForValue.build(); + return this; + } + public Builder mergeNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex value) { + if (result.hasNameIndex() && + result.nameIndex_ != net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance()) { + result.nameIndex_ = + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder(result.nameIndex_).mergeFrom(value).buildPartial(); + } else { + result.nameIndex_ = value; + } + result.hasNameIndex = true; + return this; + } + public Builder clearNameIndex() { + result.hasNameIndex = false; + result.nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance(); + return this; + } + + // repeated .OsmAndPoiBox boxes = 6; + public java.util.List getBoxesList() { + return java.util.Collections.unmodifiableList(result.boxes_); + } + public int getBoxesCount() { + return result.getBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiBox getBoxes(int index) { + return result.getBoxes(index); + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.boxes_.set(index, value); + return this; + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) { + result.boxes_.set(index, builderForValue.build()); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(value); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(builderForValue.build()); + return this; + } + public Builder addAllBoxes( + java.lang.Iterable values) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.boxes_); + return this; + } + public Builder clearBoxes() { + result.boxes_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndPoiBoxData poiData = 9; + public java.util.List getPoiDataList() { + return java.util.Collections.unmodifiableList(result.poiData_); + } + public int getPoiDataCount() { + return result.getPoiDataCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getPoiData(int index) { + return result.getPoiData(index); + } + public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxData value) { + if (value == null) { + throw new NullPointerException(); + } + result.poiData_.set(index, value); + return this; + } + public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder builderForValue) { + result.poiData_.set(index, builderForValue.build()); + return this; + } + public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + result.poiData_.add(value); + return this; + } + public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder builderForValue) { + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + result.poiData_.add(builderForValue.build()); + return this; + } + public Builder addAllPoiData( + java.lang.Iterable values) { + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + super.addAll(values, result.poiData_); + return this; + } + public Builder clearPoiData() { + result.poiData_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiIndex) + } + + static { + defaultInstance = new OsmAndPoiIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiIndex) + } + + public static final class OsmAndPoiNameIndex extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiNameIndex.newBuilder() to construct. + private OsmAndPoiNameIndex() { + initFields(); + } + private OsmAndPoiNameIndex(boolean noInit) {} + + private static final OsmAndPoiNameIndex defaultInstance; + public static OsmAndPoiNameIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiNameIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_fieldAccessorTable; + } + + public static final class OsmAndPoiNameIndexData extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiNameIndexData.newBuilder() to construct. + private OsmAndPoiNameIndexData() { + initFields(); + } + private OsmAndPoiNameIndexData(boolean noInit) {} + + private static final OsmAndPoiNameIndexData defaultInstance; + public static OsmAndPoiNameIndexData getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiNameIndexData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_fieldAccessorTable; + } + + // repeated .OsmAndPoiNameIndexDataAtom atoms = 3; + public static final int ATOMS_FIELD_NUMBER = 3; + private java.util.List atoms_ = + java.util.Collections.emptyList(); + public java.util.List getAtomsList() { + return atoms_; + } + public int getAtomsCount() { return atoms_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getAtoms(int index) { + return atoms_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom element : getAtomsList()) { + output.writeMessage(3, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom element : getAtomsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.atoms_ != java.util.Collections.EMPTY_LIST) { + result.atoms_ = + java.util.Collections.unmodifiableList(result.atoms_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.getDefaultInstance()) return this; + if (!other.atoms_.isEmpty()) { + if (result.atoms_.isEmpty()) { + result.atoms_ = new java.util.ArrayList(); + } + result.atoms_.addAll(other.atoms_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 26: { + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addAtoms(subBuilder.buildPartial()); + break; + } + } + } + } + + + // repeated .OsmAndPoiNameIndexDataAtom atoms = 3; + public java.util.List getAtomsList() { + return java.util.Collections.unmodifiableList(result.atoms_); + } + public int getAtomsCount() { + return result.getAtomsCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getAtoms(int index) { + return result.getAtoms(index); + } + public Builder setAtoms(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom value) { + if (value == null) { + throw new NullPointerException(); + } + result.atoms_.set(index, value); + return this; + } + public Builder setAtoms(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder builderForValue) { + result.atoms_.set(index, builderForValue.build()); + return this; + } + public Builder addAtoms(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.atoms_.isEmpty()) { + result.atoms_ = new java.util.ArrayList(); + } + result.atoms_.add(value); + return this; + } + public Builder addAtoms(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder builderForValue) { + if (result.atoms_.isEmpty()) { + result.atoms_ = new java.util.ArrayList(); + } + result.atoms_.add(builderForValue.build()); + return this; + } + public Builder addAllAtoms( + java.lang.Iterable values) { + if (result.atoms_.isEmpty()) { + result.atoms_ = new java.util.ArrayList(); + } + super.addAll(values, result.atoms_); + return this; + } + public Builder clearAtoms() { + result.atoms_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndex.OsmAndPoiNameIndexData) + } + + static { + defaultInstance = new OsmAndPoiNameIndexData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndex.OsmAndPoiNameIndexData) + } + + // required .IndexedStringTable table = 3; + public static final int TABLE_FIELD_NUMBER = 3; + private boolean hasTable; + private net.osmand.binary.OsmandOdb.IndexedStringTable table_; + public boolean hasTable() { return hasTable; } + public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { return table_; } + + // repeated .OsmAndPoiNameIndex.OsmAndPoiNameIndexData data = 5; + public static final int DATA_FIELD_NUMBER = 5; + private java.util.List data_ = + java.util.Collections.emptyList(); + public java.util.List getDataList() { + return data_; + } + public int getDataCount() { return data_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData getData(int index) { + return data_.get(index); + } + + private void initFields() { + table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasTable) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasTable()) { + output.writeMessage(3, getTable()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData element : getDataList()) { + output.writeMessage(5, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasTable()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getTable()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData element : getDataList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.data_ != java.util.Collections.EMPTY_LIST) { + result.data_ = + java.util.Collections.unmodifiableList(result.data_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance()) return this; + if (other.hasTable()) { + mergeTable(other.getTable()); + } + if (!other.data_.isEmpty()) { + if (result.data_.isEmpty()) { + result.data_ = new java.util.ArrayList(); + } + result.data_.addAll(other.data_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 26: { + net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(); + if (hasTable()) { + subBuilder.mergeFrom(getTable()); + } + input.readMessage(subBuilder, extensionRegistry); + setTable(subBuilder.buildPartial()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addData(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required .IndexedStringTable table = 3; + public boolean hasTable() { + return result.hasTable(); + } + public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { + return result.getTable(); + } + public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTable = true; + result.table_ = value; + return this; + } + public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) { + result.hasTable = true; + result.table_ = builderForValue.build(); + return this; + } + public Builder mergeTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) { + if (result.hasTable() && + result.table_ != net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) { + result.table_ = + net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(result.table_).mergeFrom(value).buildPartial(); + } else { + result.table_ = value; + } + result.hasTable = true; + return this; + } + public Builder clearTable() { + result.hasTable = false; + result.table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance(); + return this; + } + + // repeated .OsmAndPoiNameIndex.OsmAndPoiNameIndexData data = 5; + public java.util.List getDataList() { + return java.util.Collections.unmodifiableList(result.data_); + } + public int getDataCount() { + return result.getDataCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData getData(int index) { + return result.getData(index); + } + public Builder setData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData value) { + if (value == null) { + throw new NullPointerException(); + } + result.data_.set(index, value); + return this; + } + public Builder setData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder builderForValue) { + result.data_.set(index, builderForValue.build()); + return this; + } + public Builder addData(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.data_.isEmpty()) { + result.data_ = new java.util.ArrayList(); + } + result.data_.add(value); + return this; + } + public Builder addData(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder builderForValue) { + if (result.data_.isEmpty()) { + result.data_ = new java.util.ArrayList(); + } + result.data_.add(builderForValue.build()); + return this; + } + public Builder addAllData( + java.lang.Iterable values) { + if (result.data_.isEmpty()) { + result.data_ = new java.util.ArrayList(); + } + super.addAll(values, result.data_); + return this; + } + public Builder clearData() { + result.data_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndex) + } + + static { + defaultInstance = new OsmAndPoiNameIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndex) + } + + public static final class OsmAndPoiNameIndexDataAtom extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiNameIndexDataAtom.newBuilder() to construct. + private OsmAndPoiNameIndexDataAtom() { + initFields(); + } + private OsmAndPoiNameIndexDataAtom(boolean noInit) {} + + private static final OsmAndPoiNameIndexDataAtom defaultInstance; + public static OsmAndPoiNameIndexDataAtom getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiNameIndexDataAtom getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexDataAtom_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable; + } + + // optional uint32 zoom = 2; + public static final int ZOOM_FIELD_NUMBER = 2; + private boolean hasZoom; + private int zoom_ = 0; + public boolean hasZoom() { return hasZoom; } + public int getZoom() { return zoom_; } + + // optional uint32 x = 3; + public static final int X_FIELD_NUMBER = 3; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // optional uint32 y = 4; + public static final int Y_FIELD_NUMBER = 4; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // optional fixed32 shiftTo = 14; + public static final int SHIFTTO_FIELD_NUMBER = 14; + private boolean hasShiftTo; + private int shiftTo_ = 0; + public boolean hasShiftTo() { return hasShiftTo; } + public int getShiftTo() { return shiftTo_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasZoom()) { + output.writeUInt32(2, getZoom()); + } + if (hasX()) { + output.writeUInt32(3, getX()); + } + if (hasY()) { + output.writeUInt32(4, getY()); + } + if (hasShiftTo()) { + output.writeFixed32(14, getShiftTo()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasZoom()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, getZoom()); + } + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, getY()); + } + if (hasShiftTo()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(14, getShiftTo()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDefaultInstance()) return this; + if (other.hasZoom()) { + setZoom(other.getZoom()); + } + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasShiftTo()) { + setShiftTo(other.getShiftTo()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 16: { + setZoom(input.readUInt32()); + break; + } + case 24: { + setX(input.readUInt32()); + break; + } + case 32: { + setY(input.readUInt32()); + break; + } + case 117: { + setShiftTo(input.readFixed32()); + break; + } + } + } + } + + + // optional uint32 zoom = 2; + public boolean hasZoom() { + return result.hasZoom(); + } + public int getZoom() { + return result.getZoom(); + } + public Builder setZoom(int value) { + result.hasZoom = true; + result.zoom_ = value; + return this; + } + public Builder clearZoom() { + result.hasZoom = false; + result.zoom_ = 0; + return this; + } + + // optional uint32 x = 3; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // optional uint32 y = 4; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // optional fixed32 shiftTo = 14; + public boolean hasShiftTo() { + return result.hasShiftTo(); + } + public int getShiftTo() { + return result.getShiftTo(); + } + public Builder setShiftTo(int value) { + result.hasShiftTo = true; + result.shiftTo_ = value; + return this; + } + public Builder clearShiftTo() { + result.hasShiftTo = false; + result.shiftTo_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndexDataAtom) + } + + static { + defaultInstance = new OsmAndPoiNameIndexDataAtom(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndexDataAtom) + } + + public static final class OsmAndCategoryTable extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndCategoryTable.newBuilder() to construct. + private OsmAndCategoryTable() { + initFields(); + } + private OsmAndCategoryTable(boolean noInit) {} + + private static final OsmAndCategoryTable defaultInstance; + public static OsmAndCategoryTable getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndCategoryTable getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndCategoryTable_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndCategoryTable_fieldAccessorTable; + } + + // required string category = 1; + public static final int CATEGORY_FIELD_NUMBER = 1; + private boolean hasCategory; + private java.lang.String category_ = ""; + public boolean hasCategory() { return hasCategory; } + public java.lang.String getCategory() { return category_; } + + // repeated string subcategories = 3; + public static final int SUBCATEGORIES_FIELD_NUMBER = 3; + private java.util.List subcategories_ = + java.util.Collections.emptyList(); + public java.util.List getSubcategoriesList() { + return subcategories_; + } + public int getSubcategoriesCount() { return subcategories_.size(); } + public java.lang.String getSubcategories(int index) { + return subcategories_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasCategory) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasCategory()) { + output.writeString(1, getCategory()); + } + for (java.lang.String element : getSubcategoriesList()) { + output.writeString(3, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasCategory()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getCategory()); + } + { + int dataSize = 0; + for (java.lang.String element : getSubcategoriesList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeStringSizeNoTag(element); + } + size += dataSize; + size += 1 * getSubcategoriesList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndCategoryTable prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndCategoryTable result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndCategoryTable.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndCategoryTable(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndCategoryTable internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndCategoryTable(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndCategoryTable build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndCategoryTable buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndCategoryTable buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.subcategories_ != java.util.Collections.EMPTY_LIST) { + result.subcategories_ = + java.util.Collections.unmodifiableList(result.subcategories_); + } + net.osmand.binary.OsmandOdb.OsmAndCategoryTable returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndCategoryTable) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndCategoryTable)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndCategoryTable other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDefaultInstance()) return this; + if (other.hasCategory()) { + setCategory(other.getCategory()); + } + if (!other.subcategories_.isEmpty()) { + if (result.subcategories_.isEmpty()) { + result.subcategories_ = new java.util.ArrayList(); + } + result.subcategories_.addAll(other.subcategories_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setCategory(input.readString()); + break; + } + case 26: { + addSubcategories(input.readString()); + break; + } + } + } + } + + + // required string category = 1; + public boolean hasCategory() { + return result.hasCategory(); + } + public java.lang.String getCategory() { + return result.getCategory(); + } + public Builder setCategory(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCategory = true; + result.category_ = value; + return this; + } + public Builder clearCategory() { + result.hasCategory = false; + result.category_ = getDefaultInstance().getCategory(); + return this; + } + + // repeated string subcategories = 3; + public java.util.List getSubcategoriesList() { + return java.util.Collections.unmodifiableList(result.subcategories_); + } + public int getSubcategoriesCount() { + return result.getSubcategoriesCount(); + } + public java.lang.String getSubcategories(int index) { + return result.getSubcategories(index); + } + public Builder setSubcategories(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.subcategories_.set(index, value); + return this; + } + public Builder addSubcategories(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subcategories_.isEmpty()) { + result.subcategories_ = new java.util.ArrayList(); + } + result.subcategories_.add(value); + return this; + } + public Builder addAllSubcategories( + java.lang.Iterable values) { + if (result.subcategories_.isEmpty()) { + result.subcategories_ = new java.util.ArrayList(); + } + super.addAll(values, result.subcategories_); + return this; + } + public Builder clearSubcategories() { + result.subcategories_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndCategoryTable) + } + + static { + defaultInstance = new OsmAndCategoryTable(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndCategoryTable) + } + + public static final class OsmAndPoiBox extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiBox.newBuilder() to construct. + private OsmAndPoiBox() { + initFields(); + } + private OsmAndPoiBox(boolean noInit) {} + + private static final OsmAndPoiBox defaultInstance; + public static OsmAndPoiBox getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiBox getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBox_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBox_fieldAccessorTable; + } + + // required uint32 zoom = 1; + public static final int ZOOM_FIELD_NUMBER = 1; + private boolean hasZoom; + private int zoom_ = 0; + public boolean hasZoom() { return hasZoom; } + public int getZoom() { return zoom_; } + + // required sint32 left = 2; + public static final int LEFT_FIELD_NUMBER = 2; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required sint32 top = 3; + public static final int TOP_FIELD_NUMBER = 3; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // optional .OsmAndPoiCategories categories = 4; + public static final int CATEGORIES_FIELD_NUMBER = 4; + private boolean hasCategories; + private net.osmand.binary.OsmandOdb.OsmAndPoiCategories categories_; + public boolean hasCategories() { return hasCategories; } + public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getCategories() { return categories_; } + + // repeated .OsmAndPoiBox subBoxes = 10; + public static final int SUBBOXES_FIELD_NUMBER = 10; + private java.util.List subBoxes_ = + java.util.Collections.emptyList(); + public java.util.List getSubBoxesList() { + return subBoxes_; + } + public int getSubBoxesCount() { return subBoxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiBox getSubBoxes(int index) { + return subBoxes_.get(index); + } + + // optional fixed32 shiftToData = 14; + public static final int SHIFTTODATA_FIELD_NUMBER = 14; + private boolean hasShiftToData; + private int shiftToData_ = 0; + public boolean hasShiftToData() { return hasShiftToData; } + public int getShiftToData() { return shiftToData_; } + + private void initFields() { + categories_ = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasZoom) return false; + if (!hasLeft) return false; + if (!hasTop) return false; + for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasZoom()) { + output.writeUInt32(1, getZoom()); + } + if (hasLeft()) { + output.writeSInt32(2, getLeft()); + } + if (hasTop()) { + output.writeSInt32(3, getTop()); + } + if (hasCategories()) { + output.writeMessage(4, getCategories()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) { + output.writeMessage(10, element); + } + if (hasShiftToData()) { + output.writeFixed32(14, getShiftToData()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasZoom()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, getZoom()); + } + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getLeft()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getTop()); + } + if (hasCategories()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getCategories()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, element); + } + if (hasShiftToData()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(14, getShiftToData()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBox prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiBox result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBox(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiBox internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiBox(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBox getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBox build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiBox buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBox buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.subBoxes_ != java.util.Collections.EMPTY_LIST) { + result.subBoxes_ = + java.util.Collections.unmodifiableList(result.subBoxes_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiBox returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBox) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBox)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBox other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDefaultInstance()) return this; + if (other.hasZoom()) { + setZoom(other.getZoom()); + } + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasCategories()) { + mergeCategories(other.getCategories()); + } + if (!other.subBoxes_.isEmpty()) { + if (result.subBoxes_.isEmpty()) { + result.subBoxes_ = new java.util.ArrayList(); + } + result.subBoxes_.addAll(other.subBoxes_); + } + if (other.hasShiftToData()) { + setShiftToData(other.getShiftToData()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setZoom(input.readUInt32()); + break; + } + case 16: { + setLeft(input.readSInt32()); + break; + } + case 24: { + setTop(input.readSInt32()); + break; + } + case 34: { + net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder(); + if (hasCategories()) { + subBuilder.mergeFrom(getCategories()); + } + input.readMessage(subBuilder, extensionRegistry); + setCategories(subBuilder.buildPartial()); + break; + } + case 82: { + net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubBoxes(subBuilder.buildPartial()); + break; + } + case 117: { + setShiftToData(input.readFixed32()); + break; + } + } + } + } + + + // required uint32 zoom = 1; + public boolean hasZoom() { + return result.hasZoom(); + } + public int getZoom() { + return result.getZoom(); + } + public Builder setZoom(int value) { + result.hasZoom = true; + result.zoom_ = value; + return this; + } + public Builder clearZoom() { + result.hasZoom = false; + result.zoom_ = 0; + return this; + } + + // required sint32 left = 2; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required sint32 top = 3; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // optional .OsmAndPoiCategories categories = 4; + public boolean hasCategories() { + return result.hasCategories(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getCategories() { + return result.getCategories(); + } + public Builder setCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCategories = true; + result.categories_ = value; + return this; + } + public Builder setCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder builderForValue) { + result.hasCategories = true; + result.categories_ = builderForValue.build(); + return this; + } + public Builder mergeCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories value) { + if (result.hasCategories() && + result.categories_ != net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance()) { + result.categories_ = + net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder(result.categories_).mergeFrom(value).buildPartial(); + } else { + result.categories_ = value; + } + result.hasCategories = true; + return this; + } + public Builder clearCategories() { + result.hasCategories = false; + result.categories_ = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance(); + return this; + } + + // repeated .OsmAndPoiBox subBoxes = 10; + public java.util.List getSubBoxesList() { + return java.util.Collections.unmodifiableList(result.subBoxes_); + } + public int getSubBoxesCount() { + return result.getSubBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiBox getSubBoxes(int index) { + return result.getSubBoxes(index); + } + public Builder setSubBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.subBoxes_.set(index, value); + return this; + } + public Builder setSubBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) { + result.subBoxes_.set(index, builderForValue.build()); + return this; + } + public Builder addSubBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subBoxes_.isEmpty()) { + result.subBoxes_ = new java.util.ArrayList(); + } + result.subBoxes_.add(value); + return this; + } + public Builder addSubBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) { + if (result.subBoxes_.isEmpty()) { + result.subBoxes_ = new java.util.ArrayList(); + } + result.subBoxes_.add(builderForValue.build()); + return this; + } + public Builder addAllSubBoxes( + java.lang.Iterable values) { + if (result.subBoxes_.isEmpty()) { + result.subBoxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.subBoxes_); + return this; + } + public Builder clearSubBoxes() { + result.subBoxes_ = java.util.Collections.emptyList(); + return this; + } + + // optional fixed32 shiftToData = 14; + public boolean hasShiftToData() { + return result.hasShiftToData(); + } + public int getShiftToData() { + return result.getShiftToData(); + } + public Builder setShiftToData(int value) { + result.hasShiftToData = true; + result.shiftToData_ = value; + return this; + } + public Builder clearShiftToData() { + result.hasShiftToData = false; + result.shiftToData_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiBox) + } + + static { + defaultInstance = new OsmAndPoiBox(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiBox) + } + + public static final class OsmAndPoiCategories extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiCategories.newBuilder() to construct. + private OsmAndPoiCategories() { + initFields(); + } + private OsmAndPoiCategories(boolean noInit) {} + + private static final OsmAndPoiCategories defaultInstance; + public static OsmAndPoiCategories getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiCategories getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiCategories_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiCategories_fieldAccessorTable; + } + + // repeated uint32 categories = 3; + public static final int CATEGORIES_FIELD_NUMBER = 3; + private java.util.List categories_ = + java.util.Collections.emptyList(); + public java.util.List getCategoriesList() { + return categories_; + } + public int getCategoriesCount() { return categories_.size(); } + public int getCategories(int index) { + return categories_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (int element : getCategoriesList()) { + output.writeUInt32(3, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int element : getCategoriesList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(element); + } + size += dataSize; + size += 1 * getCategoriesList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiCategories prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiCategories result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiCategories(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiCategories internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiCategories(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiCategories build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiCategories buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiCategories buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.categories_ != java.util.Collections.EMPTY_LIST) { + result.categories_ = + java.util.Collections.unmodifiableList(result.categories_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiCategories returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiCategories) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiCategories)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiCategories other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance()) return this; + if (!other.categories_.isEmpty()) { + if (result.categories_.isEmpty()) { + result.categories_ = new java.util.ArrayList(); + } + result.categories_.addAll(other.categories_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 24: { + addCategories(input.readUInt32()); + break; + } + case 26: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addCategories(input.readUInt32()); + } + input.popLimit(limit); + break; + } + } + } + } + + + // repeated uint32 categories = 3; + public java.util.List getCategoriesList() { + return java.util.Collections.unmodifiableList(result.categories_); + } + public int getCategoriesCount() { + return result.getCategoriesCount(); + } + public int getCategories(int index) { + return result.getCategories(index); + } + public Builder setCategories(int index, int value) { + result.categories_.set(index, value); + return this; + } + public Builder addCategories(int value) { + if (result.categories_.isEmpty()) { + result.categories_ = new java.util.ArrayList(); + } + result.categories_.add(value); + return this; + } + public Builder addAllCategories( + java.lang.Iterable values) { + if (result.categories_.isEmpty()) { + result.categories_ = new java.util.ArrayList(); + } + super.addAll(values, result.categories_); + return this; + } + public Builder clearCategories() { + result.categories_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiCategories) + } + + static { + defaultInstance = new OsmAndPoiCategories(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiCategories) + } + + public static final class OsmAndPoiBoxData extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiBoxData.newBuilder() to construct. + private OsmAndPoiBoxData() { + initFields(); + } + private OsmAndPoiBoxData(boolean noInit) {} + + private static final OsmAndPoiBoxData defaultInstance; + public static OsmAndPoiBoxData getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiBoxData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxData_fieldAccessorTable; + } + + // optional uint32 zoom = 1; + public static final int ZOOM_FIELD_NUMBER = 1; + private boolean hasZoom; + private int zoom_ = 0; + public boolean hasZoom() { return hasZoom; } + public int getZoom() { return zoom_; } + + // optional uint32 x = 2; + public static final int X_FIELD_NUMBER = 2; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // optional uint32 y = 3; + public static final int Y_FIELD_NUMBER = 3; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // repeated .OsmAndPoiBoxDataAtom poiData = 5; + public static final int POIDATA_FIELD_NUMBER = 5; + private java.util.List poiData_ = + java.util.Collections.emptyList(); + public java.util.List getPoiDataList() { + return poiData_; + } + public int getPoiDataCount() { return poiData_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getPoiData(int index) { + return poiData_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasZoom()) { + output.writeUInt32(1, getZoom()); + } + if (hasX()) { + output.writeUInt32(2, getX()); + } + if (hasY()) { + output.writeUInt32(3, getY()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) { + output.writeMessage(5, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasZoom()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, getZoom()); + } + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, getY()); + } + for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiBoxData result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiBoxData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiBoxData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.poiData_ != java.util.Collections.EMPTY_LIST) { + result.poiData_ = + java.util.Collections.unmodifiableList(result.poiData_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiBoxData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBoxData) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBoxData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDefaultInstance()) return this; + if (other.hasZoom()) { + setZoom(other.getZoom()); + } + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (!other.poiData_.isEmpty()) { + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + result.poiData_.addAll(other.poiData_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setZoom(input.readUInt32()); + break; + } + case 16: { + setX(input.readUInt32()); + break; + } + case 24: { + setY(input.readUInt32()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPoiData(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional uint32 zoom = 1; + public boolean hasZoom() { + return result.hasZoom(); + } + public int getZoom() { + return result.getZoom(); + } + public Builder setZoom(int value) { + result.hasZoom = true; + result.zoom_ = value; + return this; + } + public Builder clearZoom() { + result.hasZoom = false; + result.zoom_ = 0; + return this; + } + + // optional uint32 x = 2; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // optional uint32 y = 3; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // repeated .OsmAndPoiBoxDataAtom poiData = 5; + public java.util.List getPoiDataList() { + return java.util.Collections.unmodifiableList(result.poiData_); + } + public int getPoiDataCount() { + return result.getPoiDataCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getPoiData(int index) { + return result.getPoiData(index); + } + public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom value) { + if (value == null) { + throw new NullPointerException(); + } + result.poiData_.set(index, value); + return this; + } + public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder builderForValue) { + result.poiData_.set(index, builderForValue.build()); + return this; + } + public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + result.poiData_.add(value); + return this; + } + public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder builderForValue) { + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + result.poiData_.add(builderForValue.build()); + return this; + } + public Builder addAllPoiData( + java.lang.Iterable values) { + if (result.poiData_.isEmpty()) { + result.poiData_ = new java.util.ArrayList(); + } + super.addAll(values, result.poiData_); + return this; + } + public Builder clearPoiData() { + result.poiData_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiBoxData) + } + + static { + defaultInstance = new OsmAndPoiBoxData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiBoxData) + } + + public static final class OsmAndPoiBoxDataAtom extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndPoiBoxDataAtom.newBuilder() to construct. + private OsmAndPoiBoxDataAtom() { + initFields(); + } + private OsmAndPoiBoxDataAtom(boolean noInit) {} + + private static final OsmAndPoiBoxDataAtom defaultInstance; + public static OsmAndPoiBoxDataAtom getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndPoiBoxDataAtom getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxDataAtom_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable; + } + + // required sint32 dx = 2; + public static final int DX_FIELD_NUMBER = 2; + private boolean hasDx; + private int dx_ = 0; + public boolean hasDx() { return hasDx; } + public int getDx() { return dx_; } + + // required sint32 dy = 3; + public static final int DY_FIELD_NUMBER = 3; + private boolean hasDy; + private int dy_ = 0; + public boolean hasDy() { return hasDy; } + public int getDy() { return dy_; } + + // repeated uint32 categories = 4; + public static final int CATEGORIES_FIELD_NUMBER = 4; + private java.util.List categories_ = + java.util.Collections.emptyList(); + public java.util.List getCategoriesList() { + return categories_; + } + public int getCategoriesCount() { return categories_.size(); } + public int getCategories(int index) { + return categories_.get(index); + } + + // optional string name = 6; + public static final int NAME_FIELD_NUMBER = 6; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // optional string nameEn = 7; + public static final int NAMEEN_FIELD_NUMBER = 7; + private boolean hasNameEn; + private java.lang.String nameEn_ = ""; + public boolean hasNameEn() { return hasNameEn; } + public java.lang.String getNameEn() { return nameEn_; } + + // optional uint64 id = 8; + public static final int ID_FIELD_NUMBER = 8; + private boolean hasId; + private long id_ = 0L; + public boolean hasId() { return hasId; } + public long getId() { return id_; } + + // optional string openingHours = 10; + public static final int OPENINGHOURS_FIELD_NUMBER = 10; + private boolean hasOpeningHours; + private java.lang.String openingHours_ = ""; + public boolean hasOpeningHours() { return hasOpeningHours; } + public java.lang.String getOpeningHours() { return openingHours_; } + + // optional string site = 11; + public static final int SITE_FIELD_NUMBER = 11; + private boolean hasSite; + private java.lang.String site_ = ""; + public boolean hasSite() { return hasSite; } + public java.lang.String getSite() { return site_; } + + // optional string phone = 12; + public static final int PHONE_FIELD_NUMBER = 12; + private boolean hasPhone; + private java.lang.String phone_ = ""; + public boolean hasPhone() { return hasPhone; } + public java.lang.String getPhone() { return phone_; } + + // optional string note = 13; + public static final int NOTE_FIELD_NUMBER = 13; + private boolean hasNote; + private java.lang.String note_ = ""; + public boolean hasNote() { return hasNote; } + public java.lang.String getNote() { return note_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasDx) return false; + if (!hasDy) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasDx()) { + output.writeSInt32(2, getDx()); + } + if (hasDy()) { + output.writeSInt32(3, getDy()); + } + for (int element : getCategoriesList()) { + output.writeUInt32(4, element); + } + if (hasName()) { + output.writeString(6, getName()); + } + if (hasNameEn()) { + output.writeString(7, getNameEn()); + } + if (hasId()) { + output.writeUInt64(8, getId()); + } + if (hasOpeningHours()) { + output.writeString(10, getOpeningHours()); + } + if (hasSite()) { + output.writeString(11, getSite()); + } + if (hasPhone()) { + output.writeString(12, getPhone()); + } + if (hasNote()) { + output.writeString(13, getNote()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasDx()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getDx()); + } + if (hasDy()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getDy()); + } + { + int dataSize = 0; + for (int element : getCategoriesList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(element); + } + size += dataSize; + size += 1 * getCategoriesList().size(); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(6, getName()); + } + if (hasNameEn()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(7, getNameEn()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(8, getId()); + } + if (hasOpeningHours()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(10, getOpeningHours()); + } + if (hasSite()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(11, getSite()); + } + if (hasPhone()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(12, getPhone()); + } + if (hasNote()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(13, getNote()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.categories_ != java.util.Collections.EMPTY_LIST) { + result.categories_ = + java.util.Collections.unmodifiableList(result.categories_); + } + net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDefaultInstance()) return this; + if (other.hasDx()) { + setDx(other.getDx()); + } + if (other.hasDy()) { + setDy(other.getDy()); + } + if (!other.categories_.isEmpty()) { + if (result.categories_.isEmpty()) { + result.categories_ = new java.util.ArrayList(); + } + result.categories_.addAll(other.categories_); + } + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasNameEn()) { + setNameEn(other.getNameEn()); + } + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasOpeningHours()) { + setOpeningHours(other.getOpeningHours()); + } + if (other.hasSite()) { + setSite(other.getSite()); + } + if (other.hasPhone()) { + setPhone(other.getPhone()); + } + if (other.hasNote()) { + setNote(other.getNote()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 16: { + setDx(input.readSInt32()); + break; + } + case 24: { + setDy(input.readSInt32()); + break; + } + case 32: { + addCategories(input.readUInt32()); + break; + } + case 34: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addCategories(input.readUInt32()); + } + input.popLimit(limit); + break; + } + case 50: { + setName(input.readString()); + break; + } + case 58: { + setNameEn(input.readString()); + break; + } + case 64: { + setId(input.readUInt64()); + break; + } + case 82: { + setOpeningHours(input.readString()); + break; + } + case 90: { + setSite(input.readString()); + break; + } + case 98: { + setPhone(input.readString()); + break; + } + case 106: { + setNote(input.readString()); + break; + } + } + } + } + + + // required sint32 dx = 2; + public boolean hasDx() { + return result.hasDx(); + } + public int getDx() { + return result.getDx(); + } + public Builder setDx(int value) { + result.hasDx = true; + result.dx_ = value; + return this; + } + public Builder clearDx() { + result.hasDx = false; + result.dx_ = 0; + return this; + } + + // required sint32 dy = 3; + public boolean hasDy() { + return result.hasDy(); + } + public int getDy() { + return result.getDy(); + } + public Builder setDy(int value) { + result.hasDy = true; + result.dy_ = value; + return this; + } + public Builder clearDy() { + result.hasDy = false; + result.dy_ = 0; + return this; + } + + // repeated uint32 categories = 4; + public java.util.List getCategoriesList() { + return java.util.Collections.unmodifiableList(result.categories_); + } + public int getCategoriesCount() { + return result.getCategoriesCount(); + } + public int getCategories(int index) { + return result.getCategories(index); + } + public Builder setCategories(int index, int value) { + result.categories_.set(index, value); + return this; + } + public Builder addCategories(int value) { + if (result.categories_.isEmpty()) { + result.categories_ = new java.util.ArrayList(); + } + result.categories_.add(value); + return this; + } + public Builder addAllCategories( + java.lang.Iterable values) { + if (result.categories_.isEmpty()) { + result.categories_ = new java.util.ArrayList(); + } + super.addAll(values, result.categories_); + return this; + } + public Builder clearCategories() { + result.categories_ = java.util.Collections.emptyList(); + return this; + } + + // optional string name = 6; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // optional string nameEn = 7; + public boolean hasNameEn() { + return result.hasNameEn(); + } + public java.lang.String getNameEn() { + return result.getNameEn(); + } + public Builder setNameEn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNameEn = true; + result.nameEn_ = value; + return this; + } + public Builder clearNameEn() { + result.hasNameEn = false; + result.nameEn_ = getDefaultInstance().getNameEn(); + return this; + } + + // optional uint64 id = 8; + public boolean hasId() { + return result.hasId(); + } + public long getId() { + return result.getId(); + } + public Builder setId(long value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0L; + return this; + } + + // optional string openingHours = 10; + public boolean hasOpeningHours() { + return result.hasOpeningHours(); + } + public java.lang.String getOpeningHours() { + return result.getOpeningHours(); + } + public Builder setOpeningHours(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasOpeningHours = true; + result.openingHours_ = value; + return this; + } + public Builder clearOpeningHours() { + result.hasOpeningHours = false; + result.openingHours_ = getDefaultInstance().getOpeningHours(); + return this; + } + + // optional string site = 11; + public boolean hasSite() { + return result.hasSite(); + } + public java.lang.String getSite() { + return result.getSite(); + } + public Builder setSite(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasSite = true; + result.site_ = value; + return this; + } + public Builder clearSite() { + result.hasSite = false; + result.site_ = getDefaultInstance().getSite(); + return this; + } + + // optional string phone = 12; + public boolean hasPhone() { + return result.hasPhone(); + } + public java.lang.String getPhone() { + return result.getPhone(); + } + public Builder setPhone(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasPhone = true; + result.phone_ = value; + return this; + } + public Builder clearPhone() { + result.hasPhone = false; + result.phone_ = getDefaultInstance().getPhone(); + return this; + } + + // optional string note = 13; + public boolean hasNote() { + return result.hasNote(); + } + public java.lang.String getNote() { + return result.getNote(); + } + public Builder setNote(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasNote = true; + result.note_ = value; + return this; + } + public Builder clearNote() { + result.hasNote = false; + result.note_ = getDefaultInstance().getNote(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndPoiBoxDataAtom) + } + + static { + defaultInstance = new OsmAndPoiBoxDataAtom(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndPoiBoxDataAtom) + } + + public static final class IdTable extends + com.google.protobuf.GeneratedMessage { + // Use IdTable.newBuilder() to construct. + private IdTable() { + initFields(); + } + private IdTable(boolean noInit) {} + + private static final IdTable defaultInstance; + public static IdTable getDefaultInstance() { + return defaultInstance; + } + + @Override + public IdTable getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_IdTable_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_IdTable_fieldAccessorTable; + } + + // repeated sint64 routeId = 1; + public static final int ROUTEID_FIELD_NUMBER = 1; + private java.util.List routeId_ = + java.util.Collections.emptyList(); + public java.util.List getRouteIdList() { + return routeId_; + } + public int getRouteIdCount() { return routeId_.size(); } + public long getRouteId(int index) { + return routeId_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (long element : getRouteIdList()) { + output.writeSInt64(1, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (long element : getRouteIdList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeSInt64SizeNoTag(element); + } + size += dataSize; + size += 1 * getRouteIdList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.IdTable parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.IdTable parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.IdTable parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.IdTable prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.IdTable result; + + // Construct using net.osmand.binary.OsmandOdb.IdTable.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.IdTable(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.IdTable internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.IdTable(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.IdTable.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.IdTable getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.IdTable build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.IdTable buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.IdTable buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.routeId_ != java.util.Collections.EMPTY_LIST) { + result.routeId_ = + java.util.Collections.unmodifiableList(result.routeId_); + } + net.osmand.binary.OsmandOdb.IdTable returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.IdTable) { + return mergeFrom((net.osmand.binary.OsmandOdb.IdTable)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.IdTable other) { + if (other == net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance()) return this; + if (!other.routeId_.isEmpty()) { + if (result.routeId_.isEmpty()) { + result.routeId_ = new java.util.ArrayList(); + } + result.routeId_.addAll(other.routeId_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + addRouteId(input.readSInt64()); + break; + } + case 10: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addRouteId(input.readSInt64()); + } + input.popLimit(limit); + break; + } + } + } + } + + + // repeated sint64 routeId = 1; + public java.util.List getRouteIdList() { + return java.util.Collections.unmodifiableList(result.routeId_); + } + public int getRouteIdCount() { + return result.getRouteIdCount(); + } + public long getRouteId(int index) { + return result.getRouteId(index); + } + public Builder setRouteId(int index, long value) { + result.routeId_.set(index, value); + return this; + } + public Builder addRouteId(long value) { + if (result.routeId_.isEmpty()) { + result.routeId_ = new java.util.ArrayList(); + } + result.routeId_.add(value); + return this; + } + public Builder addAllRouteId( + java.lang.Iterable values) { + if (result.routeId_.isEmpty()) { + result.routeId_ = new java.util.ArrayList(); + } + super.addAll(values, result.routeId_); + return this; + } + public Builder clearRouteId() { + result.routeId_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:IdTable) + } + + static { + defaultInstance = new IdTable(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:IdTable) + } + + public static final class RestrictionData extends + com.google.protobuf.GeneratedMessage { + // Use RestrictionData.newBuilder() to construct. + private RestrictionData() { + initFields(); + } + private RestrictionData(boolean noInit) {} + + private static final RestrictionData defaultInstance; + public static RestrictionData getDefaultInstance() { + return defaultInstance; + } + + @Override + public RestrictionData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_RestrictionData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_RestrictionData_fieldAccessorTable; + } + + // required int32 type = 1; + public static final int TYPE_FIELD_NUMBER = 1; + private boolean hasType; + private int type_ = 0; + public boolean hasType() { return hasType; } + public int getType() { return type_; } + + // required int32 from = 2; + public static final int FROM_FIELD_NUMBER = 2; + private boolean hasFrom; + private int from_ = 0; + public boolean hasFrom() { return hasFrom; } + public int getFrom() { return from_; } + + // required int32 to = 3; + public static final int TO_FIELD_NUMBER = 3; + private boolean hasTo; + private int to_ = 0; + public boolean hasTo() { return hasTo; } + public int getTo() { return to_; } + + // optional int32 via = 4; + public static final int VIA_FIELD_NUMBER = 4; + private boolean hasVia; + private int via_ = 0; + public boolean hasVia() { return hasVia; } + public int getVia() { return via_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasType) return false; + if (!hasFrom) return false; + if (!hasTo) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasType()) { + output.writeInt32(1, getType()); + } + if (hasFrom()) { + output.writeInt32(2, getFrom()); + } + if (hasTo()) { + output.writeInt32(3, getTo()); + } + if (hasVia()) { + output.writeInt32(4, getVia()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasType()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getType()); + } + if (hasFrom()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, getFrom()); + } + if (hasTo()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, getTo()); + } + if (hasVia()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getVia()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.RestrictionData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.RestrictionData result; + + // Construct using net.osmand.binary.OsmandOdb.RestrictionData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.RestrictionData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.RestrictionData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.RestrictionData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.RestrictionData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.RestrictionData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.RestrictionData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.RestrictionData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.RestrictionData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.RestrictionData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.RestrictionData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.RestrictionData) { + return mergeFrom((net.osmand.binary.OsmandOdb.RestrictionData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.RestrictionData other) { + if (other == net.osmand.binary.OsmandOdb.RestrictionData.getDefaultInstance()) return this; + if (other.hasType()) { + setType(other.getType()); + } + if (other.hasFrom()) { + setFrom(other.getFrom()); + } + if (other.hasTo()) { + setTo(other.getTo()); + } + if (other.hasVia()) { + setVia(other.getVia()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setType(input.readInt32()); + break; + } + case 16: { + setFrom(input.readInt32()); + break; + } + case 24: { + setTo(input.readInt32()); + break; + } + case 32: { + setVia(input.readInt32()); + break; + } + } + } + } + + + // required int32 type = 1; + public boolean hasType() { + return result.hasType(); + } + public int getType() { + return result.getType(); + } + public Builder setType(int value) { + result.hasType = true; + result.type_ = value; + return this; + } + public Builder clearType() { + result.hasType = false; + result.type_ = 0; + return this; + } + + // required int32 from = 2; + public boolean hasFrom() { + return result.hasFrom(); + } + public int getFrom() { + return result.getFrom(); + } + public Builder setFrom(int value) { + result.hasFrom = true; + result.from_ = value; + return this; + } + public Builder clearFrom() { + result.hasFrom = false; + result.from_ = 0; + return this; + } + + // required int32 to = 3; + public boolean hasTo() { + return result.hasTo(); + } + public int getTo() { + return result.getTo(); + } + public Builder setTo(int value) { + result.hasTo = true; + result.to_ = value; + return this; + } + public Builder clearTo() { + result.hasTo = false; + result.to_ = 0; + return this; + } + + // optional int32 via = 4; + public boolean hasVia() { + return result.hasVia(); + } + public int getVia() { + return result.getVia(); + } + public Builder setVia(int value) { + result.hasVia = true; + result.via_ = value; + return this; + } + public Builder clearVia() { + result.hasVia = false; + result.via_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:RestrictionData) + } + + static { + defaultInstance = new RestrictionData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:RestrictionData) + } + + public static final class RouteData extends + com.google.protobuf.GeneratedMessage { + // Use RouteData.newBuilder() to construct. + private RouteData() { + initFields(); + } + private RouteData(boolean noInit) {} + + private static final RouteData defaultInstance; + public static RouteData getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteData getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_RouteData_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_RouteData_fieldAccessorTable; + } + + // required bytes points = 1; + public static final int POINTS_FIELD_NUMBER = 1; + private boolean hasPoints; + private com.google.protobuf.ByteString points_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasPoints() { return hasPoints; } + public com.google.protobuf.ByteString getPoints() { return points_; } + + // optional bytes pointTypes = 4; + public static final int POINTTYPES_FIELD_NUMBER = 4; + private boolean hasPointTypes; + private com.google.protobuf.ByteString pointTypes_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasPointTypes() { return hasPointTypes; } + public com.google.protobuf.ByteString getPointTypes() { return pointTypes_; } + + // required bytes types = 7; + public static final int TYPES_FIELD_NUMBER = 7; + private boolean hasTypes; + private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasTypes() { return hasTypes; } + public com.google.protobuf.ByteString getTypes() { return types_; } + + // required int32 routeId = 12; + public static final int ROUTEID_FIELD_NUMBER = 12; + private boolean hasRouteId; + private int routeId_ = 0; + public boolean hasRouteId() { return hasRouteId; } + public int getRouteId() { return routeId_; } + + // optional bytes stringNames = 14; + public static final int STRINGNAMES_FIELD_NUMBER = 14; + private boolean hasStringNames; + private com.google.protobuf.ByteString stringNames_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasStringNames() { return hasStringNames; } + public com.google.protobuf.ByteString getStringNames() { return stringNames_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasPoints) return false; + if (!hasTypes) return false; + if (!hasRouteId) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasPoints()) { + output.writeBytes(1, getPoints()); + } + if (hasPointTypes()) { + output.writeBytes(4, getPointTypes()); + } + if (hasTypes()) { + output.writeBytes(7, getTypes()); + } + if (hasRouteId()) { + output.writeInt32(12, getRouteId()); + } + if (hasStringNames()) { + output.writeBytes(14, getStringNames()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasPoints()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getPoints()); + } + if (hasPointTypes()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getPointTypes()); + } + if (hasTypes()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(7, getTypes()); + } + if (hasRouteId()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(12, getRouteId()); + } + if (hasStringNames()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(14, getStringNames()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.RouteData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.RouteData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.RouteData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.RouteData prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.RouteData result; + + // Construct using net.osmand.binary.OsmandOdb.RouteData.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.RouteData(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.RouteData internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.RouteData(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.RouteData.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.RouteData getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.RouteData.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.RouteData build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.RouteData buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.RouteData buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.RouteData returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.RouteData) { + return mergeFrom((net.osmand.binary.OsmandOdb.RouteData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.RouteData other) { + if (other == net.osmand.binary.OsmandOdb.RouteData.getDefaultInstance()) return this; + if (other.hasPoints()) { + setPoints(other.getPoints()); + } + if (other.hasPointTypes()) { + setPointTypes(other.getPointTypes()); + } + if (other.hasTypes()) { + setTypes(other.getTypes()); + } + if (other.hasRouteId()) { + setRouteId(other.getRouteId()); + } + if (other.hasStringNames()) { + setStringNames(other.getStringNames()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setPoints(input.readBytes()); + break; + } + case 34: { + setPointTypes(input.readBytes()); + break; + } + case 58: { + setTypes(input.readBytes()); + break; + } + case 96: { + setRouteId(input.readInt32()); + break; + } + case 114: { + setStringNames(input.readBytes()); + break; + } + } + } + } + + + // required bytes points = 1; + public boolean hasPoints() { + return result.hasPoints(); + } + public com.google.protobuf.ByteString getPoints() { + return result.getPoints(); + } + public Builder setPoints(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasPoints = true; + result.points_ = value; + return this; + } + public Builder clearPoints() { + result.hasPoints = false; + result.points_ = getDefaultInstance().getPoints(); + return this; + } + + // optional bytes pointTypes = 4; + public boolean hasPointTypes() { + return result.hasPointTypes(); + } + public com.google.protobuf.ByteString getPointTypes() { + return result.getPointTypes(); + } + public Builder setPointTypes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasPointTypes = true; + result.pointTypes_ = value; + return this; + } + public Builder clearPointTypes() { + result.hasPointTypes = false; + result.pointTypes_ = getDefaultInstance().getPointTypes(); + return this; + } + + // required bytes types = 7; + public boolean hasTypes() { + return result.hasTypes(); + } + public com.google.protobuf.ByteString getTypes() { + return result.getTypes(); + } + public Builder setTypes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTypes = true; + result.types_ = value; + return this; + } + public Builder clearTypes() { + result.hasTypes = false; + result.types_ = getDefaultInstance().getTypes(); + return this; + } + + // required int32 routeId = 12; + public boolean hasRouteId() { + return result.hasRouteId(); + } + public int getRouteId() { + return result.getRouteId(); + } + public Builder setRouteId(int value) { + result.hasRouteId = true; + result.routeId_ = value; + return this; + } + public Builder clearRouteId() { + result.hasRouteId = false; + result.routeId_ = 0; + return this; + } + + // optional bytes stringNames = 14; + public boolean hasStringNames() { + return result.hasStringNames(); + } + public com.google.protobuf.ByteString getStringNames() { + return result.getStringNames(); + } + public Builder setStringNames(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStringNames = true; + result.stringNames_ = value; + return this; + } + public Builder clearStringNames() { + result.hasStringNames = false; + result.stringNames_ = getDefaultInstance().getStringNames(); + return this; + } + + // @@protoc_insertion_point(builder_scope:RouteData) + } + + static { + defaultInstance = new RouteData(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:RouteData) + } + + public static final class OsmAndRoutingIndex extends + com.google.protobuf.GeneratedMessage { + // Use OsmAndRoutingIndex.newBuilder() to construct. + private OsmAndRoutingIndex() { + initFields(); + } + private OsmAndRoutingIndex(boolean noInit) {} + + private static final OsmAndRoutingIndex defaultInstance; + public static OsmAndRoutingIndex getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRoutingIndex getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_fieldAccessorTable; + } + + public static final class RouteEncodingRule extends + com.google.protobuf.GeneratedMessage { + // Use RouteEncodingRule.newBuilder() to construct. + private RouteEncodingRule() { + initFields(); + } + private RouteEncodingRule(boolean noInit) {} + + private static final RouteEncodingRule defaultInstance; + public static RouteEncodingRule getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteEncodingRule getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteEncodingRule_fieldAccessorTable; + } + + // required string tag = 3; + public static final int TAG_FIELD_NUMBER = 3; + private boolean hasTag; + private java.lang.String tag_ = ""; + public boolean hasTag() { return hasTag; } + public java.lang.String getTag() { return tag_; } + + // required string value = 5; + public static final int VALUE_FIELD_NUMBER = 5; + private boolean hasValue; + private java.lang.String value_ = ""; + public boolean hasValue() { return hasValue; } + public java.lang.String getValue() { return value_; } + + // optional uint32 id = 7; + public static final int ID_FIELD_NUMBER = 7; + private boolean hasId; + private int id_ = 0; + public boolean hasId() { return hasId; } + public int getId() { return id_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasTag) return false; + if (!hasValue) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasTag()) { + output.writeString(3, getTag()); + } + if (hasValue()) { + output.writeString(5, getValue()); + } + if (hasId()) { + output.writeUInt32(7, getId()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasTag()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getTag()); + } + if (hasValue()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(5, getValue()); + } + if (hasId()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(7, getId()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.getDefaultInstance()) return this; + if (other.hasTag()) { + setTag(other.getTag()); + } + if (other.hasValue()) { + setValue(other.getValue()); + } + if (other.hasId()) { + setId(other.getId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 26: { + setTag(input.readString()); + break; + } + case 42: { + setValue(input.readString()); + break; + } + case 56: { + setId(input.readUInt32()); + break; + } + } + } + } + + + // required string tag = 3; + public boolean hasTag() { + return result.hasTag(); + } + public java.lang.String getTag() { + return result.getTag(); + } + public Builder setTag(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTag = true; + result.tag_ = value; + return this; + } + public Builder clearTag() { + result.hasTag = false; + result.tag_ = getDefaultInstance().getTag(); + return this; + } + + // required string value = 5; + public boolean hasValue() { + return result.hasValue(); + } + public java.lang.String getValue() { + return result.getValue(); + } + public Builder setValue(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasValue = true; + result.value_ = value; + return this; + } + public Builder clearValue() { + result.hasValue = false; + result.value_ = getDefaultInstance().getValue(); + return this; + } + + // optional uint32 id = 7; + public boolean hasId() { + return result.hasId(); + } + public int getId() { + return result.getId(); + } + public Builder setId(int value) { + result.hasId = true; + result.id_ = value; + return this; + } + public Builder clearId() { + result.hasId = false; + result.id_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteEncodingRule) + } + + static { + defaultInstance = new RouteEncodingRule(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteEncodingRule) + } + + public static final class RouteDataBox extends + com.google.protobuf.GeneratedMessage { + // Use RouteDataBox.newBuilder() to construct. + private RouteDataBox() { + initFields(); + } + private RouteDataBox(boolean noInit) {} + + private static final RouteDataBox defaultInstance; + public static RouteDataBox getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteDataBox getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBox_fieldAccessorTable; + } + + // required sint32 left = 1; + public static final int LEFT_FIELD_NUMBER = 1; + private boolean hasLeft; + private int left_ = 0; + public boolean hasLeft() { return hasLeft; } + public int getLeft() { return left_; } + + // required sint32 right = 2; + public static final int RIGHT_FIELD_NUMBER = 2; + private boolean hasRight; + private int right_ = 0; + public boolean hasRight() { return hasRight; } + public int getRight() { return right_; } + + // required sint32 top = 3; + public static final int TOP_FIELD_NUMBER = 3; + private boolean hasTop; + private int top_ = 0; + public boolean hasTop() { return hasTop; } + public int getTop() { return top_; } + + // required sint32 bottom = 4; + public static final int BOTTOM_FIELD_NUMBER = 4; + private boolean hasBottom; + private int bottom_ = 0; + public boolean hasBottom() { return hasBottom; } + public int getBottom() { return bottom_; } + + // optional fixed32 shiftToData = 5; + public static final int SHIFTTODATA_FIELD_NUMBER = 5; + private boolean hasShiftToData; + private int shiftToData_ = 0; + public boolean hasShiftToData() { return hasShiftToData; } + public int getShiftToData() { return shiftToData_; } + + // repeated .OsmAndRoutingIndex.RouteDataBox boxes = 7; + public static final int BOXES_FIELD_NUMBER = 7; + private java.util.List boxes_ = + java.util.Collections.emptyList(); + public java.util.List getBoxesList() { + return boxes_; + } + public int getBoxesCount() { return boxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBoxes(int index) { + return boxes_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasLeft) return false; + if (!hasRight) return false; + if (!hasTop) return false; + if (!hasBottom) return false; + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBoxesList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasLeft()) { + output.writeSInt32(1, getLeft()); + } + if (hasRight()) { + output.writeSInt32(2, getRight()); + } + if (hasTop()) { + output.writeSInt32(3, getTop()); + } + if (hasBottom()) { + output.writeSInt32(4, getBottom()); + } + if (hasShiftToData()) { + output.writeFixed32(5, getShiftToData()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBoxesList()) { + output.writeMessage(7, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasLeft()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(1, getLeft()); + } + if (hasRight()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, getRight()); + } + if (hasTop()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, getTop()); + } + if (hasBottom()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(4, getBottom()); + } + if (hasShiftToData()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(5, getShiftToData()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.boxes_ != java.util.Collections.EMPTY_LIST) { + result.boxes_ = + java.util.Collections.unmodifiableList(result.boxes_); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.getDefaultInstance()) return this; + if (other.hasLeft()) { + setLeft(other.getLeft()); + } + if (other.hasRight()) { + setRight(other.getRight()); + } + if (other.hasTop()) { + setTop(other.getTop()); + } + if (other.hasBottom()) { + setBottom(other.getBottom()); + } + if (other.hasShiftToData()) { + setShiftToData(other.getShiftToData()); + } + if (!other.boxes_.isEmpty()) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.addAll(other.boxes_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setLeft(input.readSInt32()); + break; + } + case 16: { + setRight(input.readSInt32()); + break; + } + case 24: { + setTop(input.readSInt32()); + break; + } + case 32: { + setBottom(input.readSInt32()); + break; + } + case 45: { + setShiftToData(input.readFixed32()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBoxes(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required sint32 left = 1; + public boolean hasLeft() { + return result.hasLeft(); + } + public int getLeft() { + return result.getLeft(); + } + public Builder setLeft(int value) { + result.hasLeft = true; + result.left_ = value; + return this; + } + public Builder clearLeft() { + result.hasLeft = false; + result.left_ = 0; + return this; + } + + // required sint32 right = 2; + public boolean hasRight() { + return result.hasRight(); + } + public int getRight() { + return result.getRight(); + } + public Builder setRight(int value) { + result.hasRight = true; + result.right_ = value; + return this; + } + public Builder clearRight() { + result.hasRight = false; + result.right_ = 0; + return this; + } + + // required sint32 top = 3; + public boolean hasTop() { + return result.hasTop(); + } + public int getTop() { + return result.getTop(); + } + public Builder setTop(int value) { + result.hasTop = true; + result.top_ = value; + return this; + } + public Builder clearTop() { + result.hasTop = false; + result.top_ = 0; + return this; + } + + // required sint32 bottom = 4; + public boolean hasBottom() { + return result.hasBottom(); + } + public int getBottom() { + return result.getBottom(); + } + public Builder setBottom(int value) { + result.hasBottom = true; + result.bottom_ = value; + return this; + } + public Builder clearBottom() { + result.hasBottom = false; + result.bottom_ = 0; + return this; + } + + // optional fixed32 shiftToData = 5; + public boolean hasShiftToData() { + return result.hasShiftToData(); + } + public int getShiftToData() { + return result.getShiftToData(); + } + public Builder setShiftToData(int value) { + result.hasShiftToData = true; + result.shiftToData_ = value; + return this; + } + public Builder clearShiftToData() { + result.hasShiftToData = false; + result.shiftToData_ = 0; + return this; + } + + // repeated .OsmAndRoutingIndex.RouteDataBox boxes = 7; + public java.util.List getBoxesList() { + return java.util.Collections.unmodifiableList(result.boxes_); + } + public int getBoxesCount() { + return result.getBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBoxes(int index) { + return result.getBoxes(index); + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.boxes_.set(index, value); + return this; + } + public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) { + result.boxes_.set(index, builderForValue.build()); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(value); + return this; + } + public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + result.boxes_.add(builderForValue.build()); + return this; + } + public Builder addAllBoxes( + java.lang.Iterable values) { + if (result.boxes_.isEmpty()) { + result.boxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.boxes_); + return this; + } + public Builder clearBoxes() { + result.boxes_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteDataBox) + } + + static { + defaultInstance = new RouteDataBox(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteDataBox) + } + + public static final class RouteDataBlock extends + com.google.protobuf.GeneratedMessage { + // Use RouteDataBlock.newBuilder() to construct. + private RouteDataBlock() { + initFields(); + } + private RouteDataBlock(boolean noInit) {} + + private static final RouteDataBlock defaultInstance; + public static RouteDataBlock getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteDataBlock getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBlock_fieldAccessorTable; + } + + // optional .IdTable idTable = 5; + public static final int IDTABLE_FIELD_NUMBER = 5; + private boolean hasIdTable; + private net.osmand.binary.OsmandOdb.IdTable idTable_; + public boolean hasIdTable() { return hasIdTable; } + public net.osmand.binary.OsmandOdb.IdTable getIdTable() { return idTable_; } + + // optional .StringTable stringTable = 8; + public static final int STRINGTABLE_FIELD_NUMBER = 8; + private boolean hasStringTable; + private net.osmand.binary.OsmandOdb.StringTable stringTable_; + public boolean hasStringTable() { return hasStringTable; } + public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; } + + // repeated .RouteData dataObjects = 6; + public static final int DATAOBJECTS_FIELD_NUMBER = 6; + private java.util.List dataObjects_ = + java.util.Collections.emptyList(); + public java.util.List getDataObjectsList() { + return dataObjects_; + } + public int getDataObjectsCount() { return dataObjects_.size(); } + public net.osmand.binary.OsmandOdb.RouteData getDataObjects(int index) { + return dataObjects_.get(index); + } + + // repeated .RestrictionData restrictions = 7; + public static final int RESTRICTIONS_FIELD_NUMBER = 7; + private java.util.List restrictions_ = + java.util.Collections.emptyList(); + public java.util.List getRestrictionsList() { + return restrictions_; + } + public int getRestrictionsCount() { return restrictions_.size(); } + public net.osmand.binary.OsmandOdb.RestrictionData getRestrictions(int index) { + return restrictions_.get(index); + } + + private void initFields() { + idTable_ = net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance(); + stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + for (net.osmand.binary.OsmandOdb.RouteData element : getDataObjectsList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.RestrictionData element : getRestrictionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasIdTable()) { + output.writeMessage(5, getIdTable()); + } + for (net.osmand.binary.OsmandOdb.RouteData element : getDataObjectsList()) { + output.writeMessage(6, element); + } + for (net.osmand.binary.OsmandOdb.RestrictionData element : getRestrictionsList()) { + output.writeMessage(7, element); + } + if (hasStringTable()) { + output.writeMessage(8, getStringTable()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasIdTable()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, getIdTable()); + } + for (net.osmand.binary.OsmandOdb.RouteData element : getDataObjectsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + for (net.osmand.binary.OsmandOdb.RestrictionData element : getRestrictionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + if (hasStringTable()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, getStringTable()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.dataObjects_ != java.util.Collections.EMPTY_LIST) { + result.dataObjects_ = + java.util.Collections.unmodifiableList(result.dataObjects_); + } + if (result.restrictions_ != java.util.Collections.EMPTY_LIST) { + result.restrictions_ = + java.util.Collections.unmodifiableList(result.restrictions_); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.getDefaultInstance()) return this; + if (other.hasIdTable()) { + mergeIdTable(other.getIdTable()); + } + if (other.hasStringTable()) { + mergeStringTable(other.getStringTable()); + } + if (!other.dataObjects_.isEmpty()) { + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + result.dataObjects_.addAll(other.dataObjects_); + } + if (!other.restrictions_.isEmpty()) { + if (result.restrictions_.isEmpty()) { + result.restrictions_ = new java.util.ArrayList(); + } + result.restrictions_.addAll(other.restrictions_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 42: { + net.osmand.binary.OsmandOdb.IdTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IdTable.newBuilder(); + if (hasIdTable()) { + subBuilder.mergeFrom(getIdTable()); + } + input.readMessage(subBuilder, extensionRegistry); + setIdTable(subBuilder.buildPartial()); + break; + } + case 50: { + net.osmand.binary.OsmandOdb.RouteData.Builder subBuilder = net.osmand.binary.OsmandOdb.RouteData.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addDataObjects(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.RestrictionData.Builder subBuilder = net.osmand.binary.OsmandOdb.RestrictionData.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRestrictions(subBuilder.buildPartial()); + break; + } + case 66: { + net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder(); + if (hasStringTable()) { + subBuilder.mergeFrom(getStringTable()); + } + input.readMessage(subBuilder, extensionRegistry); + setStringTable(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional .IdTable idTable = 5; + public boolean hasIdTable() { + return result.hasIdTable(); + } + public net.osmand.binary.OsmandOdb.IdTable getIdTable() { + return result.getIdTable(); + } + public Builder setIdTable(net.osmand.binary.OsmandOdb.IdTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasIdTable = true; + result.idTable_ = value; + return this; + } + public Builder setIdTable(net.osmand.binary.OsmandOdb.IdTable.Builder builderForValue) { + result.hasIdTable = true; + result.idTable_ = builderForValue.build(); + return this; + } + public Builder mergeIdTable(net.osmand.binary.OsmandOdb.IdTable value) { + if (result.hasIdTable() && + result.idTable_ != net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance()) { + result.idTable_ = + net.osmand.binary.OsmandOdb.IdTable.newBuilder(result.idTable_).mergeFrom(value).buildPartial(); + } else { + result.idTable_ = value; + } + result.hasIdTable = true; + return this; + } + public Builder clearIdTable() { + result.hasIdTable = false; + result.idTable_ = net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance(); + return this; + } + + // optional .StringTable stringTable = 8; + public boolean hasStringTable() { + return result.hasStringTable(); + } + public net.osmand.binary.OsmandOdb.StringTable getStringTable() { + return result.getStringTable(); + } + public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStringTable = true; + result.stringTable_ = value; + return this; + } + public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) { + result.hasStringTable = true; + result.stringTable_ = builderForValue.build(); + return this; + } + public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) { + if (result.hasStringTable() && + result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) { + result.stringTable_ = + net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial(); + } else { + result.stringTable_ = value; + } + result.hasStringTable = true; + return this; + } + public Builder clearStringTable() { + result.hasStringTable = false; + result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance(); + return this; + } + + // repeated .RouteData dataObjects = 6; + public java.util.List getDataObjectsList() { + return java.util.Collections.unmodifiableList(result.dataObjects_); + } + public int getDataObjectsCount() { + return result.getDataObjectsCount(); + } + public net.osmand.binary.OsmandOdb.RouteData getDataObjects(int index) { + return result.getDataObjects(index); + } + public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.RouteData value) { + if (value == null) { + throw new NullPointerException(); + } + result.dataObjects_.set(index, value); + return this; + } + public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.RouteData.Builder builderForValue) { + result.dataObjects_.set(index, builderForValue.build()); + return this; + } + public Builder addDataObjects(net.osmand.binary.OsmandOdb.RouteData value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + result.dataObjects_.add(value); + return this; + } + public Builder addDataObjects(net.osmand.binary.OsmandOdb.RouteData.Builder builderForValue) { + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + result.dataObjects_.add(builderForValue.build()); + return this; + } + public Builder addAllDataObjects( + java.lang.Iterable values) { + if (result.dataObjects_.isEmpty()) { + result.dataObjects_ = new java.util.ArrayList(); + } + super.addAll(values, result.dataObjects_); + return this; + } + public Builder clearDataObjects() { + result.dataObjects_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .RestrictionData restrictions = 7; + public java.util.List getRestrictionsList() { + return java.util.Collections.unmodifiableList(result.restrictions_); + } + public int getRestrictionsCount() { + return result.getRestrictionsCount(); + } + public net.osmand.binary.OsmandOdb.RestrictionData getRestrictions(int index) { + return result.getRestrictions(index); + } + public Builder setRestrictions(int index, net.osmand.binary.OsmandOdb.RestrictionData value) { + if (value == null) { + throw new NullPointerException(); + } + result.restrictions_.set(index, value); + return this; + } + public Builder setRestrictions(int index, net.osmand.binary.OsmandOdb.RestrictionData.Builder builderForValue) { + result.restrictions_.set(index, builderForValue.build()); + return this; + } + public Builder addRestrictions(net.osmand.binary.OsmandOdb.RestrictionData value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.restrictions_.isEmpty()) { + result.restrictions_ = new java.util.ArrayList(); + } + result.restrictions_.add(value); + return this; + } + public Builder addRestrictions(net.osmand.binary.OsmandOdb.RestrictionData.Builder builderForValue) { + if (result.restrictions_.isEmpty()) { + result.restrictions_ = new java.util.ArrayList(); + } + result.restrictions_.add(builderForValue.build()); + return this; + } + public Builder addAllRestrictions( + java.lang.Iterable values) { + if (result.restrictions_.isEmpty()) { + result.restrictions_ = new java.util.ArrayList(); + } + super.addAll(values, result.restrictions_); + return this; + } + public Builder clearRestrictions() { + result.restrictions_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteDataBlock) + } + + static { + defaultInstance = new RouteDataBlock(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteDataBlock) + } + + public static final class RouteBorderBox extends + com.google.protobuf.GeneratedMessage { + // Use RouteBorderBox.newBuilder() to construct. + private RouteBorderBox() { + initFields(); + } + private RouteBorderBox(boolean noInit) {} + + private static final RouteBorderBox defaultInstance; + public static RouteBorderBox getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteBorderBox getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderBox_fieldAccessorTable; + } + + // required .OsmAndTileBox boundaries = 1; + public static final int BOUNDARIES_FIELD_NUMBER = 1; + private boolean hasBoundaries; + private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_; + public boolean hasBoundaries() { return hasBoundaries; } + public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; } + + // optional uint32 tileZoomToSplit = 2; + public static final int TILEZOOMTOSPLIT_FIELD_NUMBER = 2; + private boolean hasTileZoomToSplit; + private int tileZoomToSplit_ = 0; + public boolean hasTileZoomToSplit() { return hasTileZoomToSplit; } + public int getTileZoomToSplit() { return tileZoomToSplit_; } + + // repeated .OsmAndRoutingIndex.RouteBorderLine borderLines = 6; + public static final int BORDERLINES_FIELD_NUMBER = 6; + private java.util.List borderLines_ = + java.util.Collections.emptyList(); + public java.util.List getBorderLinesList() { + return borderLines_; + } + public int getBorderLinesCount() { return borderLines_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine getBorderLines(int index) { + return borderLines_.get(index); + } + + // repeated .OsmAndRoutingIndex.RouteBorderPointsBlock blocks = 7; + public static final int BLOCKS_FIELD_NUMBER = 7; + private java.util.List blocks_ = + java.util.Collections.emptyList(); + public java.util.List getBlocksList() { + return blocks_; + } + public int getBlocksCount() { return blocks_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock getBlocks(int index) { + return blocks_.get(index); + } + + private void initFields() { + boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasBoundaries) return false; + if (!getBoundaries().isInitialized()) return false; + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine element : getBorderLinesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock element : getBlocksList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasBoundaries()) { + output.writeMessage(1, getBoundaries()); + } + if (hasTileZoomToSplit()) { + output.writeUInt32(2, getTileZoomToSplit()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine element : getBorderLinesList()) { + output.writeMessage(6, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock element : getBlocksList()) { + output.writeMessage(7, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasBoundaries()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getBoundaries()); + } + if (hasTileZoomToSplit()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, getTileZoomToSplit()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine element : getBorderLinesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock element : getBlocksList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.borderLines_ != java.util.Collections.EMPTY_LIST) { + result.borderLines_ = + java.util.Collections.unmodifiableList(result.borderLines_); + } + if (result.blocks_ != java.util.Collections.EMPTY_LIST) { + result.blocks_ = + java.util.Collections.unmodifiableList(result.blocks_); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance()) return this; + if (other.hasBoundaries()) { + mergeBoundaries(other.getBoundaries()); + } + if (other.hasTileZoomToSplit()) { + setTileZoomToSplit(other.getTileZoomToSplit()); + } + if (!other.borderLines_.isEmpty()) { + if (result.borderLines_.isEmpty()) { + result.borderLines_ = new java.util.ArrayList(); + } + result.borderLines_.addAll(other.borderLines_); + } + if (!other.blocks_.isEmpty()) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.addAll(other.blocks_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(); + if (hasBoundaries()) { + subBuilder.mergeFrom(getBoundaries()); + } + input.readMessage(subBuilder, extensionRegistry); + setBoundaries(subBuilder.buildPartial()); + break; + } + case 16: { + setTileZoomToSplit(input.readUInt32()); + break; + } + case 50: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBorderLines(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBlocks(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required .OsmAndTileBox boundaries = 1; + public boolean hasBoundaries() { + return result.hasBoundaries(); + } + public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { + return result.getBoundaries(); + } + public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasBoundaries = true; + result.boundaries_ = value; + return this; + } + public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) { + result.hasBoundaries = true; + result.boundaries_ = builderForValue.build(); + return this; + } + public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) { + if (result.hasBoundaries() && + result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) { + result.boundaries_ = + net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial(); + } else { + result.boundaries_ = value; + } + result.hasBoundaries = true; + return this; + } + public Builder clearBoundaries() { + result.hasBoundaries = false; + result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance(); + return this; + } + + // optional uint32 tileZoomToSplit = 2; + public boolean hasTileZoomToSplit() { + return result.hasTileZoomToSplit(); + } + public int getTileZoomToSplit() { + return result.getTileZoomToSplit(); + } + public Builder setTileZoomToSplit(int value) { + result.hasTileZoomToSplit = true; + result.tileZoomToSplit_ = value; + return this; + } + public Builder clearTileZoomToSplit() { + result.hasTileZoomToSplit = false; + result.tileZoomToSplit_ = 0; + return this; + } + + // repeated .OsmAndRoutingIndex.RouteBorderLine borderLines = 6; + public java.util.List getBorderLinesList() { + return java.util.Collections.unmodifiableList(result.borderLines_); + } + public int getBorderLinesCount() { + return result.getBorderLinesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine getBorderLines(int index) { + return result.getBorderLines(index); + } + public Builder setBorderLines(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine value) { + if (value == null) { + throw new NullPointerException(); + } + result.borderLines_.set(index, value); + return this; + } + public Builder setBorderLines(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder builderForValue) { + result.borderLines_.set(index, builderForValue.build()); + return this; + } + public Builder addBorderLines(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.borderLines_.isEmpty()) { + result.borderLines_ = new java.util.ArrayList(); + } + result.borderLines_.add(value); + return this; + } + public Builder addBorderLines(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder builderForValue) { + if (result.borderLines_.isEmpty()) { + result.borderLines_ = new java.util.ArrayList(); + } + result.borderLines_.add(builderForValue.build()); + return this; + } + public Builder addAllBorderLines( + java.lang.Iterable values) { + if (result.borderLines_.isEmpty()) { + result.borderLines_ = new java.util.ArrayList(); + } + super.addAll(values, result.borderLines_); + return this; + } + public Builder clearBorderLines() { + result.borderLines_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndRoutingIndex.RouteBorderPointsBlock blocks = 7; + public java.util.List getBlocksList() { + return java.util.Collections.unmodifiableList(result.blocks_); + } + public int getBlocksCount() { + return result.getBlocksCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock getBlocks(int index) { + return result.getBlocks(index); + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock value) { + if (value == null) { + throw new NullPointerException(); + } + result.blocks_.set(index, value); + return this; + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder builderForValue) { + result.blocks_.set(index, builderForValue.build()); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(value); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder builderForValue) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(builderForValue.build()); + return this; + } + public Builder addAllBlocks( + java.lang.Iterable values) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + super.addAll(values, result.blocks_); + return this; + } + public Builder clearBlocks() { + result.blocks_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderBox) + } + + static { + defaultInstance = new RouteBorderBox(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderBox) + } + + public static final class RouteBorderLine extends + com.google.protobuf.GeneratedMessage { + // Use RouteBorderLine.newBuilder() to construct. + private RouteBorderLine() { + initFields(); + } + private RouteBorderLine(boolean noInit) {} + + private static final RouteBorderLine defaultInstance; + public static RouteBorderLine getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteBorderLine getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderLine_fieldAccessorTable; + } + + // required int32 x = 1; + public static final int X_FIELD_NUMBER = 1; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // required int32 y = 2; + public static final int Y_FIELD_NUMBER = 2; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // optional int32 tox = 3; + public static final int TOX_FIELD_NUMBER = 3; + private boolean hasTox; + private int tox_ = 0; + public boolean hasTox() { return hasTox; } + public int getTox() { return tox_; } + + // optional int32 toy = 4; + public static final int TOY_FIELD_NUMBER = 4; + private boolean hasToy; + private int toy_ = 0; + public boolean hasToy() { return hasToy; } + public int getToy() { return toy_; } + + // required fixed32 shiftToPointsBlock = 7; + public static final int SHIFTTOPOINTSBLOCK_FIELD_NUMBER = 7; + private boolean hasShiftToPointsBlock; + private int shiftToPointsBlock_ = 0; + public boolean hasShiftToPointsBlock() { return hasShiftToPointsBlock; } + public int getShiftToPointsBlock() { return shiftToPointsBlock_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasX) return false; + if (!hasY) return false; + if (!hasShiftToPointsBlock) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasX()) { + output.writeInt32(1, getX()); + } + if (hasY()) { + output.writeInt32(2, getY()); + } + if (hasTox()) { + output.writeInt32(3, getTox()); + } + if (hasToy()) { + output.writeInt32(4, getToy()); + } + if (hasShiftToPointsBlock()) { + output.writeFixed32(7, getShiftToPointsBlock()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, getY()); + } + if (hasTox()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, getTox()); + } + if (hasToy()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, getToy()); + } + if (hasShiftToPointsBlock()) { + size += com.google.protobuf.CodedOutputStream + .computeFixed32Size(7, getShiftToPointsBlock()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.getDefaultInstance()) return this; + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasTox()) { + setTox(other.getTox()); + } + if (other.hasToy()) { + setToy(other.getToy()); + } + if (other.hasShiftToPointsBlock()) { + setShiftToPointsBlock(other.getShiftToPointsBlock()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setX(input.readInt32()); + break; + } + case 16: { + setY(input.readInt32()); + break; + } + case 24: { + setTox(input.readInt32()); + break; + } + case 32: { + setToy(input.readInt32()); + break; + } + case 61: { + setShiftToPointsBlock(input.readFixed32()); + break; + } + } + } + } + + + // required int32 x = 1; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // required int32 y = 2; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // optional int32 tox = 3; + public boolean hasTox() { + return result.hasTox(); + } + public int getTox() { + return result.getTox(); + } + public Builder setTox(int value) { + result.hasTox = true; + result.tox_ = value; + return this; + } + public Builder clearTox() { + result.hasTox = false; + result.tox_ = 0; + return this; + } + + // optional int32 toy = 4; + public boolean hasToy() { + return result.hasToy(); + } + public int getToy() { + return result.getToy(); + } + public Builder setToy(int value) { + result.hasToy = true; + result.toy_ = value; + return this; + } + public Builder clearToy() { + result.hasToy = false; + result.toy_ = 0; + return this; + } + + // required fixed32 shiftToPointsBlock = 7; + public boolean hasShiftToPointsBlock() { + return result.hasShiftToPointsBlock(); + } + public int getShiftToPointsBlock() { + return result.getShiftToPointsBlock(); + } + public Builder setShiftToPointsBlock(int value) { + result.hasShiftToPointsBlock = true; + result.shiftToPointsBlock_ = value; + return this; + } + public Builder clearShiftToPointsBlock() { + result.hasShiftToPointsBlock = false; + result.shiftToPointsBlock_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderLine) + } + + static { + defaultInstance = new RouteBorderLine(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderLine) + } + + public static final class RouteBorderPointsBlock extends + com.google.protobuf.GeneratedMessage { + // Use RouteBorderPointsBlock.newBuilder() to construct. + private RouteBorderPointsBlock() { + initFields(); + } + private RouteBorderPointsBlock(boolean noInit) {} + + private static final RouteBorderPointsBlock defaultInstance; + public static RouteBorderPointsBlock getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteBorderPointsBlock getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_fieldAccessorTable; + } + + // required int32 x = 1; + public static final int X_FIELD_NUMBER = 1; + private boolean hasX; + private int x_ = 0; + public boolean hasX() { return hasX; } + public int getX() { return x_; } + + // required int32 y = 2; + public static final int Y_FIELD_NUMBER = 2; + private boolean hasY; + private int y_ = 0; + public boolean hasY() { return hasY; } + public int getY() { return y_; } + + // required int64 baseId = 3; + public static final int BASEID_FIELD_NUMBER = 3; + private boolean hasBaseId; + private long baseId_ = 0L; + public boolean hasBaseId() { return hasBaseId; } + public long getBaseId() { return baseId_; } + + // repeated .OsmAndRoutingIndex.RouteBorderPoint points = 5; + public static final int POINTS_FIELD_NUMBER = 5; + private java.util.List points_ = + java.util.Collections.emptyList(); + public java.util.List getPointsList() { + return points_; + } + public int getPointsCount() { return points_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint getPoints(int index) { + return points_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasX) return false; + if (!hasY) return false; + if (!hasBaseId) return false; + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasX()) { + output.writeInt32(1, getX()); + } + if (hasY()) { + output.writeInt32(2, getY()); + } + if (hasBaseId()) { + output.writeInt64(3, getBaseId()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint element : getPointsList()) { + output.writeMessage(5, element); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasX()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getX()); + } + if (hasY()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, getY()); + } + if (hasBaseId()) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(3, getBaseId()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint element : getPointsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.points_ != java.util.Collections.EMPTY_LIST) { + result.points_ = + java.util.Collections.unmodifiableList(result.points_); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.getDefaultInstance()) return this; + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasBaseId()) { + setBaseId(other.getBaseId()); + } + if (!other.points_.isEmpty()) { + if (result.points_.isEmpty()) { + result.points_ = new java.util.ArrayList(); + } + result.points_.addAll(other.points_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setX(input.readInt32()); + break; + } + case 16: { + setY(input.readInt32()); + break; + } + case 24: { + setBaseId(input.readInt64()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addPoints(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required int32 x = 1; + public boolean hasX() { + return result.hasX(); + } + public int getX() { + return result.getX(); + } + public Builder setX(int value) { + result.hasX = true; + result.x_ = value; + return this; + } + public Builder clearX() { + result.hasX = false; + result.x_ = 0; + return this; + } + + // required int32 y = 2; + public boolean hasY() { + return result.hasY(); + } + public int getY() { + return result.getY(); + } + public Builder setY(int value) { + result.hasY = true; + result.y_ = value; + return this; + } + public Builder clearY() { + result.hasY = false; + result.y_ = 0; + return this; + } + + // required int64 baseId = 3; + public boolean hasBaseId() { + return result.hasBaseId(); + } + public long getBaseId() { + return result.getBaseId(); + } + public Builder setBaseId(long value) { + result.hasBaseId = true; + result.baseId_ = value; + return this; + } + public Builder clearBaseId() { + result.hasBaseId = false; + result.baseId_ = 0L; + return this; + } + + // repeated .OsmAndRoutingIndex.RouteBorderPoint points = 5; + public java.util.List getPointsList() { + return java.util.Collections.unmodifiableList(result.points_); + } + public int getPointsCount() { + return result.getPointsCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint getPoints(int index) { + return result.getPoints(index); + } + public Builder setPoints(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint value) { + if (value == null) { + throw new NullPointerException(); + } + result.points_.set(index, value); + return this; + } + public Builder setPoints(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder builderForValue) { + result.points_.set(index, builderForValue.build()); + return this; + } + public Builder addPoints(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.points_.isEmpty()) { + result.points_ = new java.util.ArrayList(); + } + result.points_.add(value); + return this; + } + public Builder addPoints(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder builderForValue) { + if (result.points_.isEmpty()) { + result.points_ = new java.util.ArrayList(); + } + result.points_.add(builderForValue.build()); + return this; + } + public Builder addAllPoints( + java.lang.Iterable values) { + if (result.points_.isEmpty()) { + result.points_ = new java.util.ArrayList(); + } + super.addAll(values, result.points_); + return this; + } + public Builder clearPoints() { + result.points_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderPointsBlock) + } + + static { + defaultInstance = new RouteBorderPointsBlock(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderPointsBlock) + } + + public static final class RouteBorderPoint extends + com.google.protobuf.GeneratedMessage { + // Use RouteBorderPoint.newBuilder() to construct. + private RouteBorderPoint() { + initFields(); + } + private RouteBorderPoint(boolean noInit) {} + + private static final RouteBorderPoint defaultInstance; + public static RouteBorderPoint getDefaultInstance() { + return defaultInstance; + } + + @Override + public RouteBorderPoint getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor; + } + + @Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPoint_fieldAccessorTable; + } + + // optional int32 dx = 1; + public static final int DX_FIELD_NUMBER = 1; + private boolean hasDx; + private int dx_ = 0; + public boolean hasDx() { return hasDx; } + public int getDx() { return dx_; } + + // optional int32 dy = 2; + public static final int DY_FIELD_NUMBER = 2; + private boolean hasDy; + private int dy_ = 0; + public boolean hasDy() { return hasDy; } + public int getDy() { return dy_; } + + // optional int32 direction = 3; + public static final int DIRECTION_FIELD_NUMBER = 3; + private boolean hasDirection; + private int direction_ = 0; + public boolean hasDirection() { return hasDirection; } + public int getDirection() { return direction_; } + + // optional bytes types = 4; + public static final int TYPES_FIELD_NUMBER = 4; + private boolean hasTypes; + private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasTypes() { return hasTypes; } + public com.google.protobuf.ByteString getTypes() { return types_; } + + // optional sint64 roadId = 7; + public static final int ROADID_FIELD_NUMBER = 7; + private boolean hasRoadId; + private long roadId_ = 0L; + public boolean hasRoadId() { return hasRoadId; } + public long getRoadId() { return roadId_; } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasDx()) { + output.writeInt32(1, getDx()); + } + if (hasDy()) { + output.writeInt32(2, getDy()); + } + if (hasDirection()) { + output.writeInt32(3, getDirection()); + } + if (hasTypes()) { + output.writeBytes(4, getTypes()); + } + if (hasRoadId()) { + output.writeSInt64(7, getRoadId()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasDx()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getDx()); + } + if (hasDy()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, getDy()); + } + if (hasDirection()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, getDirection()); + } + if (hasTypes()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getTypes()); + } + if (hasRoadId()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt64Size(7, getRoadId()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.getDefaultInstance()) return this; + if (other.hasDx()) { + setDx(other.getDx()); + } + if (other.hasDy()) { + setDy(other.getDy()); + } + if (other.hasDirection()) { + setDirection(other.getDirection()); + } + if (other.hasTypes()) { + setTypes(other.getTypes()); + } + if (other.hasRoadId()) { + setRoadId(other.getRoadId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 8: { + setDx(input.readInt32()); + break; + } + case 16: { + setDy(input.readInt32()); + break; + } + case 24: { + setDirection(input.readInt32()); + break; + } + case 34: { + setTypes(input.readBytes()); + break; + } + case 56: { + setRoadId(input.readSInt64()); + break; + } + } + } + } + + + // optional int32 dx = 1; + public boolean hasDx() { + return result.hasDx(); + } + public int getDx() { + return result.getDx(); + } + public Builder setDx(int value) { + result.hasDx = true; + result.dx_ = value; + return this; + } + public Builder clearDx() { + result.hasDx = false; + result.dx_ = 0; + return this; + } + + // optional int32 dy = 2; + public boolean hasDy() { + return result.hasDy(); + } + public int getDy() { + return result.getDy(); + } + public Builder setDy(int value) { + result.hasDy = true; + result.dy_ = value; + return this; + } + public Builder clearDy() { + result.hasDy = false; + result.dy_ = 0; + return this; + } + + // optional int32 direction = 3; + public boolean hasDirection() { + return result.hasDirection(); + } + public int getDirection() { + return result.getDirection(); + } + public Builder setDirection(int value) { + result.hasDirection = true; + result.direction_ = value; + return this; + } + public Builder clearDirection() { + result.hasDirection = false; + result.direction_ = 0; + return this; + } + + // optional bytes types = 4; + public boolean hasTypes() { + return result.hasTypes(); + } + public com.google.protobuf.ByteString getTypes() { + return result.getTypes(); + } + public Builder setTypes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasTypes = true; + result.types_ = value; + return this; + } + public Builder clearTypes() { + result.hasTypes = false; + result.types_ = getDefaultInstance().getTypes(); + return this; + } + + // optional sint64 roadId = 7; + public boolean hasRoadId() { + return result.hasRoadId(); + } + public long getRoadId() { + return result.getRoadId(); + } + public Builder setRoadId(long value) { + result.hasRoadId = true; + result.roadId_ = value; + return this; + } + public Builder clearRoadId() { + result.hasRoadId = false; + result.roadId_ = 0L; + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderPoint) + } + + static { + defaultInstance = new RouteBorderPoint(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderPoint) + } + + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated .OsmAndRoutingIndex.RouteEncodingRule rules = 2; + public static final int RULES_FIELD_NUMBER = 2; + private java.util.List rules_ = + java.util.Collections.emptyList(); + public java.util.List getRulesList() { + return rules_; + } + public int getRulesCount() { return rules_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule getRules(int index) { + return rules_.get(index); + } + + // repeated .OsmAndRoutingIndex.RouteDataBox rootBoxes = 3; + public static final int ROOTBOXES_FIELD_NUMBER = 3; + private java.util.List rootBoxes_ = + java.util.Collections.emptyList(); + public java.util.List getRootBoxesList() { + return rootBoxes_; + } + public int getRootBoxesCount() { return rootBoxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getRootBoxes(int index) { + return rootBoxes_.get(index); + } + + // repeated .OsmAndRoutingIndex.RouteDataBox basemapBoxes = 4; + public static final int BASEMAPBOXES_FIELD_NUMBER = 4; + private java.util.List basemapBoxes_ = + java.util.Collections.emptyList(); + public java.util.List getBasemapBoxesList() { + return basemapBoxes_; + } + public int getBasemapBoxesCount() { return basemapBoxes_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBasemapBoxes(int index) { + return basemapBoxes_.get(index); + } + + // optional .OsmAndRoutingIndex.RouteBorderBox borderBox = 7; + public static final int BORDERBOX_FIELD_NUMBER = 7; + private boolean hasBorderBox; + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox borderBox_; + public boolean hasBorderBox() { return hasBorderBox; } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBorderBox() { return borderBox_; } + + // optional .OsmAndRoutingIndex.RouteBorderBox baseBorderBox = 8; + public static final int BASEBORDERBOX_FIELD_NUMBER = 8; + private boolean hasBaseBorderBox; + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox baseBorderBox_; + public boolean hasBaseBorderBox() { return hasBaseBorderBox; } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBaseBorderBox() { return baseBorderBox_; } + + // repeated .OsmAndRoutingIndex.RouteDataBlock blocks = 5; + public static final int BLOCKS_FIELD_NUMBER = 5; + private java.util.List blocks_ = + java.util.Collections.emptyList(); + public java.util.List getBlocksList() { + return blocks_; + } + public int getBlocksCount() { return blocks_.size(); } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock getBlocks(int index) { + return blocks_.get(index); + } + + private void initFields() { + borderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance(); + baseBorderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule element : getRulesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getRootBoxesList()) { + if (!element.isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBasemapBoxesList()) { + if (!element.isInitialized()) return false; + } + if (hasBorderBox()) { + if (!getBorderBox().isInitialized()) return false; + } + if (hasBaseBorderBox()) { + if (!getBaseBorderBox().isInitialized()) return false; + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock element : getBlocksList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule element : getRulesList()) { + output.writeMessage(2, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getRootBoxesList()) { + output.writeMessage(3, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBasemapBoxesList()) { + output.writeMessage(4, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock element : getBlocksList()) { + output.writeMessage(5, element); + } + if (hasBorderBox()) { + output.writeMessage(7, getBorderBox()); + } + if (hasBaseBorderBox()) { + output.writeMessage(8, getBaseBorderBox()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule element : getRulesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getRootBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBasemapBoxesList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, element); + } + for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock element : getBlocksList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, element); + } + if (hasBorderBox()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, getBorderBox()); + } + if (hasBaseBorderBox()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, getBaseBorderBox()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder { + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex result; + + // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex(); + return builder; + } + + @Override + protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.getDescriptor(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex getDefaultInstanceForType() { + return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.rules_ != java.util.Collections.EMPTY_LIST) { + result.rules_ = + java.util.Collections.unmodifiableList(result.rules_); + } + if (result.rootBoxes_ != java.util.Collections.EMPTY_LIST) { + result.rootBoxes_ = + java.util.Collections.unmodifiableList(result.rootBoxes_); + } + if (result.basemapBoxes_ != java.util.Collections.EMPTY_LIST) { + result.basemapBoxes_ = + java.util.Collections.unmodifiableList(result.basemapBoxes_); + } + if (result.blocks_ != java.util.Collections.EMPTY_LIST) { + result.blocks_ = + java.util.Collections.unmodifiableList(result.blocks_); + } + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex) { + return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex other) { + if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (!other.rules_.isEmpty()) { + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + result.rules_.addAll(other.rules_); + } + if (!other.rootBoxes_.isEmpty()) { + if (result.rootBoxes_.isEmpty()) { + result.rootBoxes_ = new java.util.ArrayList(); + } + result.rootBoxes_.addAll(other.rootBoxes_); + } + if (!other.basemapBoxes_.isEmpty()) { + if (result.basemapBoxes_.isEmpty()) { + result.basemapBoxes_ = new java.util.ArrayList(); + } + result.basemapBoxes_.addAll(other.basemapBoxes_); + } + if (other.hasBorderBox()) { + mergeBorderBox(other.getBorderBox()); + } + if (other.hasBaseBorderBox()) { + mergeBaseBorderBox(other.getBaseBorderBox()); + } + if (!other.blocks_.isEmpty()) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.addAll(other.blocks_); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRules(subBuilder.buildPartial()); + break; + } + case 26: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRootBoxes(subBuilder.buildPartial()); + break; + } + case 34: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBasemapBoxes(subBuilder.buildPartial()); + break; + } + case 42: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addBlocks(subBuilder.buildPartial()); + break; + } + case 58: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder(); + if (hasBorderBox()) { + subBuilder.mergeFrom(getBorderBox()); + } + input.readMessage(subBuilder, extensionRegistry); + setBorderBox(subBuilder.buildPartial()); + break; + } + case 66: { + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder(); + if (hasBaseBorderBox()) { + subBuilder.mergeFrom(getBaseBorderBox()); + } + input.readMessage(subBuilder, extensionRegistry); + setBaseBorderBox(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated .OsmAndRoutingIndex.RouteEncodingRule rules = 2; + public java.util.List getRulesList() { + return java.util.Collections.unmodifiableList(result.rules_); + } + public int getRulesCount() { + return result.getRulesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule getRules(int index) { + return result.getRules(index); + } + public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule value) { + if (value == null) { + throw new NullPointerException(); + } + result.rules_.set(index, value); + return this; + } + public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder builderForValue) { + result.rules_.set(index, builderForValue.build()); + return this; + } + public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + result.rules_.add(value); + return this; + } + public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder builderForValue) { + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + result.rules_.add(builderForValue.build()); + return this; + } + public Builder addAllRules( + java.lang.Iterable values) { + if (result.rules_.isEmpty()) { + result.rules_ = new java.util.ArrayList(); + } + super.addAll(values, result.rules_); + return this; + } + public Builder clearRules() { + result.rules_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndRoutingIndex.RouteDataBox rootBoxes = 3; + public java.util.List getRootBoxesList() { + return java.util.Collections.unmodifiableList(result.rootBoxes_); + } + public int getRootBoxesCount() { + return result.getRootBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getRootBoxes(int index) { + return result.getRootBoxes(index); + } + public Builder setRootBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.rootBoxes_.set(index, value); + return this; + } + public Builder setRootBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) { + result.rootBoxes_.set(index, builderForValue.build()); + return this; + } + public Builder addRootBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.rootBoxes_.isEmpty()) { + result.rootBoxes_ = new java.util.ArrayList(); + } + result.rootBoxes_.add(value); + return this; + } + public Builder addRootBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) { + if (result.rootBoxes_.isEmpty()) { + result.rootBoxes_ = new java.util.ArrayList(); + } + result.rootBoxes_.add(builderForValue.build()); + return this; + } + public Builder addAllRootBoxes( + java.lang.Iterable values) { + if (result.rootBoxes_.isEmpty()) { + result.rootBoxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.rootBoxes_); + return this; + } + public Builder clearRootBoxes() { + result.rootBoxes_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndRoutingIndex.RouteDataBox basemapBoxes = 4; + public java.util.List getBasemapBoxesList() { + return java.util.Collections.unmodifiableList(result.basemapBoxes_); + } + public int getBasemapBoxesCount() { + return result.getBasemapBoxesCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBasemapBoxes(int index) { + return result.getBasemapBoxes(index); + } + public Builder setBasemapBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.basemapBoxes_.set(index, value); + return this; + } + public Builder setBasemapBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) { + result.basemapBoxes_.set(index, builderForValue.build()); + return this; + } + public Builder addBasemapBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.basemapBoxes_.isEmpty()) { + result.basemapBoxes_ = new java.util.ArrayList(); + } + result.basemapBoxes_.add(value); + return this; + } + public Builder addBasemapBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) { + if (result.basemapBoxes_.isEmpty()) { + result.basemapBoxes_ = new java.util.ArrayList(); + } + result.basemapBoxes_.add(builderForValue.build()); + return this; + } + public Builder addAllBasemapBoxes( + java.lang.Iterable values) { + if (result.basemapBoxes_.isEmpty()) { + result.basemapBoxes_ = new java.util.ArrayList(); + } + super.addAll(values, result.basemapBoxes_); + return this; + } + public Builder clearBasemapBoxes() { + result.basemapBoxes_ = java.util.Collections.emptyList(); + return this; + } + + // optional .OsmAndRoutingIndex.RouteBorderBox borderBox = 7; + public boolean hasBorderBox() { + return result.hasBorderBox(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBorderBox() { + return result.getBorderBox(); + } + public Builder setBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasBorderBox = true; + result.borderBox_ = value; + return this; + } + public Builder setBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder builderForValue) { + result.hasBorderBox = true; + result.borderBox_ = builderForValue.build(); + return this; + } + public Builder mergeBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) { + if (result.hasBorderBox() && + result.borderBox_ != net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance()) { + result.borderBox_ = + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder(result.borderBox_).mergeFrom(value).buildPartial(); + } else { + result.borderBox_ = value; + } + result.hasBorderBox = true; + return this; + } + public Builder clearBorderBox() { + result.hasBorderBox = false; + result.borderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance(); + return this; + } + + // optional .OsmAndRoutingIndex.RouteBorderBox baseBorderBox = 8; + public boolean hasBaseBorderBox() { + return result.hasBaseBorderBox(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBaseBorderBox() { + return result.getBaseBorderBox(); + } + public Builder setBaseBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasBaseBorderBox = true; + result.baseBorderBox_ = value; + return this; + } + public Builder setBaseBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder builderForValue) { + result.hasBaseBorderBox = true; + result.baseBorderBox_ = builderForValue.build(); + return this; + } + public Builder mergeBaseBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) { + if (result.hasBaseBorderBox() && + result.baseBorderBox_ != net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance()) { + result.baseBorderBox_ = + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder(result.baseBorderBox_).mergeFrom(value).buildPartial(); + } else { + result.baseBorderBox_ = value; + } + result.hasBaseBorderBox = true; + return this; + } + public Builder clearBaseBorderBox() { + result.hasBaseBorderBox = false; + result.baseBorderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance(); + return this; + } + + // repeated .OsmAndRoutingIndex.RouteDataBlock blocks = 5; + public java.util.List getBlocksList() { + return java.util.Collections.unmodifiableList(result.blocks_); + } + public int getBlocksCount() { + return result.getBlocksCount(); + } + public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock getBlocks(int index) { + return result.getBlocks(index); + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock value) { + if (value == null) { + throw new NullPointerException(); + } + result.blocks_.set(index, value); + return this; + } + public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder builderForValue) { + result.blocks_.set(index, builderForValue.build()); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(value); + return this; + } + public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder builderForValue) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + result.blocks_.add(builderForValue.build()); + return this; + } + public Builder addAllBlocks( + java.lang.Iterable values) { + if (result.blocks_.isEmpty()) { + result.blocks_ = new java.util.ArrayList(); + } + super.addAll(values, result.blocks_); + return this; + } + public Builder clearBlocks() { + result.blocks_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex) + } + + static { + defaultInstance = new OsmAndRoutingIndex(true); + net.osmand.binary.OsmandOdb.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndStructure_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndStructure_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndTileBox_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndTileBox_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_StringTable_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_StringTable_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_IndexedStringTable_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_IndexedStringTable_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndMapIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndMapIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndMapIndex_MapEncodingRule_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndMapIndex_MapEncodingRule_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndMapIndex_MapRootLevel_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndMapIndex_MapRootLevel_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndMapIndex_MapDataBox_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndMapIndex_MapDataBox_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_MapDataBlock_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_MapDataBlock_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_MapData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_MapData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndAddressIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndAddressIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndAddressIndex_CitiesIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndAddressIndex_CitiesIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndAddressNameIndexData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndAddressNameIndexData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_AddressNameIndexDataAtom_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_AddressNameIndexDataAtom_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_CityIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_CityIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_CityBlockIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_CityBlockIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_StreetIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_StreetIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_StreetIntersection_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_StreetIntersection_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_BuildingIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_BuildingIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_TransportRoutes_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_TransportRoutes_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_TransportRoute_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_TransportRoute_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_TransportRouteStop_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_TransportRouteStop_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_TransportStop_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_TransportStop_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_TransportStopsTree_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_TransportStopsTree_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndTransportIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndTransportIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiNameIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiNameIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiNameIndexDataAtom_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndCategoryTable_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndCategoryTable_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiBox_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiBox_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiCategories_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiCategories_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiBoxData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiBoxData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndPoiBoxDataAtom_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_IdTable_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_IdTable_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_RestrictionData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_RestrictionData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_RouteData_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_RouteData_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteEncodingRule_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteDataBox_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteDataBlock_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteBorderBox_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteBorderLine_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_OsmAndRoutingIndex_RouteBorderPoint_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n&DataExtractionOSM/src/osmand_odb.proto" + + "\"\232\002\n\017OsmAndStructure\022\017\n\007version\030\001 \002(\r\022\023\n" + + "\013dateCreated\030\022 \002(\003\022)\n\014addressIndex\030\007 \003(\013" + + "2\023.OsmAndAddressIndex\022-\n\016transportIndex\030" + + "\004 \003(\0132\025.OsmAndTransportIndex\022!\n\010poiIndex" + + "\030\010 \003(\0132\017.OsmAndPoiIndex\022!\n\010mapIndex\030\006 \003(" + + "\0132\017.OsmAndMapIndex\022)\n\014routingIndex\030\t \003(\013" + + "2\023.OsmAndRoutingIndex\022\026\n\016versionConfirm\030" + + " \002(\r\"I\n\rOsmAndTileBox\022\014\n\004left\030\001 \002(\r\022\r\n\005" + + "right\030\002 \002(\r\022\013\n\003top\030\003 \002(\r\022\016\n\006bottom\030\004 \002(\r", + "\"\030\n\013StringTable\022\t\n\001s\030\001 \003(\t\"f\n\022IndexedStr" + + "ingTable\022\016\n\006prefix\030\001 \001(\t\022\013\n\003key\030\003 \003(\t\022\013\n" + + "\003val\030\004 \003(\007\022&\n\tsubtables\030\005 \003(\0132\023.IndexedS" + + "tringTable\"\250\004\n\016OsmAndMapIndex\022\014\n\004name\030\002 " + + "\002(\t\022.\n\005rules\030\004 \003(\0132\037.OsmAndMapIndex.MapE" + + "ncodingRule\022,\n\006levels\030\005 \003(\0132\034.OsmAndMapI" + + "ndex.MapRootLevel\032X\n\017MapEncodingRule\022\013\n\003" + + "tag\030\003 \002(\t\022\r\n\005value\030\005 \001(\t\022\n\n\002id\030\007 \001(\r\022\017\n\007" + + "minZoom\030\t \001(\r\022\014\n\004type\030\n \001(\r\032\264\001\n\014MapRootL" + + "evel\022\017\n\007maxZoom\030\001 \002(\005\022\017\n\007minZoom\030\002 \002(\005\022\014", + "\n\004left\030\003 \002(\005\022\r\n\005right\030\004 \002(\005\022\013\n\003top\030\005 \002(\005" + + "\022\016\n\006bottom\030\006 \002(\005\022)\n\005boxes\030\007 \003(\0132\032.OsmAnd" + + "MapIndex.MapDataBox\022\035\n\006blocks\030\017 \003(\0132\r.Ma" + + "pDataBlock\032\230\001\n\nMapDataBox\022\014\n\004left\030\001 \002(\021\022" + + "\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bottom\030\004 " + + "\002(\021\022\026\n\016shiftToMapData\030\005 \001(\007\022\r\n\005ocean\030\006 \001" + + "(\010\022)\n\005boxes\030\007 \003(\0132\032.OsmAndMapIndex.MapDa" + + "taBox\"`\n\014MapDataBlock\022\016\n\006baseId\030\n \001(\004\022\035\n" + + "\013dataObjects\030\014 \003(\0132\010.MapData\022!\n\013stringTa" + + "ble\030\017 \001(\0132\014.StringTable\"\266\001\n\007MapData\022\023\n\013c", + "oordinates\030\001 \001(\014\022\027\n\017areaCoordinates\030\002 \001(" + + "\014\022\037\n\027polygonInnerCoordinates\030\004 \003(\014\022\027\n\017ad" + + "ditionalTypes\030\006 \001(\014\022\r\n\005types\030\007 \002(\014\022\023\n\013st" + + "ringNames\030\n \001(\014\022\n\n\002id\030\014 \002(\022\022\023\n\013rasterByt" + + "es\030\017 \001(\014\"\222\002\n\022OsmAndAddressIndex\022\014\n\004name\030" + + "\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\"\n\nboundaries\030\003 \001" + + "(\0132\016.OsmAndTileBox\022/\n\006cities\030\006 \003(\0132\037.Osm" + + "AndAddressIndex.CitiesIndex\022.\n\tnameIndex" + + "\030\007 \001(\0132\033.OsmAndAddressNameIndexData\032X\n\013C" + + "itiesIndex\022\014\n\004type\030\002 \002(\r\022\032\n\006cities\030\005 \003(\013", + "2\n.CityIndex\022\037\n\006blocks\030\007 \003(\0132\017.CityBlock" + + "Index\"\301\001\n\032OsmAndAddressNameIndexData\022\"\n\005" + + "table\030\004 \002(\0132\023.IndexedStringTable\022>\n\004atom" + + "\030\007 \003(\01320.OsmAndAddressNameIndexData.Addr" + + "essNameIndexData\032?\n\024AddressNameIndexData" + + "\022\'\n\004atom\030\004 \003(\0132\031.AddressNameIndexDataAto" + + "m\"v\n\030AddressNameIndexDataAtom\022\014\n\004name\030\001 " + + "\001(\t\022\016\n\006nameEn\030\002 \001(\t\022\014\n\004type\030\003 \002(\r\022\024\n\014shi" + + "ftToIndex\030\005 \003(\005\022\030\n\020shiftToCityIndex\030\006 \003(" + + "\005\"~\n\tCityIndex\022\021\n\tcity_type\030\001 \001(\r\022\014\n\004nam", + "e\030\002 \002(\t\022\017\n\007name_en\030\003 \001(\t\022\n\n\002id\030\004 \001(\004\022\t\n\001" + + "x\030\005 \002(\r\022\t\n\001y\030\006 \002(\r\022\035\n\025shiftToCityBlockIn" + + "dex\030\n \001(\007\"l\n\016CityBlockIndex\022\030\n\020shiftToCi" + + "tyIndex\030\004 \001(\007\022!\n\tbuildings\030\n \003(\0132\016.Build" + + "ingIndex\022\035\n\007streets\030\014 \003(\0132\014.StreetIndex\"" + + "\235\001\n\013StreetIndex\022\014\n\004name\030\001 \002(\t\022\017\n\007name_en" + + "\030\002 \001(\t\022\t\n\001x\030\003 \002(\021\022\t\n\001y\030\004 \002(\021\022\n\n\002id\030\006 \001(\004" + + "\022!\n\tbuildings\030\014 \003(\0132\016.BuildingIndex\022*\n\ri" + + "ntersections\030\005 \003(\0132\023.StreetIntersection\"" + + "_\n\022StreetIntersection\022\014\n\004name\030\002 \002(\t\022\017\n\007n", + "ame_en\030\003 \001(\t\022\024\n\014intersectedX\030\004 \002(\021\022\024\n\014in" + + "tersectedY\030\005 \002(\021\"\262\001\n\rBuildingIndex\022\014\n\004na" + + "me\030\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\r\n\005name2\030\003 \001(\t" + + "\022\020\n\010name_en2\030\004 \001(\t\022\025\n\rinterpolation\030\005 \001(" + + "\021\022\t\n\001x\030\007 \002(\021\022\t\n\001y\030\010 \002(\021\022\n\n\002x2\030\t \001(\021\022\n\n\002y" + + "2\030\n \001(\021\022\n\n\002id\030\r \001(\004\022\020\n\010postcode\030\016 \001(\t\"2\n" + + "\017TransportRoutes\022\037\n\006routes\030\006 \003(\0132\017.Trans" + + "portRoute\"\317\001\n\016TransportRoute\022\n\n\002id\030\001 \002(\004" + + "\022\014\n\004type\030\003 \001(\r\022\020\n\010operator\030\004 \001(\r\022\013\n\003ref\030" + + "\005 \001(\t\022\014\n\004name\030\006 \001(\r\022\017\n\007name_en\030\007 \001(\r\022\020\n\010", + "distance\030\010 \001(\r\022(\n\013directStops\030\017 \003(\0132\023.Tr" + + "ansportRouteStop\022)\n\014reverseStops\030\020 \003(\0132\023" + + ".TransportRouteStop\"W\n\022TransportRouteSto" + + "p\022\n\n\002id\030\001 \002(\022\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\014\n" + + "\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\"b\n\rTranspor" + + "tStop\022\n\n\002dx\030\001 \002(\021\022\n\n\002dy\030\002 \002(\021\022\n\n\002id\030\005 \002(" + + "\022\022\014\n\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\022\016\n\006rout" + + "es\030\020 \003(\r\"\244\001\n\022TransportStopsTree\022\014\n\004left\030" + + "\001 \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bot" + + "tom\030\004 \002(\021\022%\n\010subtrees\030\007 \003(\0132\023.TransportS", + "topsTree\022\035\n\005leafs\030\010 \003(\0132\016.TransportStop\022" + + "\016\n\006baseId\030\020 \001(\004\"\215\001\n\024OsmAndTransportIndex" + + "\022\014\n\004name\030\001 \001(\t\022 \n\006routes\030\003 \001(\0132\020.Transpo" + + "rtRoutes\022\"\n\005stops\030\006 \001(\0132\023.TransportStops" + + "Tree\022!\n\013stringTable\030\t \002(\0132\014.StringTable\"" + + "\333\001\n\016OsmAndPoiIndex\022\014\n\004name\030\001 \002(\t\022\"\n\nboun" + + "daries\030\002 \002(\0132\016.OsmAndTileBox\022-\n\017categori" + + "esTable\030\003 \003(\0132\024.OsmAndCategoryTable\022&\n\tn" + + "ameIndex\030\004 \001(\0132\023.OsmAndPoiNameIndex\022\034\n\005b" + + "oxes\030\006 \003(\0132\r.OsmAndPoiBox\022\"\n\007poiData\030\t \003", + "(\0132\021.OsmAndPoiBoxData\"\270\001\n\022OsmAndPoiNameI" + + "ndex\022\"\n\005table\030\003 \002(\0132\023.IndexedStringTable" + + "\0228\n\004data\030\005 \003(\0132*.OsmAndPoiNameIndex.OsmA" + + "ndPoiNameIndexData\032D\n\026OsmAndPoiNameIndex" + + "Data\022*\n\005atoms\030\003 \003(\0132\033.OsmAndPoiNameIndex" + + "DataAtom\"Q\n\032OsmAndPoiNameIndexDataAtom\022\014" + + "\n\004zoom\030\002 \001(\r\022\t\n\001x\030\003 \001(\r\022\t\n\001y\030\004 \001(\r\022\017\n\007sh" + + "iftTo\030\016 \001(\007\">\n\023OsmAndCategoryTable\022\020\n\010ca" + + "tegory\030\001 \002(\t\022\025\n\rsubcategories\030\003 \003(\t\"\227\001\n\014" + + "OsmAndPoiBox\022\014\n\004zoom\030\001 \002(\r\022\014\n\004left\030\002 \002(\021", + "\022\013\n\003top\030\003 \002(\021\022(\n\ncategories\030\004 \001(\0132\024.OsmA" + + "ndPoiCategories\022\037\n\010subBoxes\030\n \003(\0132\r.OsmA" + + "ndPoiBox\022\023\n\013shiftToData\030\016 \001(\007\")\n\023OsmAndP" + + "oiCategories\022\022\n\ncategories\030\003 \003(\r\"^\n\020OsmA" + + "ndPoiBoxData\022\014\n\004zoom\030\001 \001(\r\022\t\n\001x\030\002 \001(\r\022\t\n" + + "\001y\030\003 \001(\r\022&\n\007poiData\030\005 \003(\0132\025.OsmAndPoiBox" + + "DataAtom\"\255\001\n\024OsmAndPoiBoxDataAtom\022\n\n\002dx\030" + + "\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\022\n\ncategories\030\004 \003(\r\022\014\n" + + "\004name\030\006 \001(\t\022\016\n\006nameEn\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022" + + "\024\n\014openingHours\030\n \001(\t\022\014\n\004site\030\013 \001(\t\022\r\n\005p", + "hone\030\014 \001(\t\022\014\n\004note\030\r \001(\t\"\032\n\007IdTable\022\017\n\007r" + + "outeId\030\001 \003(\022\"F\n\017RestrictionData\022\014\n\004type\030" + + "\001 \002(\005\022\014\n\004from\030\002 \002(\005\022\n\n\002to\030\003 \002(\005\022\013\n\003via\030\004" + + " \001(\005\"d\n\tRouteData\022\016\n\006points\030\001 \002(\014\022\022\n\npoi" + + "ntTypes\030\004 \001(\014\022\r\n\005types\030\007 \002(\014\022\017\n\007routeId\030" + + "\014 \002(\005\022\023\n\013stringNames\030\016 \001(\014\"\314\t\n\022OsmAndRou" + + "tingIndex\022\014\n\004name\030\001 \002(\t\0224\n\005rules\030\002 \003(\0132%" + + ".OsmAndRoutingIndex.RouteEncodingRule\0223\n" + + "\trootBoxes\030\003 \003(\0132 .OsmAndRoutingIndex.Ro" + + "uteDataBox\0226\n\014basemapBoxes\030\004 \003(\0132 .OsmAn", + "dRoutingIndex.RouteDataBox\0225\n\tborderBox\030" + + "\007 \001(\0132\".OsmAndRoutingIndex.RouteBorderBo" + + "x\0229\n\rbaseBorderBox\030\010 \001(\0132\".OsmAndRouting" + + "Index.RouteBorderBox\0222\n\006blocks\030\005 \003(\0132\".O" + + "smAndRoutingIndex.RouteDataBlock\032;\n\021Rout" + + "eEncodingRule\022\013\n\003tag\030\003 \002(\t\022\r\n\005value\030\005 \002(" + + "\t\022\n\n\002id\030\007 \001(\r\032\216\001\n\014RouteDataBox\022\014\n\004left\030\001" + + " \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bott" + + "om\030\004 \002(\021\022\023\n\013shiftToData\030\005 \001(\007\022/\n\005boxes\030\007" + + " \003(\0132 .OsmAndRoutingIndex.RouteDataBox\032\227", + "\001\n\016RouteDataBlock\022\031\n\007idTable\030\005 \001(\0132\010.IdT" + + "able\022!\n\013stringTable\030\010 \001(\0132\014.StringTable\022" + + "\037\n\013dataObjects\030\006 \003(\0132\n.RouteData\022&\n\014rest" + + "rictions\030\007 \003(\0132\020.RestrictionData\032\303\001\n\016Rou" + + "teBorderBox\022\"\n\nboundaries\030\001 \002(\0132\016.OsmAnd" + + "TileBox\022\027\n\017tileZoomToSplit\030\002 \001(\r\0228\n\013bord" + + "erLines\030\006 \003(\0132#.OsmAndRoutingIndex.Route" + + "BorderLine\022:\n\006blocks\030\007 \003(\0132*.OsmAndRouti" + + "ngIndex.RouteBorderPointsBlock\032]\n\017RouteB" + + "orderLine\022\t\n\001x\030\001 \002(\005\022\t\n\001y\030\002 \002(\005\022\013\n\003tox\030\003", + " \001(\005\022\013\n\003toy\030\004 \001(\005\022\032\n\022shiftToPointsBlock\030" + + "\007 \002(\007\032t\n\026RouteBorderPointsBlock\022\t\n\001x\030\001 \002" + + "(\005\022\t\n\001y\030\002 \002(\005\022\016\n\006baseId\030\003 \002(\003\0224\n\006points\030" + + "\005 \003(\0132$.OsmAndRoutingIndex.RouteBorderPo" + + "int\032\\\n\020RouteBorderPoint\022\n\n\002dx\030\001 \001(\005\022\n\n\002d" + + "y\030\002 \001(\005\022\021\n\tdirection\030\003 \001(\005\022\r\n\005types\030\004 \001(" + + "\014\022\016\n\006roadId\030\007 \001(\022B\023\n\021net.osmand.binary" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + @Override + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_OsmAndStructure_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_OsmAndStructure_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndStructure_descriptor, + new java.lang.String[] { "Version", "DateCreated", "AddressIndex", "TransportIndex", "PoiIndex", "MapIndex", "RoutingIndex", "VersionConfirm", }, + net.osmand.binary.OsmandOdb.OsmAndStructure.class, + net.osmand.binary.OsmandOdb.OsmAndStructure.Builder.class); + internal_static_OsmAndTileBox_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_OsmAndTileBox_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndTileBox_descriptor, + new java.lang.String[] { "Left", "Right", "Top", "Bottom", }, + net.osmand.binary.OsmandOdb.OsmAndTileBox.class, + net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder.class); + internal_static_StringTable_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_StringTable_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_StringTable_descriptor, + new java.lang.String[] { "S", }, + net.osmand.binary.OsmandOdb.StringTable.class, + net.osmand.binary.OsmandOdb.StringTable.Builder.class); + internal_static_IndexedStringTable_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_IndexedStringTable_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_IndexedStringTable_descriptor, + new java.lang.String[] { "Prefix", "Key", "Val", "Subtables", }, + net.osmand.binary.OsmandOdb.IndexedStringTable.class, + net.osmand.binary.OsmandOdb.IndexedStringTable.Builder.class); + internal_static_OsmAndMapIndex_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_OsmAndMapIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndMapIndex_descriptor, + new java.lang.String[] { "Name", "Rules", "Levels", }, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.class, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder.class); + internal_static_OsmAndMapIndex_MapEncodingRule_descriptor = + internal_static_OsmAndMapIndex_descriptor.getNestedTypes().get(0); + internal_static_OsmAndMapIndex_MapEncodingRule_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndMapIndex_MapEncodingRule_descriptor, + new java.lang.String[] { "Tag", "Value", "Id", "MinZoom", "Type", }, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.class, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder.class); + internal_static_OsmAndMapIndex_MapRootLevel_descriptor = + internal_static_OsmAndMapIndex_descriptor.getNestedTypes().get(1); + internal_static_OsmAndMapIndex_MapRootLevel_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndMapIndex_MapRootLevel_descriptor, + new java.lang.String[] { "MaxZoom", "MinZoom", "Left", "Right", "Top", "Bottom", "Boxes", "Blocks", }, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.class, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder.class); + internal_static_OsmAndMapIndex_MapDataBox_descriptor = + internal_static_OsmAndMapIndex_descriptor.getNestedTypes().get(2); + internal_static_OsmAndMapIndex_MapDataBox_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndMapIndex_MapDataBox_descriptor, + new java.lang.String[] { "Left", "Right", "Top", "Bottom", "ShiftToMapData", "Ocean", "Boxes", }, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.class, + net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder.class); + internal_static_MapDataBlock_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_MapDataBlock_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_MapDataBlock_descriptor, + new java.lang.String[] { "BaseId", "DataObjects", "StringTable", }, + net.osmand.binary.OsmandOdb.MapDataBlock.class, + net.osmand.binary.OsmandOdb.MapDataBlock.Builder.class); + internal_static_MapData_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_MapData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_MapData_descriptor, + new java.lang.String[] { "Coordinates", "AreaCoordinates", "PolygonInnerCoordinates", "AdditionalTypes", "Types", "StringNames", "Id", "RasterBytes", }, + net.osmand.binary.OsmandOdb.MapData.class, + net.osmand.binary.OsmandOdb.MapData.Builder.class); + internal_static_OsmAndAddressIndex_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_OsmAndAddressIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndAddressIndex_descriptor, + new java.lang.String[] { "Name", "NameEn", "Boundaries", "Cities", "NameIndex", }, + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.class, + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder.class); + internal_static_OsmAndAddressIndex_CitiesIndex_descriptor = + internal_static_OsmAndAddressIndex_descriptor.getNestedTypes().get(0); + internal_static_OsmAndAddressIndex_CitiesIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndAddressIndex_CitiesIndex_descriptor, + new java.lang.String[] { "Type", "Cities", "Blocks", }, + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.class, + net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder.class); + internal_static_OsmAndAddressNameIndexData_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_OsmAndAddressNameIndexData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndAddressNameIndexData_descriptor, + new java.lang.String[] { "Table", "Atom", }, + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.class, + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.Builder.class); + internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor = + internal_static_OsmAndAddressNameIndexData_descriptor.getNestedTypes().get(0); + internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor, + new java.lang.String[] { "Atom", }, + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.class, + net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder.class); + internal_static_AddressNameIndexDataAtom_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_AddressNameIndexDataAtom_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_AddressNameIndexDataAtom_descriptor, + new java.lang.String[] { "Name", "NameEn", "Type", "ShiftToIndex", "ShiftToCityIndex", }, + net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.class, + net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder.class); + internal_static_CityIndex_descriptor = + getDescriptor().getMessageTypes().get(10); + internal_static_CityIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_CityIndex_descriptor, + new java.lang.String[] { "CityType", "Name", "NameEn", "Id", "X", "Y", "ShiftToCityBlockIndex", }, + net.osmand.binary.OsmandOdb.CityIndex.class, + net.osmand.binary.OsmandOdb.CityIndex.Builder.class); + internal_static_CityBlockIndex_descriptor = + getDescriptor().getMessageTypes().get(11); + internal_static_CityBlockIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_CityBlockIndex_descriptor, + new java.lang.String[] { "ShiftToCityIndex", "Buildings", "Streets", }, + net.osmand.binary.OsmandOdb.CityBlockIndex.class, + net.osmand.binary.OsmandOdb.CityBlockIndex.Builder.class); + internal_static_StreetIndex_descriptor = + getDescriptor().getMessageTypes().get(12); + internal_static_StreetIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_StreetIndex_descriptor, + new java.lang.String[] { "Name", "NameEn", "X", "Y", "Id", "Buildings", "Intersections", }, + net.osmand.binary.OsmandOdb.StreetIndex.class, + net.osmand.binary.OsmandOdb.StreetIndex.Builder.class); + internal_static_StreetIntersection_descriptor = + getDescriptor().getMessageTypes().get(13); + internal_static_StreetIntersection_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_StreetIntersection_descriptor, + new java.lang.String[] { "Name", "NameEn", "IntersectedX", "IntersectedY", }, + net.osmand.binary.OsmandOdb.StreetIntersection.class, + net.osmand.binary.OsmandOdb.StreetIntersection.Builder.class); + internal_static_BuildingIndex_descriptor = + getDescriptor().getMessageTypes().get(14); + internal_static_BuildingIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_BuildingIndex_descriptor, + new java.lang.String[] { "Name", "NameEn", "Name2", "NameEn2", "Interpolation", "X", "Y", "X2", "Y2", "Id", "Postcode", }, + net.osmand.binary.OsmandOdb.BuildingIndex.class, + net.osmand.binary.OsmandOdb.BuildingIndex.Builder.class); + internal_static_TransportRoutes_descriptor = + getDescriptor().getMessageTypes().get(15); + internal_static_TransportRoutes_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_TransportRoutes_descriptor, + new java.lang.String[] { "Routes", }, + net.osmand.binary.OsmandOdb.TransportRoutes.class, + net.osmand.binary.OsmandOdb.TransportRoutes.Builder.class); + internal_static_TransportRoute_descriptor = + getDescriptor().getMessageTypes().get(16); + internal_static_TransportRoute_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_TransportRoute_descriptor, + new java.lang.String[] { "Id", "Type", "Operator", "Ref", "Name", "NameEn", "Distance", "DirectStops", "ReverseStops", }, + net.osmand.binary.OsmandOdb.TransportRoute.class, + net.osmand.binary.OsmandOdb.TransportRoute.Builder.class); + internal_static_TransportRouteStop_descriptor = + getDescriptor().getMessageTypes().get(17); + internal_static_TransportRouteStop_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_TransportRouteStop_descriptor, + new java.lang.String[] { "Id", "Dx", "Dy", "Name", "NameEn", }, + net.osmand.binary.OsmandOdb.TransportRouteStop.class, + net.osmand.binary.OsmandOdb.TransportRouteStop.Builder.class); + internal_static_TransportStop_descriptor = + getDescriptor().getMessageTypes().get(18); + internal_static_TransportStop_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_TransportStop_descriptor, + new java.lang.String[] { "Dx", "Dy", "Id", "Name", "NameEn", "Routes", }, + net.osmand.binary.OsmandOdb.TransportStop.class, + net.osmand.binary.OsmandOdb.TransportStop.Builder.class); + internal_static_TransportStopsTree_descriptor = + getDescriptor().getMessageTypes().get(19); + internal_static_TransportStopsTree_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_TransportStopsTree_descriptor, + new java.lang.String[] { "Left", "Right", "Top", "Bottom", "Subtrees", "Leafs", "BaseId", }, + net.osmand.binary.OsmandOdb.TransportStopsTree.class, + net.osmand.binary.OsmandOdb.TransportStopsTree.Builder.class); + internal_static_OsmAndTransportIndex_descriptor = + getDescriptor().getMessageTypes().get(20); + internal_static_OsmAndTransportIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndTransportIndex_descriptor, + new java.lang.String[] { "Name", "Routes", "Stops", "StringTable", }, + net.osmand.binary.OsmandOdb.OsmAndTransportIndex.class, + net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder.class); + internal_static_OsmAndPoiIndex_descriptor = + getDescriptor().getMessageTypes().get(21); + internal_static_OsmAndPoiIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiIndex_descriptor, + new java.lang.String[] { "Name", "Boundaries", "CategoriesTable", "NameIndex", "Boxes", "PoiData", }, + net.osmand.binary.OsmandOdb.OsmAndPoiIndex.class, + net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder.class); + internal_static_OsmAndPoiNameIndex_descriptor = + getDescriptor().getMessageTypes().get(22); + internal_static_OsmAndPoiNameIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiNameIndex_descriptor, + new java.lang.String[] { "Table", "Data", }, + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.class, + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder.class); + internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor = + internal_static_OsmAndPoiNameIndex_descriptor.getNestedTypes().get(0); + internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor, + new java.lang.String[] { "Atoms", }, + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.class, + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder.class); + internal_static_OsmAndPoiNameIndexDataAtom_descriptor = + getDescriptor().getMessageTypes().get(23); + internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiNameIndexDataAtom_descriptor, + new java.lang.String[] { "Zoom", "X", "Y", "ShiftTo", }, + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.class, + net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder.class); + internal_static_OsmAndCategoryTable_descriptor = + getDescriptor().getMessageTypes().get(24); + internal_static_OsmAndCategoryTable_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndCategoryTable_descriptor, + new java.lang.String[] { "Category", "Subcategories", }, + net.osmand.binary.OsmandOdb.OsmAndCategoryTable.class, + net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder.class); + internal_static_OsmAndPoiBox_descriptor = + getDescriptor().getMessageTypes().get(25); + internal_static_OsmAndPoiBox_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiBox_descriptor, + new java.lang.String[] { "Zoom", "Left", "Top", "Categories", "SubBoxes", "ShiftToData", }, + net.osmand.binary.OsmandOdb.OsmAndPoiBox.class, + net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder.class); + internal_static_OsmAndPoiCategories_descriptor = + getDescriptor().getMessageTypes().get(26); + internal_static_OsmAndPoiCategories_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiCategories_descriptor, + new java.lang.String[] { "Categories", }, + net.osmand.binary.OsmandOdb.OsmAndPoiCategories.class, + net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder.class); + internal_static_OsmAndPoiBoxData_descriptor = + getDescriptor().getMessageTypes().get(27); + internal_static_OsmAndPoiBoxData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiBoxData_descriptor, + new java.lang.String[] { "Zoom", "X", "Y", "PoiData", }, + net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.class, + net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder.class); + internal_static_OsmAndPoiBoxDataAtom_descriptor = + getDescriptor().getMessageTypes().get(28); + internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndPoiBoxDataAtom_descriptor, + new java.lang.String[] { "Dx", "Dy", "Categories", "Name", "NameEn", "Id", "OpeningHours", "Site", "Phone", "Note", }, + net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.class, + net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder.class); + internal_static_IdTable_descriptor = + getDescriptor().getMessageTypes().get(29); + internal_static_IdTable_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_IdTable_descriptor, + new java.lang.String[] { "RouteId", }, + net.osmand.binary.OsmandOdb.IdTable.class, + net.osmand.binary.OsmandOdb.IdTable.Builder.class); + internal_static_RestrictionData_descriptor = + getDescriptor().getMessageTypes().get(30); + internal_static_RestrictionData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_RestrictionData_descriptor, + new java.lang.String[] { "Type", "From", "To", "Via", }, + net.osmand.binary.OsmandOdb.RestrictionData.class, + net.osmand.binary.OsmandOdb.RestrictionData.Builder.class); + internal_static_RouteData_descriptor = + getDescriptor().getMessageTypes().get(31); + internal_static_RouteData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_RouteData_descriptor, + new java.lang.String[] { "Points", "PointTypes", "Types", "RouteId", "StringNames", }, + net.osmand.binary.OsmandOdb.RouteData.class, + net.osmand.binary.OsmandOdb.RouteData.Builder.class); + internal_static_OsmAndRoutingIndex_descriptor = + getDescriptor().getMessageTypes().get(32); + internal_static_OsmAndRoutingIndex_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_descriptor, + new java.lang.String[] { "Name", "Rules", "RootBoxes", "BasemapBoxes", "BorderBox", "BaseBorderBox", "Blocks", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder.class); + internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(0); + internal_static_OsmAndRoutingIndex_RouteEncodingRule_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor, + new java.lang.String[] { "Tag", "Value", "Id", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder.class); + internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(1); + internal_static_OsmAndRoutingIndex_RouteDataBox_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor, + new java.lang.String[] { "Left", "Right", "Top", "Bottom", "ShiftToData", "Boxes", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder.class); + internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(2); + internal_static_OsmAndRoutingIndex_RouteDataBlock_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor, + new java.lang.String[] { "IdTable", "StringTable", "DataObjects", "Restrictions", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder.class); + internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(3); + internal_static_OsmAndRoutingIndex_RouteBorderBox_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor, + new java.lang.String[] { "Boundaries", "TileZoomToSplit", "BorderLines", "Blocks", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder.class); + internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(4); + internal_static_OsmAndRoutingIndex_RouteBorderLine_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor, + new java.lang.String[] { "X", "Y", "Tox", "Toy", "ShiftToPointsBlock", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder.class); + internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(5); + internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor, + new java.lang.String[] { "X", "Y", "BaseId", "Points", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder.class); + internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor = + internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(6); + internal_static_OsmAndRoutingIndex_RouteBorderPoint_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor, + new java.lang.String[] { "Dx", "Dy", "Direction", "Types", "RoadId", }, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.class, + net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + public static void internalForceInit() {} + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/OsmAnd-java/src/net/osmand/binary/RouteDataBorderLinePoint.java b/OsmAnd-java/src/net/osmand/binary/RouteDataBorderLinePoint.java new file mode 100644 index 0000000000..f04ca5259b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/RouteDataBorderLinePoint.java @@ -0,0 +1,75 @@ +package net.osmand.binary; + + +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; + +public class RouteDataBorderLinePoint extends RouteDataObject { + // all these arrays supposed to be immutable! + // These feilds accessible from C++ + public int x; + public int y; + public boolean direction; + + // used in context calculation + public float distanceToStartPoint; + public float distanceToEndPoint; + + public RouteDataBorderLinePoint(RouteRegion region) { + super(region); + } + + public float getMaximumSpeed(){ + int sz = types.length; + for (int i = 0; i < sz; i++) { + RouteTypeRule r = region.quickGetEncodingRule(types[i]); + float maxSpeed = r.maxSpeed(); + if (maxSpeed > 0) { + return maxSpeed; + } + } + return 0; + } + + public int getOneway() { + int sz = types.length; + for (int i = 0; i < sz; i++) { + RouteTypeRule r = region.quickGetEncodingRule(types[i]); + if (r.onewayDirection() != 0) { + return r.onewayDirection(); + } else if (r.roundabout()) { + return 1; + } + } + return 0; + } + + public String getRoute() { + int sz = types.length; + for (int i = 0; i < sz; i++) { + RouteTypeRule r = region.quickGetEncodingRule(types[i]); + if ("route".equals(r.getTag())) { + return r.getValue(); + } + } + return null; + } + + public String getHighway() { + String highway = null; + int sz = types.length; + for (int i = 0; i < sz; i++) { + RouteTypeRule r = region.quickGetEncodingRule(types[i]); + highway = r.highwayRoad(); + if (highway != null) { + break; + } + } + return highway; + } + + @Override + public String toString() { + return "Border line " + id; + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/binary/RouteDataObject.java b/OsmAnd-java/src/net/osmand/binary/RouteDataObject.java new file mode 100644 index 0000000000..b5602529e7 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/binary/RouteDataObject.java @@ -0,0 +1,269 @@ +package net.osmand.binary; + + +import gnu.trove.map.hash.TIntObjectHashMap; + +import java.text.MessageFormat; + +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; + +public class RouteDataObject { + /*private */static final int RESTRICTION_SHIFT = 3; + /*private */static final int RESTRICTION_MASK = 7; + + public final RouteRegion region; + // all these arrays supposed to be immutable! + // These fields accessible from C++ + public int[] types; + public int[] pointsX; + public int[] pointsY; + public long[] restrictions; + public int[][] pointTypes; + public long id; + public TIntObjectHashMap names; + public final static float NONE_MAX_SPEED = 40f; + + public RouteDataObject(RouteRegion region) { + this.region = region; + } + + public RouteDataObject(RouteRegion region, int[] nameIds, String[] nameValues) { + this.region = region; + if (nameIds.length > 0) { + names = new TIntObjectHashMap(); + } + for (int i = 0; i < nameIds.length; i++) { + names.put(nameIds[i], nameValues[i]); + } + } + + public RouteDataObject(RouteDataObject copy) { + this.region = copy.region; + this.pointsX = copy.pointsX; + this.pointsY = copy.pointsY; + this.types = copy.types; + this.names = copy.names; + this.restrictions = copy.restrictions; + this.pointTypes = copy.pointTypes; + this.id = copy.id; + } + + public long getId() { + return id; + } + + public String getName(){ + if(names != null ) { + return names.get(region.nameTypeRule); + } + return null; + } + + public String getRef(){ + if(names != null ) { + return names.get(region.refTypeRule); + } + return null; + } + + public String getDestinationName(){ + if(names != null ) { + return names.get(region.destinationTypeRule); + } + return null; + } + + public int getPoint31XTile(int i) { + return pointsX[i]; + } + + public int getPoint31YTile(int i) { + return pointsY[i]; + } + + public int getPointsLength() { + return pointsX.length; + } + + public int getRestrictionLength() { + return restrictions == null ? 0 : restrictions.length; + } + + public int getRestrictionType(int i) { + return (int) (restrictions[i] & RESTRICTION_MASK); + } + + public long getRestrictionId(int i) { + return restrictions[i] >> RESTRICTION_SHIFT; + } + + public void insert(int pos, int x31, int y31) { + int[] opointsX = pointsX; + int[] opointsY = pointsY; + int[][] opointTypes = pointTypes; + pointsX = new int[pointsX.length + 1]; + pointsY = new int[pointsY.length + 1]; + boolean insTypes = this.pointTypes != null && this.pointTypes.length > pos; + if (insTypes) { + pointTypes = new int[opointTypes.length + 1][]; + } + int i = 0; + for (; i < pos; i++) { + pointsX[i] = opointsX[i]; + pointsY[i] = opointsY[i]; + if (insTypes) { + pointTypes[i] = opointTypes[i]; + } + } + pointsX[i] = x31; + pointsY[i] = y31; + if (insTypes) { + pointTypes[i] = null; + } + for (i = i + 1; i < pointsX.length; i++) { + pointsX[i] = opointsX[i - 1]; + pointsY[i] = opointsY[i - 1]; + if (insTypes && i < pointTypes.length) { + pointTypes[i] = opointTypes[i - 1]; + } + } + + } + + public int[] getPointTypes(int ind) { + if (pointTypes == null || ind >= pointTypes.length) { + return null; + } + return pointTypes[ind]; + } + + public int[] getTypes() { + return types; + } + + public float getMaximumSpeed(){ + int sz = types.length; + for (int i = 0; i < sz; i++) { + RouteTypeRule r = region.quickGetEncodingRule(types[i]); + float maxSpeed = r.maxSpeed(); + if (maxSpeed > 0) { + return maxSpeed; + } + } + return 0; + } + + public boolean loop(){ + return pointsX[0] == pointsX[pointsX.length - 1] && pointsY[0] == pointsY[pointsY.length - 1] ; + } + + public boolean roundabout(){ + int sz = types.length; + for(int i=0; i 0) { + return ln; + } + } + return -1; + } + + public double directionRoute(int startPoint, boolean plus) { + // same goes to C++ + // Victor : the problem to put more than 5 meters that BinaryRoutePlanner will treat + // 2 consequent Turn Right as UT and here 2 points will have same turn angle + // So it should be fix in both places + return directionRoute(startPoint, plus, 5); + } + + // Gives route direction of EAST degrees from NORTH ]-PI, PI] + public double directionRoute(int startPoint, boolean plus, float dist) { + int x = getPoint31XTile(startPoint); + int y = getPoint31YTile(startPoint); + int nx = startPoint; + int px = x; + int py = y; + double total = 0; + do { + if (plus) { + nx++; + if (nx >= getPointsLength()) { + break; + } + } else { + nx--; + if (nx < 0) { + break; + } + } + px = getPoint31XTile(nx); + py = getPoint31YTile(nx); + // translate into meters + total += Math.abs(px - x) * 0.011d + Math.abs(py - y) * 0.01863d; + } while (total < dist); + return -Math.atan2( x - px, y - py ); + } + + @Override + public String toString() { + String name = getName(); + String rf = getRef(); + return MessageFormat.format("Road id {0} name {1} ref {2}", getId()+"", name == null ? "" : name, rf == null ? "" : rf); + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/bridge/CoreOsmAnd.java b/OsmAnd-java/src/net/osmand/bridge/CoreOsmAnd.java new file mode 100644 index 0000000000..f0c2c5ec6e --- /dev/null +++ b/OsmAnd-java/src/net/osmand/bridge/CoreOsmAnd.java @@ -0,0 +1,56 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.7 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package net.osmand.bridge; + +public class CoreOsmAnd { + public static int get31TileNumberX(double longitude) { + return CoreOsmAndJNI.get31TileNumberX(longitude); + } + + public static int get31TileNumberY(double latitude) { + return CoreOsmAndJNI.get31TileNumberY(latitude); + } + + public static double get31LongitudeX(int x) { + return CoreOsmAndJNI.get31LongitudeX(x); + } + + public static double get31LatitudeY(int y) { + return CoreOsmAndJNI.get31LatitudeY(y); + } + + public static double getTileNumberX(float zoom, double longitude) { + return CoreOsmAndJNI.getTileNumberX(zoom, longitude); + } + + public static double getTileNumberY(float zoom, double latitude) { + return CoreOsmAndJNI.getTileNumberY(zoom, latitude); + } + + public static double checkLatitude(double latitude) { + return CoreOsmAndJNI.checkLatitude(latitude); + } + + public static double checkLongitude(double longitude) { + return CoreOsmAndJNI.checkLongitude(longitude); + } + + public static double getPowZoom(float zoom) { + return CoreOsmAndJNI.getPowZoom(zoom); + } + + public static double getLongitudeFromTile(float zoom, double x) { + return CoreOsmAndJNI.getLongitudeFromTile(zoom, x); + } + + public static double getLatitudeFromTile(float zoom, double y) { + return CoreOsmAndJNI.getLatitudeFromTile(zoom, y); + } + +} diff --git a/OsmAnd-java/src/net/osmand/bridge/CoreOsmAndJNI.java b/OsmAnd-java/src/net/osmand/bridge/CoreOsmAndJNI.java new file mode 100644 index 0000000000..4eb1980bb6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/bridge/CoreOsmAndJNI.java @@ -0,0 +1,37 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.7 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package net.osmand.bridge; + +public class CoreOsmAndJNI { + public final static native long new_StringVector__SWIG_0(); + public final static native long new_StringVector__SWIG_1(long jarg1); + public final static native long StringVector_size(long jarg1, StringVector jarg1_); + public final static native long StringVector_capacity(long jarg1, StringVector jarg1_); + public final static native void StringVector_reserve(long jarg1, StringVector jarg1_, long jarg2); + public final static native boolean StringVector_isEmpty(long jarg1, StringVector jarg1_); + public final static native void StringVector_clear(long jarg1, StringVector jarg1_); + public final static native void StringVector_add(long jarg1, StringVector jarg1_, String jarg2); + public final static native String StringVector_get(long jarg1, StringVector jarg1_, int jarg2); + public final static native void StringVector_set(long jarg1, StringVector jarg1_, int jarg2, String jarg3); + public final static native void delete_StringVector(long jarg1); + public final static native int ObfInspector_inspector(long jarg1, StringVector jarg1_); + public final static native long new_ObfInspector(); + public final static native void delete_ObfInspector(long jarg1); + public final static native int get31TileNumberX(double jarg1); + public final static native int get31TileNumberY(double jarg1); + public final static native double get31LongitudeX(int jarg1); + public final static native double get31LatitudeY(int jarg1); + public final static native double getTileNumberX(float jarg1, double jarg2); + public final static native double getTileNumberY(float jarg1, double jarg2); + public final static native double checkLatitude(double jarg1); + public final static native double checkLongitude(double jarg1); + public final static native double getPowZoom(float jarg1); + public final static native double getLongitudeFromTile(float jarg1, double jarg2); + public final static native double getLatitudeFromTile(float jarg1, double jarg2); +} diff --git a/OsmAnd-java/src/net/osmand/bridge/ObfInspector.java b/OsmAnd-java/src/net/osmand/bridge/ObfInspector.java new file mode 100644 index 0000000000..5ee23bd9d5 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/bridge/ObfInspector.java @@ -0,0 +1,46 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.7 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package net.osmand.bridge; + +public class ObfInspector { + private long swigCPtr; + protected boolean swigCMemOwn; + + protected ObfInspector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(ObfInspector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + CoreOsmAndJNI.delete_ObfInspector(swigCPtr); + } + swigCPtr = 0; + } + } + + public static int inspector(StringVector argv) { + return CoreOsmAndJNI.ObfInspector_inspector(StringVector.getCPtr(argv), argv); + } + + public ObfInspector() { + this(CoreOsmAndJNI.new_ObfInspector(), true); + } + +} diff --git a/OsmAnd-java/src/net/osmand/bridge/StringVector.java b/OsmAnd-java/src/net/osmand/bridge/StringVector.java new file mode 100644 index 0000000000..3fcdb9021c --- /dev/null +++ b/OsmAnd-java/src/net/osmand/bridge/StringVector.java @@ -0,0 +1,84 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.7 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package net.osmand.bridge; + +import java.util.AbstractList; +import java.util.List; + +public class StringVector extends AbstractList { + private long swigCPtr; + protected boolean swigCMemOwn; + + protected StringVector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(StringVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + CoreOsmAndJNI.delete_StringVector(swigCPtr); + } + swigCPtr = 0; + } + } + + public StringVector() { + this(CoreOsmAndJNI.new_StringVector__SWIG_0(), true); + } + + public StringVector(long n) { + this(CoreOsmAndJNI.new_StringVector__SWIG_1(n), true); + } + + public int size() { + return (int) CoreOsmAndJNI.StringVector_size(swigCPtr, this); + } + + public long capacity() { + return CoreOsmAndJNI.StringVector_capacity(swigCPtr, this); + } + + public void reserve(long n) { + CoreOsmAndJNI.StringVector_reserve(swigCPtr, this, n); + } + + public boolean isEmpty() { + return CoreOsmAndJNI.StringVector_isEmpty(swigCPtr, this); + } + + public void clear() { + CoreOsmAndJNI.StringVector_clear(swigCPtr, this); + } + + public boolean add(String x) { + CoreOsmAndJNI.StringVector_add(swigCPtr, this, x); + return true; + } + + public String get(int i) { + return CoreOsmAndJNI.StringVector_get(swigCPtr, this, i); + } + + public String set(int i, String val) { + String prev = CoreOsmAndJNI.StringVector_get(swigCPtr, this, i); + CoreOsmAndJNI.StringVector_set(swigCPtr, this, i, val); + return prev; + } + +} diff --git a/OsmAnd-java/src/net/osmand/data/Amenity.java b/OsmAnd-java/src/net/osmand/data/Amenity.java new file mode 100644 index 0000000000..6e7b31643a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/Amenity.java @@ -0,0 +1,72 @@ +package net.osmand.data; + + +public class Amenity extends MapObject { + + private static final long serialVersionUID = 132083949926339552L; + private String subType; + private AmenityType type; + private String openingHours; + private String phone; + private String description; + private String site; + + public Amenity(){ + } + + public AmenityType getType(){ + return type; + } + + public String getSubType(){ + return subType; + } + + public void setType(AmenityType type) { + this.type = type; + } + + public void setSubType(String subType) { + this.subType = subType; + } + + public String getOpeningHours() { + return openingHours; + } + + public void setOpeningHours(String openingHours) { + this.openingHours = openingHours; + } + + + @Override + public String toString() { + return type.toString() + " : " + subType + " "+ getName(); + } + + public String getSite() { + return site; + } + + public void setSite(String site) { + this.site = site; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + +} diff --git a/OsmAnd-java/src/net/osmand/data/AmenityType.java b/OsmAnd-java/src/net/osmand/data/AmenityType.java new file mode 100644 index 0000000000..9e14815d61 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/AmenityType.java @@ -0,0 +1,59 @@ +package net.osmand.data; + +// http://wiki.openstreetmap.org/wiki/Amenity +// POI tags : amenity, leisure, shop, sport, tourism, historic; accessories (internet-access), natural ? +public enum AmenityType { + // Some of those types are subtypes of Amenity tag + SUSTENANCE("amenity"), // restaurant, cafe ... //$NON-NLS-1$ //$NON-NLS-2$ + EDUCATION("amenity"), // school, ... //$NON-NLS-1$ //$NON-NLS-2$ + TRANSPORTATION("amenity"), // car_wash, parking, ... //$NON-NLS-1$ //$NON-NLS-2$ + FINANCE("amenity"), // bank, atm, ... //$NON-NLS-1$ //$NON-NLS-2$ + HEALTHCARE("amenity"), // hospital ... //$NON-NLS-1$ //$NON-NLS-2$ + ENTERTAINMENT("amenity"), // cinema, ... (+! sauna, brothel) //$NON-NLS-1$ //$NON-NLS-2$ + TOURISM("tourism"), // [TAG] tourism hotel, sights, museum .. //$NON-NLS-1$ //$NON-NLS-2$ + HISTORIC("historic"), // [TAG] historic places, monuments (should we unify tourism/historic) //$NON-NLS-1$ //$NON-NLS-2$ + NATURAL("natural"), // [TAG] natural places, monuments (should we unify tourism/historic) //$NON-NLS-1$ //$NON-NLS-2$ + SHOP("shop"), // [TAG] amenity convenience (product), clothes... //$NON-NLS-1$ //$NON-NLS-2$ + LEISURE("leisure"), // [TAG] leisure //$NON-NLS-1$ //$NON-NLS-2$ + SPORT("sport"), // [TAG] sport //$NON-NLS-1$ //$NON-NLS-2$ + BARRIER("barrier"), // [TAG] barrier + traffic_calming //$NON-NLS-1$ //$NON-NLS-2$ + LANDUSE("landuse"), // [TAG] landuse //$NON-NLS-1$ //$NON-NLS-2$ + MAN_MADE("man_made"), // [TAG] man_made and others //$NON-NLS-1$ //$NON-NLS-2$ + OFFICE("office"), // [TAG] office //$NON-NLS-1$ //$NON-NLS-2$ + EMERGENCY("emergency"), // [TAG] emergency //$NON-NLS-1$ //$NON-NLS-2$ + MILITARY("military"), // [TAG] military //$NON-NLS-1$ //$NON-NLS-2$ + ADMINISTRATIVE("administrative"), // [TAG] administrative //$NON-NLS-1$ //$NON-NLS-2$ + GEOCACHE("geocache"), //$NON-NLS-1$ + OSMWIKI("osmwiki"), //$NON-NLS-1$ + USER_DEFINED("user_defined"), //$NON-NLS-1$ + OTHER("amenity"), // grave-yard, police, post-office [+Internet_access] //$NON-NLS-1$ //$NON-NLS-2$ + ; + + private final String defaultTag; + + private AmenityType(String defaultTag) { + this.defaultTag = defaultTag; + } + + public static AmenityType fromString(String s){ + try { + return AmenityType.valueOf(s.toUpperCase()); + } catch (IllegalArgumentException e) { + return AmenityType.OTHER; + } + } + + public String getDefaultTag() { + return defaultTag; + } + + public static String valueToString(AmenityType t){ + return t.toString().toLowerCase(); + } + + public static AmenityType[] getCategories(){ + return AmenityType.values(); + } + + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/data/Building.java b/OsmAnd-java/src/net/osmand/data/Building.java new file mode 100644 index 0000000000..1ad8bdbed6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/Building.java @@ -0,0 +1,144 @@ +package net.osmand.data; + + +import net.osmand.util.Algorithms; + +public class Building extends MapObject { + + private String postcode; + private LatLon latLon2; + private BuildingInterpolation interpolationType; + private int interpolationInterval; + private String name2; + + public enum BuildingInterpolation { + ALL(-1), EVEN(-2), ODD(-3), ALPHABETIC(-4); + private final int val; + + BuildingInterpolation(int val) { + this.val = val; + } + public int getValue() { + return val; + } + + public static BuildingInterpolation fromValue(int i){ + for(BuildingInterpolation b : values()) { + if(b.val == i) { + return b; + } + } + return null; + } + } + + public Building(){} + + public String getPostcode() { + return postcode; + } + + public int getInterpolationInterval() { + return interpolationInterval; + } + public void setInterpolationInterval(int interpolationNumber) { + this.interpolationInterval = interpolationNumber; + } + + public BuildingInterpolation getInterpolationType() { + return interpolationType; + } + + public void setInterpolationType(BuildingInterpolation interpolationType) { + this.interpolationType = interpolationType; + } + + public LatLon getLatLon2() { + return latLon2; + } + public void setLatLon2(LatLon latlon2) { + this.latLon2 = latlon2; + } + public String getName2() { + return name2; + } + + public void setName2(String name2) { + this.name2 = name2; + } + + public void setPostcode(String postcode) { + this.postcode = postcode; + } + + @Override + public String getName(boolean en) { + String fname = super.getName(en); + if(interpolationInterval !=0){ + return fname+"-"+name2 +" (+"+interpolationInterval+") "; + } else if(interpolationType != null) { + return fname+"-"+name2 +" ("+interpolationType.toString().toLowerCase()+") "; + } + return name; + } + + + public float interpolation(String hno) { + if(getInterpolationType() != null || getInterpolationInterval() > 0) { + int num = Algorithms.extractFirstIntegerNumber(hno); + int numB = Algorithms.extractFirstIntegerNumber(super.getName()); + int numT = numB; + if (num >= numB) { + if (getName2() != null) { + numT = Algorithms.extractFirstIntegerNumber(getName2()); + if(numT < num) { + return -1; + } + } + if (getInterpolationType() == BuildingInterpolation.EVEN && num % 2 == 1) { + return -1; + } + if (getInterpolationType() == BuildingInterpolation.ODD && num % 2 == 0) { + return -1; + } + if (getInterpolationInterval() != 0 && (num - numB) % getInterpolationInterval() != 0) { + return -1; + } + } else { + return -1; + } + if(numT > numB){ + return ((float)num - numB) / (((float)numT - numB)); + } + return 0; + } + return -1; + } + public boolean belongsToInterpolation(String hno) { + return interpolation(hno) >= 0; + } + + @Override + public String toString() { + if(interpolationInterval !=0){ + return name+"-"+name2 +" (+"+interpolationInterval+") "; + } else if(interpolationType != null) { + return name+"-"+name2 +" ("+interpolationType+") "; + } + return name; + } + + public LatLon getLocation(float interpolation) { + LatLon loc = getLocation(); + LatLon latLon2 = getLatLon2(); + if (latLon2 != null) { + double lat1 = loc.getLatitude(); + double lat2 = latLon2.getLatitude(); + double lon1 = loc.getLongitude(); + double lon2 = latLon2.getLongitude(); + return new LatLon(interpolation * (lat2 - lat1) + lat1, interpolation * (lon2 - lon1) + lon1); + } + return loc; + } + +} diff --git a/OsmAnd-java/src/net/osmand/data/City.java b/OsmAnd-java/src/net/osmand/data/City.java new file mode 100644 index 0000000000..cbadc9c975 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/City.java @@ -0,0 +1,140 @@ +package net.osmand.data; + +import java.util.Collection; +import java.util.Map; +import java.util.TreeMap; + +import net.osmand.PlatformUtil; +import net.osmand.util.Algorithms; + +public class City extends MapObject { + public enum CityType { + // that's tricky way to play with that numbers (to avoid including suburbs in city & vice verse) + // district special type and it is not registered as a city + CITY(10000), TOWN(5000), VILLAGE(1300), HAMLET(1000), SUBURB(400), DISTRICT(400); + + private double radius; + + private CityType(double radius) { + this.radius = radius; + } + + public double getRadius() { + return radius; + } + + public static String valueToString(CityType t) { + return t.toString().toLowerCase(); + } + + public static CityType valueFromString(String place) { + if (place == null) { + return null; + } + for (CityType t : CityType.values()) { + if (t.name().equalsIgnoreCase(place)) { + return t; + } + } + return null; + } + } + + private CityType type = null; + // Be attentive ! Working with street names ignoring case + private Map streets = new TreeMap(PlatformUtil.primaryCollator()); + private String isin = null; + private String postcode = null; + + private static long POSTCODE_INTERNAL_ID = -1000; + public static City createPostcode(String postcode){ + return new City(postcode, POSTCODE_INTERNAL_ID--); + } + + public City(CityType type) { + if(type == null) { + throw new NullPointerException(); + } + this.type = type; + } + + public City(String postcode, long id) { + this.type = null; + this.name = this.enName = postcode; + this.id = id; + } + + public String getIsInValue() { + return isin; + } + + public boolean isPostcode(){ + return type == null; + } + + public boolean isEmptyWithStreets() { + return streets.isEmpty(); + } + + + public Street unregisterStreet(String name) { + return streets.remove(name.toLowerCase()); + } + + public void removeAllStreets() { + streets.clear(); + } + + public String getPostcode() { + return postcode; + } + + public void setPostcode(String postcode) { + this.postcode = postcode; + } + + protected Street registerStreet(Street street, boolean en) { + String name = en ? street.getEnName() : street.getName(); + name = name.toLowerCase(); + if (!Algorithms.isEmpty(name)) { + if (!streets.containsKey(name)) { + return streets.put(name, street); + } else { + // try to merge streets + Street prev = streets.get(name); + prev.mergeWith(street); + return prev; + } + } + return null; + } + + public Street registerStreet(Street street) { + return registerStreet(street, false); + } + + public CityType getType() { + return type; + } + + public Collection getStreets() { + return streets.values(); + } + + public Street getStreet(String name) { + return streets.get(name.toLowerCase()); + } + + @Override + public String toString() { + if(isPostcode()) { + return "Postcode : " + getName(); //$NON-NLS-1$ //$NON-NLS-2$ + } + return "City [" + type + "] " + getName(); //$NON-NLS-1$ //$NON-NLS-2$ + } + + public void setIsin(String isin) { + this.isin = isin; + } + +} diff --git a/OsmAnd-java/src/net/osmand/data/DataTileManager.java b/OsmAnd-java/src/net/osmand/data/DataTileManager.java new file mode 100644 index 0000000000..d5196c919f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/DataTileManager.java @@ -0,0 +1,205 @@ +package net.osmand.data; + +import gnu.trove.map.hash.TLongObjectHashMap; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.osmand.util.MapUtils; + +/** + * + * @param - object to store in that manager + */ +public class DataTileManager { + + private final int zoom; + + private TLongObjectHashMap> objects = new TLongObjectHashMap>(); + + public DataTileManager(){ + zoom = 15; + } + + public DataTileManager(int z){ + zoom = z; + } + + public int getZoom() { + return zoom; + } + + + public boolean isEmpty(){ + return getObjectsCount() == 0; + } + + @SuppressWarnings("rawtypes") + public int getObjectsCount(){ + int x = 0; + for(List s : objects.valueCollection()){ + x += s.size(); + } + return x; + } + + private void putObjects(int tx, int ty, List r){ + if(objects.containsKey(evTile(tx, ty))){ + r.addAll(objects.get(evTile(tx, ty))); + } + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public List getAllObjects(){ + List l = new ArrayList(); + for(List s : objects.valueCollection()){ + l.addAll(s); + } + return l; + } + + public List getObjects(double latitudeUp, double longitudeUp, double latitudeDown, double longitudeDown) { + int tileXUp = (int) MapUtils.getTileNumberX(zoom, longitudeUp); + int tileYUp = (int) MapUtils.getTileNumberY(zoom, latitudeUp); + int tileXDown = (int) MapUtils.getTileNumberX(zoom, longitudeDown) + 1; + int tileYDown = (int) MapUtils.getTileNumberY(zoom, latitudeDown) + 1; + List result = new ArrayList(); + for (int i = tileXUp; i <= tileXDown; i++) { + for (int j = tileYUp; j <= tileYDown; j++) { + putObjects(i, j, result); + } + } + return result; + } + + public List getObjects(int leftX31, int topY31, int rightX31, int bottomY31) { + int tileXUp = leftX31 >> (31 - zoom); + int tileYUp = topY31 >> (31 - zoom); + int tileXDown = (rightX31 >> (31 - zoom)) + 1; + int tileYDown = (bottomY31 >> (31 - zoom)) + 1; + List result = new ArrayList(); + for (int i = tileXUp; i <= tileXDown; i++) { + for (int j = tileYUp; j <= tileYDown; j++) { + putObjects(i, j, result); + } + } + return result; + } + + /** + * @depth of the neighbor tile to visit + * returns not exactly sorted list, + * however the first objects are from closer tile than last + */ + public List getClosestObjects(double latitude, double longitude, int defaultStep){ + if(isEmpty()){ + return Collections.emptyList(); + } + int dp = 0; + List l = null; + while (l == null || l.isEmpty()) { + l = getClosestObjects(latitude, longitude, dp, dp + defaultStep); + dp += defaultStep; + } + return l; + } + + public List getClosestObjects(double latitude, double longitude){ + return getClosestObjects(latitude, longitude, 3); + } + + public List getClosestObjects(double latitude, double longitude, int startDepth, int depth){ + int tileX = (int) MapUtils.getTileNumberX(zoom, longitude); + int tileY = (int) MapUtils.getTileNumberY(zoom, latitude); + List result = new ArrayList(); + + if(startDepth <= 0){ + putObjects(tileX, tileY, result); + startDepth = 1; + } + + // that's very difficult way visiting node : + // similar to visit by spiral + // however the simplest way could be to visit row by row & after sort tiles by distance (that's less efficient) + + // go through circle + for (int i = startDepth; i <= depth; i++) { + + // goes + for (int j = 0; j <= i; j++) { + // left & right + int dx = j == 0 ? 0 : -1; + for (; dx < 1 || (j < i && dx == 1); dx += 2) { + // north + putObjects(tileX + dx * j, tileY + i, result); + // east + putObjects(tileX + i, tileY - dx * j, result); + // south + putObjects(tileX - dx * j, tileY - i, result); + // west + putObjects(tileX - i, tileY + dx * j, result); + } + } + } + return result; + } + + private long evTile(int tileX, int tileY){ + long tx = tileX; + long ty = tileY; + return ((tx) << zoom) + ty; + } + + + public long evaluateTile(double latitude, double longitude){ + int tileX = (int) MapUtils.getTileNumberX(zoom, longitude); + int tileY = (int) MapUtils.getTileNumberY(zoom, latitude); + return evTile(tileX, tileY); + } + + public long evaluateTileXY(int x31, int y31){ + return evTile(x31 >> (31 - zoom), y31 >> (31 - zoom)); + } + + public void unregisterObject(double latitude, double longitude, T object){ + long tile = evaluateTile(latitude, longitude); + removeObject(object, tile); + } + + + public void unregisterObjectXY(int x31, int y31, T object){ + long tile = evaluateTileXY(x31, y31); + removeObject(object, tile); + } + + private void removeObject(T object, long tile) { + if(objects.containsKey(tile)){ + objects.get(tile).remove(object); + } + } + + public long registerObjectXY(int x31, int y31, T object){ + return addObject(object, evTile(x31 >> (31 - zoom), y31 >> (31 - zoom))); + } + + public long registerObject(double latitude, double longitude, T object){ + long tile = evaluateTile(latitude, longitude); + return addObject(object, tile); + } + + private long addObject(T object, long tile) { + if(!objects.containsKey(tile)){ + objects.put(tile, new ArrayList()); + } + objects.get(tile).add(object); + return tile; + } + + + public void clear(){ + objects.clear(); + } + + +} diff --git a/OsmAnd-java/src/net/osmand/data/FavouritePoint.java b/OsmAnd-java/src/net/osmand/data/FavouritePoint.java new file mode 100644 index 0000000000..e71b46ed22 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/FavouritePoint.java @@ -0,0 +1,67 @@ +package net.osmand.data; + +import java.io.Serializable; + +public class FavouritePoint implements Serializable { + private static final long serialVersionUID = 729654300829771466L; + private String name; + private String category = ""; + private double latitude; + private double longitude; + private boolean stored = false; + + + public FavouritePoint(){ + } + + public FavouritePoint(double latitude, double longitude, String name, String category) { + this.latitude = latitude; + this.longitude = longitude; + this.category = category; + this.name = name; + } + + public double getLatitude() { + return latitude; + } + + public boolean isStored() { + return stored; + } + public void setStored(boolean stored) { + this.stored = stored; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Favourite " + getName(); //$NON-NLS-1$ + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/data/LatLon.java b/OsmAnd-java/src/net/osmand/data/LatLon.java new file mode 100644 index 0000000000..ff4b718ea3 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/LatLon.java @@ -0,0 +1,54 @@ +package net.osmand.data; + + +public class LatLon { + private final double longitude; + private final double latitude; + + public LatLon(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(latitude); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(longitude); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + LatLon other = (LatLon) obj; + if (Double.doubleToLongBits(latitude) != Double.doubleToLongBits(other.latitude)) + return false; + if (Double.doubleToLongBits(longitude) != Double.doubleToLongBits(other.longitude)) + return false; + return true; + } + + @Override + public String toString() { + return "Lat " + ((float)latitude) + " Lon " + ((float)longitude); //$NON-NLS-1$ //$NON-NLS-2$ + } + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/data/MapObject.java b/OsmAnd-java/src/net/osmand/data/MapObject.java new file mode 100644 index 0000000000..291929eb66 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/MapObject.java @@ -0,0 +1,127 @@ +package net.osmand.data; + + +import java.io.Serializable; +import java.util.Comparator; + +import net.osmand.Collator; +import net.osmand.PlatformUtil; + + +public abstract class MapObject implements Comparable, Serializable { + protected String name = null; + protected String enName = null; + protected LatLon location = null; + protected int fileOffset = 0; + protected Long id = null; + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + if(id != null){ + return id; + } + return null; + } + + public String getName(boolean en){ + if(en){ + return getEnName(); + } else { + return getName(); + } + } + + public String getName() { + if (this.name != null) { + return this.name; + } + return ""; //$NON-NLS-1$ + } + + public void setName(String name) { + this.name = name; + } + + public String getEnName() { + if(this.enName != null){ + return this.enName; + } + return ""; //$NON-NLS-1$ + } + + public void setEnName(String enName) { + this.enName = enName; + } + + public LatLon getLocation(){ + return location; + } + + public void setLocation(double latitude, double longitude){ + location = new LatLon(latitude, longitude); + } + + @Override + public int compareTo(MapObject o) { + return PlatformUtil.primaryCollator().compare(getName(), o.getName()); + } + + public int getFileOffset() { + return fileOffset; + } + + public void setFileOffset(int fileOffset) { + this.fileOffset = fileOffset; + } + + @Override + public String toString() { + return getClass().getSimpleName() + " " + name +"("+id+")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MapObject other = (MapObject) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + public static class MapObjectComparator implements Comparator{ + private final boolean en; + Collator collator = PlatformUtil.primaryCollator(); + public MapObjectComparator(boolean en){ + this.en = en; + } + + @Override + public int compare(MapObject o1, MapObject o2) { + if(en){ + return collator.compare(o1.getEnName(), o2.getEnName()); + } else { + return collator.compare(o1.getName(), o2.getName()); + } + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/data/QuadPoint.java b/OsmAnd-java/src/net/osmand/data/QuadPoint.java new file mode 100644 index 0000000000..7a1814970b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/QuadPoint.java @@ -0,0 +1,24 @@ +package net.osmand.data; + +public class QuadPoint { + public float x; + public float y; + + public QuadPoint() { + } + + public QuadPoint(float x, float y) { + this.x = x; + this.y = y; + } + + public QuadPoint(QuadPoint a) { + this(a.x, a.y); + } + + public void set(float x, float y) { + this.x = x; + this.y = y; + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/data/QuadRect.java b/OsmAnd-java/src/net/osmand/data/QuadRect.java new file mode 100644 index 0000000000..fced8e7c9a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/QuadRect.java @@ -0,0 +1,67 @@ +package net.osmand.data; + +public class QuadRect { + public float left; + public float right; + public float top; + public float bottom; + + public QuadRect(float left, float top, float right, float bottom) { + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + } + + public QuadRect(QuadRect a) { + this(a.left, a.top, a.right, a.bottom); + } + + public QuadRect() { + } + + public float width() { + return right - left; + } + + public float height() { + return bottom - top; + } + + public boolean contains(float left, float top, float right, float bottom) { + return this.left < this.right && this.top < this.bottom && this.left <= left && this.top <= top && this.right >= right + && this.bottom >= bottom; + } + + public boolean contains(QuadRect box) { + return contains(box.left, box.top, box.right, box.bottom); + } + + public static boolean intersects(QuadRect a, QuadRect b) { + return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom; + } + + public float centerX() { + return (left + right) / 2; + } + + public float centerY() { + return (top + bottom) / 2; + } + + public void offset(float dx, float dy) { + left += dx; + top += dy; + right += dx; + bottom += dy; + + } + + public void inset(float dx, float dy) { + left += dx; + top += dy; + right -= dx; + bottom -= dy; + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/data/QuadTree.java b/OsmAnd-java/src/net/osmand/data/QuadTree.java new file mode 100644 index 0000000000..0ce2127a1f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/QuadTree.java @@ -0,0 +1,102 @@ +package net.osmand.data; + +import java.util.ArrayList; +import java.util.List; + + + + +public class QuadTree { + + private static class Node { + List data = null; + Node[] children = null; + QuadRect bounds; + + @SuppressWarnings("unchecked") + private Node(QuadRect b) { + bounds = new QuadRect(b.left, b.top, b.right, b.bottom); + children = new Node[4]; + } + }; + + private float ratio; + private int maxDepth; + private Node root; + + public QuadTree(QuadRect r, int depth/* =8 */, float ratio /* = 0.55 */) { + this.ratio = ratio; + this.root = new Node(r); + this.maxDepth = depth; + } + + public void insert(T data, QuadRect box) { + int depth = 0; + doInsertData(data, box, root, depth); + } + + public void insert(T data, float x, float y) { + insert(data, new QuadRect(x, y, x, y)); + } + + public void queryInBox(QuadRect box, List result) { + result.clear(); + queryNode(box, result, root); + } + + private void queryNode(QuadRect box, List result, Node node) { + if (node != null) { + if (QuadRect.intersects(box, node.bounds)) { + if (node.data != null) { + result.addAll(node.data); + } + for (int k = 0; k < 4; ++k) { + queryNode(box, result, node.children[k]); + } + } + } + } + + private void doInsertData(T data, QuadRect box, Node n, int depth) { + if (++depth >= maxDepth) { + if (n.data == null) { + n.data = new ArrayList(); + } + n.data.add(data); + } else { + QuadRect[] ext = new QuadRect[4]; + splitBox(n.bounds, ext); + for (int i = 0; i < 4; ++i) { + if (ext[i].contains(box)) { + if (n.children[i] == null) { + n.children[i] = new Node(ext[i]); + } + doInsertData(data, box, n.children[i], depth); + return; + } + } + if (n.data == null) { + n.data = new ArrayList(); + } + n.data.add(data); + } + } + + void splitBox(QuadRect node_extent, QuadRect[] n) { + // coord2d c=node_extent.center(); + + float width = node_extent.width(); + float height = node_extent.height(); + + float lox = node_extent.left; + float loy = node_extent.top; + float hix = node_extent.right; + float hiy = node_extent.bottom; + + n[0] = new QuadRect(lox, loy, lox + width * ratio, loy + height * ratio); + n[1] = new QuadRect(hix - width * ratio, loy, hix, loy + height * ratio); + n[2] = new QuadRect(lox, hiy - height * ratio, lox + width * ratio, hiy); + n[3] = new QuadRect(hix - width * ratio, hiy - height * ratio, hix, hiy); + } + +} diff --git a/OsmAnd-java/src/net/osmand/data/Street.java b/OsmAnd-java/src/net/osmand/data/Street.java new file mode 100644 index 0000000000..e4a2871e8b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/Street.java @@ -0,0 +1,102 @@ +package net.osmand.data; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.osmand.util.Algorithms; + + +public class Street extends MapObject { + + protected List buildings = new ArrayList(); + protected List intersectedStreets = null; + protected final City city; + + public Street(City city) { + this.city = city; + } + + public void addBuilding(Building building){ + buildings.add(building); + } + + public List getIntersectedStreets() { + if(intersectedStreets == null){ + return Collections.emptyList(); + } + return intersectedStreets; + } + + public void addIntersectedStreet(Street s){ + if(intersectedStreets == null) { + intersectedStreets = new ArrayList(); + } + intersectedStreets.add(s); + } + + public void addBuildingCheckById(Building building){ + for(Building b : buildings) { + if(b.getId().longValue() == building.getId().longValue()){ + return; + } + } + buildings.add(building); + } + + public List getBuildings() { + return buildings; + } + + @Override + public void setName(String name) { + if (name.equals(getName())) { + return; + } + if (city != null && city.getStreet(getName()) == this) { + city.unregisterStreet(getName()); + super.setName(name); + Street s = city.registerStreet(this); + } else { + super.setName(name); + } + } + + public String getNameWithoutCityPart(boolean en) { + String nm = getName(en); + int t = nm.lastIndexOf('('); + if(t > 0) { + return nm.substring(0, t); + } + return nm; + + } + + public City getCity() { + return city; + } + + public void sortBuildings(){ + Collections.sort(buildings, new Comparator(){ + @Override + public int compare(Building o1, Building o2) { + String s1 = o1.getName(); + String s2 = o2.getName(); + int i1 = Algorithms.extractFirstIntegerNumber(s1); + int i2 = Algorithms.extractFirstIntegerNumber(s2); + if(i1 == i2) { + String t1 = Algorithms.extractIntegerSuffix(s1); + String t2 = Algorithms.extractIntegerSuffix(s2); + return t1.compareTo(t2); + } + return i1 - i2; + } + }); + } + + public void mergeWith(Street street) { + buildings.addAll(street.getBuildings()); + } + +} diff --git a/OsmAnd-java/src/net/osmand/data/TransportRoute.java b/OsmAnd-java/src/net/osmand/data/TransportRoute.java new file mode 100644 index 0000000000..ca45d1ac38 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/TransportRoute.java @@ -0,0 +1,74 @@ +package net.osmand.data; + +import java.util.ArrayList; +import java.util.List; + +import net.osmand.util.MapUtils; + +public class TransportRoute extends MapObject { + private List forwardStops = new ArrayList(); + private List backwardStops = new ArrayList(); + private String ref; + private String operator; + private String type; + private Integer dist = null; + + public TransportRoute(){ + } + + public List getForwardStops() { + return forwardStops; + } + + public List getBackwardStops() { + return backwardStops; + } + + public String getRef() { + return ref; + } + + public void setRef(String ref) { + this.ref = ref; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getDistance(){ + if(dist == null){ + dist = getAvgBothDistance(); + } + return dist; + } + + public void setDistance(Integer dist) { + this.dist = dist; + } + + public int getAvgBothDistance(){ + int d = 0; + int bSsize = backwardStops.size(); + int fSsize = forwardStops.size(); + for(int i=1; i< bSsize; i++){ + d += MapUtils.getDistance(backwardStops.get(i-1).getLocation(), backwardStops.get(i).getLocation()); + } + for(int i=1; i< fSsize; i++){ + d += MapUtils.getDistance(forwardStops.get(i-1).getLocation(), forwardStops.get(i).getLocation()); + } + return d; + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/data/TransportStop.java b/OsmAnd-java/src/net/osmand/data/TransportStop.java new file mode 100644 index 0000000000..9aa9f3d5fc --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/TransportStop.java @@ -0,0 +1,17 @@ +package net.osmand.data; + +public class TransportStop extends MapObject { + int[] referencesToRoutes = null; + + public TransportStop(){ + } + + public int[] getReferencesToRoutes() { + return referencesToRoutes; + } + + public void setReferencesToRoutes(int[] referencesToRoutes) { + this.referencesToRoutes = referencesToRoutes; + } + +} diff --git a/OsmAnd-java/src/net/osmand/map/IMapLocationListener.java b/OsmAnd-java/src/net/osmand/map/IMapLocationListener.java new file mode 100644 index 0000000000..7b155eff4b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/IMapLocationListener.java @@ -0,0 +1,5 @@ +package net.osmand.map; + +public interface IMapLocationListener { + void locationChanged(double newLatitude, double newLongitude, Object source); +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/map/ITileSource.java b/OsmAnd-java/src/net/osmand/map/ITileSource.java new file mode 100644 index 0000000000..4e9937ec7f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/ITileSource.java @@ -0,0 +1,24 @@ +package net.osmand.map; + + +public interface ITileSource { + + public int getMaximumZoomSupported(); + + public String getName(); + + public int getTileSize(); + + public String getUrlToLoad(int x, int y, int zoom); + + public int getMinimumZoomSupported(); + + public String getTileFormat(); + + public int getBitDensity(); + + public boolean isEllipticYTile(); + + public boolean couldBeDownloadedFromInternet(); + +} diff --git a/OsmAnd-java/src/net/osmand/map/MapTileDownloader.java b/OsmAnd-java/src/net/osmand/map/MapTileDownloader.java new file mode 100644 index 0000000000..7528c0867d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/MapTileDownloader.java @@ -0,0 +1,230 @@ +package net.osmand.map; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import net.osmand.PlatformUtil; +import net.osmand.util.Algorithms; + +import org.apache.commons.logging.Log; + + +public class MapTileDownloader { + // Download manager tile settings + public static int TILE_DOWNLOAD_THREADS = 4; + public static int TILE_DOWNLOAD_SECONDS_TO_WORK = 25; + public static final long TIMEOUT_AFTER_EXCEEDING_LIMIT_ERRORS = 20000; + public static final int TILE_DOWNLOAD_MAX_ERRORS_PER_TIMEOUT = 25; + + + private static MapTileDownloader downloader = null; + private static Log log = PlatformUtil.getLog(MapTileDownloader.class); + + public static String USER_AGENT = "OsmAnd~"; + + + private ThreadPoolExecutor threadPoolExecutor; + private List callbacks = new ArrayList(); + + private Set currentlyDownloaded; + + private int currentErrors = 0; + private long timeForErrorCounter = 0; + + + public static MapTileDownloader getInstance(String userAgent){ + if(downloader == null){ + downloader = new MapTileDownloader(TILE_DOWNLOAD_THREADS); + if(userAgent != null) { + MapTileDownloader.USER_AGENT = userAgent; + } + } + return downloader; + } + + /** + * Callback for map downloader + */ + public interface IMapDownloaderCallback { + + /** + * Sometimes null cold be passed as request + * That means that there were a lot of requests but + * once method is called + * (in order to not create a collection of request & reduce calling times) + * @param fileSaved + */ + public void tileDownloaded(DownloadRequest request); + } + + /** + * Download request could subclassed to create own detailed request + */ + public static class DownloadRequest { + public final File fileToSave; + public final int zoom; + public final int xTile; + public final int yTile; + public final String url; + public boolean error; + + public DownloadRequest(String url, File fileToSave, int xTile, int yTile, int zoom) { + this.url = url; + this.fileToSave = fileToSave; + this.xTile = xTile; + this.yTile = yTile; + this.zoom = zoom; + } + + public DownloadRequest(String url, File fileToSave) { + this.url = url; + this.fileToSave = fileToSave; + xTile = -1; + yTile = -1; + zoom = -1; + } + + public void setError(boolean error){ + this.error = error; + } + } + + + public MapTileDownloader(int numberOfThreads){ + threadPoolExecutor = new ThreadPoolExecutor(numberOfThreads, numberOfThreads, TILE_DOWNLOAD_SECONDS_TO_WORK, + TimeUnit.SECONDS, new LinkedBlockingQueue()); + // 1.6 method but very useful to kill non-running threads +// threadPoolExecutor.allowCoreThreadTimeOut(true); + currentlyDownloaded = Collections.synchronizedSet(new HashSet()); + + } + + public void addDownloaderCallback(IMapDownloaderCallback callback){ + callbacks.add(callback); + } + + public void removeDownloaderCallback(IMapDownloaderCallback callback){ + callbacks.remove(callback); + } + + public List getDownloaderCallbacks() { + return callbacks; + } + + public boolean isFileCurrentlyDownloaded(File f){ + return currentlyDownloaded.contains(f); + } + + public boolean isSomethingBeingDownloaded(){ + return !currentlyDownloaded.isEmpty(); + } + + public int getRemainingWorkers(){ + return (int) (threadPoolExecutor.getTaskCount()); + } + + public void refuseAllPreviousRequests(){ + // That's very strange because exception in impl of queue (possibly wrong impl) +// threadPoolExecutor.getQueue().clear(); + while(!threadPoolExecutor.getQueue().isEmpty()){ + threadPoolExecutor.getQueue().poll(); + } + } + + public void requestToDownload(DownloadRequest request){ + long now = System.currentTimeMillis(); + if((int)(now - timeForErrorCounter) > TIMEOUT_AFTER_EXCEEDING_LIMIT_ERRORS ) { + timeForErrorCounter = now; + currentErrors = 0; + } else if(currentErrors > TILE_DOWNLOAD_MAX_ERRORS_PER_TIMEOUT){ + return; + } + if(request.url == null){ + return; + } + + if (!isFileCurrentlyDownloaded(request.fileToSave)) { + threadPoolExecutor.execute(new DownloadMapWorker(request)); + } + } + + + private class DownloadMapWorker implements Runnable, Comparable { + + private DownloadRequest request; + + private DownloadMapWorker(DownloadRequest request){ + this.request = request; + } + + @Override + public void run() { + if (request != null && request.fileToSave != null && request.url != null) { + if(currentlyDownloaded.contains(request.fileToSave)){ + return; + } + + currentlyDownloaded.add(request.fileToSave); + if(log.isDebugEnabled()){ + log.debug("Start downloading tile : " + request.url); //$NON-NLS-1$ + } + long time = System.currentTimeMillis(); + try { + request.fileToSave.getParentFile().mkdirs(); + URL url = new URL(request.url); + URLConnection connection = url.openConnection(); + connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$ + connection.setConnectTimeout(35000); + BufferedInputStream inputStream = new BufferedInputStream(connection.getInputStream(), 8 * 1024); + FileOutputStream stream = null; + try { + stream = new FileOutputStream(request.fileToSave); + Algorithms.streamCopy(inputStream, stream); + stream.flush(); + } finally { + Algorithms.closeStream(inputStream); + Algorithms.closeStream(stream); + } + if (log.isDebugEnabled()) { + log.debug("Downloading tile : " + request.url + " successfull " + (System.currentTimeMillis() - time) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + } catch (UnknownHostException e) { + currentErrors++; + request.setError(true); + log.error("UnknownHostException, cannot download tile " + request.url + " " + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ + } catch (IOException e) { + currentErrors++; + request.setError(true); + log.warn("Cannot download tile : " + request.url, e); //$NON-NLS-1$ + } finally { + currentlyDownloaded.remove(request.fileToSave); + } + if (!request.error) { + for (IMapDownloaderCallback c : new ArrayList(callbacks)) { + c.tileDownloaded(request); + } + } + } + + } + + @Override + public int compareTo(DownloadMapWorker o) { + return 0; //(int) (time - o.time); + } + + } +} diff --git a/OsmAnd-java/src/net/osmand/map/OsmandRegionInfo.java b/OsmAnd-java/src/net/osmand/map/OsmandRegionInfo.java new file mode 100644 index 0000000000..6d5011ae25 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/OsmandRegionInfo.java @@ -0,0 +1,1214 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: DataExtractionOSM/src/osmand_region_info.proto + +package net.osmand.map; + +public final class OsmandRegionInfo { + private OsmandRegionInfo() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + public static final class OsmAndRegionInfo extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndRegionInfo.newBuilder() to construct. + private OsmAndRegionInfo() { + initFields(); + } + private OsmAndRegionInfo(boolean noInit) {} + + private static final OsmAndRegionInfo defaultInstance; + public static OsmAndRegionInfo getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRegionInfo getDefaultInstanceForType() { + return defaultInstance; + } + + // optional .OsmAndRegions regionInfo = 1; + public static final int REGIONINFO_FIELD_NUMBER = 1; + private boolean hasRegionInfo; + private net.osmand.map.OsmandRegionInfo.OsmAndRegions regionInfo_; + public boolean hasRegionInfo() { return hasRegionInfo; } + public net.osmand.map.OsmandRegionInfo.OsmAndRegions getRegionInfo() { return regionInfo_; } + + private void initFields() { + regionInfo_ = net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (hasRegionInfo()) { + if (!getRegionInfo().isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasRegionInfo()) { + output.writeMessage(1, getRegionInfo()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasRegionInfo()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getRegionInfo()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo, Builder> { + private net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo result; + + // Construct using net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo(); + return builder; + } + + @Override + protected net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo getDefaultInstanceForType() { + return net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo other) { + if (other == net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo.getDefaultInstance()) return this; + if (other.hasRegionInfo()) { + mergeRegionInfo(other.getRegionInfo()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 10: { + net.osmand.map.OsmandRegionInfo.OsmAndRegions.Builder subBuilder = net.osmand.map.OsmandRegionInfo.OsmAndRegions.newBuilder(); + if (hasRegionInfo()) { + subBuilder.mergeFrom(getRegionInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setRegionInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional .OsmAndRegions regionInfo = 1; + public boolean hasRegionInfo() { + return result.hasRegionInfo(); + } + public net.osmand.map.OsmandRegionInfo.OsmAndRegions getRegionInfo() { + return result.getRegionInfo(); + } + public Builder setRegionInfo(net.osmand.map.OsmandRegionInfo.OsmAndRegions value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRegionInfo = true; + result.regionInfo_ = value; + return this; + } + public Builder setRegionInfo(net.osmand.map.OsmandRegionInfo.OsmAndRegions.Builder builderForValue) { + result.hasRegionInfo = true; + result.regionInfo_ = builderForValue.build(); + return this; + } + public Builder mergeRegionInfo(net.osmand.map.OsmandRegionInfo.OsmAndRegions value) { + if (result.hasRegionInfo() && + result.regionInfo_ != net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance()) { + result.regionInfo_ = + net.osmand.map.OsmandRegionInfo.OsmAndRegions.newBuilder(result.regionInfo_).mergeFrom(value).buildPartial(); + } else { + result.regionInfo_ = value; + } + result.hasRegionInfo = true; + return this; + } + public Builder clearRegionInfo() { + result.hasRegionInfo = false; + result.regionInfo_ = net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRegionInfo) + } + + static { + defaultInstance = new OsmAndRegionInfo(true); + net.osmand.map.OsmandRegionInfo.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRegionInfo) + } + + public static final class OsmAndRegions extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndRegions.newBuilder() to construct. + private OsmAndRegions() { + initFields(); + } + private OsmAndRegions(boolean noInit) {} + + private static final OsmAndRegions defaultInstance; + public static OsmAndRegions getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRegions getDefaultInstanceForType() { + return defaultInstance; + } + + // repeated .OsmAndRegion regions = 3; + public static final int REGIONS_FIELD_NUMBER = 3; + private java.util.List regions_ = + java.util.Collections.emptyList(); + public java.util.List getRegionsList() { + return regions_; + } + public int getRegionsCount() { return regions_.size(); } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getRegions(int index) { + return regions_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getRegionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getRegionsList()) { + output.writeMessage(3, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getRegionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.map.OsmandRegionInfo.OsmAndRegions prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.map.OsmandRegionInfo.OsmAndRegions, Builder> { + private net.osmand.map.OsmandRegionInfo.OsmAndRegions result; + + // Construct using net.osmand.map.OsmandRegionInfo.OsmAndRegions.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.map.OsmandRegionInfo.OsmAndRegions(); + return builder; + } + + @Override + protected net.osmand.map.OsmandRegionInfo.OsmAndRegions internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.map.OsmandRegionInfo.OsmAndRegions(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegions getDefaultInstanceForType() { + return net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegions build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.map.OsmandRegionInfo.OsmAndRegions buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegions buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.regions_ != java.util.Collections.EMPTY_LIST) { + result.regions_ = + java.util.Collections.unmodifiableList(result.regions_); + } + net.osmand.map.OsmandRegionInfo.OsmAndRegions returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.map.OsmandRegionInfo.OsmAndRegions other) { + if (other == net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance()) return this; + if (!other.regions_.isEmpty()) { + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + result.regions_.addAll(other.regions_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 26: { + net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder subBuilder = net.osmand.map.OsmandRegionInfo.OsmAndRegion.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRegions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // repeated .OsmAndRegion regions = 3; + public java.util.List getRegionsList() { + return java.util.Collections.unmodifiableList(result.regions_); + } + public int getRegionsCount() { + return result.getRegionsCount(); + } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getRegions(int index) { + return result.getRegions(index); + } + public Builder setRegions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + result.regions_.set(index, value); + return this; + } + public Builder setRegions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + result.regions_.set(index, builderForValue.build()); + return this; + } + public Builder addRegions(net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + result.regions_.add(value); + return this; + } + public Builder addRegions(net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + result.regions_.add(builderForValue.build()); + return this; + } + public Builder addAllRegions( + java.lang.Iterable values) { + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + super.addAll(values, result.regions_); + return this; + } + public Builder clearRegions() { + result.regions_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRegions) + } + + static { + defaultInstance = new OsmAndRegions(true); + net.osmand.map.OsmandRegionInfo.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRegions) + } + + public static final class OsmAndRegion extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndRegion.newBuilder() to construct. + private OsmAndRegion() { + initFields(); + } + private OsmAndRegion(boolean noInit) {} + + private static final OsmAndRegion defaultInstance; + public static OsmAndRegion getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRegion getDefaultInstanceForType() { + return defaultInstance; + } + + // optional string continentName = 1; + public static final int CONTINENTNAME_FIELD_NUMBER = 1; + private boolean hasContinentName; + private java.lang.String continentName_ = ""; + public boolean hasContinentName() { return hasContinentName; } + public java.lang.String getContinentName() { return continentName_; } + + // required string name = 2; + public static final int NAME_FIELD_NUMBER = 2; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated int32 degX = 4 [packed = true]; + public static final int DEGX_FIELD_NUMBER = 4; + private java.util.List degX_ = + java.util.Collections.emptyList(); + public java.util.List getDegXList() { + return degX_; + } + public int getDegXCount() { return degX_.size(); } + public int getDegX(int index) { + return degX_.get(index); + } + private int degXMemoizedSerializedSize = -1; + + // repeated int32 degY = 5 [packed = true]; + public static final int DEGY_FIELD_NUMBER = 5; + private java.util.List degY_ = + java.util.Collections.emptyList(); + public java.util.List getDegYList() { + return degY_; + } + public int getDegYCount() { return degY_.size(); } + public int getDegY(int index) { + return degY_.get(index); + } + private int degYMemoizedSerializedSize = -1; + + // repeated .OsmAndRegion subregions = 8; + public static final int SUBREGIONS_FIELD_NUMBER = 8; + private java.util.List subregions_ = + java.util.Collections.emptyList(); + public java.util.List getSubregionsList() { + return subregions_; + } + public int getSubregionsCount() { return subregions_.size(); } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getSubregions(int index) { + return subregions_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getSubregionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasContinentName()) { + output.writeString(1, getContinentName()); + } + if (hasName()) { + output.writeString(2, getName()); + } + if (getDegXList().size() > 0) { + output.writeRawVarint32(34); + output.writeRawVarint32(degXMemoizedSerializedSize); + } + for (int element : getDegXList()) { + output.writeInt32NoTag(element); + } + if (getDegYList().size() > 0) { + output.writeRawVarint32(42); + output.writeRawVarint32(degYMemoizedSerializedSize); + } + for (int element : getDegYList()) { + output.writeInt32NoTag(element); + } + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getSubregionsList()) { + output.writeMessage(8, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasContinentName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getContinentName()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getName()); + } + { + int dataSize = 0; + for (int element : getDegXList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(element); + } + size += dataSize; + if (!getDegXList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + degXMemoizedSerializedSize = dataSize; + } + { + int dataSize = 0; + for (int element : getDegYList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(element); + } + size += dataSize; + if (!getDegYList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + degYMemoizedSerializedSize = dataSize; + } + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getSubregionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.map.OsmandRegionInfo.OsmAndRegion prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.map.OsmandRegionInfo.OsmAndRegion, Builder> { + private net.osmand.map.OsmandRegionInfo.OsmAndRegion result; + + // Construct using net.osmand.map.OsmandRegionInfo.OsmAndRegion.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.map.OsmandRegionInfo.OsmAndRegion(); + return builder; + } + + @Override + protected net.osmand.map.OsmandRegionInfo.OsmAndRegion internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.map.OsmandRegionInfo.OsmAndRegion(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getDefaultInstanceForType() { + return net.osmand.map.OsmandRegionInfo.OsmAndRegion.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegion build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.map.OsmandRegionInfo.OsmAndRegion buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegion buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.degX_ != java.util.Collections.EMPTY_LIST) { + result.degX_ = + java.util.Collections.unmodifiableList(result.degX_); + } + if (result.degY_ != java.util.Collections.EMPTY_LIST) { + result.degY_ = + java.util.Collections.unmodifiableList(result.degY_); + } + if (result.subregions_ != java.util.Collections.EMPTY_LIST) { + result.subregions_ = + java.util.Collections.unmodifiableList(result.subregions_); + } + net.osmand.map.OsmandRegionInfo.OsmAndRegion returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.map.OsmandRegionInfo.OsmAndRegion other) { + if (other == net.osmand.map.OsmandRegionInfo.OsmAndRegion.getDefaultInstance()) return this; + if (other.hasContinentName()) { + setContinentName(other.getContinentName()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (!other.degX_.isEmpty()) { + if (result.degX_.isEmpty()) { + result.degX_ = new java.util.ArrayList(); + } + result.degX_.addAll(other.degX_); + } + if (!other.degY_.isEmpty()) { + if (result.degY_.isEmpty()) { + result.degY_ = new java.util.ArrayList(); + } + result.degY_.addAll(other.degY_); + } + if (!other.subregions_.isEmpty()) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.addAll(other.subregions_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 10: { + setContinentName(input.readString()); + break; + } + case 18: { + setName(input.readString()); + break; + } + case 32: { + addDegX(input.readInt32()); + break; + } + case 34: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addDegX(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 40: { + addDegY(input.readInt32()); + break; + } + case 42: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addDegY(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 66: { + net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder subBuilder = net.osmand.map.OsmandRegionInfo.OsmAndRegion.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubregions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional string continentName = 1; + public boolean hasContinentName() { + return result.hasContinentName(); + } + public java.lang.String getContinentName() { + return result.getContinentName(); + } + public Builder setContinentName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasContinentName = true; + result.continentName_ = value; + return this; + } + public Builder clearContinentName() { + result.hasContinentName = false; + result.continentName_ = getDefaultInstance().getContinentName(); + return this; + } + + // required string name = 2; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated int32 degX = 4 [packed = true]; + public java.util.List getDegXList() { + return java.util.Collections.unmodifiableList(result.degX_); + } + public int getDegXCount() { + return result.getDegXCount(); + } + public int getDegX(int index) { + return result.getDegX(index); + } + public Builder setDegX(int index, int value) { + result.degX_.set(index, value); + return this; + } + public Builder addDegX(int value) { + if (result.degX_.isEmpty()) { + result.degX_ = new java.util.ArrayList(); + } + result.degX_.add(value); + return this; + } + public Builder addAllDegX( + java.lang.Iterable values) { + if (result.degX_.isEmpty()) { + result.degX_ = new java.util.ArrayList(); + } + super.addAll(values, result.degX_); + return this; + } + public Builder clearDegX() { + result.degX_ = java.util.Collections.emptyList(); + return this; + } + + // repeated int32 degY = 5 [packed = true]; + public java.util.List getDegYList() { + return java.util.Collections.unmodifiableList(result.degY_); + } + public int getDegYCount() { + return result.getDegYCount(); + } + public int getDegY(int index) { + return result.getDegY(index); + } + public Builder setDegY(int index, int value) { + result.degY_.set(index, value); + return this; + } + public Builder addDegY(int value) { + if (result.degY_.isEmpty()) { + result.degY_ = new java.util.ArrayList(); + } + result.degY_.add(value); + return this; + } + public Builder addAllDegY( + java.lang.Iterable values) { + if (result.degY_.isEmpty()) { + result.degY_ = new java.util.ArrayList(); + } + super.addAll(values, result.degY_); + return this; + } + public Builder clearDegY() { + result.degY_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndRegion subregions = 8; + public java.util.List getSubregionsList() { + return java.util.Collections.unmodifiableList(result.subregions_); + } + public int getSubregionsCount() { + return result.getSubregionsCount(); + } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getSubregions(int index) { + return result.getSubregions(index); + } + public Builder setSubregions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + result.subregions_.set(index, value); + return this; + } + public Builder setSubregions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + result.subregions_.set(index, builderForValue.build()); + return this; + } + public Builder addSubregions(net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.add(value); + return this; + } + public Builder addSubregions(net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.add(builderForValue.build()); + return this; + } + public Builder addAllSubregions( + java.lang.Iterable values) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + super.addAll(values, result.subregions_); + return this; + } + public Builder clearSubregions() { + result.subregions_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRegion) + } + + static { + defaultInstance = new OsmAndRegion(true); + net.osmand.map.OsmandRegionInfo.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRegion) + } + + + static { + } + + public static void internalForceInit() {} + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/OsmAnd-java/src/net/osmand/map/RegionCountry.java b/OsmAnd-java/src/net/osmand/map/RegionCountry.java new file mode 100644 index 0000000000..a8db5be963 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/RegionCountry.java @@ -0,0 +1,110 @@ +package net.osmand.map; + +import gnu.trove.list.array.TIntArrayList; + +import java.util.ArrayList; +import java.util.List; + +import net.osmand.map.OsmandRegionInfo.OsmAndRegion; +import net.osmand.util.Algorithms; + +public class RegionCountry { + public String continentName; + public TIntArrayList tiles = new TIntArrayList(); + public int left, right, top, bottom; + public String name; + public RegionCountry parent; + + private List regions = new ArrayList(); + + public void add(int xdeg, int ydeg) { + if (tiles.size() == 0) { + left = right = xdeg; + top = bottom = ydeg; + } + left = Math.min(xdeg, left); + right = Math.max(xdeg, right); + bottom = Math.min(ydeg, bottom); + top = Math.max(ydeg, top); + tiles.add(xdeg); + tiles.add(ydeg); + } + + public int getTileSize() { + return tiles.size()/2; + } + + public int getLon(int i) { + return tiles.get(i*2); + } + + public int getLat(int i) { + return tiles.get(i*2 + 1); + } + + public void addSubregion(RegionCountry c) { + c.parent = this; + regions.add(c); + } + + public List getSubRegions() { + return regions; + } + + /*public TLongHashSet calculateTileSet(TLongHashSet t, int z) { + for (int j = 0; j < tiles.size(); j++) { + int kx = (int) MapUtils.getTileNumberX(z, getLon(j)); + int ex = (int) MapUtils.getTileNumberX(z, getLon(j) + 0.9999f); + int ky = (int) MapUtils.getTileNumberY(z, getLat(j)); + int ey = (int) MapUtils.getTileNumberY(z, getLat(j) - 0.9999f); + for (int x = kx; x <= ex; x++) { + for (int y = ky; y <= ey; y++) { + long v = (((long) y) << 31) + x; + t.add(v); + } + } + } + return t; + }*/ + + public static RegionCountry construct(OsmAndRegion reg) { + RegionCountry rc = new RegionCountry(); + if (reg.hasContinentName()) { + rc.continentName = reg.getContinentName(); + } + rc.name = reg.getName(); + int px = 0; + int py = 0; + for (int i = 0; i < reg.getDegXCount(); i++) { + px = reg.getDegX(i) + px; + py = reg.getDegY(i) + py; + rc.add(px, py); + } + for (int i = 0; i < reg.getSubregionsCount(); i++) { + rc.addSubregion(construct(reg.getSubregions(i))); + } + return rc; + } + + public OsmAndRegion convert() { + OsmAndRegion.Builder reg = OsmAndRegion.newBuilder(); + // System.out.println(r.name + " " + r.tiles.size() + " ?= " + r.calculateTileSet(new TLongHashSet(), 8).size()); + int px = 0; + int py = 0; + for (int i = 0; i < this.getTileSize(); i++) { + reg.addDegX(this.getLon(i) - px); + reg.addDegY(this.getLat(i) - py); + px = this.getLon(i); + py = this.getLat(i); + } + String n = Algorithms.capitalizeFirstLetterAndLowercase(this.name.replace('_', ' ')); + reg.setName(n); + if(this.continentName != null) { + reg.setContinentName(Algorithms.capitalizeFirstLetterAndLowercase(this.continentName)); + } + for (RegionCountry c : this.regions) { + reg.addSubregions(c.convert()); + } + return reg.build(); + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/map/RegionRegistry.java b/OsmAnd-java/src/net/osmand/map/RegionRegistry.java new file mode 100644 index 0000000000..b13be09cb4 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/RegionRegistry.java @@ -0,0 +1,44 @@ +package net.osmand.map; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import net.osmand.PlatformUtil; +import net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo; + +import org.apache.commons.logging.Log; + +public class RegionRegistry { + public static final String fileName = "countries.reginfo"; + private static final Log log = PlatformUtil.getLog(RegionRegistry.class); + private static RegionRegistry r = null; + + private List countries = new ArrayList(); + + public static RegionRegistry getRegionRegistry(){ + if(r == null) { + try { + long t = -System.currentTimeMillis(); + r = new RegionRegistry(); + InputStream in = RegionRegistry.class.getResourceAsStream(RegionRegistry.fileName); + OsmAndRegionInfo regInfo = OsmAndRegionInfo.newBuilder().mergeFrom(in).build(); + for(int j = 0; j < regInfo.getRegionInfo().getRegionsCount(); j++) { + r.countries.add(RegionCountry.construct(regInfo.getRegionInfo().getRegions(j))); + } + t += System.currentTimeMillis(); + log.info("Initialize regions from file" + t + " ms"); + } catch (IOException e) { + log.error("IO exception reading regions", e); + } + } + return r; + } + + + public List getCountries() { + return countries; + } + +} diff --git a/OsmAnd-java/src/net/osmand/map/TileSourceManager.java b/OsmAnd-java/src/net/osmand/map/TileSourceManager.java new file mode 100644 index 0000000000..d374e00d8f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/map/TileSourceManager.java @@ -0,0 +1,482 @@ +package net.osmand.map; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.URL; +import java.net.URLConnection; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import net.osmand.PlatformUtil; + +import org.apache.commons.logging.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import bsh.Interpreter; + + +public class TileSourceManager { + private static final Log log = PlatformUtil.getLog(TileSourceManager.class); + private static final String RULE_BEANSHELL = "beanshell"; + public static final String RULE_YANDEX_TRAFFIC = "yandex_traffic"; + private static final String RULE_WMS = "wms_tile"; + + public static class TileSourceTemplate implements ITileSource { + private int maxZoom; + private int minZoom; + private String name; + protected int tileSize; + protected String urlToLoad; + protected String ext; + private int avgSize; + private int bitDensity; + private boolean ellipticYTile; + private String rule; + private boolean isRuleAcceptable = true; + + public TileSourceTemplate(String name, String urlToLoad, String ext, int maxZoom, int minZoom, int tileSize, int bitDensity, + int avgSize) { + this.maxZoom = maxZoom; + this.minZoom = minZoom; + this.name = name; + this.tileSize = tileSize; + this.urlToLoad = urlToLoad; + this.ext = ext; + this.avgSize = avgSize; + this.bitDensity = bitDensity; + } + + public void setEllipticYTile(boolean ellipticYTile) { + this.ellipticYTile = ellipticYTile; + } + + @Override + public boolean isEllipticYTile() { + return ellipticYTile; + } + + @Override + public int getBitDensity() { + return bitDensity; + } + + public int getAverageSize() { + return avgSize; + } + + @Override + public int getMaximumZoomSupported() { + return maxZoom; + } + + @Override + public int getMinimumZoomSupported() { + return minZoom; + } + + @Override + public String getName() { + return name; + } + + @Override + public int getTileSize() { + return tileSize; + } + + @Override + public String getTileFormat() { + return ext; + } + + public boolean isRuleAcceptable() { + return isRuleAcceptable; + } + + public void setRuleAcceptable(boolean isRuleAcceptable) { + this.isRuleAcceptable = isRuleAcceptable; + } + + @Override + public String getUrlToLoad(int x, int y, int zoom) { + // use int to string not format numbers! (non-nls) + if (urlToLoad == null) { + return null; + } + return MessageFormat.format(urlToLoad, zoom + "", x + "", y + ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + + public String getUrlTemplate() { + return urlToLoad; + } + + @Override + public boolean couldBeDownloadedFromInternet() { + return urlToLoad != null; + } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TileSourceTemplate other = (TileSourceTemplate) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + public void setRule(String rule) { + this.rule = rule; + } + + public String getRule() { + return rule; + } + } + + private static Map readMetaInfoFile(File dir) { + Map keyValueMap = new LinkedHashMap(); + try { + + File metainfo = new File(dir, ".metainfo"); //$NON-NLS-1$ + if (metainfo.exists()) { + BufferedReader reader = new BufferedReader(new InputStreamReader( + new FileInputStream(metainfo), "UTF-8")); //$NON-NLS-1$ + String line; + String key = null; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.startsWith("[")) { + key = line.substring(1, line.length() - 1).toLowerCase(); + } else if (key != null && line.length() > 0) { + keyValueMap.put(key, line); + key = null; + } + } + reader.close(); + } + } catch (IOException e) { + log.error("Error reading metainfo file " + dir.getAbsolutePath(), e); + } + return keyValueMap; + } + + private static int parseInt(Map attributes, String value, int def){ + String val = attributes.get(value); + if(val == null){ + return def; + } + try { + return Integer.parseInt(val); + } catch (NumberFormatException e) { + return def; + } + } + + public static void createMetaInfoFile(File dir, TileSourceTemplate tm, boolean override) throws IOException { + File metainfo = new File(dir, ".metainfo"); //$NON-NLS-1$ + Map properties = new LinkedHashMap(); + if (tm instanceof BeanShellTileSourceTemplate) { + properties.put("rule", RULE_BEANSHELL); + } + if (tm.getUrlTemplate() == null) { + return; + } + properties.put("url_template", tm.getUrlTemplate()); + + properties.put("ext", tm.getTileFormat()); + properties.put("min_zoom", tm.getMinimumZoomSupported() + ""); + properties.put("max_zoom", tm.getMaximumZoomSupported() + ""); + properties.put("tile_size", tm.getTileSize() + ""); + properties.put("img_density", tm.getBitDensity() + ""); + properties.put("avg_img_size", tm.getAverageSize() + ""); + + if (tm.isEllipticYTile()) { + properties.put("ellipsoid", tm.isEllipticYTile() + ""); + } + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(metainfo))); + for (String key : properties.keySet()) { + writer.write("[" + key + "]\n" + properties.get(key) + "\n"); + } + writer.close(); + } + + public static boolean isTileSourceMetaInfoExist(File dir){ + return new File(dir, ".metainfo").exists() || new File(dir, "url").exists(); + } + + /** + * @param dir + * @return doesn't return null + */ + public static TileSourceTemplate createTileSourceTemplate(File dir) { + // read metainfo file + Map metaInfo = readMetaInfoFile(dir); + boolean ruleAcceptable = true; + if(!metaInfo.isEmpty()){ + metaInfo.put("name", dir.getName()); + TileSourceTemplate template = createTileSourceTemplate(metaInfo); + if(template != null){ + return template; + } + ruleAcceptable = false; + } + + // try to find url + String ext = findOneTile(dir); + ext = ext == null ? ".jpg" : ext; + String url = null; + File readUrl = new File(dir, "url"); //$NON-NLS-1$ + try { + if (readUrl.exists()) { + BufferedReader reader = new BufferedReader(new InputStreamReader( + new FileInputStream(readUrl), "UTF-8")); //$NON-NLS-1$ + url = reader.readLine(); + // + url = url.replaceAll("\\{\\$z\\}", "{0}"); //$NON-NLS-1$ //$NON-NLS-2$ + url = url.replaceAll("\\{\\$x\\}", "{1}"); //$NON-NLS-1$//$NON-NLS-2$ + url = url.replaceAll("\\{\\$y\\}", "{2}"); //$NON-NLS-1$ //$NON-NLS-2$ + reader.close(); + } + } catch (IOException e) { + log.debug("Error reading url " + dir.getName(), e); //$NON-NLS-1$ + } + + TileSourceTemplate template = new TileSourceManager.TileSourceTemplate(dir.getName(), url, + ext, 18, 1, 256, 16, 20000); //$NON-NLS-1$ + template.setRuleAcceptable(ruleAcceptable); + return template; + } + + private static String findOneTile(File dir) { + if (dir.isDirectory()) { + for (File file : dir.listFiles()) { + if (file.isDirectory()) { + String ext = findOneTile(file); + if (ext != null) { + return ext; + } + } else { + String fileName = file.getName(); + if (fileName.endsWith(".tile")) { + String substring = fileName.substring(0, fileName.length() - ".tile".length()); + int extInt = substring.lastIndexOf("."); + if (extInt != -1) { + return substring.substring(extInt, substring.length()); + } + } + } + } + } + return null; + } + + public static java.util.List getKnownSourceTemplates() { + java.util.List list = new ArrayList(); + list.add(getMapnikSource()); + list.add(getCycleMapSource()); + return list; + + } + + public static TileSourceTemplate getMapnikSource(){ + return new TileSourceTemplate("Mapnik", "http://mapnik.osmand.net/{0}/{1}/{2}.png", ".png", 18, 1, 256, 8, 18000); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ + } + + public static TileSourceTemplate getCycleMapSource(){ + return new TileSourceTemplate("CycleMap", "http://b.tile.opencyclemap.org/cycle/{0}/{1}/{2}.png", ".png", 16, 1, 256, 32, 18000); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ + } + + + public static List downloadTileSourceTemplates(String versionAsUrl) { + final List templates = new ArrayList(); + try { + URLConnection connection = new URL("http://download.osmand.net//tile_sources.php?" + versionAsUrl).openConnection(); + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + parser.setInput(connection.getInputStream(), "UTF-8"); + int tok; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + String name = parser.getName(); + if (name.equals("tile_source")) { + Map attrs = new LinkedHashMap(); + for(int i=0; i< parser.getAttributeCount(); i++) { + attrs.put(parser.getAttributeName(i), parser.getAttributeValue(i)); + } + TileSourceTemplate template = createTileSourceTemplate(attrs); + if (template != null) { + templates.add(template); + } + } + } + } + } catch (IOException e) { + log.error("Exception while downloading tile sources", e); + return null; + } catch (XmlPullParserException e) { + log.error("Exception while downloading tile sources", e); + return null; + } + return templates; + } + + private static TileSourceTemplate createTileSourceTemplate(Map attrs) { + TileSourceTemplate template = null; + String rule = attrs.get("rule"); + if(rule == null){ + template = createSimpleTileSourceTemplate(attrs, false); + } else if(RULE_BEANSHELL.equalsIgnoreCase(rule)){ + template = createBeanshellTileSourceTemplate(attrs); + } else if (RULE_WMS.equalsIgnoreCase(rule)) { + template = createWmsTileSourceTemplate(attrs); + } else if (RULE_YANDEX_TRAFFIC.equalsIgnoreCase(rule)) { + template = createSimpleTileSourceTemplate(attrs, true); + } else { + return null; + } + if(template != null){ + template.setRule(rule); + } + return template; + } + + + private static TileSourceTemplate createWmsTileSourceTemplate(Map attributes) { + String name = attributes.get("name"); + String layer = attributes.get("layer"); + String urlTemplate = attributes.get("url_template"); + + if (name == null || urlTemplate == null || layer == null) { + return null; + } + int maxZoom = parseInt(attributes, "max_zoom", 18); + int minZoom = parseInt(attributes, "min_zoom", 5); + int tileSize = parseInt(attributes, "tile_size", 256); + String ext = attributes.get("ext") == null ? ".jpg" : attributes.get("ext"); + int bitDensity = parseInt(attributes, "img_density", 16); + int avgTileSize = parseInt(attributes, "avg_img_size", 18000); + urlTemplate = " http://whoots.mapwarper.net/tms/{0}/{1}/{2}/"+layer+"/"+urlTemplate; + TileSourceTemplate templ = new TileSourceTemplate(name, urlTemplate, ext, maxZoom, minZoom, tileSize, bitDensity, avgTileSize); + return templ; + } + + + + private static TileSourceTemplate createSimpleTileSourceTemplate(Map attributes, boolean ignoreTemplate) { + String name = attributes.get("name"); + String urlTemplate = attributes.get("url_template"); + if (name == null || (urlTemplate == null && !ignoreTemplate)) { + return null; + } + if(urlTemplate != null){ + urlTemplate.replace("${x}", "{1}").replace("${y}", "{2}").replace("${z}", "{0}"); + } + int maxZoom = parseInt(attributes, "max_zoom", 18); + int minZoom = parseInt(attributes, "min_zoom", 5); + int tileSize = parseInt(attributes, "tile_size", 256); + String ext = attributes.get("ext") == null ? ".jpg" : attributes.get("ext"); + int bitDensity = parseInt(attributes, "img_density", 16); + int avgTileSize = parseInt(attributes, "avg_img_size", 18000); + boolean ellipsoid = false; + if (Boolean.parseBoolean(attributes.get("ellipsoid"))) { + ellipsoid = true; + } + TileSourceTemplate templ = new TileSourceTemplate(name, urlTemplate, ext, maxZoom, minZoom, tileSize, bitDensity, avgTileSize); + templ.setEllipticYTile(ellipsoid); + return templ; + } + + private static TileSourceTemplate createBeanshellTileSourceTemplate(Map attributes) { + String name = attributes.get("name"); + String urlTemplate = attributes.get("url_template"); + if (name == null || urlTemplate == null) { + return null; + } + int maxZoom = parseInt(attributes, "max_zoom", 18); + int minZoom = parseInt(attributes, "min_zoom", 5); + int tileSize = parseInt(attributes, "tile_size", 256); + String ext = attributes.get("ext") == null ? ".jpg" : attributes.get("ext"); + int bitDensity = parseInt(attributes, "img_density", 16); + int avgTileSize = parseInt(attributes, "avg_img_size", 18000); + boolean ellipsoid = false; + if (Boolean.parseBoolean(attributes.get("ellipsoid"))) { + ellipsoid = true; + } + TileSourceTemplate templ; + templ = new BeanShellTileSourceTemplate(name, urlTemplate, ext, maxZoom, minZoom, tileSize, bitDensity, avgTileSize); + templ.setEllipticYTile(ellipsoid); + return templ; + } + + public static class BeanShellTileSourceTemplate extends TileSourceTemplate { + + Interpreter bshInterpreter; + + public BeanShellTileSourceTemplate(String name, String urlToLoad, String ext, + int maxZoom, int minZoom, int tileSize, int bitDensity, int avgSize) { + super(name, urlToLoad, ext, maxZoom, minZoom, tileSize, bitDensity, avgSize); + bshInterpreter = new Interpreter(); + try { + bshInterpreter.eval(urlToLoad); + bshInterpreter.getClassManager().setClassLoader(new ClassLoader() { + @Override + public URL getResource(String resName) { + return null; + } + + @Override + public InputStream getResourceAsStream(String resName) { + return null; + } + + @Override + public Class loadClass(String className) throws ClassNotFoundException { + throw new ClassNotFoundException("Error requesting " + className); + } + }); + } catch (bsh.EvalError e) { + log.error("Error executing the map init script " + urlToLoad, e); + } + } + + @Override + public String getUrlToLoad(int x, int y, int zoom) { + try { + return (String) bshInterpreter.eval("getTileUrl("+zoom+","+x+","+y+");"); + } catch (bsh.EvalError e) { + log.error(e.getMessage(), e); + return null; + } + } + + } + + +} diff --git a/OsmAnd-java/src/net/osmand/map/countries.reginfo b/OsmAnd-java/src/net/osmand/map/countries.reginfo new file mode 100644 index 0000000000000000000000000000000000000000..01be8ebf4e9a4c3c25145d0ce9b1787fb30daf8e GIT binary patch literal 331291 zcmc${34mSKStfYz+iNd9$(B^|Qo547T)Vu+j^o6Mb>%g(Y{!yqVn~=L)syO3rFu#& zcBE+-CN!DQFhc{~K$@Ka5{8Bbx*@D-LK7fOfQD&iAl=|VfP{S@JwQVT_xGQ>eBZfs zUsXBrFi)lT&ibE!JOA0w8UOlk+B5er{!?u{=(e8PSX&$Pq945P@!$%y0%emM9s25p2h2>ww9WQl^?{-Ox`>%v7?Z~FNnFwHUh z|1cnTy&ML|UF;9%Az=poY5V=7BJ{Tlmy6GR$ZwyJ{=Y5Q|L$7O)FAkqJV6dV2!3;O z&?h$q-SW^&McBcQ7tTBWQ{fDLnofrczDy(1­#2^oPIZTnE-{lE|KgmPV_}lM! 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 nSdm~L%!Sfpp> amenityTypeNameToTagVal = null; + private Map amenityNameToType = null; + private Map amenityTypes = null; + + public MapRenderingTypes(String fileName){ + this.resourceName = fileName; + } + + private static MapRenderingTypes DEFAULT_INSTANCE = null; + + public static MapRenderingTypes getDefault() { + if(DEFAULT_INSTANCE == null){ + DEFAULT_INSTANCE = new MapRenderingTypes(null); + } + return DEFAULT_INSTANCE; + } + + private Map getAmenityEncodingRuleTypes(){ + checkIfInitNeeded(); + return amenityTypes; + } + + protected void checkIfInitNeeded() { + if(amenityTypes == null) { + amenityTypes = new LinkedHashMap(); + init(); + } + } + + public Map> getAmenityTypeNameToTagVal() { + if (amenityTypeNameToTagVal == null) { + Map types = getAmenityEncodingRuleTypes(); + amenityTypeNameToTagVal = new LinkedHashMap>(); + for(AmenityRuleType type : types.values()){ + if(type.poiCategory != null && type.targetTagValue == null) { + if(!amenityTypeNameToTagVal.containsKey(type.poiCategory)) { + amenityTypeNameToTagVal.put(type.poiCategory, new TreeMap()); + } + String name = type.value; + if (name != null) { + if (type.poiPrefix != null) { + name = type.poiPrefix + name; + amenityTypeNameToTagVal.get(type.poiCategory).put(name, type.tag + " " + type.value); + } else { + amenityTypeNameToTagVal.get(type.poiCategory).put(name, type.tag); + } + } + } + } + } + return amenityTypeNameToTagVal; + } + + + public Map getAmenityNameToType(){ + if(amenityNameToType == null){ + amenityNameToType = new LinkedHashMap(); + Map> map = getAmenityTypeNameToTagVal(); + Iterator>> iter = map.entrySet().iterator(); + while(iter.hasNext()){ + Entry> e = iter.next(); + for(String t : e.getValue().keySet()){ + if (t != null) { + if (amenityNameToType.containsKey(t)) { + System.err.println("Conflict " + t + " " + amenityNameToType.get(t) + " <> " + e.getKey()); + } + amenityNameToType.put(t, e.getKey()); + } + } + } + } + return amenityNameToType; + } + + public Collection getAmenitySubCategories(AmenityType t){ + Map> amenityTypeNameToTagVal = getAmenityTypeNameToTagVal(); + if(!amenityTypeNameToTagVal.containsKey(t)){ + return Collections.emptyList(); + } + return amenityTypeNameToTagVal.get(t).keySet(); + } + + + public String getAmenitySubtype(String tag, String val){ + String prefix = getAmenitySubtypePrefix(tag, val); + if(prefix != null){ + return prefix + val; + } + return val; + } + + public String getAmenitySubtypePrefix(String tag, String val){ + Map rules = getAmenityEncodingRuleTypes(); + AmenityRuleType rt = rules.get(constructRuleKey(tag, val)); + if(rt != null && rt.poiPrefix != null) { + return rt.poiPrefix; + } + rt = rules.get(constructRuleKey(tag, null)); + if(rt != null && rt.poiPrefix != null) { + return rt.poiPrefix; + } + return null; + } + + public AmenityType getAmenityType(String tag, String val){ + return getAmenityType(tag, val, false); + } + + public AmenityType getAmenityType(String tag, String val, boolean relation){ + // register amenity types + Map rules = getAmenityEncodingRuleTypes(); + AmenityRuleType rt = rules.get(constructRuleKey(tag, val)); + if(rt != null && rt.poiSpecified) { + if(relation && !rt.relation) { + return null; + } + return rt.poiCategory; + } + rt = rules.get(constructRuleKey(tag, null)); + if(rt != null && rt.poiSpecified) { + if(relation && !rt.relation) { + return null; + } + return rt.poiCategory; + } + return null; + } + + + protected void init(){ + InputStream is; + try { + if(resourceName == null){ + is = MapRenderingTypes.class.getResourceAsStream("rendering_types.xml"); //$NON-NLS-1$ + } else { + is = new FileInputStream(resourceName); + } + long time = System.currentTimeMillis(); + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + int tok; + parser.setInput(is, "UTF-8"); + String poiParentCategory = null; + String poiParentPrefix = null; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + String name = parser.getName(); + if (name.equals("category")) { //$NON-NLS-1$ + poiParentCategory = parser.getAttributeValue("","poi_category"); + poiParentPrefix = parser.getAttributeValue("","poi_prefix"); + parseCategoryFromXml(parser, poiParentCategory, poiParentPrefix); + } else if (name.equals("type")) { + parseTypeFromXML(parser, poiParentCategory, poiParentPrefix); + } else if (name.equals("routing_type")) { + parseRouteTagFromXML(parser); + } + } + } + log.info("Time to init " + (System.currentTimeMillis() - time)); //$NON-NLS-1$ + is.close(); + } catch (IOException e) { + log.error("Unexpected error", e); //$NON-NLS-1$ + e.printStackTrace(); + throw new RuntimeException(e); + } catch (RuntimeException e) { + log.error("Unexpected error", e); //$NON-NLS-1$ + e.printStackTrace(); + throw e; + } catch (XmlPullParserException e) { + log.error("Unexpected error", e); //$NON-NLS-1$ + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + protected void parseRouteTagFromXML(XmlPullParser parser) { + } + + protected void parseTypeFromXML(XmlPullParser parser, String poiParentCategory, String poiParentPrefix) { + AmenityRuleType rtype = new AmenityRuleType(); + rtype.tag = parser.getAttributeValue("", "tag"); //$NON-NLS-1$ + rtype.value = parser.getAttributeValue("", "value"); //$NON-NLS-1$ + if (rtype.value != null && rtype.value.length() == 0) { //$NON-NLS-1$ + rtype.value = null; + } + if (poiParentCategory != null) { + rtype.poiCategory = AmenityType.valueOf(poiParentCategory.toUpperCase()); + rtype.poiSpecified = true; + } + if (poiParentPrefix != null) { + rtype.poiPrefix = poiParentPrefix; + } + + String poiCategory = parser.getAttributeValue("", "poi_category"); + if (poiCategory != null) { + rtype.poiSpecified = true; + if (poiCategory.length() == 0) { + rtype.poiCategory = null; + } else { + rtype.poiCategory = AmenityType.valueOf(poiCategory.toUpperCase()); + } + } + String poiPrefix = parser.getAttributeValue("", "poi_prefix"); + if (poiPrefix != null) { + rtype.poiPrefix = poiPrefix; + } + rtype.relation = Boolean.parseBoolean(parser.getAttributeValue("", "relation")); + if (rtype.poiSpecified) { + registerAmenityType(rtype.tag, rtype.value, rtype); + String targetTag = parser.getAttributeValue("", "target_tag"); + String targetValue = parser.getAttributeValue("", "target_value"); + if (targetTag != null || targetValue != null) { + if (targetTag == null) { + targetTag = rtype.tag; + } + if (targetValue == null) { + targetValue = rtype.value; + } + rtype.targetTagValue = amenityTypes.get(constructRuleKey(targetTag, targetValue)); + } + } + } + + private AmenityRuleType registerAmenityType(String tag, String val, AmenityRuleType rt) { + String keyVal = constructRuleKey(tag, val); + if (amenityTypes.containsKey(keyVal)) { + throw new RuntimeException("Duplicate " + keyVal); + } else { + amenityTypes.put(keyVal, rt); + return rt; + } + } + + protected void parseCategoryFromXml(XmlPullParser parser, String poiParentCategory, String poiParentPrefix) { + String tag = parser.getAttributeValue("","poi_tag"); + if (tag != null) { + AmenityRuleType rtype = new AmenityRuleType(); + rtype.poiCategory = AmenityType.valueOf(poiParentCategory.toUpperCase()); + rtype.poiSpecified = true; + rtype.relation = Boolean.parseBoolean(parser.getAttributeValue("", "relation")); + rtype.poiPrefix = poiParentPrefix; + rtype.tag = tag; + registerAmenityType(tag, null, rtype); + } + } + + protected static String constructRuleKey(String tag, String val) { + if(val == null || val.length() == 0){ + return tag; + } + return tag + TAG_DELIMETER + val; + } + + protected static String getTagKey(String tagValue) { + int i = tagValue.indexOf(TAG_DELIMETER); + if(i >= 0){ + return tagValue.substring(0, i); + } + return tagValue; + } + + protected static String getValueKey(String tagValue) { + int i = tagValue.indexOf(TAG_DELIMETER); + if(i >= 0){ + return tagValue.substring(i + 1); + } + return null; + } + + + private static class AmenityRuleType { + protected String tag; + protected String value; + protected String poiPrefix; + protected boolean relation; + protected AmenityType poiCategory; + protected boolean poiSpecified; + protected AmenityRuleType targetTagValue; + } + +} + diff --git a/OsmAnd-java/src/net/osmand/osm/edit/Entity.java b/OsmAnd-java/src/net/osmand/osm/edit/Entity.java new file mode 100644 index 0000000000..adeae27dd6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/Entity.java @@ -0,0 +1,238 @@ +package net.osmand.osm.edit; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +import net.osmand.data.LatLon; +import net.osmand.osm.edit.OSMSettings.OSMTagKey; + + +public abstract class Entity { + public enum EntityType { + NODE, + WAY, + RELATION, + WAY_BOUNDARY; + + public static EntityType valueOf(Entity e){ + if(e instanceof Node){ + return NODE; + } else if(e instanceof Way){ + return WAY; + } else if(e instanceof Relation){ + return RELATION; + } + return null; + } + } + + public static class EntityId { + private final EntityType type; + private final Long id; + + + public EntityId(EntityType type, Long id){ + this.type = type; + this.id = id; + } + + public static EntityId valueOf(Entity e){ + return new EntityId(EntityType.valueOf(e), e.getId()); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public String toString() { + return type + " " + id; //$NON-NLS-1$ + } + + public EntityType getType() { + return type; + } + + public Long getId() { + return id; + } + + public String getOsmUrl() { + final String browseUrl = "http://www.openstreetmap.org/browse/"; + if (type == EntityType.NODE) + return browseUrl + "node/" + id; + if (type == EntityType.WAY) + return browseUrl + "way/" + id; + return null; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + EntityId other = (EntityId) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + return true; + } + + } + + // lazy initializing + private Map tags = null; + private final long id; + private boolean dataLoaded; + + public Entity(long id) { + this.id = id; + } + + public Entity(Entity copy, long id) { + this.id = id; + for (String t : copy.getTagKeySet()) { + putTag(t, copy.getTag(t)); + } + this.dataLoaded = copy.dataLoaded; + } + + public long getId() { + return id; + } + + public String removeTag(String key){ + return tags.remove(key); + } + + public void removeTags(String[] keys){ + if (tags != null){ + for (String key : keys){ + tags.remove(key); + } + } + } + + public String putTag(String key, String value){ + if(tags == null){ + tags = new LinkedHashMap(); + } + return tags.put(key, value); + } + + public String getTag(OSMTagKey key){ + return getTag(key.getValue()); + } + + public String getTag(String key){ + if(tags == null){ + return null; + } + return tags.get(key); + } + + public Map getTags() { + if(tags == null){ + return Collections.emptyMap(); + } + return Collections.unmodifiableMap(tags); + } + + + public Collection getTagKeySet(){ + if(tags == null){ + return Collections.emptyList(); + } + return tags.keySet(); + } + + public abstract void initializeLinks(Map entities); + + + /** + * @return middle point for entity + */ + public abstract LatLon getLatLon(); + + + public boolean isVirtual(){ + return id < 0; + } + + public String getOsmUrl() { + return EntityId.valueOf(this).getOsmUrl(); + } + + @Override + public String toString() { + return EntityId.valueOf(this).toString(); + } + @Override + public int hashCode() { + if (id < 0) { + return System.identityHashCode(this); + } + return (int) id; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Entity other = (Entity) obj; + if (id != other.id) + return false; + // virtual are not equal + if(id < 0){ + return false; + } + return true; + } + + public Set getIsInNames() { + String values = getTag(OSMTagKey.IS_IN); + if (values == null) { + return Collections.emptySet(); + } + if (values.indexOf(';') != -1) { + String[] splitted = values.split(";"); + Set set = new HashSet(splitted.length); + for (int i = 0; i < splitted.length; i++) { + set.add(splitted[i].trim()); + } + return set; + } + return Collections.singleton(values.trim()); + } + + public void entityDataLoaded() { + this.dataLoaded = true; + } + + public boolean isDataLoaded() { + return dataLoaded; + } +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/EntityInfo.java b/OsmAnd-java/src/net/osmand/osm/edit/EntityInfo.java new file mode 100644 index 0000000000..4e22156d13 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/EntityInfo.java @@ -0,0 +1,67 @@ +package net.osmand.osm.edit; + +/** + * Additional entity info + */ +public class EntityInfo { + String timestamp; + String uid; + String user; + String visible; + String version; + String changeset; + String action; + + + public EntityInfo() { + } + + public EntityInfo(String version) { + this.version = version; + } + + + public String getAction() { + return action; + } + public void setAction(String action) { + this.action = action; + } + public String getTimestamp() { + return timestamp; + } + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + public String getUid() { + return uid; + } + public void setUid(String uid) { + this.uid = uid; + } + public String getUser() { + return user; + } + public void setUser(String user) { + this.user = user; + } + public String getVisible() { + return visible; + } + public void setVisible(String visible) { + this.visible = visible; + } + public String getVersion() { + return version; + } + public void setVersion(String version) { + this.version = version; + } + public String getChangeset() { + return changeset; + } + public void setChangeset(String changeset) { + this.changeset = changeset; + } + +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/EntityParser.java b/OsmAnd-java/src/net/osmand/osm/edit/EntityParser.java new file mode 100644 index 0000000000..3ad3152395 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/EntityParser.java @@ -0,0 +1,180 @@ +package net.osmand.osm.edit; + +import java.util.Collection; +import java.util.List; + +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.data.Building; +import net.osmand.data.City; +import net.osmand.data.City.CityType; +import net.osmand.data.LatLon; +import net.osmand.data.MapObject; +import net.osmand.data.TransportStop; +import net.osmand.osm.MapRenderingTypes; +import net.osmand.osm.edit.OSMSettings.OSMTagKey; +import net.osmand.util.Algorithms; + +public class EntityParser { + + private static void parseMapObject(MapObject mo, Entity e) { + mo.setId(e.getId()); + if(mo instanceof Amenity) { + mo.setId((e.getId() << 1) + ((e instanceof Node) ? 0 : 1)); + } + if (mo.getName().length() == 0) { + mo.setName(e.getTag(OSMTagKey.NAME)); + } + if (mo.getEnName().length() == 0) { + mo.setEnName(e.getTag(OSMTagKey.NAME_EN)); + if (mo.getName().length() == 0) { + mo.setName(mo.getEnName()); + } + } + if (mo.getLocation() == null) { + LatLon l = OsmMapUtils.getCenter(e); + if (l != null) { + mo.setLocation(l.getLatitude(), l.getLongitude()); + } + } + if (mo.getName().length() == 0) { + setNameFromOperator(mo, e); + } + if (mo.getName().length() == 0) { + setNameFromRef(mo, e); + } + } + + private static void setNameFromRef(MapObject mo, Entity e) { + String ref = e.getTag(OSMTagKey.REF); + if(ref != null){ + mo.setName(ref); + } + } + + private static void setNameFromOperator(MapObject mo,Entity e) { + String op = e.getTag(OSMTagKey.OPERATOR); + if (op == null) + return; + String ref = e.getTag(OSMTagKey.REF); + if (ref != null) + op += " [" + ref + "]"; + mo.setName(op); + } + + public static void parseAmenity(Amenity am, Entity entity) { + parseMapObject(am, entity); + + } + + public static Amenity parseAmenity(Entity entity, AmenityType type, String subtype) { + Amenity am = new Amenity(); + parseAmenity(am, entity); + am.setType(type); + am.setSubType(subtype); + am.setOpeningHours(entity.getTag(OSMTagKey.OPENING_HOURS)); + am.setPhone(entity.getTag(OSMTagKey.PHONE)); + if (am.getPhone() == null) { + am.setPhone(entity.getTag(OSMTagKey.CONTACT_PHONE)); + } + String siteUrl = entity.getTag(OSMTagKey.WIKIPEDIA); + if (siteUrl != null) { + if (!siteUrl.startsWith("http://")) { //$NON-NLS-1$ + int i = siteUrl.indexOf(':'); + if (i == -1) { + siteUrl = "http://en.wikipedia.org/wiki/" + siteUrl; //$NON-NLS-1$ + } else { + siteUrl = "http://" + siteUrl.substring(0, i) + ".wikipedia.org/wiki/" + siteUrl.substring(i + 1); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + } else { + siteUrl = entity.getTag(OSMTagKey.WEBSITE); + if (siteUrl == null) { + siteUrl = entity.getTag(OSMTagKey.URL); + if (siteUrl == null) { + siteUrl = entity.getTag(OSMTagKey.CONTACT_WEBSITE); + } + } + if (siteUrl != null && !siteUrl.startsWith("http://")) { + siteUrl = "http://" + siteUrl; + } + } + am.setSite(siteUrl); + am.setDescription(entity.getTag(OSMTagKey.DESCRIPTION)); + return am; + } + + public static List parseAmenities(MapRenderingTypes renderingTypes, + Entity entity, List amenitiesList){ + // it could be collection of amenities + boolean relation = entity instanceof Relation; + Collection keySet = entity.getTagKeySet(); + if (!keySet.isEmpty()) { + for (String t : keySet) { + AmenityType type = renderingTypes.getAmenityType(t, entity.getTag(t), relation); + if (type != null) { + String subtype = renderingTypes.getAmenitySubtype(t, entity.getTag(t)); + Amenity a = parseAmenity(entity, type, subtype); + if(checkAmenitiesToAdd(a, amenitiesList) && !"no".equals(subtype)){ + amenitiesList.add(a); + } + } + } + } + return amenitiesList; + } + + private static boolean checkAmenitiesToAdd(Amenity a, List amenitiesList){ + // check amenity for duplication + for(Amenity b : amenitiesList){ + if(b.getType() == a.getType() && Algorithms.objectEquals(a.getSubType(), b.getSubType())){ + return false; + } + } + return true; + + } + + public static Building parseBuilding(Entity e){ + Building b = new Building(); + parseMapObject(b, e); + // try to extract postcode + String p = e.getTag(OSMTagKey.ADDR_POSTCODE); + if(p == null) { + p = e.getTag(OSMTagKey.POSTAL_CODE); + } + b.setPostcode(p); + return b; + } + + public static City parseCity(Node el) { + return parseCity(el, CityType.valueFromString(el.getTag(OSMTagKey.PLACE))); + } + + public static City parseCity(Entity el, CityType t) { + if(t == null) { + return null; + } + City c = new City(t); + parseMapObject(c, el); + String isin = el.getTag(OSMTagKey.IS_IN); + isin = isin != null ? isin.toLowerCase() : null; + c.setIsin(isin); + return c; + } + + + public static OsmTransportRoute parserRoute(Relation r, String ref){ + OsmTransportRoute rt = new OsmTransportRoute(); + parseMapObject(rt, r); + rt.setRef(ref); + return rt; + } + + public static TransportStop parseTransportStop(Entity e){ + TransportStop st = new TransportStop(); + parseMapObject(st, e); + return st; + } + +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/Node.java b/OsmAnd-java/src/net/osmand/osm/edit/Node.java new file mode 100644 index 0000000000..a0a8c36e93 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/Node.java @@ -0,0 +1,55 @@ +package net.osmand.osm.edit; + +import java.io.Serializable; +import java.util.Map; + +import net.osmand.data.LatLon; + +public class Node extends Entity implements Serializable { + + private static final long serialVersionUID = -2981499160640211082L; + private double latitude; + private double longitude; + // currently not used +// private boolean visible = true; + + public Node(double latitude, double longitude, long id){ + super(id); + this.latitude = latitude; + this.longitude = longitude; + } + + public Node(Node n, long newId) { + super(n, newId); + this.latitude = n.latitude; + this.longitude = n.longitude; + } + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + @Override + public LatLon getLatLon() { + return new LatLon(latitude, longitude); + } + + @Override + public void initializeLinks(Map entities) { + // nothing to initialize + + } + +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/OSMSettings.java b/OsmAnd-java/src/net/osmand/osm/edit/OSMSettings.java new file mode 100644 index 0000000000..f30a196dd6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/OSMSettings.java @@ -0,0 +1,109 @@ +package net.osmand.osm.edit; + +public class OSMSettings { + + public enum OSMTagKey { + NAME("name"), //$NON-NLS-1$ + NAME_EN("name:en"), //$NON-NLS-1$ + + // ways + HIGHWAY("highway"), //$NON-NLS-1$ + BUILDING("building"), //$NON-NLS-1$ + BOUNDARY("boundary"), //$NON-NLS-1$ + POSTAL_CODE("postal_code"), //$NON-NLS-1$ + RAILWAY("railway"), //$NON-NLS-1$ + ONEWAY("oneway"), //$NON-NLS-1$ + LAYER("layer"), //$NON-NLS-1$ + BRIDGE("bridge"), //$NON-NLS-1$ + TUNNEL("tunnel"), //$NON-NLS-1$ + TOLL("toll"), //$NON-NLS-1$ + JUNCTION("junction"), //$NON-NLS-1$ + + + // transport + ROUTE("route"), //$NON-NLS-1$ + ROUTE_MASTER("route_master"), //$NON-NLS-1$ + OPERATOR("operator"), //$NON-NLS-1$ + REF("ref"), //$NON-NLS-1$ + RCN_REF("rcn_ref"), //$NON-NLS-1$ + RWN_REF("rwn_ref"), //$NON-NLS-1$ + + // address + PLACE("place"), //$NON-NLS-1$ + ADDR_HOUSE_NUMBER("addr:housenumber"), //$NON-NLS-1$ + ADDR_STREET("addr:street"), //$NON-NLS-1$ + ADDR_STREET2("addr:street2"), //$NON-NLS-1$ + ADDR_CITY("addr:city"), //$NON-NLS-1$ + ADDR_POSTCODE("addr:postcode"), //$NON-NLS-1$ + ADDR_INTERPOLATION("addr:interpolation"), //$NON-NLS-1$ + ADDRESS_TYPE("address:type"), //$NON-NLS-1$ + ADDRESS_HOUSE("address:house"), //$NON-NLS-1$ + TYPE("type"), //$NON-NLS-1$ + IS_IN("is_in"), //$NON-NLS-1$ + LOCALITY("locality"), //$NON-NLS-1$ + + // POI + AMENITY("amenity"), //$NON-NLS-1$ + SHOP("shop"), //$NON-NLS-1$ + LANDUSE("landuse"), //$NON-NLS-1$ + OFFICE("office"), //$NON-NLS-1$ + EMERGENCY("emergency"), //$NON-NLS-1$ + MILITARY("military"), //$NON-NLS-1$ + ADMINISTRATIVE("administrative"), //$NON-NLS-1$ + MAN_MADE("man_made"), //$NON-NLS-1$ + BARRIER("barrier"), //$NON-NLS-1$ + LEISURE("leisure"), //$NON-NLS-1$ + TOURISM("tourism"), //$NON-NLS-1$ + SPORT("sport"), //$NON-NLS-1$ + HISTORIC("historic"), //$NON-NLS-1$ + NATURAL("natural"), //$NON-NLS-1$ + INTERNET_ACCESS("internet_access"), //$NON-NLS-1$ + + + CONTACT_WEBSITE("contact:website"), //$NON-NLS-1$ + CONTACT_PHONE("contact:phone"), //$NON-NLS-1$ + + OPENING_HOURS("opening_hours"), //$NON-NLS-1$ + PHONE("phone"), //$NON-NLS-1$ + DESCRIPTION("description"), //$NON-NLS-1$ + WEBSITE("website"), //$NON-NLS-1$ + URL("url"), //$NON-NLS-1$ + WIKIPEDIA("wikipedia"), //$NON-NLS-1$ + + ADMIN_LEVEL("admin_level"), //$NON-NLS-1$ + PUBLIC_TRANSPORT("public_transport") //$NON-NLS-1$ + ; + + private final String value; + private OSMTagKey(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + public enum OSMHighwayTypes { + TRUNK, MOTORWAY, PRIMARY, SECONDARY, RESIDENTIAL, TERTIARY, SERVICE, TRACK, + + // TODO is link needed? + TRUNK_LINK, MOTORWAY_LINK, PRIMARY_LINK, SECONDARY_LINK, RESIDENTIAL_LINK, TERTIARY_LINK, SERVICE_LINK, TRACK_LINK, + + } + + + public static boolean wayForCar(String tagHighway){ + if(tagHighway != null){ + String[] cars = new String[]{"trunk", "motorway", "primary", "secondary", "tertiary", "service", "residential", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ + "trunk_link", "motorway_link", "primary_link", "secondary_link", "residential_link", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + "tertiary_link", "track", "unclassified" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + for(String c : cars){ + if(c.equals(tagHighway)){ + return true; + } + } + } + return false; + } +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/OsmMapUtils.java b/OsmAnd-java/src/net/osmand/osm/edit/OsmMapUtils.java new file mode 100644 index 0000000000..b81e1411fd --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/OsmMapUtils.java @@ -0,0 +1,351 @@ +package net.osmand.osm.edit; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.osmand.data.LatLon; +import net.osmand.util.MapUtils; + +public class OsmMapUtils { + + public static double getDistance(Node e1, Node e2) { + return MapUtils.getDistance(e1.getLatitude(), e1.getLongitude(), e2.getLatitude(), e2.getLongitude()); + } + + public static double getDistance(Node e1, double latitude, double longitude) { + return MapUtils.getDistance(e1.getLatitude(), e1.getLongitude(), latitude, longitude); + } + + public static double getDistance(Node e1, LatLon point) { + return MapUtils.getDistance(e1.getLatitude(), e1.getLongitude(), point.getLatitude(), point.getLongitude()); + } + + public static LatLon getCenter(Entity e) { + if (e instanceof Node) { + return ((Node) e).getLatLon(); + } else if (e instanceof Way) { + return getWeightCenterForNodes(((Way) e).getNodes()); + } else if (e instanceof Relation) { + List list = new ArrayList(); + for (Entity fe : ((Relation) e).getMembers(null)) { + LatLon c = null; + // skip relations to avoid circular dependencies + if (!(fe instanceof Relation)) { + c = getCenter(fe); + } + if (c != null) { + list.add(c); + } + } + return getWeightCenter(list); + } + return null; + } + + public static LatLon getWeightCenter(Collection nodes) { + if (nodes.isEmpty()) { + return null; + } + double longitude = 0; + double latitude = 0; + for (LatLon n : nodes) { + longitude += n.getLongitude(); + latitude += n.getLatitude(); + } + return new LatLon(latitude / nodes.size(), longitude / nodes.size()); + } + + public static LatLon getWeightCenterForNodes(Collection nodes) { + if (nodes.isEmpty()) { + return null; + } + double longitude = 0; + double latitude = 0; + int count = 0; + for (Node n : nodes) { + if (n != null) { + count++; + longitude += n.getLongitude(); + latitude += n.getLatitude(); + } + } + if (count == 0) { + return null; + } + return new LatLon(latitude / count, longitude / count); + } + + public static LatLon getMathWeightCenterForNodes(Collection nodes) { + if (nodes.isEmpty()) { + return null; + } + double longitude = 0; + double latitude = 0; + double sumDist = 0; + Node prev = null; + for (Node n : nodes) { + if (n != null) { + if (prev == null) { + prev = n; + } else { + double dist = getDistance(prev, n); + sumDist += dist; + longitude += (prev.getLongitude() + n.getLongitude()) * dist / 2; + latitude += (n.getLatitude() + n.getLatitude()) * dist / 2; + prev = n; + } + } + } + if (sumDist == 0) { + if (prev == null) { + return null; + } + return prev.getLatLon(); + } + return new LatLon(latitude / sumDist, longitude / sumDist); + } + + public static void sortListOfEntities(List list, final double lat, final double lon) { + Collections.sort(list, new Comparator() { + @Override + public int compare(Entity o1, Entity o2) { + return Double.compare(MapUtils.getDistance(o1.getLatLon(), lat, lon), MapUtils.getDistance(o2.getLatLon(), lat, lon)); + } + }); + } + + public static void addIdsToList(Collection source, List ids) { + for (Entity e : source) { + ids.add(e.getId()); + } + } + + public static void simplifyDouglasPeucker(List n, int zoom, int epsilon, List result) { + if (zoom > 31) { + zoom = 31; + } + ArrayList l = new ArrayList(); + int first = 0; + int nsize = n.size(); + while (first < nsize) { + if (n.get(first) != null) { + break; + } + first++; + } + int last = nsize - 1; + while (last >= 0) { + if (n.get(last) != null) { + break; + } + last--; + } + if (last - first < 1) { + return; + } + // check for possible cycle + boolean checkCycle = true; + boolean cycle = false; + while (checkCycle && last > first) { + checkCycle = false; + + double x1 = MapUtils.getTileNumberX(zoom, n.get(first).getLongitude()); + double y1 = MapUtils.getTileNumberY(zoom, n.get(first).getLatitude()); + double x2 = MapUtils.getTileNumberX(zoom, n.get(last).getLongitude()); + double y2 = MapUtils.getTileNumberY(zoom, n.get(last).getLatitude()); + if (Math.abs(x1 - x2) + Math.abs(y1 - y2) < 0.001) { + last--; + cycle = true; + checkCycle = true; + } + } + if (last - first < 1) { + return; + } + simplifyDouglasPeucker(n, zoom, epsilon, l, first, last); + result.add(n.get(first)); + int lsize = l.size(); + for (int i = 0; i < lsize; i++) { + result.add(n.get(l.get(i))); + } + if (cycle) { + result.add(n.get(first)); + } + } + + private static void simplifyDouglasPeucker(List n, int zoom, int epsilon, List ints, int start, int end) { + double dmax = -1; + int index = -1; + for (int i = start + 1; i <= end - 1; i++) { + if (n.get(i) == null) { + continue; + } + double d = orthogonalDistance(zoom, n.get(start), n.get(end), n.get(i));// calculate distance from line + if (d > dmax) { + dmax = d; + index = i; + } + } + if (dmax >= epsilon) { + simplifyDouglasPeucker(n, zoom, epsilon, ints, start, index); + simplifyDouglasPeucker(n, zoom, epsilon, ints, index, end); + } else { + ints.add(end); + } + } + + private static double orthogonalDistance(int zoom, Node nodeLineStart, Node nodeLineEnd, Node node) { + LatLon p = MapUtils.getProjection(node.getLatitude(), node.getLongitude(), nodeLineStart.getLatitude(), + nodeLineStart.getLongitude(), nodeLineEnd.getLatitude(), nodeLineEnd.getLongitude()); + + double x1 = MapUtils.getTileNumberX(zoom, p.getLongitude()); + double y1 = MapUtils.getTileNumberY(zoom, p.getLatitude()); + double x2 = MapUtils.getTileNumberX(zoom, node.getLongitude()); + double y2 = MapUtils.getTileNumberY(zoom, node.getLatitude()); + double C = x2 - x1; + double D = y2 - y1; + return Math.sqrt(C * C + D * D); + } + + public static boolean isClockwiseWay(Way w) { + return isClockwiseWay(Collections.singletonList(w)); + } + + public static boolean isClockwiseWay(List ways) { + if (ways.isEmpty()) { + return true; + } + LatLon latLon = ways.get(0).getLatLon(); + double lat = latLon.getLatitude(); + double lon = 180; + double firstLon = -360; + boolean firstDirectionUp = false; + double previousLon = -360; + + double clockwiseSum = 0; + + Node prev = null; + boolean firstWay = true; + for (Way w : ways) { + List ns = w.getNodes(); + int startInd = 0; + int nssize = ns.size(); + if (firstWay && nssize > 0) { + prev = ns.get(0); + startInd = 1; + firstWay = false; + } + for (int i = startInd; i < nssize; i++) { + Node next = ns.get(i); + double rlon = ray_intersect_lon(prev, next, lat, lon); + if (rlon != -360d) { + boolean skipSameSide = (prev.getLatitude() <= lat) == (next.getLatitude() <= lat); + if (skipSameSide) { + continue; + } + boolean directionUp = prev.getLatitude() <= lat; + if (firstLon == -360) { + firstDirectionUp = directionUp; + firstLon = rlon; + } else { + boolean clockwise = (!directionUp) == (previousLon < rlon); + if (clockwise) { + clockwiseSum += Math.abs(previousLon - rlon); + } else { + clockwiseSum -= Math.abs(previousLon - rlon); + } + } + previousLon = rlon; + } + prev = next; + } + } + + if (firstLon != -360) { + boolean clockwise = (!firstDirectionUp) == (previousLon < firstLon); + if (clockwise) { + clockwiseSum += Math.abs(previousLon - firstLon); + } else { + clockwiseSum -= Math.abs(previousLon - firstLon); + } + } + + return clockwiseSum >= 0; + } + + // try to intersect from left to right + public static double ray_intersect_lon(Node node, Node node2, double latitude, double longitude) { + // a node below + Node a = node.getLatitude() < node2.getLatitude() ? node : node2; + // b node above + Node b = a == node2 ? node : node2; + if (latitude == a.getLatitude() || latitude == b.getLatitude()) { + latitude += 0.00000001d; + } + if (latitude < a.getLatitude() || latitude > b.getLatitude()) { + return -360d; + } else { + if (longitude < Math.min(a.getLongitude(), b.getLongitude())) { + return -360d; + } else { + if (a.getLongitude() == b.getLongitude() && longitude == a.getLongitude()) { + // the node on the boundary !!! + return longitude; + } + // that tested on all cases (left/right) + double lon = b.getLongitude() - (b.getLatitude() - latitude) * (b.getLongitude() - a.getLongitude()) + / (b.getLatitude() - a.getLatitude()); + if (lon <= longitude) { + return lon; + } else { + return -360d; + } + } + } + } + + /** + * Get the area (in m²) of a closed way, represented as a list of nodes + * + * @param nodes + * the list of nodes + * @return the area of it + */ + public static double getArea(List nodes) { + // x = longitude + // y = latitude + // calculate the reference point (lower left corner of the bbox) + // start with an arbitrary value, bigger than any lat or lon + double refX = 500, refY = 500; + for (Node n : nodes) { + if (n.getLatitude() < refY) + refY = n.getLatitude(); + if (n.getLongitude() < refX) + refX = n.getLongitude(); + } + + List xVal = new ArrayList(); + List yVal = new ArrayList(); + + for (Node n : nodes) { + // distance from bottom line to x coordinate of node + double xDist = MapUtils.getDistance(refY, refX, refY, n.getLongitude()); + // distance from left line to y coordinate of node + double yDist = MapUtils.getDistance(refY, refX, n.getLatitude(), refX); + + xVal.add(xDist); + yVal.add(yDist); + } + + double area = 0; + + for (int i = 1; i < xVal.size(); i++) { + area += xVal.get(i - 1) * yVal.get(i) - xVal.get(i) * yVal.get(i - 1); + } + + return Math.abs(area) / 2; + } +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/OsmTransportRoute.java b/OsmAnd-java/src/net/osmand/osm/edit/OsmTransportRoute.java new file mode 100644 index 0000000000..2e4e206a32 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/OsmTransportRoute.java @@ -0,0 +1,25 @@ +package net.osmand.osm.edit; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.osmand.data.TransportRoute; + +public class OsmTransportRoute extends TransportRoute { + private List ways; + + public List getWays() { + if(ways == null){ + return Collections.emptyList(); + } + return ways; + } + + public void addWay(Way w){ + if(ways == null){ + ways = new ArrayList(); + } + ways.add(w); + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/osm/edit/Relation.java b/OsmAnd-java/src/net/osmand/osm/edit/Relation.java new file mode 100644 index 0000000000..488d1a60c3 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/Relation.java @@ -0,0 +1,117 @@ +package net.osmand.osm.edit; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import net.osmand.data.LatLon; + +public class Relation extends Entity { + + // lazy loading + Map members = null; + Map memberEntities = null; + + + public Relation(long id) { + super(id); + } + + public void addMember(Long id, EntityType type, String role){ + if(members == null){ + members = new LinkedHashMap(); + } + members.put(new EntityId(type, id), role); + } + + public String removeMember(EntityType e, Long id){ + if(members == null){ + return null; + } + return members.remove(id); + } + + public String getRole(Entity e){ + return members.get(e.getId()); + } + + public String getRole(Long id){ + return members.get(id); + } + + public Collection getMemberIds() { + return getMemberIds(null); + } + + public Map getMembersMap() { + if(members == null){ + return Collections.emptyMap(); + } + return Collections.unmodifiableMap(members); + } + + public Collection getMemberIds(String role) { + if (members == null) { + return Collections.emptyList(); + } + if (role == null) { + return members.keySet(); + } + List l = new ArrayList(); + for (EntityId m : members.keySet()) { + if (role.equals(members.get(m))) { + l.add(m); + } + } + return l; + } + + public Map getMemberEntities() { + if(memberEntities == null){ + return Collections.emptyMap(); + } + return memberEntities; + } + + public Collection getMembers(String role) { + if (memberEntities == null) { + return Collections.emptyList(); + } + if (role == null) { + return memberEntities.keySet(); + } + List l = new ArrayList(); + for (Entity m : memberEntities.keySet()) { + if (role.equals(memberEntities.get(m))) { + l.add(m); + } + } + return l; + } + + @Override + public void initializeLinks(Map entities){ + if (members != null) { + if(memberEntities == null){ + memberEntities = new LinkedHashMap(); + } else { + memberEntities.clear(); + } + for(EntityId l : members.keySet()){ + if(l != null && entities.get(l) != null){ + memberEntities.put(entities.get(l), members.get(l)); + } + } + } + } + + + @Override + public LatLon getLatLon() { + return null; + } + +} diff --git a/OsmAnd-java/src/net/osmand/osm/edit/Way.java b/OsmAnd-java/src/net/osmand/osm/edit/Way.java new file mode 100644 index 0000000000..9564383768 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/edit/Way.java @@ -0,0 +1,145 @@ +package net.osmand.osm.edit; + +import gnu.trove.list.array.TLongArrayList; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import net.osmand.data.LatLon; + +public class Way extends Entity { + + // lazy loading + private TLongArrayList nodeIds = null; + private List nodes = null; + + public Way(long id) { + super(id); + } + + public Way(Way w) { + super(w.getId()); + if (w.nodeIds != null) { + nodeIds = new TLongArrayList(w.nodeIds); + } + if (w.nodes != null) { + nodes = new ArrayList(w.nodes); + } + } + + public Way(long id, List nodes) { + super(id); + this.nodes = new ArrayList(nodes); + nodeIds = new TLongArrayList(nodes.size()); + for (Node n : nodes) { + nodeIds.add(n.getId()); + } + } + + public void addNode(long id){ + if(nodeIds == null){ + nodeIds = new TLongArrayList(); + } + nodeIds.add(id); + } + + public long getFirstNodeId(){ + if(nodeIds == null){ + return -1; + } + return nodeIds.get(0); + } + + public long getLastNodeId(){ + if(nodeIds == null){ + return -1; + } + return nodeIds.get(nodeIds.size() - 1); + } + + public void addNode(Node n){ + if(nodeIds == null){ + nodeIds = new TLongArrayList(); + } + if(nodes == null){ + nodes = new ArrayList(); + } + nodeIds.add(n.getId()); + nodes.add(n); + } + + public void addNode(Node n, int index){ + if(nodeIds == null){ + nodeIds = new TLongArrayList(); + } + if(nodes == null){ + nodes = new ArrayList(); + } + nodeIds.insert(index, n.getId()); + nodes.add(index, n); + } + + public long removeNodeByIndex(int i){ + if(nodeIds == null){ + return -1; + } + long toReturn = nodeIds.removeAt(i); + if(nodes != null && nodes.size() > i){ + nodes.remove(i); + } + return toReturn; + } + + public TLongArrayList getNodeIds(){ + if(nodeIds == null){ + return new TLongArrayList(0); + } + return nodeIds; + } + + public List getEntityIds(){ + if(nodeIds == null){ + return Collections.emptyList(); + } + List ls = new ArrayList(); + for (int i = 0; i < nodeIds.size(); i++) { + ls.add(new EntityId(EntityType.NODE, nodeIds.get(i))); + } + return ls; + } + + public List getNodes() { + if(nodes == null){ + return Collections.emptyList(); + } + return nodes; + } + + @Override + public void initializeLinks(Map entities) { + if (nodeIds != null) { + if(nodes == null){ + nodes = new ArrayList(); + } else { + nodes.clear(); + } + int nIsize = nodeIds.size(); + for (int i = 0; i < nIsize; i++) { + nodes.add((Node) entities.get(new EntityId(EntityType.NODE,nodeIds.get(i)))); + } + } + } + + @Override + public LatLon getLatLon() { + if(nodes == null){ + return null; + } + return OsmMapUtils.getWeightCenterForNodes(nodes); + } + + + +} diff --git a/OsmAnd-java/src/net/osmand/osm/io/Base64.java b/OsmAnd-java/src/net/osmand/osm/io/Base64.java new file mode 100644 index 0000000000..49854f313d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/io/Base64.java @@ -0,0 +1,93 @@ +package net.osmand.osm.io; + +/** + * @source http://www.javaworld.com/javaworld/javatips/jw-javatip47.html -- 24.11.2008, (mb) + */ +public class Base64 { + /******************************************************************************************************************* + * BASE 64 encoding of a String or an array of bytes. See also RFC 1421. + * + * @author Unknown + * @author David W. Croft + * @version 1998-06-08 + ******************************************************************************************************************/ + + ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + public static final char[] alphabet = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0 to 7 + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 8 to 15 + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 16 to 23 + 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 24 to 31 + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 32 to 39 + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 40 to 47 + 'w', 'x', 'y', 'z', '0', '1', '2', '3', // 48 to 55 + '4', '5', '6', '7', '8', '9', '+', '/' }; // 56 to 63 + + ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + + public static String encode(final String s) + ////////////////////////////////////////////////////////////////////// + { + return encode(s.getBytes()); + } + + public static String encode(final byte[] octetString) + ////////////////////////////////////////////////////////////////////// + { + int bits24; + int bits6; + + final char[] out = new char[((octetString.length - 1) / 3 + 1) * 4]; + + int outIndex = 0; + int i = 0; + + while ((i + 3) <= octetString.length) { + // store the octets + bits24 = (octetString[i++] & 0xFF) << 16; + bits24 |= (octetString[i++] & 0xFF) << 8; + bits24 |= (octetString[i++] & 0xFF) << 0; + + bits6 = (bits24 & 0x00FC0000) >> 18; + out[outIndex++] = alphabet[bits6]; + bits6 = (bits24 & 0x0003F000) >> 12; + out[outIndex++] = alphabet[bits6]; + bits6 = (bits24 & 0x00000FC0) >> 6; + out[outIndex++] = alphabet[bits6]; + bits6 = (bits24 & 0x0000003F); + out[outIndex++] = alphabet[bits6]; + } + + if (octetString.length - i == 2) { + // store the octets + bits24 = (octetString[i] & 0xFF) << 16; + bits24 |= (octetString[i + 1] & 0xFF) << 8; + + bits6 = (bits24 & 0x00FC0000) >> 18; + out[outIndex++] = alphabet[bits6]; + bits6 = (bits24 & 0x0003F000) >> 12; + out[outIndex++] = alphabet[bits6]; + bits6 = (bits24 & 0x00000FC0) >> 6; + out[outIndex++] = alphabet[bits6]; + + // padding + out[outIndex++] = '='; + } else if (octetString.length - i == 1) { + // store the octets + bits24 = (octetString[i] & 0xFF) << 16; + + bits6 = (bits24 & 0x00FC0000) >> 18; + out[outIndex++] = alphabet[bits6]; + bits6 = (bits24 & 0x0003F000) >> 12; + out[outIndex++] = alphabet[bits6]; + + // padding + out[outIndex++] = '='; + out[outIndex++] = '='; + } + + return new String(out); + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/osm/io/IOsmStorageFilter.java b/OsmAnd-java/src/net/osmand/osm/io/IOsmStorageFilter.java new file mode 100644 index 0000000000..b567aece95 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/io/IOsmStorageFilter.java @@ -0,0 +1,10 @@ +package net.osmand.osm.io; + +import net.osmand.osm.edit.Entity; +import net.osmand.osm.edit.Entity.EntityId; + +public interface IOsmStorageFilter { + + public boolean acceptEntityToLoad(OsmBaseStorage storage, EntityId entityId, Entity entity); + +} diff --git a/OsmAnd-java/src/net/osmand/osm/io/NetworkUtils.java b/OsmAnd-java/src/net/osmand/osm/io/NetworkUtils.java new file mode 100644 index 0000000000..f74da15963 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/io/NetworkUtils.java @@ -0,0 +1,154 @@ +package net.osmand.osm.io; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Map; +import java.util.zip.GZIPOutputStream; + +import net.osmand.PlatformUtil; +import net.osmand.util.Algorithms; + +import org.apache.commons.logging.Log; + +public class NetworkUtils { + private static final Log log = PlatformUtil.getLog(NetworkUtils.class); + public static String sendGetRequest(String urlText, String userNamePassword){ + URL url; + try { + log.info("GET : " + urlText); + url = new URL(urlText); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoInput(true); + conn.setDoOutput(false); + conn.setRequestMethod("GET"); + if(userNamePassword != null) { + conn.setRequestProperty("Authorization", "Basic " + Base64.encode(userNamePassword)); //$NON-NLS-1$ //$NON-NLS-2$ + } + + conn.setRequestProperty("User-Agent", "OsmAnd"); //$NON-NLS-1$ //$NON-NLS-2$ + log.info("Response code and message : " + conn.getResponseCode() + " " + conn.getResponseMessage()); + if(conn.getResponseCode() != 200){ + return conn.getResponseMessage(); + } + InputStream is = conn.getInputStream(); + StringBuilder responseBody = new StringBuilder(); + if (is != null) { + BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8")); //$NON-NLS-1$ + String s; + boolean first = true; + while ((s = in.readLine()) != null) { + if(first){ + first = false; + } else { + responseBody.append("\n"); //$NON-NLS-1$ + } + responseBody.append(s); + + } + is.close(); + } + String response = responseBody.toString(); + log.info("Response : " + response); + if(response.startsWith("OK")){ + return null; + } + return response; + } catch (IOException e) { + log.error(e.getMessage(), e); + return e.getMessage(); + } + } + + private static final String BOUNDARY = "CowMooCowMooCowCowCow"; //$NON-NLS-1$ + public static String uploadFile(String urlText, File fileToUpload, String userNamePassword, String formName, boolean gzip, Map additionalMapData){ + URL url; + try { + boolean firstPrm =!urlText.contains("?"); + for (String key : additionalMapData.keySet()) { + urlText += (firstPrm ? "?" : "&") + key + "=" + URLEncoder.encode(additionalMapData.get(key), "UTF-8"); + firstPrm = false; + } + log.info("Start uploading file to " + urlText + " " +fileToUpload.getName()); + url = new URL(urlText); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoInput(true); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + if(userNamePassword != null) { + conn.setRequestProperty("Authorization", "Basic " + Base64.encode(userNamePassword)); //$NON-NLS-1$ //$NON-NLS-2$ + } + + conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); //$NON-NLS-1$ //$NON-NLS-2$ + conn.setRequestProperty("User-Agent", "OsmAnd"); //$NON-NLS-1$ //$NON-NLS-2$ + + OutputStream ous = conn.getOutputStream(); +// for (String key : additionalMapData.keySet()) { +// ous.write(("--" + BOUNDARY + "\r\n").getBytes()); +// ous.write(("content-disposition: form-data; name=\"" + key + "\"\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$ +// ous.write((additionalMapData.get(key) + "\r\n").getBytes()); +// } + ous.write(("--" + BOUNDARY+"\r\n").getBytes()); + String filename = fileToUpload.getName(); + if(gzip){ + filename+=".gz"; + } + ous.write(("content-disposition: form-data; name=\""+formName+"\"; filename=\"" + filename + "\"\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$ + ous.write(("Content-Type: application/octet-stream\r\n\r\n").getBytes()); //$NON-NLS-1$ + InputStream fis = new FileInputStream(fileToUpload); + BufferedInputStream bis = new BufferedInputStream(fis, 20 * 1024); + ous.flush(); + if(gzip){ + GZIPOutputStream gous = new GZIPOutputStream(ous, 1024); + Algorithms.streamCopy(bis, gous); + gous.flush(); + gous.finish(); + } else { + Algorithms.streamCopy(bis, ous); + } + + ous.write(("\r\n--" + BOUNDARY + "--\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$ + ous.flush(); + Algorithms.closeStream(bis); + Algorithms.closeStream(ous); + + log.info("Finish uploading file " + fileToUpload.getName()); + log.info("Response code and message : " + conn.getResponseCode() + " " + conn.getResponseMessage()); + if(conn.getResponseCode() != 200){ + return conn.getResponseMessage(); + } + InputStream is = conn.getInputStream(); + StringBuilder responseBody = new StringBuilder(); + if (is != null) { + BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8")); //$NON-NLS-1$ + String s; + boolean first = true; + while ((s = in.readLine()) != null) { + if(first){ + first = false; + } else { + responseBody.append("\n"); //$NON-NLS-1$ + } + responseBody.append(s); + + } + is.close(); + } + String response = responseBody.toString(); + log.info("Response : " + response); + return null; + } catch (IOException e) { + log.error(e.getMessage(), e); + return e.getMessage(); + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/osm/io/OsmBaseStorage.java b/OsmAnd-java/src/net/osmand/osm/io/OsmBaseStorage.java new file mode 100644 index 0000000000..b0a6992614 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/io/OsmBaseStorage.java @@ -0,0 +1,295 @@ +package net.osmand.osm.io; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import net.osmand.IProgress; +import net.osmand.osm.edit.Entity; +import net.osmand.osm.edit.EntityInfo; +import net.osmand.osm.edit.Node; +import net.osmand.osm.edit.Relation; +import net.osmand.osm.edit.Way; +import net.osmand.osm.edit.Entity.EntityId; +import net.osmand.osm.edit.Entity.EntityType; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + + +public class OsmBaseStorage extends DefaultHandler { + + protected static final String ELEM_OSM = "osm"; //$NON-NLS-1$ + protected static final String ELEM_NODE = "node"; //$NON-NLS-1$ + protected static final String ELEM_TAG = "tag"; //$NON-NLS-1$ + protected static final String ELEM_WAY = "way"; //$NON-NLS-1$ + protected static final String ELEM_ND = "nd"; //$NON-NLS-1$ + protected static final String ELEM_RELATION = "relation"; //$NON-NLS-1$ + protected static final String ELEM_MEMBER = "member"; //$NON-NLS-1$ + + + protected static final String ATTR_VERSION = "version"; //$NON-NLS-1$ + protected static final String ATTR_ID = "id"; //$NON-NLS-1$ + protected static final String ATTR_LAT = "lat"; //$NON-NLS-1$ + protected static final String ATTR_LON = "lon"; //$NON-NLS-1$ + protected static final String ATTR_TIMESTAMP = "timestamp"; //$NON-NLS-1$ + protected static final String ATTR_UID = "uid"; //$NON-NLS-1$ + protected static final String ATTR_USER = "user"; //$NON-NLS-1$ + protected static final String ATTR_VISIBLE = "visible"; //$NON-NLS-1$ + protected static final String ATTR_CHANGESET = "changeset"; //$NON-NLS-1$ + protected static final String ATTR_K = "k"; //$NON-NLS-1$ + protected static final String ATTR_V = "v"; //$NON-NLS-1$ + + protected static final String ATTR_TYPE = "type"; //$NON-NLS-1$ + protected static final String ATTR_REF = "ref"; //$NON-NLS-1$ + protected static final String ATTR_ROLE = "role"; //$NON-NLS-1$ + + protected Entity currentParsedEntity = null; + protected EntityInfo currentParsedEntityInfo = null; + + protected boolean parseStarted; + + protected Map entities = new LinkedHashMap(); + protected Map entityInfo = new LinkedHashMap(); + + // this is used to show feedback to user + protected int progressEntity = 0; + protected IProgress progress; + protected InputStream inputStream; + protected InputStream streamForProgress; + protected List filters = new ArrayList(); + protected boolean supressWarnings = true; + protected boolean parseEntityInfo; + + + + public synchronized void parseOSM(InputStream stream, IProgress progress, InputStream streamForProgress, + boolean entityInfo) throws IOException, SAXException { + this.inputStream = stream; + this.progress = progress; + parseEntityInfo = entityInfo; + if(streamForProgress == null){ + streamForProgress = inputStream; + } + this.streamForProgress = streamForProgress; + SAXParser parser = initSaxParser(); + parseStarted = false; + entities.clear(); + this.entityInfo.clear(); + if(progress != null){ + progress.startWork(streamForProgress.available()); + } + + parser.parse(stream, this); + if(progress != null){ + progress.finishTask(); + } + completeReading(); + } + + /** + * @param stream + * @throws IOException + * @throws SAXException - could be + */ + public synchronized void parseOSM(InputStream stream, IProgress progress) throws IOException, SAXException { + parseOSM(stream, progress, null, true); + + } + + public boolean isSupressWarnings() { + return supressWarnings; + } + public void setSupressWarnings(boolean supressWarnings) { + this.supressWarnings = supressWarnings; + } + + protected SAXParser saxParser; + public SAXParser initSaxParser(){ + if(saxParser != null){ + return saxParser; + } + SAXParserFactory factory = SAXParserFactory.newInstance(); + try { + factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false); //$NON-NLS-1$ + return saxParser = factory.newSAXParser(); + } catch (ParserConfigurationException e) { + throw new IllegalStateException(e); + } catch (SAXException e) { + throw new IllegalStateException(e); + } + } + + protected Long parseId(Attributes a, String name, long defId){ + long id = defId; + String value = a.getValue(name); + try { + id = Long.parseLong(value); + } catch (NumberFormatException e) { + } + return id; + } + + protected double parseDouble(Attributes a, String name, double defVal){ + double ret = defVal; + String value = a.getValue(name); + try { + ret = Double.parseDouble(value); + } catch (NumberFormatException e) { + } + return ret; + } + + protected static final Set supportedVersions = new HashSet(); + static { + supportedVersions.add("0.6"); //$NON-NLS-1$ + supportedVersions.add("0.5"); //$NON-NLS-1$ + } + + protected void initRootElement(String uri, String localName, String name, Attributes attributes) throws OsmVersionNotSupported{ + if(!ELEM_OSM.equals(name) || !supportedVersions.contains(attributes.getValue(ATTR_VERSION))){ + throw new OsmVersionNotSupported(); + } + parseStarted = true; + } + + protected static final int moduleProgress = 1 << 10; + + @Override + public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { + name = saxParser.isNamespaceAware() ? localName : name; + if(!parseStarted){ + initRootElement(uri, localName, name, attributes); + } + if (currentParsedEntity == null) { + progressEntity ++; + if(progress != null && ((progressEntity % moduleProgress) == 0) && + !progress.isIndeterminate() && streamForProgress != null){ + try { + progress.remaining(streamForProgress.available()); + } catch (IOException e) { + progress.startWork(-1); + } + } + if (ELEM_NODE.equals(name)) { + currentParsedEntity = new Node(parseDouble(attributes, ATTR_LAT, 0), parseDouble(attributes, ATTR_LON, 0), + parseId(attributes, ATTR_ID, -1)); + } else if (ELEM_WAY.equals(name)) { + currentParsedEntity = new Way(parseId(attributes, ATTR_ID, -1)); + } else if (ELEM_RELATION.equals(name)) { + currentParsedEntity = new Relation(parseId(attributes, ATTR_ID, -1)); + } else { + // this situation could be logged as unhandled + } + if(parseEntityInfo && currentParsedEntity != null){ + currentParsedEntityInfo = new EntityInfo(); + currentParsedEntityInfo.setChangeset(attributes.getValue(ATTR_CHANGESET)); + currentParsedEntityInfo.setTimestamp(attributes.getValue(ATTR_TIMESTAMP)); + currentParsedEntityInfo.setUser(attributes.getValue(ATTR_USER)); + currentParsedEntityInfo.setVersion(attributes.getValue(ATTR_VERSION)); + currentParsedEntityInfo.setVisible(attributes.getValue(ATTR_VISIBLE)); + currentParsedEntityInfo.setUid(attributes.getValue(ATTR_UID)); + } + } else { + if (ELEM_TAG.equals(name)) { + String key = attributes.getValue(ATTR_K); + if(key != null){ + currentParsedEntity.putTag(key, attributes.getValue(ATTR_V)); + } + } else if (ELEM_ND.equals(name)) { + Long id = parseId(attributes, ATTR_REF, -1); + if(id != -1 && currentParsedEntity instanceof Way){ + ((Way)currentParsedEntity).addNode(id); + } + } else if (ELEM_MEMBER.equals(name)) { + Long id = parseId(attributes, ATTR_REF, -1); + if(id != -1 && currentParsedEntity instanceof Relation){ + EntityType type = EntityType.valueOf(attributes.getValue(ATTR_TYPE).toUpperCase()); + ((Relation)currentParsedEntity).addMember(id, type, attributes.getValue(ATTR_ROLE)); + } + + } else { + // this situation could be logged as unhandled + } + } + } + + @Override + public void endElement(String uri, String localName, String name) throws SAXException { + name = saxParser.isNamespaceAware() ? localName : name; + EntityType type = null; + if (ELEM_NODE.equals(name)){ + type = EntityType.NODE; + } else if (ELEM_WAY.equals(name)){ + type = EntityType.WAY; + } else if (ELEM_RELATION.equals(name)){ + type = EntityType.RELATION; + } + if (type != null) { + if(currentParsedEntity != null){ + EntityId entityId = new EntityId(type, currentParsedEntity.getId()); + if(acceptEntityToLoad(entityId, currentParsedEntity)){ + Entity oldEntity = entities.put(entityId, currentParsedEntity); + if(parseEntityInfo && currentParsedEntityInfo != null){ + entityInfo.put(entityId, currentParsedEntityInfo); + } + if(!supressWarnings && oldEntity!= null){ + throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$ + } + } else { +// System.gc(); + } + currentParsedEntity = null; + } + } + super.endElement(uri, localName, name); + } + + + protected boolean acceptEntityToLoad(EntityId entityId, Entity entity) { + for(IOsmStorageFilter f : filters){ + if(!f.acceptEntityToLoad(this, entityId, entity)){ + return false; + } + } + return true; + } + + public void completeReading(){ + for(Entity e : entities.values()){ + e.initializeLinks(entities); + } + } + + public Map getRegisteredEntityInfo() { + return entityInfo; + } + + public Map getRegisteredEntities() { + return entities; + } + + public List getFilters() { + return filters; + } + + + /** + * Thrown when version is not supported + */ + public static class OsmVersionNotSupported extends SAXException { + private static final long serialVersionUID = -127558215143984838L; + + } + +} diff --git a/OsmAnd-java/src/net/osmand/osm/rendering_types.xml b/OsmAnd-java/src/net/osmand/osm/rendering_types.xml new file mode 100644 index 0000000000..eba05d5856 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/osm/rendering_types.xml @@ -0,0 +1,831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd-java/src/net/osmand/plus/ApplicationMode.java b/OsmAnd-java/src/net/osmand/plus/ApplicationMode.java new file mode 100644 index 0000000000..589b040fcb --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/ApplicationMode.java @@ -0,0 +1,23 @@ +package net.osmand.plus; + + +public enum ApplicationMode { + /* + * DEFAULT("Default"), CAR("Car"), BICYCLE("Bicycle"), PEDESTRIAN("Pedestrian"); + */ + DEFAULT(R.string.app_mode_default), + CAR(R.string.app_mode_car), + BICYCLE(R.string.app_mode_bicycle), + PEDESTRIAN(R.string.app_mode_pedestrian); + + private final int key; + + ApplicationMode(int key) { + this.key = key; + } + + public String toHumanString(ClientContext ctx) { + return ctx.getString(key); + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/ClientContext.java b/OsmAnd-java/src/net/osmand/plus/ClientContext.java new file mode 100644 index 0000000000..558828e037 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/ClientContext.java @@ -0,0 +1,54 @@ +package net.osmand.plus; + +import java.io.File; + +import net.osmand.Location; +import net.osmand.plus.api.ExternalServiceAPI; +import net.osmand.plus.api.InternalOsmAndAPI; +import net.osmand.plus.api.InternalToDoAPI; +import net.osmand.plus.api.SQLiteAPI; +import net.osmand.plus.api.SettingsAPI; +import net.osmand.plus.render.RendererRegistry; +import net.osmand.plus.routing.RoutingHelper; + + +/* + * In Android version ClientContext should be cast to Android.Context for backward compatibility + */ +public interface ClientContext { + + public String getString(int resId, Object... args); + + public File getAppPath(String extend); + + public void showShortToastMessage(int msgId, Object... args); + + public void showToastMessage(int msgId, Object... args); + + public void showToastMessage(String msg); + + public RendererRegistry getRendererRegistry(); + + public OsmandSettings getSettings(); + + public SettingsAPI getSettingsAPI(); + + public ExternalServiceAPI getExternalServiceAPI(); + + public InternalToDoAPI getTodoAPI(); + + public InternalOsmAndAPI getInternalAPI(); + + public SQLiteAPI getSQLiteAPI(); + + // public RendererAPI getRendererAPI(); + + public void runInUIThread(Runnable run); + + public void runInUIThread(Runnable run, long delay); + + public RoutingHelper getRoutingHelper(); + + public Location getLastKnownLocation(); + +} diff --git a/OsmAnd-java/src/net/osmand/plus/CurrentPositionHelper.java b/OsmAnd-java/src/net/osmand/plus/CurrentPositionHelper.java new file mode 100644 index 0000000000..3618e7e5d8 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/CurrentPositionHelper.java @@ -0,0 +1,120 @@ +package net.osmand.plus; + +import java.io.IOException; + +import net.osmand.Location; +import net.osmand.binary.RouteDataObject; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.router.GeneralRouter.GeneralRouterProfile; +import net.osmand.router.RoutePlannerFrontEnd; +import net.osmand.router.RoutingConfiguration; +import net.osmand.router.RoutingContext; +import net.osmand.util.MapUtils; + +public class CurrentPositionHelper { + + private RouteDataObject lastFound; + private Location lastAskedLocation = null; + private Thread calculatingThread = null; + private RoutingContext ctx; + private ClientContext app; + private ApplicationMode am; + + public CurrentPositionHelper(ClientContext app) { + this.app = app; + } + + private void initCtx(ClientContext app) { + am = app.getSettings().getApplicationMode(); + GeneralRouterProfile p ; + if (am == ApplicationMode.BICYCLE) { + p = GeneralRouterProfile.BICYCLE; + } else if (am == ApplicationMode.PEDESTRIAN) { + p = GeneralRouterProfile.PEDESTRIAN; + } else { + p = GeneralRouterProfile.CAR; + } + RoutingConfiguration cfg = RoutingConfiguration.getDefault().build(p.name().toLowerCase(), 10); + ctx = new RoutingContext(cfg, null, app.getTodoAPI().getRoutingMapFiles()); + } + + private RouteDataObject runUpdateInThread(Location loc) { + RoutePlannerFrontEnd rp = new RoutePlannerFrontEnd(false); + try { + if(ctx == null || am != app.getSettings().getApplicationMode()) { + initCtx(app); + } + RouteSegment sg = rp.findRouteSegment(loc.getLatitude(), loc.getLongitude(), ctx); + if(sg == null) { + return null; + } + return sg.getRoad(); + } catch (IOException e) { + return null; + } + } + + + private void scheduleRouteSegmentFind(final Location loc){ + if(calculatingThread == Thread.currentThread()) { + lastFound = runUpdateInThread(loc); + } else if(calculatingThread == null && loc != null) { + Runnable run = new Runnable() { + @Override + public void run() { + try { + lastFound = runUpdateInThread(loc); + if (lastAskedLocation != loc) { + // refresh and run new task if needed + getLastKnownRouteSegment(lastAskedLocation); + } + } finally { + calculatingThread = null; + } + } + }; + calculatingThread = app.getRoutingHelper().startTaskInRouteThreadIfPossible(run); + } + + } + + private static double getOrthogonalDistance(RouteDataObject r, Location loc){ + double d = 1000; + if (r.getPointsLength() > 0) { + double pLt = MapUtils.get31LatitudeY(r.getPoint31YTile(0)); + double pLn = MapUtils.get31LongitudeX(r.getPoint31XTile(0)); + for (int i = 1; i < r.getPointsLength(); i++) { + double lt = MapUtils.get31LatitudeY(r.getPoint31YTile(i)); + double ln = MapUtils.get31LongitudeX(r.getPoint31XTile(i)); + double od = MapUtils.getOrthogonalDistance(loc.getLatitude(), loc.getLongitude(), pLt, pLn, lt, ln); + if (od < d) { + d = od; + } + pLt = lt; + pLn = ln; + } + } + return d; + } + + public RouteDataObject getLastKnownRouteSegment(Location loc) { + lastAskedLocation = loc; + RouteDataObject r = lastFound; + if (loc == null || loc.getAccuracy() > 50) { + return null; + } + if (r == null) { + scheduleRouteSegmentFind(loc); + return null; + } + double d = getOrthogonalDistance(r, loc); + if (d > 25) { + scheduleRouteSegmentFind(loc); + } + if (d < 70) { + return r; + } + return null; + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd-java/src/net/osmand/plus/FavouritesDbHelper.java new file mode 100644 index 0000000000..25eebff4a0 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/FavouritesDbHelper.java @@ -0,0 +1,331 @@ +package net.osmand.plus; + +import java.io.File; +import java.text.Collator; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.osmand.PlatformUtil; +import net.osmand.data.FavouritePoint; +import net.osmand.plus.GPXUtilities.GPXFile; +import net.osmand.plus.GPXUtilities.WptPt; +import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; +import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; + +public class FavouritesDbHelper { + + private static final int DATABASE_VERSION = 2; + private static final org.apache.commons.logging.Log log = PlatformUtil.getLog(FavouritesDbHelper.class); + public static final String FAVOURITE_DB_NAME = "favourite"; //$NON-NLS-1$ + private static final String FAVOURITE_TABLE_NAME = "favourite"; //$NON-NLS-1$ + private static final String FAVOURITE_COL_NAME = "name"; //$NON-NLS-1$ + private static final String FAVOURITE_COL_CATEGORY = "category"; //$NON-NLS-1$ + private static final String FAVOURITE_COL_LAT = "latitude"; //$NON-NLS-1$ + private static final String FAVOURITE_COL_LON = "longitude"; //$NON-NLS-1$ + private static final String FAVOURITE_TABLE_CREATE = "CREATE TABLE " + FAVOURITE_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$ + FAVOURITE_COL_NAME + " TEXT, " + FAVOURITE_COL_CATEGORY + " TEXT, " + //$NON-NLS-1$ //$NON-NLS-2$ + FAVOURITE_COL_LAT + " double, " + FAVOURITE_COL_LON + " double);"; //$NON-NLS-1$ //$NON-NLS-2$ + + public static final String FILE_TO_SAVE = "favourites.gpx"; //$NON-NLS-1$ + public static final String FILE_TO_BACKUP = "favourites_bak.gpx"; //$NON-NLS-1$ + + // externalize ? + private static final String GPX_GROUP = "Gpx"; + + private List favoritePointsFromGPXFile = null; + private List cachedFavoritePoints = new ArrayList(); + private Map> favoriteGroups = null; + private final ClientContext context; + private SQLiteConnection conn; + + public FavouritesDbHelper(ClientContext context) { + this.context = context; + } + + private SQLiteConnection openConnection(boolean readonly) { + conn = context.getSQLiteAPI().getOrCreateDatabase(FAVOURITE_DB_NAME, readonly); + if (conn.getVersion() == 0 || DATABASE_VERSION != conn.getVersion()) { + if (readonly) { + conn.close(); + conn = context.getSQLiteAPI().getOrCreateDatabase(FAVOURITE_DB_NAME, readonly); + } + if (conn.getVersion() == 0) { + conn.setVersion(DATABASE_VERSION); + onCreate(conn); + } else { + onUpgrade(conn, conn.getVersion(), DATABASE_VERSION); + } + + } + return conn; + } + + public void onCreate(SQLiteConnection db) { + db.execSQL(FAVOURITE_TABLE_CREATE); + createCategories(db); + } + + public void onUpgrade(SQLiteConnection db, int oldVersion, int newVersion) { + if(oldVersion == 1){ + db.execSQL("ALTER TABLE " + FAVOURITE_TABLE_NAME + " ADD " + FAVOURITE_COL_CATEGORY + " text"); + createCategories(db); + db.execSQL("UPDATE " + FAVOURITE_TABLE_NAME + " SET category = ?", new Object[] { context.getString(R.string.favorite_default_category)}); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + + public void backupSilently() { + try { + exportFavorites(FILE_TO_BACKUP); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + + public String exportFavorites() { + return exportFavorites(FILE_TO_SAVE); + } + + public String exportFavorites(String fileName) { + File f = new File(context.getAppPath(null), fileName); + GPXFile gpx = new GPXFile(); + for (FavouritePoint p : getFavouritePoints()) { + if (p.isStored()) { + WptPt pt = new WptPt(); + pt.lat = p.getLatitude(); + pt.lon = p.getLongitude(); + pt.name = p.getName(); + if (p.getCategory().length() > 0) + pt.category = p.getCategory(); + gpx.points.add(pt); + } + } + return GPXUtilities.writeGpxFile(f, gpx, context); + } + + private void createCategories(SQLiteConnection db){ + addCategoryQuery(context.getString(R.string.favorite_home_category), db); + addCategoryQuery(context.getString(R.string.favorite_friends_category), db); + addCategoryQuery(context.getString(R.string.favorite_places_category), db); + addCategoryQuery(context.getString(R.string.favorite_default_category), db); + } + + public List getFavoritePointsFromGPXFile() { + return favoritePointsFromGPXFile; + } + + public void setFavoritePointsFromGPXFile(List favoritePointsFromGPXFile) { + this.favoritePointsFromGPXFile = favoritePointsFromGPXFile; + if(favoritePointsFromGPXFile == null){ + favoriteGroups.remove(GPX_GROUP); + } else { + checkFavoritePoints(); + for(FavouritePoint t : favoritePointsFromGPXFile){ + t.setCategory(GPX_GROUP); + t.setStored(false); + } + favoriteGroups.put(GPX_GROUP, favoritePointsFromGPXFile); + } + recalculateCachedFavPoints(); + } + + public void addFavoritePointToGPXFile(FavouritePoint fp) { + fp.setCategory(GPX_GROUP); + fp.setStored(false); + if (!favoriteGroups.containsKey(GPX_GROUP)) { + favoriteGroups.put(GPX_GROUP, new ArrayList()); + } + favoriteGroups.get(GPX_GROUP).add(fp); + recalculateCachedFavPoints(); + } + + public List getFavouritePoints() { + checkFavoritePoints(); + return cachedFavoritePoints; + } + + public Map> getFavoriteGroups() { + checkFavoritePoints(); + return favoriteGroups; + } + + + public boolean editFavouriteName(FavouritePoint p, String newName, String category) { + checkFavoritePoints(); + SQLiteConnection db = openConnection(false); + if (db != null) { + try { + String oldCategory = p.getCategory(); + db.execSQL( + "UPDATE " + FAVOURITE_TABLE_NAME + " SET " + FAVOURITE_COL_NAME + " = ?, " + FAVOURITE_COL_CATEGORY + "= ? WHERE " + whereNameLatLon(), new Object[] { newName, category, p.getName(), p.getLatitude(), p.getLongitude() }); //$NON-NLS-1$ //$NON-NLS-2$ + p.setName(newName); + p.setCategory(category); + if (!oldCategory.equals(category)) { + favoriteGroups.get(oldCategory).remove(p); + if (!favoriteGroups.containsKey(category)) { + addCategoryQuery(category, db); + favoriteGroups.put(category, new ArrayList()); + } + favoriteGroups.get(category).add(p); + } + }finally { + db.close(); + } + return true; + } + return false; + } + + private String whereNameLatLon() { + String singleFavourite = " " + FAVOURITE_COL_NAME + "= ? AND " + FAVOURITE_COL_LAT + " = ? AND " + FAVOURITE_COL_LON + " = ?"; + return singleFavourite; + } + + public boolean editFavourite(FavouritePoint p, double lat, double lon) { + checkFavoritePoints(); + SQLiteConnection db = openConnection(false); + if (db != null) { + try { + db.execSQL( + "UPDATE " + FAVOURITE_TABLE_NAME + " SET latitude = ?, longitude = ? WHERE " + whereNameLatLon(), new Object[] { lat, lon, p.getName(), p.getLatitude(), p.getLongitude() }); //$NON-NLS-1$ //$NON-NLS-2$ + p.setLatitude(lat); + p.setLongitude(lon); + backupSilently(); + } finally { + db.close(); + } + return true; + } + return false; + } + + private FavouritePoint findFavoriteByAllProperties(String category, String name, double lat, double lon){ + if (favoriteGroups.containsKey(category)) { + for (FavouritePoint fv : favoriteGroups.get(category)) { + if (name.equals(fv.getName()) && (lat == fv.getLatitude()) && (lon == fv.getLongitude())) { + return fv; + } + } + } + return null; + } + + public boolean deleteFavourite(FavouritePoint p) { + checkFavoritePoints(); + SQLiteConnection db = openConnection(false); + if (db != null) { + try { + db.execSQL( + "DELETE FROM " + FAVOURITE_TABLE_NAME + " WHERE category = ? AND " + whereNameLatLon(), new Object[] { p.getCategory(), p.getName(), p.getLatitude(), p.getLongitude() }); //$NON-NLS-1$ //$NON-NLS-2$ + FavouritePoint fp = findFavoriteByAllProperties(p.getCategory(), p.getName(), p.getLatitude(), p.getLongitude()); + if (fp != null) { + favoriteGroups.get(p.getCategory()).remove(fp); + cachedFavoritePoints.remove(fp); + fp.setStored(false); + } + backupSilently(); + } finally{ + db.close(); + } + return true; + } + return false; + } + + public boolean deleteGroup(String group){ + checkFavoritePoints(); + FavouritePoint fp = new FavouritePoint(0, 0, "", group); + if(deleteFavourite(fp)){ + favoriteGroups.remove(group); + backupSilently(); + } + return false; + } + + public boolean addFavourite(FavouritePoint p) { + checkFavoritePoints(); + if(p.getName().equals("") && favoriteGroups.containsKey(p.getCategory())){ + return true; + } + SQLiteConnection db = openConnection(false); + if (db != null) { + try { + db.execSQL( + "INSERT INTO " + FAVOURITE_TABLE_NAME + " (" + FAVOURITE_COL_NAME + ", " + FAVOURITE_COL_CATEGORY + ", " + + FAVOURITE_COL_LAT + ", " + FAVOURITE_COL_LON + ")" + " VALUES (?, ?, ?, ?)", new Object[] { p.getName(), p.getCategory(), p.getLatitude(), p.getLongitude() }); //$NON-NLS-1$ //$NON-NLS-2$ + if (!favoriteGroups.containsKey(p.getCategory())) { + favoriteGroups.put(p.getCategory(), new ArrayList()); + if (!p.getName().equals("")) { + addFavourite(new FavouritePoint(0, 0, "", p.getCategory())); + } + } + if (!p.getName().equals("")) { + favoriteGroups.get(p.getCategory()).add(p); + cachedFavoritePoints.add(p); + } + p.setStored(true); + backupSilently(); + } finally { + db.close(); + } + return true; + } + return false; + } + + private void addCategoryQuery(String category, SQLiteConnection db) { + db.execSQL("INSERT INTO " + FAVOURITE_TABLE_NAME + + " (" +FAVOURITE_COL_NAME +", " +FAVOURITE_COL_CATEGORY +", " +FAVOURITE_COL_LAT +", " +FAVOURITE_COL_LON + ")" + + " VALUES (?, ?, ?, ?)", new Object[] { "", category, 0f, 0f }); //$NON-NLS-1$ //$NON-NLS-2$ + } + + + private void recalculateCachedFavPoints(){ + ArrayList temp = new ArrayList(); + for(List f : favoriteGroups.values()){ + temp.addAll(f); + } + cachedFavoritePoints = temp; + } + + private void checkFavoritePoints(){ + if(favoriteGroups == null){ + favoriteGroups = new TreeMap>(Collator.getInstance()); + SQLiteConnection db = openConnection(true); + if (db != null) { + try { + SQLiteCursor query = db.rawQuery("SELECT " + FAVOURITE_COL_NAME + ", " + FAVOURITE_COL_CATEGORY + ", " + FAVOURITE_COL_LAT + "," + FAVOURITE_COL_LON + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + FAVOURITE_TABLE_NAME, null); + cachedFavoritePoints.clear(); + if (query.moveToFirst()) { + do { + String name = query.getString(0); + String cat = query.getString(1); + if(!favoriteGroups.containsKey(cat)){ + favoriteGroups.put(cat, new ArrayList()); + } + if (!name.equals("")) { + FavouritePoint p = new FavouritePoint(); + p.setName(name); + p.setCategory(cat); + p.setStored(true); + p.setLatitude(query.getDouble(2)); + p.setLongitude(query.getDouble(3)); + favoriteGroups.get(cat).add(p); + } + } while (query.moveToNext()); + } + query.close(); + } finally { + db.close(); + } + } + recalculateCachedFavPoints(); + } + } + + + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/GPXUtilities.java b/OsmAnd-java/src/net/osmand/plus/GPXUtilities.java new file mode 100644 index 0000000000..7779ac6239 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/GPXUtilities.java @@ -0,0 +1,566 @@ +package net.osmand.plus; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.UnsupportedEncodingException; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Stack; +import java.util.TimeZone; + +import net.osmand.Location; +import net.osmand.PlatformUtil; +import net.osmand.plus.GPXUtilities.GPXFile; + +import org.apache.commons.logging.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; + + +public class GPXUtilities { + public final static Log log = PlatformUtil.getLog(GPXUtilities.class); + + private final static String GPX_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; //$NON-NLS-1$ + + private final static NumberFormat latLonFormat = new DecimalFormat("0.00#####", new DecimalFormatSymbols(new Locale("EN", "US"))); + + public static class GPXExtensions { + Map extensions = null; + + public Map getExtensionsToRead() { + if(extensions == null){ + return Collections.emptyMap(); + } + return extensions; + } + + public Map getExtensionsToWrite() { + if(extensions == null){ + extensions = new LinkedHashMap(); + } + return extensions; + } + + } + + public static class WptPt extends GPXExtensions { + public double lat; + public double lon; + public String name = null; + public String category = null; + public String desc = null; + // by default + public long time = 0; + public double ele = Double.NaN; + public double speed = 0; + public double hdop = Double.NaN; + + public WptPt() {}; + + public WptPt(double lat, double lon, long time, double ele, double speed, double hdop) { + this.lat = lat; + this.lon = lon; + this.time = time; + this.ele = ele; + this.speed = speed; + this.hdop = hdop; + } + + } + + public static class TrkSegment extends GPXExtensions { + public List points = new ArrayList(); + + } + + public static class Track extends GPXExtensions { + public String name = null; + public String desc = null; + public List segments = new ArrayList(); + + } + + public static class Route extends GPXExtensions { + public String name = null; + public String desc = null; + public List points = new ArrayList(); + + } + + public static class GPXFile extends GPXExtensions { + public String author; + public List tracks = new ArrayList(); + public List points = new ArrayList(); + public List routes = new ArrayList(); + public String warning = null; + public String path = ""; + public boolean showCurrentTrack; + + public List> processedPointsToDisplay = new ArrayList>(); + + public boolean isCloudmadeRouteFile(){ + return "cloudmade".equalsIgnoreCase(author); + } + + public void proccessPoints(){ + List> tpoints = new ArrayList>(); + boolean created = false; + for (Track t : tracks) { + for (TrkSegment ts : t.segments) { + if(ts.points.size() > 0) { + created = true; + tpoints.add(ts.points); + } + } + } + if(!created && routes.size() > 0) { + for(Route r : routes) { + tpoints.add(r.points); + } + } + processedPointsToDisplay = tpoints; + } + + public WptPt findPointToShow(){ + for(Track t : tracks){ + for(TrkSegment s : t.segments){ + if(s.points.size() > 0){ + return s.points.get(0); + } + } + } + for (Route s : routes) { + if (s.points.size() > 0) { + return s.points.get(0); + } + } + if (points.size() > 0) { + return points.get(0); + } + return null; + } + + public boolean isEmpty() { + for (Track t : tracks) { + if (t.segments != null) { + for (TrkSegment s : t.segments) { + boolean tracksEmpty = s.points.isEmpty(); + if (!tracksEmpty) { + return false; + } + } + } + } + return points.isEmpty() && routes.isEmpty(); + } + + + } + + + public static String writeGpxFile(File fout, GPXFile file, ClientContext ctx) { + try { + SimpleDateFormat format = new SimpleDateFormat(GPX_TIME_FORMAT); + format.setTimeZone(TimeZone.getTimeZone("UTC")); + FileOutputStream output = new FileOutputStream(fout); + XmlSerializer serializer = ctx.getInternalAPI().newSerializer(); + serializer.setOutput(output, "UTF-8"); //$NON-NLS-1$ + serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); //$NON-NLS-1$ + serializer.startDocument("UTF-8", true); //$NON-NLS-1$ + serializer.startTag(null, "gpx"); //$NON-NLS-1$ + serializer.attribute(null, "version", "1.1"); //$NON-NLS-1$ //$NON-NLS-2$ + if(file.author == null ){ + serializer.attribute(null, "creator", Version.getAppName(ctx)); //$NON-NLS-1$ + } else { + serializer.attribute(null, "creator", file.author); //$NON-NLS-1$ + } + serializer.attribute(null, "xmlns", "http://www.topografix.com/GPX/1/1"); //$NON-NLS-1$ //$NON-NLS-2$ + serializer.attribute(null, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); + serializer.attribute(null, "xsi:schemaLocation", "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"); + + + for (Track track : file.tracks) { + serializer.startTag(null, "trk"); //$NON-NLS-1$ + writeNotNullText(serializer, "name", track.name); + writeNotNullText(serializer, "desc", track.desc); + for (TrkSegment segment : track.segments) { + serializer.startTag(null, "trkseg"); //$NON-NLS-1$ + for (WptPt p : segment.points) { + serializer.startTag(null, "trkpt"); //$NON-NLS-1$ + writeWpt(format, serializer, p); + serializer.endTag(null, "trkpt"); //$NON-NLS-1$ + } + serializer.endTag(null, "trkseg"); //$NON-NLS-1$ + } + writeExtensions(serializer, track); + serializer.endTag(null, "trk"); //$NON-NLS-1$ + } + + for (Route track : file.routes) { + serializer.startTag(null, "rte"); //$NON-NLS-1$ + writeNotNullText(serializer, "name", track.name); + writeNotNullText(serializer, "desc", track.desc); + + for (WptPt p : track.points) { + serializer.startTag(null, "rtept"); //$NON-NLS-1$ + writeWpt(format, serializer, p); + serializer.endTag(null, "rtept"); //$NON-NLS-1$ + } + writeExtensions(serializer, track); + serializer.endTag(null, "rte"); //$NON-NLS-1$ + } + + for (WptPt l : file.points) { + serializer.startTag(null, "wpt"); //$NON-NLS-1$ + writeWpt(format, serializer, l); + serializer.endTag(null, "wpt"); //$NON-NLS-1$ + } + + serializer.endTag(null, "gpx"); //$NON-NLS-1$ + serializer.flush(); + serializer.endDocument(); + } catch (RuntimeException e) { + log.error("Error saving gpx", e); //$NON-NLS-1$ + return ctx.getString(R.string.error_occurred_saving_gpx); + } catch (IOException e) { + log.error("Error saving gpx", e); //$NON-NLS-1$ + return ctx.getString(R.string.error_occurred_saving_gpx); + } + return null; + } + + private static void writeNotNullText(XmlSerializer serializer, String tag, String value) throws IOException { + if(value != null){ + serializer.startTag(null, tag); + serializer.text(value); + serializer.endTag(null, tag); + } + } + + private static void writeExtensions(XmlSerializer serializer, GPXExtensions p) throws IOException { + if (!p.getExtensionsToRead().isEmpty()) { + serializer.startTag(null, "extensions"); + for (Map.Entry s : p.getExtensionsToRead().entrySet()) { + writeNotNullText(serializer, s.getKey(), s.getValue()); + } + serializer.endTag(null, "extensions"); + } + } + + private static void writeWpt(SimpleDateFormat format, XmlSerializer serializer, WptPt p) throws IOException { + serializer.attribute(null, "lat", latLonFormat.format(p.lat)); //$NON-NLS-1$ //$NON-NLS-2$ + serializer.attribute(null, "lon", latLonFormat.format(p.lon)); //$NON-NLS-1$ //$NON-NLS-2$ + + if(!Double.isNaN(p.ele)){ + writeNotNullText(serializer, "ele", p.ele+""); + } + writeNotNullText(serializer, "name", p.name); + writeNotNullText(serializer, "category", p.category); + writeNotNullText(serializer, "desc", p.desc); + if(!Double.isNaN(p.hdop)){ + writeNotNullText(serializer, "hdop", p.hdop+""); + } + if(p.time != 0){ + writeNotNullText(serializer, "time", format.format(new Date(p.time))); + } + if (p.speed > 0) { + p.getExtensionsToWrite().put("speed", p.speed+""); + } + writeExtensions(serializer, p); + } + + + public static class GPXFileResult { + public ArrayList> locations = new ArrayList>(); + public ArrayList wayPoints = new ArrayList(); + // special case for cloudmate gpx : they discourage common schema + // by using waypoint as track points and rtept are not very close to real way + // such as wpt. However they provide additional information into gpx. + public boolean cloudMadeFile; + public String error; + + public Location findFistLocation(){ + for(List l : locations){ + for(Location ls : l){ + if(ls != null){ + return ls; + } + } + } + return null; + } + } + + + private static String readText(XmlPullParser parser, String key) throws XmlPullParserException, IOException { + int tok; + String text = null; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if(tok == XmlPullParser.END_TAG && parser.getName().equals(key)){ + break; + } else if(tok == XmlPullParser.TEXT){ + if(text == null){ + text = parser.getText(); + } else { + text += parser.getText(); + } + } + + } + return text; + } + + public static GPXFile loadGPXFile(ClientContext ctx, File f, boolean convertCloudmadeSource) { + try { + GPXFile file = loadGPXFile(ctx, new FileInputStream(f), convertCloudmadeSource); + file.path = f.getAbsolutePath(); + return file; + } catch (FileNotFoundException e) { + GPXFile res = new GPXFile(); + res.path = f.getAbsolutePath(); + log.error("Error reading gpx", e); //$NON-NLS-1$ + res.warning = ctx.getString(R.string.error_reading_gpx); + return res; + } + } + + public static GPXFile loadGPXFile(ClientContext ctx, InputStream f, boolean convertCloudmadeSource) { + GPXFile res = new GPXFile(); + SimpleDateFormat format = new SimpleDateFormat(GPX_TIME_FORMAT); + format.setTimeZone(TimeZone.getTimeZone("UTC")); + try { + XmlPullParser parser = ctx.getInternalAPI().newPullParser(); + parser.setInput(getUTF8Reader(f)); //$NON-NLS-1$ + Stack parserState = new Stack(); + boolean extensionReadMode = false; + parserState.push(res); + int tok; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + Object parse = parserState.peek(); + String tag = parser.getName(); + if (extensionReadMode && parse instanceof GPXExtensions) { + String value = readText(parser, tag); + if (value != null) { + ((GPXExtensions) parse).getExtensionsToWrite().put(tag, value); + if (tag.equals("speed") && parse instanceof WptPt) { + try { + ((WptPt) parse).speed = Float.parseFloat(value); + } catch (NumberFormatException e) { + } + } + } + + } else if (parse instanceof GPXExtensions && tag.equals("extensions")) { + extensionReadMode = true; + } else { + if (parse instanceof GPXFile) { + if (parser.getName().equals("gpx")) { + ((GPXFile) parse).author = parser.getAttributeValue("", "creator"); + } + if (parser.getName().equals("trk")) { + Track track = new Track(); + ((GPXFile) parse).tracks.add(track); + parserState.push(track); + } + if (parser.getName().equals("rte")) { + Route route = new Route(); + ((GPXFile) parse).routes.add(route); + parserState.push(route); + } + if (parser.getName().equals("wpt")) { + WptPt wptPt = parseWptAttributes(parser); + ((GPXFile) parse).points.add(wptPt); + parserState.push(wptPt); + } + } else if (parse instanceof Route) { + if (parser.getName().equals("name")) { + ((Route) parse).name = readText(parser, "name"); + } + if (parser.getName().equals("desc")) { + ((Route) parse).desc = readText(parser, "desc"); + } + if (parser.getName().equals("rtept")) { + WptPt wptPt = parseWptAttributes(parser); + ((Route) parse).points.add(wptPt); + parserState.push(wptPt); + } + } else if (parse instanceof Track) { + if (parser.getName().equals("name")) { + ((Track) parse).name = readText(parser, "name"); + } + if (parser.getName().equals("desc")) { + ((Track) parse).desc = readText(parser, "desc"); + } + if (parser.getName().equals("trkseg")) { + TrkSegment trkSeg = new TrkSegment(); + ((Track) parse).segments.add(trkSeg); + parserState.push(trkSeg); + } + } else if (parse instanceof TrkSegment) { + if (parser.getName().equals("trkpt")) { + WptPt wptPt = parseWptAttributes(parser); + ((TrkSegment) parse).points.add(wptPt); + parserState.push(wptPt); + } + // main object to parse + } else if (parse instanceof WptPt) { + if (parser.getName().equals("name")) { + ((WptPt) parse).name = readText(parser, "name"); + } else if (parser.getName().equals("desc")) { + ((WptPt) parse).desc = readText(parser, "desc"); + } else if (tag.equals("category")) { + ((WptPt) parse).category = readText(parser, "category"); + } else if (parser.getName().equals("ele")) { + String text = readText(parser, "ele"); + if (text != null) { + try { + ((WptPt) parse).ele = Float.parseFloat(text); + } catch (NumberFormatException e) { + } + } + } else if (parser.getName().equals("hdop")) { + String text = readText(parser, "hdop"); + if (text != null) { + try { + ((WptPt) parse).hdop = Float.parseFloat(text); + } catch (NumberFormatException e) { + } + } + } else if (parser.getName().equals("time")) { + String text = readText(parser, "time"); + if (text != null) { + try { + ((WptPt) parse).time = format.parse(text).getTime(); + } catch (ParseException e) { + } + } + } + } + } + + } else if (tok == XmlPullParser.END_TAG) { + Object parse = parserState.peek(); + String tag = parser.getName(); + if (parse instanceof GPXExtensions && tag.equals("extensions")) { + extensionReadMode = false; + } + + if(tag.equals("trkpt")){ + Object pop = parserState.pop(); + assert pop instanceof WptPt; + } else if(tag.equals("wpt")){ + Object pop = parserState.pop(); + assert pop instanceof WptPt; + } else if(tag.equals("rtept")){ + Object pop = parserState.pop(); + assert pop instanceof WptPt; + } else if(tag.equals("trk")){ + Object pop = parserState.pop(); + assert pop instanceof Track; + } else if(tag.equals("rte")){ + Object pop = parserState.pop(); + assert pop instanceof Route; + } else if(tag.equals("trkseg")){ + Object pop = parserState.pop(); + assert pop instanceof TrkSegment; + } + } + } + if(convertCloudmadeSource && res.isCloudmadeRouteFile()){ + Track tk = new Track(); + res.tracks.add(tk); + TrkSegment segment = new TrkSegment(); + tk.segments.add(segment); + + for(WptPt wp : res.points){ + segment.points.add(wp); + } + res.points.clear(); + } + } catch (RuntimeException e) { + log.error("Error reading gpx", e); //$NON-NLS-1$ + res.warning = ctx.getString(R.string.error_reading_gpx) + " " + e.getMessage(); + } catch (XmlPullParserException e) { + log.error("Error reading gpx", e); //$NON-NLS-1$ + res.warning = ctx.getString(R.string.error_reading_gpx) + " " + e.getMessage(); + } catch (IOException e) { + log.error("Error reading gpx", e); //$NON-NLS-1$ + res.warning = ctx.getString(R.string.error_reading_gpx) + " " + e.getMessage(); + } + + return res; + } + + private static Reader getUTF8Reader(InputStream f) throws IOException { + BufferedInputStream bis = new BufferedInputStream(f); + assert bis.markSupported(); + bis.mark(3); + boolean reset = true; + byte[] t = new byte[3]; + bis.read(t); + if (t[0] == ((byte)0xef) && t[1]== ((byte)0xbb) && t[2] == ((byte)0xbf)) { + reset = false; + } + if(reset) { + bis.reset(); + } + return new InputStreamReader(bis, "UTF-8"); + } + + + + private static WptPt parseWptAttributes(XmlPullParser parser) { + WptPt wpt = new WptPt(); + try { + wpt.lat = Double.parseDouble(parser.getAttributeValue("", "lat")); //$NON-NLS-1$ //$NON-NLS-2$ + wpt.lon = Double.parseDouble(parser.getAttributeValue("", "lon")); //$NON-NLS-1$ //$NON-NLS-2$ + } catch (NumberFormatException e) { + } + return wpt; + } + + public static void mergeGPXFileInto(GPXFile to, GPXFile from) { + if(from == null) { + return; + } + if(from.showCurrentTrack) { + to.showCurrentTrack = true; + } + if(from.points != null) { + to.points.addAll(from.points); + } + if(from.tracks != null) { + to.tracks.addAll(from.tracks); + } + if(from.routes != null) { + to.routes.addAll(from.routes); + } + if(from.warning != null) { + to.warning = from.warning; + } + + } + + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/NameFinderPoiFilter.java b/OsmAnd-java/src/net/osmand/plus/NameFinderPoiFilter.java new file mode 100644 index 0000000000..8e3c65b98d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/NameFinderPoiFilter.java @@ -0,0 +1,142 @@ +package net.osmand.plus; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +import net.osmand.PlatformUtil; +import net.osmand.ResultMatcher; +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.util.MapUtils; +import net.sf.junidecode.Junidecode; + +import org.apache.commons.logging.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + + +public class NameFinderPoiFilter extends PoiFilter { + + public static final String FILTER_ID = "name_finder"; //$NON-NLS-1$ + private static final Log log = PlatformUtil.getLog(NameFinderPoiFilter.class); + private static final int LIMIT = 300; + + List searchedAmenities = new ArrayList(); + + + private String query = ""; //$NON-NLS-1$ + private String lastError = ""; //$NON-NLS-1$ + + public NameFinderPoiFilter(ClientContext application) { + super(null, application); + this.name = application.getString(R.string.poi_filter_nominatim); //$NON-NLS-1$ + this.distanceToSearchValues = new double[] {1, 2, 5, 10, 20, 30, 100, 250 }; + this.filterId = FILTER_ID; + } + + @Override + public List searchAgain(double lat, double lon) { + MapUtils.sortListOfMapObject(searchedAmenities, lat, lon); + return searchedAmenities; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + @Override + protected List searchAmenities(double lat, double lon, double topLatitude, + double bottomLatitude, double leftLongitude, double rightLongitude, ResultMatcher matcher) { + searchedAmenities.clear(); + + String viewbox = "viewboxlbrt="+((float) leftLongitude)+","+((float) bottomLatitude)+","+((float) rightLongitude)+","+((float) topLatitude); + try { + lastError = ""; + String urlq = "http://nominatim.openstreetmap.org/search/"+URLEncoder.encode(query)+ "?format=xml&addressdetails=1&limit="+LIMIT+"&bounded=1&"+viewbox; + log.info(urlq); + URL url = new URL(urlq); //$NON-NLS-1$ + InputStream stream = url.openStream(); + XmlPullParser parser = application.getInternalAPI().newPullParser(); + parser.setInput(stream, "UTF-8"); //$NON-NLS-1$ + int eventType; + int namedDepth= 0; + Amenity a = null; + while ((eventType = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG) { + if (parser.getName().equals("searchresults")) { //$NON-NLS-1$ + String err = parser.getAttributeValue("", "error"); //$NON-NLS-1$ //$NON-NLS-2$ + if (err != null && err.length() > 0) { + lastError = err; + stream.close(); + return searchedAmenities; + } + } + if (parser.getName().equals("place")) { //$NON-NLS-1$ + namedDepth++; + if (namedDepth == 1) { + try { + a = new Amenity(); + a.setLocation(Double.parseDouble(parser.getAttributeValue("", "lat")), //$NON-NLS-1$//$NON-NLS-2$ + Double.parseDouble(parser.getAttributeValue("", "lon"))); //$NON-NLS-1$//$NON-NLS-2$ + a.setId(Long.parseLong(parser.getAttributeValue("", "place_id"))); //$NON-NLS-1$ //$NON-NLS-2$ + String name = parser.getAttributeValue("", "display_name"); //$NON-NLS-1$//$NON-NLS-2$ + a.setName(name); + a.setEnName(Junidecode.unidecode(name)); + a.setType(AmenityType.OTHER); + a.setSubType(parser.getAttributeValue("", "type")); //$NON-NLS-1$//$NON-NLS-2$ + if (matcher == null || matcher.publish(a)) { + searchedAmenities.add(a); + } + } catch (NumberFormatException e) { + log.info("Invalid attributes", e); //$NON-NLS-1$ + } + } + } else if (a != null && parser.getName().equals(a.getSubType())) { + if (parser.next() == XmlPullParser.TEXT) { + String name = parser.getText(); + if (name != null) { + a.setName(name); + a.setEnName(Junidecode.unidecode(name)); + } + } + } + } else if (eventType == XmlPullParser.END_TAG) { + if (parser.getName().equals("place")) { //$NON-NLS-1$ + namedDepth--; + if(namedDepth == 0){ + a = null; + } + } + } + } + stream.close(); + } catch (IOException e) { + log.error("Error loading name finder poi", e); //$NON-NLS-1$ + lastError = getApplication().getString(R.string.input_output_error); //$NON-NLS-1$ + } catch (XmlPullParserException e) { + log.error("Error parsing name finder poi", e); //$NON-NLS-1$ + lastError = getApplication().getString(R.string.input_output_error); //$NON-NLS-1$ + } + MapUtils.sortListOfMapObject(searchedAmenities, lat, lon); + return searchedAmenities; + } + + public String getLastError() { + return lastError; + } + + public List getSearchedAmenities() { + return searchedAmenities; + } + + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/OsmAndFormatter.java b/OsmAnd-java/src/net/osmand/plus/OsmAndFormatter.java new file mode 100644 index 0000000000..4624d01bdb --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/OsmAndFormatter.java @@ -0,0 +1,203 @@ +package net.osmand.plus; + +import java.text.MessageFormat; + +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.data.City.CityType; +import net.osmand.plus.OsmandSettings.MetricsConstants; + +public class OsmAndFormatter { + private final static float METERS_IN_KILOMETER = 1000f; + private final static float METERS_IN_ONE_MILE = 1609.344f; // 1609.344 + private final static float YARDS_IN_ONE_METER = 1.0936f; + private final static float FOOTS_IN_ONE_METER = YARDS_IN_ONE_METER * 3f; + + public static double calculateRoundedDist(double distInMeters, ClientContext ctx) { + OsmandSettings settings = ctx.getSettings(); + MetricsConstants mc = settings.METRIC_SYSTEM.get(); + double mainUnitInMeter = 1; + double metersInSecondUnit = METERS_IN_KILOMETER; + if (mc == MetricsConstants.MILES_AND_FOOTS) { + mainUnitInMeter = FOOTS_IN_ONE_METER; + metersInSecondUnit = METERS_IN_ONE_MILE; + } else if(mc == MetricsConstants.MILES_AND_YARDS){ + mainUnitInMeter = YARDS_IN_ONE_METER; + metersInSecondUnit = METERS_IN_ONE_MILE ; + } + // 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000 ... + + int generator = 1; + byte pointer = 1; + double point = mainUnitInMeter; + while(distInMeters * point > generator){ + if (pointer++ % 3 == 2) { + generator = generator * 5 / 2; + } else { + generator *= 2; + } + if(point == mainUnitInMeter && metersInSecondUnit * mainUnitInMeter * 0.9f <= generator ){ + point = 1 / metersInSecondUnit; + generator = 1; + pointer = 1; + } + } + + return (generator / point); + } + + public static String getFormattedDistance(float meters, ClientContext ctx) { + OsmandSettings settings = ctx.getSettings(); + MetricsConstants mc = settings.METRIC_SYSTEM.get(); + int mainUnitStr; + float mainUnitInMeters; + if (mc == MetricsConstants.KILOMETERS_AND_METERS) { + mainUnitStr = R.string.km; + mainUnitInMeters = METERS_IN_KILOMETER; + } else { + mainUnitStr = R.string.mile; + mainUnitInMeters = METERS_IN_ONE_MILE; + } + + if (meters >= 100 * mainUnitInMeters) { + return (int) (meters / mainUnitInMeters) + " " + ctx.getString(mainUnitStr); //$NON-NLS-1$ + } else if (meters > 9.99f * mainUnitInMeters) { + return MessageFormat.format("{0,number,#.#} " + ctx.getString(mainUnitStr), ((float) meters) / mainUnitInMeters); //$NON-NLS-1$ + } else if (meters > 0.999f * mainUnitInMeters) { + return MessageFormat.format("{0,number,#.##} " + ctx.getString(mainUnitStr), ((float) meters) / mainUnitInMeters); //$NON-NLS-1$ + } else { + if (mc == MetricsConstants.KILOMETERS_AND_METERS) { + return ((int) meters) + " " + ctx.getString(R.string.m); //$NON-NLS-1$ + } else if (mc == MetricsConstants.MILES_AND_FOOTS) { + int foots = (int) (meters * FOOTS_IN_ONE_METER); + return foots + " " + ctx.getString(R.string.foot); //$NON-NLS-1$ + } else if (mc == MetricsConstants.MILES_AND_YARDS) { + int yards = (int) (meters * YARDS_IN_ONE_METER); + return yards + " " + ctx.getString(R.string.yard); //$NON-NLS-1$ + } + return ((int) meters) + " " + ctx.getString(R.string.m); //$NON-NLS-1$ + } + } + + public static String getFormattedAlt(double alt, ClientContext ctx) { + OsmandSettings settings = ctx.getSettings(); + MetricsConstants mc = settings.METRIC_SYSTEM.get(); + if (mc == MetricsConstants.KILOMETERS_AND_METERS) { + return ((int) alt) + " " + ctx.getString(R.string.m); + } else { + return ((int) (alt * FOOTS_IN_ONE_METER)) + " " + ctx.getString(R.string.foot); + } + } + + public static String getFormattedSpeed(float metersperseconds, ClientContext ctx) { + OsmandSettings settings = ctx.getSettings(); + MetricsConstants mc = settings.METRIC_SYSTEM.get(); + ApplicationMode am = settings.getApplicationMode(); + float kmh = metersperseconds * 3.6f; + if (mc == MetricsConstants.KILOMETERS_AND_METERS) { + if (kmh >= 10 || (am == ApplicationMode.CAR)) { + return ((int) Math.round(kmh)) + " " + ctx.getString(R.string.km_h); + } + int kmh10 = (int) (kmh * 10f); + // calculate 2.0 km/h instead of 2 km/h in order to not stress UI text lengh + return (kmh10 / 10f) + " " + ctx.getString(R.string.km_h); + } else { + float mph = kmh * METERS_IN_KILOMETER / METERS_IN_ONE_MILE; + if (mph >= 10) { + return ((int) Math.round(mph)) + " " + ctx.getString(R.string.mile_per_hour); + } else { + int mph10 = (int) (mph * 10f); + return (mph10 / 10f) + " " + ctx.getString(R.string.mile_per_hour); + } + } + } + + + public static String toPublicString(CityType t, ClientContext ctx) { + switch (t) { + case CITY: + return ctx.getString(R.string.city_type_city); + case HAMLET: + return ctx.getString(R.string.city_type_hamlet); + case TOWN: + return ctx.getString(R.string.city_type_town); + case VILLAGE: + return ctx.getString(R.string.city_type_village); + case SUBURB: + return ctx.getString(R.string.city_type_suburb); + } + return ""; + } + public static String toPublicString(AmenityType t, ClientContext ctx) { + switch (t) { + case SUSTENANCE: + return ctx.getString(R.string.amenity_type_sustenance); + case EDUCATION: + return ctx.getString(R.string.amenity_type_education); + case TRANSPORTATION: + return ctx.getString(R.string.amenity_type_transportation); + case FINANCE: + return ctx.getString(R.string.amenity_type_finance); + case HEALTHCARE: + return ctx.getString(R.string.amenity_type_healthcare); + case ENTERTAINMENT: + return ctx.getString(R.string.amenity_type_entertainment); + case TOURISM: + return ctx.getString(R.string.amenity_type_tourism); + case HISTORIC: + return ctx.getString(R.string.amenity_type_historic); + case NATURAL: + return ctx.getString(R.string.amenity_type_natural); + case USER_DEFINED: + return ctx.getString(R.string.amenity_type_user_defined); + case OSMWIKI : + return ctx.getString(R.string.amenity_type_wikiosm); + case SHOP: + return ctx.getString(R.string.amenity_type_shop); + case LEISURE: + return ctx.getString(R.string.amenity_type_leisure); + case SPORT: + return ctx.getString(R.string.amenity_type_sport); + case BARRIER: + return ctx.getString(R.string.amenity_type_barrier); + case LANDUSE: + return ctx.getString(R.string.amenity_type_landuse); + case MAN_MADE: + return ctx.getString(R.string.amenity_type_manmade); + case OFFICE: + return ctx.getString(R.string.amenity_type_office); + case EMERGENCY: + return ctx.getString(R.string.amenity_type_emergency); + case MILITARY: + return ctx.getString(R.string.amenity_type_military); + case ADMINISTRATIVE: + return ctx.getString(R.string.amenity_type_administrative); + case GEOCACHE: + return ctx.getString(R.string.amenity_type_geocache); + case OTHER: + return ctx.getString(R.string.amenity_type_other); + } + return ""; + } + + + public static String getPoiSimpleFormat(Amenity amenity, ClientContext ctx, boolean en){ + return toPublicString(amenity.getType(), ctx) + " : " + getPoiStringWithoutType(amenity, en); //$NON-NLS-1$ + } + + public static String getPoiStringWithoutType(Amenity amenity, boolean en) { + String type = SpecialPhrases.getSpecialPhrase(amenity.getSubType()); + String n = amenity.getName(en); + if (n.indexOf(type) != -1) { + // type is contained in name e.g. + // n = "Bakery the Corner" + // type = "Bakery" + // no need to repeat this + return n; + } + if (n.length() == 0) { + return type; + } + return type + " " + n; //$NON-NLS-1$ + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/OsmandSettings.java b/OsmAnd-java/src/net/osmand/plus/OsmandSettings.java new file mode 100644 index 0000000000..3a77a358e7 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/OsmandSettings.java @@ -0,0 +1,1492 @@ +package net.osmand.plus; + + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.StringTokenizer; + +import net.osmand.IndexConstants; +import net.osmand.StateChangedListener; +import net.osmand.data.LatLon; +import net.osmand.map.ITileSource; +import net.osmand.map.TileSourceManager; +import net.osmand.map.TileSourceManager.TileSourceTemplate; +import net.osmand.plus.access.AccessibilityMode; +import net.osmand.plus.access.RelativeDirectionStyle; +import net.osmand.plus.api.SettingsAPI; +import net.osmand.plus.api.SettingsAPI.SettingsEditor; +import net.osmand.plus.render.RendererRegistry; +import net.osmand.plus.routing.RouteProvider.RouteService; +import net.osmand.render.RenderingRulesStorage; + +public class OsmandSettings { + + public interface OsmandPreference { + T get(); + + boolean set(T obj); + + boolean setModeValue(ApplicationMode m, T obj); + + T getModeValue(ApplicationMode m); + + String getId(); + + void resetToDefault(); + + void overrideDefaultValue(T newDefaultValue); + + void addListener(StateChangedListener listener); + + void removeListener(StateChangedListener listener); + } + + private abstract class PreferenceWithListener implements OsmandPreference { + private List> l = null; + + @Override + public void addListener(StateChangedListener listener) { + if(l == null) { + l = new LinkedList>(); + } + if(!l.contains(listener)) { + l.add(listener); + } + } + + public void fireEvent(T value){ + if (l != null) { + for (StateChangedListener t : l) { + t.stateChanged(value); + } + } + } + + @Override + public void removeListener(StateChangedListener listener) { + if(l != null) { + l.remove(listener); + } + } + } + + // These settings are stored in SharedPreferences + private static final String SHARED_PREFERENCES_NAME = "net.osmand.settings"; //$NON-NLS-1$ + + /// Settings variables + private final ClientContext ctx; + private SettingsAPI settingsAPI; + private Object globalPreferences; + private Object defaultProfilePreferences; + private Object profilePreferences; + private ApplicationMode currentMode; + private Map> registeredPreferences = + new LinkedHashMap>(); + + // cache variables + private long lastTimeInternetConnectionChecked = 0; + private boolean internetConnectionAvailable = true; + private List internetAvailableSourceTemplates = null; + + + + protected OsmandSettings(ClientContext clientContext) { + ctx = clientContext; + settingsAPI = ctx.getSettingsAPI(); + + globalPreferences = settingsAPI.getPreferenceObject(SHARED_PREFERENCES_NAME); + // start from default settings + currentMode = ApplicationMode.DEFAULT; + + defaultProfilePreferences = getProfilePreferences(ApplicationMode.DEFAULT); + profilePreferences = defaultProfilePreferences; + currentMode = readApplicationMode(); + profilePreferences = getProfilePreferences(currentMode); + } + + public ClientContext getContext() { + return ctx; + } + + public static String getSharedPreferencesName(ApplicationMode mode){ + if(mode == null){ + return SHARED_PREFERENCES_NAME; + } else { + return SHARED_PREFERENCES_NAME + "." + mode.name().toLowerCase(); + } + } + + public Object getProfilePreferences(ApplicationMode mode){ + return settingsAPI.getPreferenceObject(getSharedPreferencesName(mode)); + } + + public Object getGlobalPreferences(){ + return settingsAPI.getPreferenceObject(getSharedPreferencesName(null)); + } + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference APPLICATION_MODE = new PreferenceWithListener(){ + @Override + public String getId() { + return "application_mode"; + }; + + @Override + public ApplicationMode get() { + return currentMode; + } + + @Override + public void overrideDefaultValue(ApplicationMode newDefaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public void resetToDefault() { + set(ApplicationMode.DEFAULT); + }; + + @Override + public boolean set(ApplicationMode val) { + ApplicationMode oldMode = currentMode; + boolean changed = settingsAPI.edit(globalPreferences).putString(getId(), val.name()).commit(); + if(changed){ + currentMode = val; + profilePreferences = getProfilePreferences(currentMode); + fireEvent(oldMode); + } + return changed; + } + + @Override + public ApplicationMode getModeValue(ApplicationMode m) { + return m; + } + + @Override + public boolean setModeValue(ApplicationMode m, ApplicationMode obj) { + throw new UnsupportedOperationException(); + } + }; + + public ApplicationMode getApplicationMode(){ + return APPLICATION_MODE.get(); + } + + protected ApplicationMode readApplicationMode() { + String s = settingsAPI.getString(globalPreferences, APPLICATION_MODE.getId(), ApplicationMode.DEFAULT.name()); + try { + return ApplicationMode.valueOf(s); + } catch (IllegalArgumentException e) { + return ApplicationMode.DEFAULT; + } + } + + + // Check internet connection available every 15 seconds + public boolean isInternetConnectionAvailable(){ + return isInternetConnectionAvailable(false); + } + public boolean isInternetConnectionAvailable(boolean update){ + long delta = System.currentTimeMillis() - lastTimeInternetConnectionChecked; + if(delta < 0 || delta > 15000 || update){ + internetConnectionAvailable = ctx.getExternalServiceAPI().isInternetConnected(); + } + return internetConnectionAvailable; + } + + + /////////////// PREFERENCES classes //////////////// + + public abstract class CommonPreference extends PreferenceWithListener { + private final String id; + private boolean global; + private T cachedValue; + private Object cachedPreference; + private boolean cache; + private Map defaultValues; + private T defaultValue; + + + public CommonPreference(String id, T defaultValue){ + this.id = id; + this.defaultValue = defaultValue; + } + + public CommonPreference makeGlobal(){ + global = true; + return this; + } + + public CommonPreference cache(){ + cache = true; + return this; + } + + public CommonPreference makeProfile(){ + global = false; + return this; + } + + protected Object getPreferences(){ + return global ? globalPreferences : profilePreferences; + } + + public void setModeDefaultValue(ApplicationMode mode, T defValue){ + if(defaultValues == null){ + defaultValues = new LinkedHashMap(); + } + defaultValues.put(mode, defValue); + } + + @Override + public boolean setModeValue(ApplicationMode mode, T obj){ + if(global) { + return set(obj); + } + boolean ch = setValue(getProfilePreferences(mode), obj); + fireEvent(obj); + return ch; + } + + public T getProfileDefaultValue(){ + if(global){ + return defaultValue; + } + if(defaultValues != null && defaultValues.containsKey(currentMode)){ + return defaultValues.get(currentMode); + } + return defaultValue; + } + + protected T getDefaultValue(){ + if(global){ + return defaultValue; + } + if(defaultValues != null && defaultValues.containsKey(currentMode)){ + return defaultValues.get(currentMode); + } + if(settingsAPI.contains(defaultProfilePreferences, getId())) { + return getValue(defaultProfilePreferences, defaultValue); + } else { + return defaultValue; + } + } + + @Override + public void overrideDefaultValue(T newDefaultValue) { + this.defaultValue = newDefaultValue; + } + + protected abstract T getValue(Object prefs, T defaultValue); + + protected abstract boolean setValue(Object prefs, T val); + + @Override + public T getModeValue(ApplicationMode mode) { + if(global) { + return get(); + } + T defaultV = defaultValue; + if(defaultValues != null && defaultValues.containsKey(currentMode)){ + defaultV = defaultValues.get(currentMode); + } + return getValue(getProfilePreferences(mode), defaultV); + } + + @Override + public T get() { + if(cache && cachedValue != null && cachedPreference == getPreferences()){ + return cachedValue; + } + cachedPreference = getPreferences(); + cachedValue = getValue(cachedPreference, getDefaultValue()); + return cachedValue; + } + + @Override + public String getId() { + return id; + } + + @Override + public void resetToDefault(){ + set(getDefaultValue()); + } + + @Override + public boolean set(T obj) { + Object prefs = getPreferences(); + if (setValue(prefs, obj)) { + cachedValue = obj; + cachedPreference = prefs; + fireEvent(obj); + return true; + } + return false; + } + + } + + private class BooleanPreference extends CommonPreference { + + + private BooleanPreference(String id, boolean defaultValue) { + super(id, defaultValue); + } + + @Override + protected Boolean getValue(Object prefs, Boolean defaultValue) { + return settingsAPI.getBoolean(prefs, getId(), defaultValue); + } + + @Override + protected boolean setValue(Object prefs, Boolean val) { + return settingsAPI.edit( prefs).putBoolean(getId(), val).commit(); + } + } + + private class BooleanAccessibilityPreference extends BooleanPreference { + + private BooleanAccessibilityPreference(String id, boolean defaultValue) { + super(id, defaultValue); + } + + @Override + protected Boolean getValue(Object prefs, Boolean defaultValue) { + return ctx.getInternalAPI().accessibilityEnabled() ? + super.getValue(prefs, defaultValue) : + defaultValue; + } + + @Override + protected boolean setValue(Object prefs, Boolean val) { + return ctx.getInternalAPI().accessibilityEnabled() ? + super.setValue(prefs, val) : + false; + } + } + + private class IntPreference extends CommonPreference { + + + private IntPreference(String id, int defaultValue) { + super(id, defaultValue); + } + + @Override + protected Integer getValue(Object prefs, Integer defaultValue) { + return settingsAPI.getInt(prefs, getId(), defaultValue); + } + + @Override + protected boolean setValue(Object prefs, Integer val) { + return settingsAPI.edit( prefs).putInt(getId(), val).commit(); + } + + } + + private class LongPreference extends CommonPreference { + + + private LongPreference(String id, long defaultValue) { + super(id, defaultValue); + } + + @Override + protected Long getValue(Object prefs, Long defaultValue) { + return settingsAPI.getLong(prefs, getId(), defaultValue); + } + + @Override + protected boolean setValue(Object prefs, Long val) { + return settingsAPI.edit( prefs).putLong(getId(), val).commit(); + } + + } + + private class FloatPreference extends CommonPreference { + + + private FloatPreference(String id, float defaultValue) { + super(id, defaultValue); + } + + @Override + protected Float getValue(Object prefs, Float defaultValue) { + return settingsAPI.getFloat(prefs,getId(), defaultValue); + } + + @Override + protected boolean setValue(Object prefs, Float val) { + return settingsAPI.edit( prefs).putFloat(getId(), val).commit(); + } + + } + + private class StringPreference extends CommonPreference { + + private StringPreference(String id, String defaultValue) { + super(id, defaultValue); + } + + @Override + protected String getValue(Object prefs, String defaultValue) { + return settingsAPI.getString(prefs, getId(), defaultValue); + } + + @Override + protected boolean setValue(Object prefs, String val) { + return settingsAPI.edit( prefs).putString(getId(), (val != null) ? val.trim() : val).commit(); + } + + } + + private class EnumIntPreference> extends CommonPreference { + + private final E[] values; + + private EnumIntPreference(String id, E defaultValue, E[] values) { + super(id, defaultValue); + this.values = values; + } + + + @Override + protected E getValue(Object prefs, E defaultValue) { + try { + int i = settingsAPI.getInt(prefs, getId(), -1); + if(i >= 0 && i < values.length){ + return values[i]; + } + } catch (ClassCastException ex) { + setValue(prefs, defaultValue); + } + return defaultValue; + } + + @Override + protected boolean setValue(Object prefs,E val) { + return settingsAPI.edit( prefs).putInt(getId(), val.ordinal()).commit(); + } + + } + ///////////// PREFERENCES classes //////////////// + + // this value string is synchronized with settings_pref.xml preference name + private final OsmandPreference ENABLED_PLUGINS = new StringPreference("enabled_plugins", "").makeGlobal(); + + public Set getEnabledPlugins(){ + String plugs = ENABLED_PLUGINS.get(); + StringTokenizer toks = new StringTokenizer(plugs, ","); + Set res = new LinkedHashSet(); + while(toks.hasMoreTokens()) { + res.add(toks.nextToken()); + } + return res; + } + + public void enablePlugin(String pluginId, boolean enable){ + Set set = getEnabledPlugins(); + if(enable){ + set.add(pluginId); + } else { + set.remove(pluginId); + } + StringBuilder serialization = new StringBuilder(); + Iterator it = set.iterator(); + while(it.hasNext()){ + serialization.append(it.next()); + if(it.hasNext()) { + serialization.append(","); + } + } + if(!serialization.toString().equals(ENABLED_PLUGINS.get())) { + ENABLED_PLUGINS.set(serialization.toString()); + } + } + + + @SuppressWarnings("unchecked") + public CommonPreference registerBooleanPreference(String id, boolean defValue) { + if(registeredPreferences.containsKey(id)) { + return (CommonPreference) registeredPreferences.get(id); + } + BooleanPreference p = new BooleanPreference(id, defValue); + registeredPreferences.put(id, p); + return p; + } + + @SuppressWarnings("unchecked") + public CommonPreference registerIntPreference(String id, int defValue) { + if(registeredPreferences.containsKey(id)) { + return (CommonPreference) registeredPreferences.get(id); + } + IntPreference p = new IntPreference(id, defValue); + registeredPreferences.put(id, p); + return p; + } + + @SuppressWarnings("unchecked") + public CommonPreference registerLongPreference(String id, long defValue) { + if(registeredPreferences.containsKey(id)) { + return (CommonPreference) registeredPreferences.get(id); + } + LongPreference p = new LongPreference(id, defValue); + registeredPreferences.put(id, p); + return p; + } + + @SuppressWarnings("unchecked") + public CommonPreference registerFloatPreference(String id, float defValue) { + if(registeredPreferences.containsKey(id)) { + return (CommonPreference) registeredPreferences.get(id); + } + FloatPreference p = new FloatPreference(id, defValue); + registeredPreferences.put(id, p); + return p; + } + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference USE_INTERNET_TO_DOWNLOAD_TILES = new BooleanPreference("use_internet_to_download_tiles", true).makeGlobal().cache(); + + public final OsmandPreference DEFAULT_APPLICATION_MODE = new EnumIntPreference( + "default_application_mode", ApplicationMode.DEFAULT, ApplicationMode.values()).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + // cache of metrics constants as they are used very often + public final OsmandPreference METRIC_SYSTEM = new EnumIntPreference( + "default_metric_system", MetricsConstants.KILOMETERS_AND_METERS, MetricsConstants.values()).makeGlobal().cache(); + + // this value string is synchronized with settings_pref.xml preference name + // cache of metrics constants as they are used very often + public final OsmandPreference DIRECTION_STYLE = new EnumIntPreference( + "direction_style", RelativeDirectionStyle.SIDEWISE, RelativeDirectionStyle.values()).makeGlobal().cache(); + + // this value string is synchronized with settings_pref.xml preference name + // cache of metrics constants as they are used very often + public final OsmandPreference ACCESSIBILITY_MODE = new EnumIntPreference( + "accessibility_mode", AccessibilityMode.DEFAULT, AccessibilityMode.values()).makeGlobal().cache(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USE_TRACKBALL_FOR_MOVEMENTS = + new BooleanPreference("use_trackball_for_movements", true).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference ZOOM_BY_TRACKBALL = + new BooleanAccessibilityPreference("zoom_by_trackball", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SCROLL_MAP_BY_GESTURES = + new BooleanAccessibilityPreference("scroll_map_by_gestures", true).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USE_SHORT_OBJECT_NAMES = + new BooleanAccessibilityPreference("use_short_object_names", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference ACCESSIBILITY_EXTENSIONS = + new BooleanAccessibilityPreference("accessibility_extensions", false).makeGlobal(); + + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USE_HIGH_RES_MAPS = new BooleanPreference("use_high_res_maps", true).makeGlobal().cache(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference MAP_TEXT_SIZE = new FloatPreference("map_text_size", 1.0f).makeProfile().cache(); + + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SHOW_POI_OVER_MAP = new BooleanPreference("show_poi_over_map", false).makeGlobal(); + + public final OsmandPreference SHOW_POI_LABEL = new BooleanPreference("show_poi_label", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SHOW_TRANSPORT_OVER_MAP = new BooleanPreference("show_transport_over_map", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference PREFERRED_LOCALE = new StringPreference("preferred_locale", "").makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USER_NAME = new StringPreference("user_name", "NoName").makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USER_OSM_BUG_NAME = + new StringPreference("user_osm_bug_name", "NoName/OsmAnd").makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USER_PASSWORD = + new StringPreference("user_password", "").makeGlobal(); + + // this value boolean is synchronized with settings_pref.xml preference offline POI/Bugs edition + public final OsmandPreference OFFLINE_EDITION = new BooleanPreference("offline_edition", false).makeGlobal(); + + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference DAYNIGHT_MODE = + new EnumIntPreference("daynight_mode", DayNightMode.DAY, DayNightMode.values()); + { + DAYNIGHT_MODE.makeProfile().cache(); + DAYNIGHT_MODE.setModeDefaultValue(ApplicationMode.CAR, DayNightMode.AUTO); + DAYNIGHT_MODE.setModeDefaultValue(ApplicationMode.BICYCLE, DayNightMode.AUTO); + DAYNIGHT_MODE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, DayNightMode.DAY); + } + + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference ROUTER_SERVICE = + new EnumIntPreference("router_service", RouteService.OSMAND, + new RouteService[] {RouteService.OSMAND, RouteService.ORS, RouteService.YOURS}).makeProfile(); + + public final CommonPreference SNAP_TO_ROAD = new BooleanPreference("snap_to_road", false).makeProfile().cache(); + { + SNAP_TO_ROAD.setModeDefaultValue(ApplicationMode.CAR, true); + SNAP_TO_ROAD.setModeDefaultValue(ApplicationMode.BICYCLE, true); + } + + public final CommonPreference LEFT_SIDE_NAVIGATION = new BooleanPreference("left_side_navigation", false).makeGlobal(); + + + // this value string is synchronized with settings_pref.xml preference name + public static final String SAVE_CURRENT_TRACK = "save_current_track"; //$NON-NLS-1$ + public static final String LOCAL_INDEXES = "local_indexes"; //$NON-NLS-1$ + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference SAVE_TRACK_TO_GPX = new BooleanPreference("save_track_to_gpx", false).makeProfile().cache(); + { + SAVE_TRACK_TO_GPX.setModeDefaultValue(ApplicationMode.CAR, true); + SAVE_TRACK_TO_GPX.setModeDefaultValue(ApplicationMode.BICYCLE, true); + } + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference FAST_ROUTE_MODE = new BooleanPreference("fast_route_mode", true).makeProfile(); + // temporarily for new version + public final CommonPreference PRECISE_ROUTING_MODE = new BooleanPreference("precise_routing_mode", false).makeProfile(); + public final CommonPreference OPTIMAL_ROUTE_MODE = new BooleanPreference("optimal_route_mode", true).makeProfile(); + { + OPTIMAL_ROUTE_MODE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, false); + } + + public final OsmandPreference SHOW_TRAFFIC_WARNINGS = new BooleanPreference("show_traffic_warnings", true).makeProfile().cache(); + public final OsmandPreference SHOW_CAMERAS = new BooleanPreference("show_cameras", true).makeProfile().cache(); + public final OsmandPreference SHOW_LANES = new BooleanPreference("show_lanes", true).makeProfile().cache(); + + public final OsmandPreference AVOID_TOLL_ROADS = new BooleanPreference("avoid_toll_roads", false).makeProfile().cache(); + public final OsmandPreference AVOID_MOTORWAY = new BooleanPreference("avoid_motorway", false).makeProfile().cache(); + public final OsmandPreference AVOID_UNPAVED_ROADS = new BooleanPreference("avoid_unpaved_roads", false).makeProfile().cache(); + public final OsmandPreference AVOID_FERRIES = new BooleanPreference("avoid_ferries", false).makeProfile().cache(); + + public final OsmandPreference PREFER_MOTORWAYS = new BooleanPreference("prefer_motorways", false).makeProfile().cache(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference SAVE_TRACK_INTERVAL = new IntPreference("save_track_interval", 5000).makeProfile(); + { + SAVE_TRACK_INTERVAL.setModeDefaultValue(ApplicationMode.CAR, 5000); + SAVE_TRACK_INTERVAL.setModeDefaultValue(ApplicationMode.BICYCLE, 10000); + SAVE_TRACK_INTERVAL.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 30000); + } + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference LIVE_MONITORING = new BooleanPreference("live_monitoring", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference LIVE_MONITORING_INTERVAL = new IntPreference("live_monitoring_interval", 5000).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference LIVE_MONITORING_URL = new StringPreference("live_monitoring_url", + "http://example.com?lat={0}&lon={1}×tamp={2}&hdop={3}&altitude={4}&speed={5}").makeGlobal(); + + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SHOW_OSM_BUGS = new BooleanPreference("show_osm_bugs", false).makeGlobal(); + + public final OsmandPreference MAP_INFO_CONTROLS = new StringPreference("map_info_controls", "").makeProfile(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference DEBUG_RENDERING_INFO = new BooleanPreference("debug_rendering", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SHOW_FAVORITES = new BooleanPreference("show_favorites", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference MAP_SCREEN_ORIENTATION = + new IntPreference("map_screen_orientation", -1/*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference SHOW_VIEW_ANGLE = new BooleanPreference("show_view_angle", false).makeProfile().cache(); + { + SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.CAR, false); + SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.BICYCLE, true); + SHOW_VIEW_ANGLE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, true); + } + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference AUTO_ZOOM_MAP = new BooleanPreference("auto_zoom_map", false).makeProfile(); + { + AUTO_ZOOM_MAP.setModeDefaultValue(ApplicationMode.CAR, true); + } + + // this value string is synchronized with settings_pref.xml preference name + // seconds to auto_follow + public final CommonPreference AUTO_FOLLOW_ROUTE = new IntPreference("auto_follow_route", 0).makeProfile(); + { + AUTO_FOLLOW_ROUTE.setModeDefaultValue(ApplicationMode.CAR, 15); + AUTO_FOLLOW_ROUTE.setModeDefaultValue(ApplicationMode.BICYCLE, 15); + AUTO_FOLLOW_ROUTE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 0); + } + + // this value string is synchronized with settings_pref.xml preference name + // try without AUTO_FOLLOW_ROUTE_NAV (see forum discussion 'Simplify our navigation preference menu') + //public final CommonPreference AUTO_FOLLOW_ROUTE_NAV = new BooleanPreference("auto_follow_route_navigation", true, false); + + // this value string is synchronized with settings_pref.xml preference name + public static final int ROTATE_MAP_NONE = 0; + public static final int ROTATE_MAP_BEARING = 1; + public static final int ROTATE_MAP_COMPASS = 2; + public final CommonPreference ROTATE_MAP = + new IntPreference("rotate_map", ROTATE_MAP_NONE).makeProfile().cache(); + { + ROTATE_MAP.setModeDefaultValue(ApplicationMode.CAR, ROTATE_MAP_BEARING); + ROTATE_MAP.setModeDefaultValue(ApplicationMode.BICYCLE, ROTATE_MAP_BEARING); + ROTATE_MAP.setModeDefaultValue(ApplicationMode.PEDESTRIAN, ROTATE_MAP_COMPASS); + } + + // this value string is synchronized with settings_pref.xml preference name + public static final int CENTER_CONSTANT = 0; + public static final int BOTTOM_CONSTANT = 1; + public final CommonPreference POSITION_ON_MAP = new IntPreference("position_on_map", CENTER_CONSTANT).makeProfile(); + { + POSITION_ON_MAP.setModeDefaultValue(ApplicationMode.CAR, BOTTOM_CONSTANT); + POSITION_ON_MAP.setModeDefaultValue(ApplicationMode.BICYCLE, BOTTOM_CONSTANT); + POSITION_ON_MAP.setModeDefaultValue(ApplicationMode.PEDESTRIAN, CENTER_CONSTANT); + } + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference MAX_LEVEL_TO_DOWNLOAD_TILE = new IntPreference("max_level_download_tile", 18).makeProfile().cache(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference LEVEL_TO_SWITCH_VECTOR_RASTER = new IntPreference("level_to_switch_vector_raster", 1).makeGlobal().cache(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference AUDIO_STREAM_GUIDANCE = new IntPreference("audio_stream", + 3/*AudioManager.STREAM_MUSIC*/).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference USE_ENGLISH_NAMES = new BooleanPreference("use_english_names", false).makeGlobal(); + + public boolean usingEnglishNames(){ + return USE_ENGLISH_NAMES.get(); + } + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference MAP_ONLINE_DATA = new BooleanPreference("map_online_data", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference SHOW_DESTINATION_ARROW = new BooleanPreference("show_destination_arrow", true).makeProfile(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference MAP_OVERLAY = new StringPreference("map_overlay", null).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference MAP_UNDERLAY = new StringPreference("map_underlay", null).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference MAP_OVERLAY_TRANSPARENCY = new IntPreference("overlay_transparency", + 100).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference MAP_TRANSPARENCY = new IntPreference("map_transparency", + 255).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference MAP_TILE_SOURCES = new StringPreference("map_tile_sources", + TileSourceManager.getMapnikSource().getName()).makeGlobal(); + + public List getInternetAvailableSourceTemplates(){ + if(internetAvailableSourceTemplates == null && isInternetConnectionAvailable()){ + internetAvailableSourceTemplates = TileSourceManager.downloadTileSourceTemplates(Version.getVersionAsURLParam(ctx)); + } + return internetAvailableSourceTemplates; + } + + public CommonPreference PREVIOUS_INSTALLED_VERSION = new StringPreference("previous_installed_version", "").makeGlobal(); + + + public ITileSource getMapTileSource(boolean warnWhenSelected) { + String tileName = MAP_TILE_SOURCES.get(); + if (tileName != null) { + ITileSource ts = getTileSourceByName(tileName, warnWhenSelected); + if(ts != null){ + return ts; + } + } + return TileSourceManager.getMapnikSource(); + } + + private TileSourceTemplate checkAmongAvailableTileSources(File dir, List list){ + if (list != null) { + for (TileSourceTemplate l : list) { + if (dir.getName().equals(l.getName())) { + try { + dir.mkdirs(); + TileSourceManager.createMetaInfoFile(dir, l, true); + } catch (IOException e) { + } + return l; + } + + } + } + return null; + } + + + + public ITileSource getTileSourceByName(String tileName, boolean warnWhenSelected) { + if(tileName == null || tileName.length() == 0){ + return null; + } + List knownTemplates = TileSourceManager.getKnownSourceTemplates(); + File tPath = ctx.getAppPath(IndexConstants.TILES_INDEX_DIR); + File dir = new File(tPath, tileName); + if (!dir.exists()) { + TileSourceTemplate ret = checkAmongAvailableTileSources(dir, knownTemplates); + if (ret != null) { + return ret; + } + // try to find among other templates + ret = checkAmongAvailableTileSources(dir, getInternetAvailableSourceTemplates()); + if (ret != null) { + return ret; + } + } else if (tileName.endsWith(IndexConstants.SQLITE_EXT)) { + return ctx.getTodoAPI().newSqliteTileSource(dir, knownTemplates); + } else if (dir.isDirectory() && !dir.getName().startsWith(".")) { + TileSourceTemplate t = TileSourceManager.createTileSourceTemplate(dir); + if (warnWhenSelected && !t.isRuleAcceptable()) { + ctx.showToastMessage(R.string.warning_tile_layer_not_downloadable, dir.getName()); + } + if (!TileSourceManager.isTileSourceMetaInfoExist(dir)) { + TileSourceTemplate ret = checkAmongAvailableTileSources(dir, knownTemplates); + if (ret != null) { + t = ret; + } else { + // try to find among other templates + ret = checkAmongAvailableTileSources(dir, getInternetAvailableSourceTemplates()); + if (ret != null) { + t = ret; + } + } + + } + + return t; + } + return null; + } + + public boolean installTileSource(TileSourceTemplate toInstall){ + File tPath = ctx.getAppPath(IndexConstants.TILES_INDEX_DIR); + File dir = new File(tPath, toInstall.getName()); + dir.mkdirs(); + if(dir.exists() && dir.isDirectory()){ + try { + TileSourceManager.createMetaInfoFile(dir, toInstall, true); + } catch (IOException e) { + return false; + } + } + return true; + } + + public Map getTileSourceEntries(){ + Map map = new LinkedHashMap(); + File dir = ctx.getAppPath(IndexConstants.TILES_INDEX_DIR); + if (dir != null && dir.canRead()) { + File[] files = dir.listFiles(); + Arrays.sort(files, new Comparator(){ + @Override + public int compare(File object1, File object2) { + if(object1.lastModified() > object2.lastModified()){ + return -1; + } else if(object1.lastModified() == object2.lastModified()){ + return 0; + } + return 1; + } + + }); + if (files != null) { + for (File f : files) { + if (f.getName().endsWith(IndexConstants.SQLITE_EXT)) { + String n = f.getName(); + map.put(f.getName(), n.substring(0, n.lastIndexOf('.'))); + } else if (f.isDirectory() && !f.getName().equals(IndexConstants.TEMP_SOURCE_TO_LOAD) + && !f.getName().startsWith(".")) { + map.put(f.getName(), f.getName()); + } + } + } + } + for(TileSourceTemplate l : TileSourceManager.getKnownSourceTemplates()){ + map.put(l.getName(), l.getName()); + } + return map; + + } + + public static final String EXTERNAL_STORAGE_DIR = "external_storage_dir"; //$NON-NLS-1$ + + public File getExternalStorageDirectory() { + return new File(settingsAPI.getString(globalPreferences,EXTERNAL_STORAGE_DIR, + ctx.getExternalServiceAPI().getExternalStorageDirectory())); + } + + public boolean setExternalStorageDirectory(String externalStorageDir) { + return settingsAPI.edit(globalPreferences).putString(EXTERNAL_STORAGE_DIR, externalStorageDir).commit(); + } + + // This value is a key for saving last known location shown on the map + public static final String LAST_KNOWN_MAP_LAT = "last_known_map_lat"; //$NON-NLS-1$ + public static final String LAST_KNOWN_MAP_LON = "last_known_map_lon"; //$NON-NLS-1$ + public static final String LAST_KNOWN_MAP_ZOOM = "last_known_map_zoom"; //$NON-NLS-1$ + + public static final String MAP_LABEL_TO_SHOW = "map_label_to_show"; //$NON-NLS-1$ + public static final String MAP_LAT_TO_SHOW = "map_lat_to_show"; //$NON-NLS-1$ + public static final String MAP_LON_TO_SHOW = "map_lon_to_show"; //$NON-NLS-1$ + public static final String MAP_ZOOM_TO_SHOW = "map_zoom_to_show"; //$NON-NLS-1$ + + public LatLon getLastKnownMapLocation() { + float lat = settingsAPI.getFloat(globalPreferences,LAST_KNOWN_MAP_LAT, 0); + float lon = settingsAPI.getFloat(globalPreferences,LAST_KNOWN_MAP_LON, 0); + return new LatLon(lat, lon); + } + + public boolean isLastKnownMapLocation(){ + return settingsAPI.contains(globalPreferences,LAST_KNOWN_MAP_LAT); + } + + + public LatLon getAndClearMapLocationToShow(){ + if(!settingsAPI.contains(globalPreferences,MAP_LAT_TO_SHOW)){ + return null; + } + float lat = settingsAPI.getFloat(globalPreferences,MAP_LAT_TO_SHOW, 0); + float lon = settingsAPI.getFloat(globalPreferences,MAP_LON_TO_SHOW, 0); + settingsAPI.edit(globalPreferences).remove(MAP_LAT_TO_SHOW).commit(); + return new LatLon(lat, lon); + } + + public String getAndClearMapLabelToShow(){ + String label = settingsAPI.getString(globalPreferences,MAP_LABEL_TO_SHOW, null); + settingsAPI.edit(globalPreferences).remove(MAP_LABEL_TO_SHOW).commit(); + return label; + } + + private Object objectToShow; + public Object getAndClearObjectToShow(){ + Object objectToShow = this.objectToShow; + this.objectToShow = null; + return objectToShow; + } + + public int getMapZoomToShow() { + return settingsAPI.getInt(globalPreferences,MAP_ZOOM_TO_SHOW, 5); + } + + public void setMapLocationToShow(double latitude, double longitude, int zoom, String historyDescription, + String labelToShow, Object toShow) { + SettingsEditor edit = settingsAPI.edit(globalPreferences); + edit.putFloat(MAP_LAT_TO_SHOW, (float) latitude); + edit.putFloat(MAP_LON_TO_SHOW, (float) longitude); + if (labelToShow != null) { + edit.putString(MAP_LABEL_TO_SHOW, labelToShow); + } else { + edit.remove(MAP_LABEL_TO_SHOW); + } + edit.putInt(MAP_ZOOM_TO_SHOW, zoom); + edit.commit(); + objectToShow = toShow; + if(historyDescription != null){ + SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription); + } + } + + public void setMapLocationToShow(double latitude, double longitude, int zoom) { + setMapLocationToShow(latitude, longitude, zoom, null, null, null); + } + + public void setMapLocationToShow(double latitude, double longitude, int zoom, String historyDescription){ + setMapLocationToShow(latitude, longitude, zoom, historyDescription, historyDescription, null); + } + + // Do not use that method if you want to show point on map. Use setMapLocationToShow + public void setLastKnownMapLocation(double latitude, double longitude) { + SettingsEditor edit = settingsAPI.edit(globalPreferences); + edit.putFloat(LAST_KNOWN_MAP_LAT, (float) latitude); + edit.putFloat(LAST_KNOWN_MAP_LON, (float) longitude); + edit.commit(); + } + + public int getLastKnownMapZoom() { + return settingsAPI.getInt(globalPreferences,LAST_KNOWN_MAP_ZOOM, 5); + } + + public void setLastKnownMapZoom(int zoom) { + settingsAPI.edit(globalPreferences).putInt(LAST_KNOWN_MAP_ZOOM, zoom).commit(); + } + + public final static String POINT_NAVIGATE_LAT = "point_navigate_lat"; //$NON-NLS-1$ + public final static String POINT_NAVIGATE_LON = "point_navigate_lon"; //$NON-NLS-1$ + public final static String POINT_NAVIGATE_ROUTE = "point_navigate_route"; //$NON-NLS-1$ + public final static String POINT_NAVIGATE_DESCRIPTION = "point_navigate_description"; //$NON-NLS-1$ + public final static String INTERMEDIATE_POINTS = "intermediate_points"; //$NON-NLS-1$ + public final static String INTERMEDIATE_POINTS_DESCRIPTION = "intermediate_points_description"; //$NON-NLS-1$ + + public LatLon getPointToNavigate() { + float lat = settingsAPI.getFloat(globalPreferences,POINT_NAVIGATE_LAT, 0); + float lon = settingsAPI.getFloat(globalPreferences,POINT_NAVIGATE_LON, 0); + if (lat == 0 && lon == 0) { + return null; + } + return new LatLon(lat, lon); + } + + public String getPointNavigateDescription() { + return settingsAPI.getString(globalPreferences,POINT_NAVIGATE_DESCRIPTION, ""); + } + + + public boolean isRouteToPointNavigateAndClear(){ + boolean t = settingsAPI.contains(globalPreferences,POINT_NAVIGATE_ROUTE); + settingsAPI.edit(globalPreferences).remove(POINT_NAVIGATE_ROUTE).commit(); + return t; + } + + public boolean clearIntermediatePoints() { + return settingsAPI.edit(globalPreferences).remove(INTERMEDIATE_POINTS).commit(); + } + + public List getIntermediatePointDescriptions(int sz) { + List list = new ArrayList(); + String ip = settingsAPI.getString(globalPreferences,INTERMEDIATE_POINTS_DESCRIPTION, ""); + if (ip.trim().length() > 0) { + StringTokenizer tok = new StringTokenizer(ip, "--"); + while (tok.hasMoreTokens()) { + String d = tok.nextToken(); + list.add(d); + } + } + while(list.size() < sz) { + list.add(""); + } + return list; + } + + public List getIntermediatePoints() { + List list = new ArrayList(); + String ip = settingsAPI.getString(globalPreferences,INTERMEDIATE_POINTS, ""); + if (ip.trim().length() > 0) { + StringTokenizer tok = new StringTokenizer(ip, ","); + while (tok.hasMoreTokens()) { + String lat = tok.nextToken(); + if (!tok.hasMoreTokens()) { + break; + } + String lon = tok.nextToken(); + list.add(new LatLon(Float.parseFloat(lat), Float.parseFloat(lon))); + } + } + return list; + } + + public boolean insertIntermediatePoint(double latitude, double longitude, String historyDescription, int index, + boolean navigate) { + List ps = getIntermediatePoints(); + List ds = getIntermediatePointDescriptions(ps.size()); + ps.add(index, new LatLon(latitude, longitude)); + ds.add(index, historyDescription); + if(navigate) { + settingsAPI.edit(globalPreferences).putString(POINT_NAVIGATE_ROUTE, "true").commit(); + } + if (historyDescription != null) { + SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription); + } + return saveIntermediatePoints(ps,ds); + } + public boolean deleteIntermediatePoint( int index) { + List ps = getIntermediatePoints(); + List ds = getIntermediatePointDescriptions(ps.size()); + ps.remove(index); + ds.remove(index); + return saveIntermediatePoints(ps,ds); + } + + public boolean saveIntermediatePoints(List ps, List ds) { + StringBuilder sb = new StringBuilder(); + for(int i=0; i 0){ + sb.append(","); + } + sb.append(((float)ps.get(i).getLatitude()+"")).append(",").append(((float)ps.get(i).getLongitude()+"")); + } + StringBuilder tb = new StringBuilder(); + for (int i = 0; i < ds.size(); i++) { + if (i > 0) { + tb.append("--"); + } + if (ds.get(i) == null) { + tb.append(""); + } else { + tb.append(ds.get(i)); + } + } + return settingsAPI.edit(globalPreferences).putString(INTERMEDIATE_POINTS, sb.toString()). + putString(INTERMEDIATE_POINTS_DESCRIPTION, tb.toString()). + commit(); + } + + public boolean clearPointToNavigate() { + return settingsAPI.edit(globalPreferences).remove(POINT_NAVIGATE_LAT).remove(POINT_NAVIGATE_LON). + remove(POINT_NAVIGATE_DESCRIPTION).remove(POINT_NAVIGATE_ROUTE).commit(); + } + + public boolean setPointToNavigate(double latitude, double longitude, String historyDescription) { + return setPointToNavigate(latitude, longitude, false, historyDescription); + } + + public boolean setPointToNavigate(double latitude, double longitude, boolean navigate, String historyDescription) { + boolean add = settingsAPI.edit(globalPreferences).putFloat(POINT_NAVIGATE_LAT, (float) latitude).putFloat(POINT_NAVIGATE_LON, (float) longitude).commit(); + settingsAPI.edit(globalPreferences).putString(POINT_NAVIGATE_DESCRIPTION, historyDescription).commit(); + if(navigate) { + settingsAPI.edit(globalPreferences).putString(POINT_NAVIGATE_ROUTE, "true").commit(); + } + if(add){ + if(historyDescription != null){ + SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription); + } + } + return add; + } + + + /** + * the location of a parked car + */ + + public static final String LAST_SEARCHED_REGION = "last_searched_region"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_CITY = "last_searched_city"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_CITY_NAME = "last_searched_city_name"; //$NON-NLS-1$ + public static final String lAST_SEARCHED_POSTCODE= "last_searched_postcode"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_STREET = "last_searched_street"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_BUILDING = "last_searched_building"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_INTERSECTED_STREET = "last_searched_intersected_street"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_LAT = "last_searched_lat"; //$NON-NLS-1$ + public static final String LAST_SEARCHED_LON = "last_searched_lon"; //$NON-NLS-1$ + + public LatLon getLastSearchedPoint(){ + if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_LAT) && settingsAPI.contains(globalPreferences,LAST_SEARCHED_LON)){ + return new LatLon(settingsAPI.getFloat(globalPreferences,LAST_SEARCHED_LAT, 0), + settingsAPI.getFloat(globalPreferences,LAST_SEARCHED_LON, 0)); + } + return null; + } + + public boolean setLastSearchedPoint(LatLon l){ + if(l == null){ + return settingsAPI.edit(globalPreferences).remove(LAST_SEARCHED_LAT).remove(LAST_SEARCHED_LON).commit(); + } else { + return setLastSearchedPoint(l.getLatitude(), l.getLongitude()); + } + } + + public boolean setLastSearchedPoint(double lat, double lon){ + return settingsAPI.edit(globalPreferences).putFloat(LAST_SEARCHED_LAT, (float) lat). + putFloat(LAST_SEARCHED_LON, (float) lon).commit(); + } + + public String getLastSearchedRegion() { + return settingsAPI.getString(globalPreferences, LAST_SEARCHED_REGION, ""); //$NON-NLS-1$ + } + + public boolean setLastSearchedRegion(String region, LatLon l) { + SettingsEditor edit = settingsAPI.edit(globalPreferences).putString(LAST_SEARCHED_REGION, region).putLong(LAST_SEARCHED_CITY, -1). + putString(LAST_SEARCHED_CITY_NAME, "").putString(lAST_SEARCHED_POSTCODE, ""). + putString(LAST_SEARCHED_STREET,"").putString(LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$ //$NON-NLS-2$ + if (settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)) { + edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ + } + boolean res = edit.commit(); + setLastSearchedPoint(l); + return res; + } + + public String getLastSearchedPostcode(){ + return settingsAPI.getString(globalPreferences, lAST_SEARCHED_POSTCODE, null); + } + + public boolean setLastSearchedPostcode(String postcode, LatLon point){ + SettingsEditor edit = settingsAPI.edit(globalPreferences).putLong(LAST_SEARCHED_CITY, -1).putString(LAST_SEARCHED_STREET, "").putString( //$NON-NLS-1$ + LAST_SEARCHED_BUILDING, "").putString(lAST_SEARCHED_POSTCODE, postcode); //$NON-NLS-1$ + if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){ + edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ + } + boolean res = edit.commit(); + setLastSearchedPoint(point); + return res; + } + + public Long getLastSearchedCity() { + return settingsAPI.getLong(globalPreferences,LAST_SEARCHED_CITY, -1); + } + + public String getLastSearchedCityName() { + return settingsAPI.getString(globalPreferences,LAST_SEARCHED_CITY_NAME, ""); + } + + public boolean setLastSearchedCity(Long cityId, String name, LatLon point) { + SettingsEditor edit = settingsAPI.edit(globalPreferences).putLong(LAST_SEARCHED_CITY, cityId).putString(LAST_SEARCHED_CITY_NAME, name). + putString(LAST_SEARCHED_STREET, "").putString(LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$ + edit.remove(lAST_SEARCHED_POSTCODE); + if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){ + edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ + } + boolean res = edit.commit(); + setLastSearchedPoint(point); + return res; + } + + public String getLastSearchedStreet() { + return settingsAPI.getString(globalPreferences,LAST_SEARCHED_STREET, ""); //$NON-NLS-1$ + } + + public boolean setLastSearchedStreet(String street, LatLon point) { + SettingsEditor edit = settingsAPI.edit(globalPreferences).putString(LAST_SEARCHED_STREET, street).putString(LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$ + if (settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)) { + edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ + } + boolean res = edit.commit(); + setLastSearchedPoint(point); + return res; + } + + public String getLastSearchedBuilding() { + return settingsAPI.getString(globalPreferences,LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$ + } + + public boolean setLastSearchedBuilding(String building, LatLon point) { + boolean res = settingsAPI.edit(globalPreferences).putString(LAST_SEARCHED_BUILDING, building).remove(LAST_SEARCHED_INTERSECTED_STREET).commit(); + setLastSearchedPoint(point); + return res; + } + + public String getLastSearchedIntersectedStreet() { + if (!settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)) { + return null; + } + return settingsAPI.getString(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ + } + + public boolean setLastSearchedIntersectedStreet(String street, LatLon l) { + setLastSearchedPoint(l); + return settingsAPI.edit(globalPreferences).putString(LAST_SEARCHED_INTERSECTED_STREET, street).commit(); + } + + public static final String SELECTED_POI_FILTER_FOR_MAP = "selected_poi_filter_for_map"; //$NON-NLS-1$ + + public boolean setPoiFilterForMap(String filterId) { + return settingsAPI.edit(globalPreferences).putString(SELECTED_POI_FILTER_FOR_MAP, filterId).commit(); + } + + public String getPoiFilterForMap(){ + return settingsAPI.getString(globalPreferences,SELECTED_POI_FILTER_FOR_MAP, null); + } + + public static final String VOICE_PROVIDER_NOT_USE = "VOICE_PROVIDER_NOT_USE"; + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference VOICE_PROVIDER = new StringPreference("voice_provider", null).makeProfile(); + + // this value string is synchronized with settings_pref.xml preference name + //public final OsmandPreference USE_COMPASS_IN_NAVIGATION = new BooleanPreference("use_compass_navigation", true).makeProfile().cache(); + public final CommonPreference USE_COMPASS_IN_NAVIGATION = new BooleanPreference("use_compass_navigation", true).makeProfile().cache(); + { + USE_COMPASS_IN_NAVIGATION.setModeDefaultValue(ApplicationMode.CAR, true); + } + + // this value string is synchronized with settings_pref.xml preference name + public final CommonPreference RENDERER = new StringPreference("renderer", RendererRegistry.DEFAULT_RENDER) { + { + makeProfile(); + } + @Override + protected boolean setValue(Object prefs, String val) { + if(val == null){ + val = RendererRegistry.DEFAULT_RENDER; + } + RenderingRulesStorage loaded = ctx.getRendererRegistry().getRenderer(val); + if (loaded != null) { + super.setValue(prefs, val); + return true; + } + return false; + }; + }; + + + Map> customRendersProps = new LinkedHashMap>(); + public CommonPreference getCustomRenderProperty(String attrName){ + if(!customRendersProps.containsKey(attrName)){ + customRendersProps.put(attrName, new StringPreference("nrenderer_"+attrName, "").makeProfile()); + } + return customRendersProps.get(attrName); + } + { + CommonPreference pref = getCustomRenderProperty("appMode"); + pref.setModeDefaultValue(ApplicationMode.CAR, "car"); + pref.setModeDefaultValue(ApplicationMode.PEDESTRIAN, "pedestrian"); + pref.setModeDefaultValue(ApplicationMode.BICYCLE, "bicycle"); + } + + Map> customBooleanRendersProps = new LinkedHashMap>(); + public CommonPreference getCustomRenderBooleanProperty(String attrName){ + if(!customRendersProps.containsKey(attrName)){ + customBooleanRendersProps.put(attrName, new BooleanPreference("nrenderer_"+attrName, false).makeProfile()); + } + return customBooleanRendersProps.get(attrName); + } + + public final OsmandPreference VOICE_MUTE = new BooleanPreference("voice_mute", false).makeGlobal(); + + // for background service + public final OsmandPreference MAP_ACTIVITY_ENABLED = new BooleanPreference("map_activity_enabled", false).makeGlobal(); + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SAFE_MODE = new BooleanPreference("safe_mode", false).makeGlobal(); + + public final OsmandPreference NATIVE_RENDERING_FAILED = new BooleanPreference("native_rendering_failed_init", false).makeGlobal(); + + + // this value string is synchronized with settings_pref.xml preference name + public static final String SERVICE_OFF_ENABLED = "service_off_enabled"; //$NON-NLS-1$ + + // this value string is synchronized with settings_pref.xml preference name + public final OsmandPreference SERVICE_OFF_INTERVAL = new IntPreference("service_off_interval", + 5 * 60 * 1000).makeGlobal(); + + public final CommonPreference SHOW_CURRENT_GPX_TRACK = + new BooleanPreference("show_current_gpx_track", false).makeGlobal().cache(); + + public final OsmandPreference CONTRIBUTION_INSTALL_APP_DATE = new StringPreference("CONTRIBUTION_INSTALL_APP_DATE", null).makeGlobal(); + + + public final OsmandPreference FOLLOW_THE_ROUTE = new BooleanPreference("follow_to_route", false).makeGlobal(); + public final OsmandPreference FOLLOW_THE_GPX_ROUTE = new StringPreference("follow_gpx", null).makeGlobal(); + + public final OsmandPreference SHOW_ARRIVAL_TIME_OTHERWISE_EXPECTED_TIME = + new BooleanPreference("show_arrival_time", true).makeGlobal(); + + + // UI boxes + public final CommonPreference TRANSPARENT_MAP_THEME = + new BooleanPreference("transparent_map_theme", true).makeProfile(); + { + TRANSPARENT_MAP_THEME.setModeDefaultValue(ApplicationMode.CAR, false); + TRANSPARENT_MAP_THEME.setModeDefaultValue(ApplicationMode.BICYCLE, false); + TRANSPARENT_MAP_THEME.setModeDefaultValue(ApplicationMode.PEDESTRIAN, true); + } + + public final CommonPreference FLUORESCENT_OVERLAYS = + new BooleanPreference("fluorescent_overlays", false).makeGlobal().cache(); + + + public final CommonPreference SHOW_RULER = + new BooleanPreference("show_ruler", true).makeProfile().cache(); + + + + public final OsmandPreference NUMBER_OF_FREE_DOWNLOADS = new IntPreference("free_downloads_v1", 0).makeGlobal(); + + public boolean checkFreeDownloadsNumberZero(){ + if(!settingsAPI.contains(globalPreferences,NUMBER_OF_FREE_DOWNLOADS.getId())){ + NUMBER_OF_FREE_DOWNLOADS.set(0); + return true; + } + return false; + } + + public enum DayNightMode { + AUTO(R.string.daynight_mode_auto), + DAY(R.string.daynight_mode_day), + NIGHT(R.string.daynight_mode_night), + SENSOR(R.string.daynight_mode_sensor); + + private final int key; + + DayNightMode(int key) { + this.key = key; + } + + public String toHumanString(ClientContext ctx){ + return ctx.getString(key); + } + + public boolean isSensor() { + return this == SENSOR; + } + + public boolean isAuto() { + return this == AUTO; + } + + public boolean isDay() { + return this == DAY; + } + + public boolean isNight() { + return this == NIGHT; + } + + public static DayNightMode[] possibleValues(ClientContext context) { + if (context.getExternalServiceAPI().isLightSensorEnabled()) { + return DayNightMode.values(); + } else { + return new DayNightMode[] { AUTO, DAY, NIGHT }; + } + } + + } + + public enum MetricsConstants { + KILOMETERS_AND_METERS(R.string.si_km_m,"km-m"), + MILES_AND_FOOTS(R.string.si_mi_foots,"mi-f"), + MILES_AND_YARDS(R.string.si_mi_yard,"mi-y"); + + private final int key; + private final String ttsString; + + MetricsConstants(int key, String ttsString) { + this.key = key; + this.ttsString = ttsString; + } + + public String toHumanString(ClientContext ctx){ + return ctx.getString(key); + } + + public String toTTSString(){ + return ttsString; + } + + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/PoiFilter.java b/OsmAnd-java/src/net/osmand/plus/PoiFilter.java new file mode 100644 index 0000000000..da66fd6287 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/PoiFilter.java @@ -0,0 +1,322 @@ +package net.osmand.plus; + +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import net.osmand.IndexConstants; +import net.osmand.ResultMatcher; +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.util.MapUtils; + +public class PoiFilter { + + public final static String STD_PREFIX = "std_"; //$NON-NLS-1$ + public final static String USER_PREFIX = "user_"; //$NON-NLS-1$ + public final static String CUSTOM_FILTER_ID = USER_PREFIX + "custom_id"; //$NON-NLS-1$ + public final static String BY_NAME_FILTER_ID = USER_PREFIX + "by_name"; //$NON-NLS-1$ + + private Map> acceptedTypes = new LinkedHashMap>(); + private String filterByName = null; + + protected String filterId; + protected String name; + protected String nameFilter; + protected boolean isStandardFilter; + + protected final ClientContext application; + + protected int distanceInd = 1; + // in kilometers + protected double[] distanceToSearchValues = new double[] {1, 2, 3, 5, 10, 30, 100, 250 }; + + + // constructor for standard filters + public PoiFilter(AmenityType type, ClientContext application){ + this.application = application; + isStandardFilter = true; + filterId = STD_PREFIX + type; + name = type == null ? application.getString(R.string.poi_filter_closest_poi) : OsmAndFormatter.toPublicString(type, + application); //$NON-NLS-1$ + if(type == null){ + initSearchAll(); + } else { + acceptedTypes.put(type, null); + } + } + + // constructor for user defined filters + public PoiFilter(String name, String filterId, Map> acceptedTypes, ClientContext app){ + application = app; + isStandardFilter = false; + if(filterId == null){ + filterId = USER_PREFIX + name.replace(' ', '_').toLowerCase(); + } + this.filterId = filterId; + this.name = name; + if(acceptedTypes == null){ + initSearchAll(); + } else { + this.acceptedTypes.putAll(acceptedTypes); + } + } + + public void setNameFilter(String nameFilter) { + if(nameFilter != null) { + this.nameFilter = nameFilter.toLowerCase(); + } else { + clearNameFilter(); + } + } + + public String getNameFilter() { + return nameFilter; + } + + public void clearNameFilter(){ + nameFilter = null; + } + + private void initSearchAll(){ + for(AmenityType t : AmenityType.values()){ + acceptedTypes.put(t, null); + } + distanceToSearchValues = new double[] {0.5, 1, 2, 3, 5, 10, 15, 30, 100}; + } + + + public boolean isSearchFurtherAvailable(){ + return distanceInd < distanceToSearchValues.length - 1; + } + + + public List searchFurther(double latitude, double longitude, ResultMatcher matcher){ + if(distanceInd < distanceToSearchValues.length - 1){ + distanceInd ++; + } + List amenityList = searchAmenities( latitude, longitude, matcher); + MapUtils.sortListOfMapObject(amenityList, latitude, longitude); + + return amenityList; + } + + public String getSearchArea(){ + double val = distanceToSearchValues[distanceInd]; + if(val >= 1){ + return " < " + ((int) val)+ " " + application.getString(R.string.km); //$NON-NLS-1$//$NON-NLS-2$ + } else { + return " < 500 " + application.getString(R.string.m); //$NON-NLS-1$ + } + } + + public void clearPreviousZoom(){ + distanceInd = 0; + } + + public List initializeNewSearch(double lat, double lon, int firstTimeLimit, ResultMatcher matcher){ + clearPreviousZoom(); + List amenityList = searchAmenities(lat, lon, matcher); + MapUtils.sortListOfMapObject(amenityList, lat, lon); + if (firstTimeLimit > 0) { + while (amenityList.size() > firstTimeLimit) { + amenityList.remove(amenityList.size() - 1); + } + } + return amenityList; + } + + private List searchAmenities(double lat, double lon, ResultMatcher matcher) { + double baseDistY = MapUtils.getDistance(lat, lon, lat - 1, lon); + double baseDistX = MapUtils.getDistance(lat, lon, lat, lon - 1); + double distance = distanceToSearchValues[distanceInd] * 1000; + + double topLatitude = Math.min(lat + (distance/ baseDistY ), 84.); + double bottomLatitude = Math.max(lat - (distance/ baseDistY ), -84.); + double leftLongitude = Math.max(lon - (distance / baseDistX), -180); + double rightLongitude = Math.min(lon + (distance/ baseDistX), 180); + + return searchAmenities(lat, lon, topLatitude, bottomLatitude, leftLongitude, rightLongitude, matcher); + } + + public ResultMatcher getResultMatcher(final ResultMatcher matcher){ + final String filter = nameFilter; + if(filter != null) { + final boolean en = application.getSettings().USE_ENGLISH_NAMES.get(); + return new ResultMatcher() { + @Override + public boolean publish(Amenity object) { + if(!OsmAndFormatter.getPoiStringWithoutType(object, en).toLowerCase().contains(filter) || + (matcher != null && !matcher.publish(object))) { + return false; + } + return true; + } + + @Override + public boolean isCancelled() { + return false || (matcher != null && matcher.isCancelled()); + } + }; + } + return matcher; + } + + protected List searchAmenities(double lat, double lon, double topLatitude, + double bottomLatitude, double leftLongitude, double rightLongitude, final ResultMatcher matcher) { + + return application.getInternalAPI().searchAmenities(this, + topLatitude, leftLongitude, bottomLatitude, rightLongitude, lat, lon, matcher); + } + + public List searchAgain(double lat, double lon) { + List amenityList = searchAmenities(lat, lon, null); + MapUtils.sortListOfMapObject(amenityList, lat, lon); + return amenityList; + } + + public String getName(){ + return name; + } + + /** + * @param type + * @return null if all subtypes are accepted/ empty list if type is not accepted at all + */ + public Set getAcceptedSubtypes(AmenityType type){ + if(!acceptedTypes.containsKey(type)){ + return Collections.emptySet(); + } + return acceptedTypes.get(type); + } + + public boolean isTypeAccepted(AmenityType t){ + return acceptedTypes.containsKey(t); + } + + public boolean acceptTypeSubtype(AmenityType t, String subtype){ + if(!acceptedTypes.containsKey(t)){ + return false; + } + LinkedHashSet set = acceptedTypes.get(t); + if(set == null){ + return true; + } + return set.contains(subtype); + } + + public void clearFilter(){ + acceptedTypes = new LinkedHashMap>(); + } + + public boolean areAllTypesAccepted(){ + if(AmenityType.values().length == acceptedTypes.size()){ + for(AmenityType a : acceptedTypes.keySet()){ + if(acceptedTypes.get(a) != null){ + return false; + } + } + return true; + } + return false; + } + + + public void setTypeToAccept(AmenityType type, boolean accept){ + if(accept){ + acceptedTypes.put(type, new LinkedHashSet()); + } else { + acceptedTypes.remove(type); + } + } + + public void setMapToAccept(Map> newMap) { + Iterator>> iterator = newMap.entrySet().iterator(); + acceptedTypes.clear(); + while(iterator.hasNext()){ + Entry> e = iterator.next(); + if(e.getValue() == null){ + acceptedTypes.put(e.getKey(), null); + } else { + acceptedTypes.put(e.getKey(), new LinkedHashSet(e.getValue())); + } + } + } + + public String buildSqlWhereFilter(){ + if(areAllTypesAccepted()){ + return null; + } + assert IndexConstants.POI_TABLE != null : "use constants here to show table usage "; //$NON-NLS-1$ + if(acceptedTypes.size() == 0){ + return "1 > 1"; //$NON-NLS-1$ + } + StringBuilder b = new StringBuilder(); + b.append("("); //$NON-NLS-1$ + boolean first = true; + for(AmenityType a : acceptedTypes.keySet()){ + if(first){ + first = false; + } else { + b.append(" OR "); //$NON-NLS-1$ + } + b.append("(type = '").append(AmenityType.valueToString(a)).append("'"); //$NON-NLS-1$ //$NON-NLS-2$ + if(acceptedTypes.get(a) != null){ + LinkedHashSet list = acceptedTypes.get(a); + b.append(" AND subtype IN ("); //$NON-NLS-1$ + boolean bfirst = true; + for(String s : list){ + if(bfirst){ + bfirst = false; + } else { + b.append(", "); //$NON-NLS-1$ + } + b.append("'").append(s).append("'"); //$NON-NLS-1$ //$NON-NLS-2$ + } + b.append(")"); //$NON-NLS-1$ + } + b.append(")"); //$NON-NLS-1$ + } + b.append(")"); //$NON-NLS-1$ + return b.toString(); + } + + public Map> getAcceptedTypes(){ + return new LinkedHashMap>(acceptedTypes); + } + + public void selectSubTypesToAccept(AmenityType t, LinkedHashSet accept){ + acceptedTypes.put(t, accept); + } + + public String getFilterId(){ + return filterId; + } + + + public String getFilterByName() { + return filterByName; + } + + public void setFilterByName(String filterByName) { + this.filterByName = filterByName; + } + + public boolean isStandardFilter(){ + return isStandardFilter; + } + + public void setStandardFilter(boolean isStandardFilter) { + this.isStandardFilter = isStandardFilter; + } + + public ClientContext getApplication() { + return application; + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/PoiFiltersHelper.java b/OsmAnd-java/src/net/osmand/plus/PoiFiltersHelper.java new file mode 100644 index 0000000000..50ff025d24 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/PoiFiltersHelper.java @@ -0,0 +1,488 @@ +package net.osmand.plus; + + +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; + +import net.osmand.data.AmenityType; +import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; +import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; +import net.osmand.plus.api.SQLiteAPI.SQLiteStatement; + +public class PoiFiltersHelper { + private final ClientContext application; + + private NameFinderPoiFilter nameFinderPOIFilter; + private List cacheUserDefinedFilters; + private List cacheOsmDefinedFilters; + + private static final String UDF_CAR_AID = "car_aid"; + private static final String UDF_FOR_TOURISTS = "for_tourists"; + private static final String UDF_FOOD_SHOP = "food_shop"; + private static final String UDF_FUEL = "fuel"; + private static final String UDF_SIGHTSEEING = "sightseeing"; + private static final String UDF_EMERGENCY = "emergency"; + private static final String UDF_PUBLIC_TRANSPORT = "public_transport"; + private static final String UDF_ENTERTAINMENT = "entertainment"; + private static final String UDF_ACCOMODATION = "accomodation"; + private static final String UDF_RESTAURANTS = "restaurants"; + private static final String UDF_PARKING = "parking"; + + private static final String[] DEL = new String[] {}; + + public PoiFiltersHelper(ClientContext application){ + this.application = application; + } + public NameFinderPoiFilter getNameFinderPOIFilter() { + if(nameFinderPOIFilter == null){ + nameFinderPOIFilter = new NameFinderPoiFilter(application); + } + return nameFinderPOIFilter; + } + + + public PoiFilter getFilterById(String filterId){ + if(filterId == null){ + return null; + } + if(filterId.equals(NameFinderPoiFilter.FILTER_ID)){ + return getNameFinderPOIFilter(); + } + if(filterId.startsWith(PoiFilter.USER_PREFIX)){ + List filters = getUserDefinedPoiFilters(); + for(PoiFilter f : filters){ + if(f.getFilterId().equals(filterId)){ + return f; + } + } + } else if(filterId.startsWith(PoiFilter.STD_PREFIX)){ + List filters = getOsmDefinedPoiFilters(); + for(PoiFilter f : filters){ + if(f.getFilterId().equals(filterId)){ + return f; + } + } + } + return null; + } + + private void putAll(Map> types, AmenityType tp){ + types.put(tp, null); + } + + private void putValues(Map> types, AmenityType tp,String... vls){ + LinkedHashSet list = new LinkedHashSet(); + for(String v: vls){ + list.add(v); + } + types.put(tp, list); + } + + private List getUserDefinedDefaultFilters() { + List filters = new ArrayList(); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_car_aid), PoiFilter.USER_PREFIX + UDF_CAR_AID, + configureDefaultUserDefinedFilter(null, UDF_CAR_AID), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_for_tourists), PoiFilter.USER_PREFIX + UDF_FOR_TOURISTS, + configureDefaultUserDefinedFilter(null, UDF_FOR_TOURISTS), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_fuel), PoiFilter.USER_PREFIX + UDF_FUEL, + configureDefaultUserDefinedFilter(null, UDF_FUEL), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_food_shop), PoiFilter.USER_PREFIX + UDF_FOOD_SHOP, + configureDefaultUserDefinedFilter(null, UDF_FOOD_SHOP), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_sightseeing), PoiFilter.USER_PREFIX + UDF_SIGHTSEEING, + configureDefaultUserDefinedFilter(null, UDF_SIGHTSEEING), application)); + + // UDF_EMERGENCY = "emergency"; + // UDF_ENTERTAINMENT = "entertainment"; + filters.add(new PoiFilter(application.getString(R.string.poi_filter_accomodation), PoiFilter.USER_PREFIX + UDF_ACCOMODATION, + configureDefaultUserDefinedFilter(null, UDF_ACCOMODATION), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_restaurants), PoiFilter.USER_PREFIX + UDF_RESTAURANTS, + configureDefaultUserDefinedFilter(null, UDF_RESTAURANTS), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_public_transport), + PoiFilter.USER_PREFIX + UDF_PUBLIC_TRANSPORT, configureDefaultUserDefinedFilter(null, UDF_PUBLIC_TRANSPORT), application)); + filters.add(new PoiFilter(application.getString(R.string.poi_filter_parking), PoiFilter.USER_PREFIX + UDF_PARKING, + configureDefaultUserDefinedFilter(null, UDF_PARKING), application)); + return filters; + } + + private Map> configureDefaultUserDefinedFilter(Map> types, String key) { + if(types == null) { + types = new LinkedHashMap>(); + } + if(UDF_CAR_AID.equals(key)){ + putValues(types, AmenityType.TRANSPORTATION, "fuel", "car_wash", "car_repair","car", "car_sharing"); + putValues(types, AmenityType.SHOP, "fuel", "car_wash", "car_repair","car", "car_parts"); + } else if(UDF_SIGHTSEEING.equals(key)){ + putAll(types, AmenityType.HISTORIC); + putAll(types, AmenityType.TOURISM); + putAll(types, AmenityType.OSMWIKI); + putValues(types, AmenityType.OTHER, "place_of_worship"); + } else if(UDF_FOR_TOURISTS.equals(key)){ + putAll(types, AmenityType.HISTORIC); + putAll(types, AmenityType.TOURISM); + putAll(types, AmenityType.FINANCE); + putAll(types, AmenityType.OSMWIKI); + putValues(types, AmenityType.OTHER, "place_of_worship", "internet_access_wlan", "internet_access_wired", + "internet_access_terminal", "internet_access_public", "internet_access_service", + "embassy","emergency_phone","marketplace", + "post_office","telephone", "toilets"); + } else if(UDF_FUEL.equals(key)){ + putValues(types, AmenityType.TRANSPORTATION, "fuel"); + } else if (UDF_FOOD_SHOP.equals(key)) { + putValues(types, AmenityType.SHOP, "alcohol", "bakery", "beverages", "butcher", "convenience", "department_store", + "convenience", "farm", "general", "ice_cream", "kiosk", "supermarket", "variety_store"); + } else if (UDF_SIGHTSEEING.equals(key)) { + putAll(types, AmenityType.HISTORIC); + putValues(types, AmenityType.TOURISM, "attraction", + "artwork","zoo","theme_park", "museum","viewpoint"); + putValues(types, AmenityType.OTHER, "place_of_worship"); + } else if (UDF_ACCOMODATION.equals(key)) { + putValues(types, AmenityType.TOURISM, "camp_site", + "caravan_site","picnic_site","alpine_hut", "chalet","guest_house", + "hostel", "hotel","motel"); + } else if (UDF_PARKING.equals(key)) { + putValues(types, AmenityType.TRANSPORTATION, "parking", + "bicycle_parking"); + } else if (UDF_PUBLIC_TRANSPORT.equals(key)) { + putValues(types, AmenityType.TRANSPORTATION, "public_transport_stop_position", "public_transport_platform", + "public_transport_station", + // railway + "railway_platform", "railway_station", "halt", "tram_stop", "subway_entrance", "railway_buffer_stop", + // bus, cars, bicycle + "bus_stop", "platform", "ferry_terminal", "taxi", "bicycle_rental", "bus_station", "car_rental", "car_sharing", + // aero + "airport", "aerodrome", "terminal", "gate", + // aerial ways ( hide ways) + // "aerialway_cable_car", "aerialway_gondola", "aerialway_chair_lift", "aerialway_mixed_lift", "aerialway_drag_lift", "aerialway_goods", + "aerialway_station" + // ways (hide ways) + // "rail", "tram", "light_rail", "subway", "railway_narrow_gauge", "railway_monorail", "railway_funicular" + ); + } else if (UDF_RESTAURANTS.equals(key)) { + putValues(types, AmenityType.SUSTENANCE, "restaurant", + "cafe", "food_court", "fast_food", "pub", "bar", "biergarten"); + } else if (UDF_EMERGENCY.equals(key)) { + putAll(types, AmenityType.HEALTHCARE); + putAll(types, AmenityType.EMERGENCY); + } else if (UDF_ENTERTAINMENT.equals(key)) { + putAll(types, AmenityType.ENTERTAINMENT); + } + + return types; + } + + + public List getUserDefinedPoiFilters(){ + if(cacheUserDefinedFilters == null){ + cacheUserDefinedFilters = new ArrayList(); + PoiFilter filter = new PoiFilter(application.getString(R.string.poi_filter_custom_filter), PoiFilter.CUSTOM_FILTER_ID, + new LinkedHashMap>(), application); //$NON-NLS-1$ + filter.setStandardFilter(true); + cacheUserDefinedFilters.add(filter); + filter = new SearchByNameFilter(application); + cacheUserDefinedFilters.add(filter); + PoiFilterDbHelper helper = openDbHelper(); + List userDefined = helper.getFilters(helper.getReadableDatabase()); + final Collator instance = Collator.getInstance(); + Collections.sort(userDefined, new Comparator() { + @Override + public int compare(PoiFilter object1, PoiFilter object2) { + return instance.compare(object1.getName(), object2.getName()); + } + }); + cacheUserDefinedFilters.addAll(userDefined); + helper.close(); + } + return Collections.unmodifiableList(cacheUserDefinedFilters); + } + + public static String getOsmDefinedFilterId(AmenityType t){ + return PoiFilter.STD_PREFIX + t; + } + + public void updateFilters(boolean onlyAddFilters){ + PoiFilterDbHelper helper = openDbHelper(); + helper.upgradeFilters(helper.getWritableDatabase(), onlyAddFilters); + helper.close(); + } + + + public List getOsmDefinedPoiFilters(){ + if(cacheOsmDefinedFilters == null){ + cacheOsmDefinedFilters = new ArrayList(); + for(AmenityType t : AmenityType.values()){ + cacheOsmDefinedFilters.add(new PoiFilter(t, application)); + } + final Collator instance = Collator.getInstance(); + Collections.sort(cacheOsmDefinedFilters, new Comparator() { + @Override + public int compare(PoiFilter object1, PoiFilter object2) { + return instance.compare(object1.getName(), object2.getName()); + } + }); + cacheOsmDefinedFilters.add(0, new PoiFilter(null, application)); + } + return Collections.unmodifiableList(cacheOsmDefinedFilters); + } + + private PoiFilterDbHelper openDbHelper(){ + return new PoiFilterDbHelper(application); + } + + public boolean removePoiFilter(PoiFilter filter){ + if(filter.getFilterId().equals(PoiFilter.CUSTOM_FILTER_ID) || + filter.getFilterId().equals(PoiFilter.BY_NAME_FILTER_ID)){ + return false; + } + PoiFilterDbHelper helper = openDbHelper(); + if(helper == null){ + return false; + } + boolean res = helper.deleteFilter(helper.getWritableDatabase(), filter); + if(res){ + cacheUserDefinedFilters.remove(filter); + } + helper.close(); + return res; + } + + public boolean createPoiFilter(PoiFilter filter){ + PoiFilterDbHelper helper = openDbHelper(); + if(helper == null){ + return false; + } + boolean res = helper.addFilter(filter, helper.getWritableDatabase(), false); + if(res){ + cacheUserDefinedFilters.add(filter); + } + helper.close(); + return res; + } + + + + public boolean editPoiFilter(PoiFilter filter) { + if (filter.getFilterId().equals(PoiFilter.CUSTOM_FILTER_ID) || + filter.getFilterId().equals(PoiFilter.BY_NAME_FILTER_ID)) { + return false; + } + PoiFilterDbHelper helper = openDbHelper(); + if (helper != null) { + boolean res = helper.editFilter(helper.getWritableDatabase(), filter); + helper.close(); + return res; + } + return false; + } + + + public class PoiFilterDbHelper { + + public static final String DATABASE_NAME = "poi_filters"; //$NON-NLS-1$ + private static final int DATABASE_VERSION = 2; + private static final String FILTER_NAME = "poi_filters"; //$NON-NLS-1$ + private static final String FILTER_COL_NAME = "name"; //$NON-NLS-1$ + private static final String FILTER_COL_ID = "id"; //$NON-NLS-1$ + private static final String FILTER_COL_FILTERBYNAME = "filterbyname"; //$NON-NLS-1$ + private static final String FILTER_TABLE_CREATE = "CREATE TABLE " + FILTER_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$ + FILTER_COL_NAME + ", " + FILTER_COL_ID + ", " + FILTER_COL_FILTERBYNAME + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + + + private static final String CATEGORIES_NAME = "categories"; //$NON-NLS-1$ + private static final String CATEGORIES_FILTER_ID = "filter_id"; //$NON-NLS-1$ + private static final String CATEGORIES_COL_CATEGORY = "category"; //$NON-NLS-1$ + private static final String CATEGORIES_COL_SUBCATEGORY = "subcategory"; //$NON-NLS-1$ + private static final String CATEGORIES_TABLE_CREATE = "CREATE TABLE " + CATEGORIES_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$ + CATEGORIES_FILTER_ID + ", " + CATEGORIES_COL_CATEGORY + ", " + CATEGORIES_COL_SUBCATEGORY + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + private ClientContext context; + private SQLiteConnection conn; + + PoiFilterDbHelper(ClientContext context) { + this.context = context; + } + + public SQLiteConnection getWritableDatabase() { + return openConnection(false); + } + + public void close() { + if(conn != null) { + conn.close(); + conn = null; + } + } + + public SQLiteConnection getReadableDatabase() { + return openConnection(true); + } + + private SQLiteConnection openConnection(boolean readonly) { + conn = context.getSQLiteAPI().getOrCreateDatabase(DATABASE_NAME, readonly); + if (conn.getVersion() == 0 || DATABASE_VERSION != conn.getVersion()) { + if (readonly) { + conn.close(); + conn = context.getSQLiteAPI().getOrCreateDatabase(DATABASE_NAME, readonly); + } + if (conn.getVersion() == 0) { + conn.setVersion(DATABASE_VERSION); + onCreate(conn); + } else { + onUpgrade(conn, conn.getVersion(), DATABASE_VERSION); + } + + } + return conn; + } + + public void onCreate(SQLiteConnection conn) { + conn.execSQL(FILTER_TABLE_CREATE); + conn.execSQL(CATEGORIES_TABLE_CREATE); + upgradeFilters(conn, true); + } + + public void upgradeFilters(SQLiteConnection conn, boolean onlyAdd) { + List filters = PoiFilterDbHelper.this.getFilters(conn); + List def = getUserDefinedDefaultFilters(); + for(PoiFilter f : filters){ + PoiFilter std = null; + for(PoiFilter d : def){ + if(f.getFilterId().equals(d.getFilterId())){ + std = d; + break; + } + } + for(String toDel : DEL) { + if(f.getFilterId().equals(toDel)) { + deleteFilter(conn, f); + } + } + if(std != null){ + if(!onlyAdd){ + editFilter(conn, std); + } else { + updateName(conn, std); + } + def.remove(std); + } + } + for(PoiFilter d : def){ + addFilter(d, conn, false); + } + } + + public void onUpgrade(SQLiteConnection conn, int oldVersion, int newVersion) { + if (newVersion == 2 || newVersion == 3) { + upgradeFilters(conn, false); + } else { + upgradeFilters(conn, true); + } + conn.setVersion(newVersion); + } + + protected boolean addFilter(PoiFilter p, SQLiteConnection db, boolean addOnlyCategories){ + if(db != null){ + if(!addOnlyCategories){ + db.execSQL("INSERT INTO " + FILTER_NAME + " VALUES (?, ?, ?)",new Object[]{p.getName(), p.getFilterId(), p.getFilterByName()}); //$NON-NLS-1$ //$NON-NLS-2$ + } + Map> types = p.getAcceptedTypes(); + SQLiteStatement insertCategories = db.compileStatement("INSERT INTO " + CATEGORIES_NAME + " VALUES (?, ?, ?)"); //$NON-NLS-1$ //$NON-NLS-2$ + for(AmenityType a : types.keySet()){ + if(types.get(a) == null){ + insertCategories.bindString(1, p.getFilterId()); + insertCategories.bindString(2, AmenityType.valueToString(a)); + insertCategories.bindNull(3); + insertCategories.execute(); + } else { + for(String s : types.get(a)){ + insertCategories.bindString(1, p.getFilterId()); + insertCategories.bindString(2, AmenityType.valueToString(a)); + insertCategories.bindString(3, s); + insertCategories.execute(); + } + } + } + insertCategories.close(); + return true; + } + return false; + } + + protected List getFilters(SQLiteConnection conn){ + ArrayList list = new ArrayList(); + if(conn != null){ + SQLiteCursor query = conn.rawQuery("SELECT " + CATEGORIES_FILTER_ID +", " + CATEGORIES_COL_CATEGORY +"," + CATEGORIES_COL_SUBCATEGORY +" FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + CATEGORIES_NAME, null); + Map>> map = new LinkedHashMap>>(); + if(query.moveToFirst()){ + do { + String filterId = query.getString(0); + if(!map.containsKey(filterId)){ + map.put(filterId, new LinkedHashMap>()); + } + Map> m = map.get(filterId); + AmenityType a = AmenityType.fromString(query.getString(1)); + String subCategory = query.getString(2); + if(subCategory == null){ + m.put(a, null); + } else { + if(m.get(a) == null){ + m.put(a, new LinkedHashSet()); + } + m.get(a).add(subCategory); + } + } while(query.moveToNext()); + } + query.close(); + + query = conn.rawQuery("SELECT " + FILTER_COL_ID +", " + FILTER_COL_NAME +"," + FILTER_COL_FILTERBYNAME +" FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + FILTER_NAME, null); + if(query.moveToFirst()){ + do { + String filterId = query.getString(0); + if(map.containsKey(filterId)){ + PoiFilter filter = new PoiFilter(query.getString(1), filterId, map.get(filterId), application); + filter.setFilterByName(query.getString(2)); + list.add(filter); + } + } while(query.moveToNext()); + } + query.close(); + } + return list; + } + + protected boolean editFilter(SQLiteConnection conn, PoiFilter filter) { + if (conn != null) { + conn.execSQL("DELETE FROM " + CATEGORIES_NAME + " WHERE " + CATEGORIES_FILTER_ID + " = ?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + new Object[] { filter.getFilterId() }); + addFilter(filter, conn, true); + updateName(conn, filter); + return true; + } + return false; + } + + private void updateName(SQLiteConnection db, PoiFilter filter) { + db.execSQL("UPDATE " + FILTER_NAME + " SET " + FILTER_COL_FILTERBYNAME + " = ?, " + FILTER_COL_NAME + " = ? " + " WHERE " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + + FILTER_COL_ID + "= ?", new Object[] { filter.getFilterByName(), filter.getName(), filter.getFilterId() }); //$NON-NLS-1$ + } + + protected boolean deleteFilter(SQLiteConnection db, PoiFilter p){ + if(db != null){ + db.execSQL("DELETE FROM " + FILTER_NAME + " WHERE " +FILTER_COL_ID + " = ?",new Object[]{p.getFilterId()}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + db.execSQL("DELETE FROM " + CATEGORIES_NAME + " WHERE " +CATEGORIES_FILTER_ID + " = ?", new Object[]{p.getFilterId()}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + return true; + } + return false; + } + + + + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/RotatedTileBox.java b/OsmAnd-java/src/net/osmand/plus/RotatedTileBox.java new file mode 100644 index 0000000000..c851fd8c7f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/RotatedTileBox.java @@ -0,0 +1,174 @@ +package net.osmand.plus; +import net.osmand.data.QuadPoint; +import net.osmand.data.QuadRect; +import net.osmand.util.MapUtils; + +public class RotatedTileBox { + private float leftTileX; + private float topTileY; + private float tileWidth; + private float tileHeight; + private float rotate; + private float zoom; + private float rotateCos; + private float rotateSin; + + public RotatedTileBox(float leftTileX, float topTileY, float tileWidth, float tileHeight, float rotate, int zoom) { + set(leftTileX, topTileY, tileWidth, tileHeight, rotate, zoom); + } + + public RotatedTileBox(RotatedTileBox r){ + set(r.leftTileX, r.topTileY, r.tileWidth, r.tileHeight, r.rotate, r.zoom); + } + + private void init() { + float rad = (float) Math.toRadians(this.rotate); + rotateCos = (float) Math.cos(rad); + rotateSin = (float) Math.sin(rad); + } + + public void set(float leftTileX, float topTileY, float tileWidth, float tileHeight, float rotate, float zoom) { + this.leftTileX = leftTileX; + if(rotate < 0){ + rotate += 360; + } else if(rotate > 360){ + rotate -= 360; + } + this.rotate = rotate; + this.tileHeight = tileHeight; + this.tileWidth = tileWidth; + this.topTileY = topTileY; + this.zoom = zoom; + init(); + } + + public float getRotateCos() { + return rotateCos; + } + + public float getRotateSin() { + return rotateSin; + } + + public float getZoom() { + return zoom; + } + + public int getIntZoom() { + return Math.round(zoom); + } + + public float getRotate() { + return rotate; + } + + public float getTileHeight() { + return tileHeight; + } + + public float getTileWidth() { + return tileWidth; + } + + public float getLeftTileX() { + return leftTileX; + } + + public float getTopTileY() { + return topTileY; + } + + public boolean containsTileBox(RotatedTileBox box) { + QuadPoint temp = new QuadPoint(); + if(box.zoom != zoom){ + throw new UnsupportedOperationException(); + } + box.calcPointTile(0, 0, temp); + if(!containsPoint(temp.x, temp.y)){ + return false; + } + box.calcPointTile(box.tileWidth, 0, temp); + if(!containsPoint(temp.x, temp.y)){ + return false; + } + box.calcPointTile(0, box.tileHeight, temp); + if(!containsPoint(temp.x, temp.y)){ + return false; + } + box.calcPointTile(box.tileWidth, box.tileHeight, temp); + if(!containsPoint(temp.x, temp.y)){ + return false; + } + return true; + } + + public QuadRect calculateLatLonBox(QuadRect rectF) { + float tx = calcPointTileX(tileWidth, 0); + float tx2 = calcPointTileX(tileWidth, tileHeight); + float tx3 = calcPointTileX(0, tileHeight); + float minTileX = Math.min(Math.min(leftTileX, tx), Math.min(tx2, tx3)) ; + float maxTileX = Math.max(Math.max(leftTileX, tx), Math.max(tx2, tx3)) ; + int max = (int) MapUtils.getPowZoom(zoom); + if(minTileX < 0){ + minTileX = 0; + } + if(maxTileX > max){ + maxTileX = max; + } + + rectF.left = (float) MapUtils.getLongitudeFromTile(zoom, minTileX); + rectF.right = (float) MapUtils.getLongitudeFromTile(zoom, maxTileX); + + float ty = calcPointTileY(tileWidth, 0); + float ty2 = calcPointTileY(tileWidth, tileHeight); + float ty3 = calcPointTileY(0, tileHeight); + + float minTileY = Math.min(Math.min(topTileY, ty), Math.min(ty2, ty3)) ; + float maxTileY = Math.max(Math.max(topTileY, ty), Math.max(ty2, ty3)) ; + if(minTileY < 0){ + minTileY = 0; + } + if(maxTileY > max){ + maxTileY = max; + } + + rectF.top = (float) MapUtils.getLatitudeFromTile(zoom, minTileY); + rectF.bottom = (float) MapUtils.getLatitudeFromTile(zoom, maxTileY); + + return rectF; + } + + public boolean containsPoint(float tileX, float tileY) { + tileX -= leftTileX; + tileY -= topTileY; + double tx = rotateCos * tileX - rotateSin * tileY; + double ty = rotateSin * tileX + rotateCos * tileY; + return tx >= 0 && tx <= tileWidth && ty >= 0 && ty <= tileHeight; + } + + protected QuadPoint calcPointTile(float dx, float dy, QuadPoint p){ + float tx = rotateCos * dx + rotateSin * dy + leftTileX; + float ty = - rotateSin * dx + rotateCos * dy + topTileY; + p.set(tx, ty); + return p; + } + + protected float calcPointTileX(float dx, float dy){ + return rotateCos * dx + rotateSin * dy + leftTileX; + } + + protected float calcPointTileY(float dx, float dy){ + return - rotateSin * dx + rotateCos * dy + topTileY; + } + + public float getRightBottomTileX() { + return calcPointTileX(tileWidth, tileHeight); + } + + public float getRightBottomTileY() { + return calcPointTileY(tileWidth, tileHeight); + } + + + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/SearchByNameFilter.java b/OsmAnd-java/src/net/osmand/plus/SearchByNameFilter.java new file mode 100644 index 0000000000..88621c5b85 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/SearchByNameFilter.java @@ -0,0 +1,79 @@ +package net.osmand.plus; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; + +import net.osmand.ResultMatcher; +import net.osmand.data.Amenity; +import net.osmand.data.AmenityType; +import net.osmand.util.MapUtils; + +public class SearchByNameFilter extends PoiFilter { + + public static final String FILTER_ID = PoiFilter.BY_NAME_FILTER_ID; //$NON-NLS-1$ + + List searchedAmenities = new ArrayList(); + + private String query = ""; //$NON-NLS-1$ + + public SearchByNameFilter(ClientContext application) { + super(application.getString(R.string.poi_filter_by_name), FILTER_ID, new LinkedHashMap>(), application); + this.distanceToSearchValues = new double[] {100, 1000, 5000}; + this.isStandardFilter = true; + } + + @Override + public List searchAgain(double lat, double lon) { + MapUtils.sortListOfMapObject(searchedAmenities, lat, lon); + return searchedAmenities; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + @Override + protected List searchAmenities(double lat, double lon, double topLatitude, + double bottomLatitude, double leftLongitude, double rightLongitude, final ResultMatcher matcher) { + searchedAmenities.clear(); + final int limit = distanceInd == 0 ? 500 : -1; + + List result = application.getInternalAPI().searchAmenitiesByName(query, + topLatitude, leftLongitude, bottomLatitude, rightLongitude, lat, lon, new ResultMatcher() { + boolean elimit = false; + @Override + public boolean publish(Amenity object) { + if(limit != -1 && searchedAmenities.size() > limit) { + elimit = true; + } + if(matcher.publish(object)) { + searchedAmenities.add(object); + return true; + } + return false; + } + + @Override + public boolean isCancelled() { + return matcher.isCancelled() || elimit; + } + }); + MapUtils.sortListOfMapObject(result, lat, lon); + searchedAmenities = result; + return searchedAmenities; + } + + + public List getSearchedAmenities() { + return searchedAmenities; + } + + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/SearchHistoryHelper.java b/OsmAnd-java/src/net/osmand/plus/SearchHistoryHelper.java new file mode 100644 index 0000000000..72b3ce0fcb --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/SearchHistoryHelper.java @@ -0,0 +1,243 @@ +package net.osmand.plus; + +import java.util.ArrayList; +import java.util.List; + +import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; +import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; + +public class SearchHistoryHelper { + + private static final int HISTORY_LIMIT = 50; + private ClientContext context; + private List loadedEntries = null; + + public SearchHistoryHelper(ClientContext context) { + this.context = context; + } + + public static SearchHistoryHelper getInstance(ClientContext context){ + return new SearchHistoryHelper(context); + } + + public static class HistoryEntry { + double lat; + double lon; + String name; + + public HistoryEntry(double lat, double lon, String name){ + this.lat = lat; + this.lon = lon; + this.name = name; + + } + + public String getName() { + return name; + } + + public double getLat() { + return lat; + } + public double getLon() { + return lon; + } + } + + public List getHistoryEntries() { + if(loadedEntries == null){ + checkLoadedEntries(); + } + return loadedEntries; + } + + private HistoryItemDBHelper checkLoadedEntries(){ + HistoryItemDBHelper helper = new HistoryItemDBHelper(); + if(loadedEntries == null){ + loadedEntries = helper.getEntries(); + } + return helper; + } + + public void remove(HistoryEntry model) { + HistoryItemDBHelper helper = checkLoadedEntries(); + if(helper.remove(model)){ + loadedEntries.remove(model); + } + } + + public void removeAll() { + HistoryItemDBHelper helper = checkLoadedEntries(); + if(helper.removeAll()){ + loadedEntries.clear(); + } + } + + public void selectEntry(HistoryEntry model) { + HistoryItemDBHelper helper = checkLoadedEntries(); + int i = loadedEntries.indexOf(model); + updateModelAt(model, helper, i); + } + + private void updateModelAt(HistoryEntry model, HistoryItemDBHelper helper, int i) { + if(i == -1){ + if(helper.add(model)){ + loadedEntries.add(0, model); + if(loadedEntries.size() > HISTORY_LIMIT){ + if(helper.remove(loadedEntries.get(loadedEntries.size() - 1))){ + loadedEntries.remove(loadedEntries.size() - 1); + } + } + } + } else { + if(helper.update(model)){ + loadedEntries.remove(i); + loadedEntries.add(0, model); + } + } + } + + public HistoryEntry addNewItemToHistory(double lat, double lon, String description){ + HistoryItemDBHelper helper = checkLoadedEntries(); + int i = 0; + HistoryEntry model = new HistoryEntry(lat, lon, description); + for(HistoryEntry e : loadedEntries){ + if(description.equals(e.getName())){ + break; + } + i++; + } + if(i == loadedEntries.size()){ + i = -1; + } + if (i != 0) { + updateModelAt(model, helper, i); + } + return model; + } + + private class HistoryItemDBHelper { + + private static final String DB_NAME = "search_history"; //$NON-NLS-1$ + private static final int DB_VERSION = 1; + private static final String HISTORY_TABLE_NAME = "history"; //$NON-NLS-1$ + private static final String HISTORY_COL_NAME = "name"; //$NON-NLS-1$ + private static final String HISTORY_COL_TIME = "time"; //$NON-NLS-1$ + private static final String HISTORY_COL_TYPE = "type"; //$NON-NLS-1$ + private static final String HISTORY_COL_LAT = "latitude"; //$NON-NLS-1$ + private static final String HISTORY_COL_LON = "longitude"; //$NON-NLS-1$ + private static final String HISTORY_TABLE_CREATE = "CREATE TABLE " + HISTORY_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$ + HISTORY_COL_NAME + " TEXT, " + HISTORY_COL_TIME + " long, " + HISTORY_COL_TYPE + " TEXT, " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + HISTORY_COL_LAT + " double, " +HISTORY_COL_LON + " double);"; //$NON-NLS-1$ //$NON-NLS-2$ + + + public HistoryItemDBHelper() { + } + + private SQLiteConnection openConnection(boolean readonly) { + SQLiteConnection conn = context.getSQLiteAPI().getOrCreateDatabase(DB_NAME, readonly); + if (conn.getVersion() == 0 || DB_VERSION != conn.getVersion()) { + if (readonly) { + conn.close(); + conn = context.getSQLiteAPI().getOrCreateDatabase(DB_NAME, readonly); + } + if (conn.getVersion() == 0) { + conn.setVersion(DB_VERSION); + onCreate(conn); + } else { + onUpgrade(conn, conn.getVersion(), DB_VERSION); + } + + } + return conn; + } + + public void onCreate(SQLiteConnection db) { + db.execSQL(HISTORY_TABLE_CREATE); + } + + public void onUpgrade(SQLiteConnection db, int oldVersion, int newVersion) { + } + + public boolean remove(HistoryEntry e){ + SQLiteConnection db = openConnection(false); + if(db != null){ + try { + db.execSQL("DELETE FROM " + HISTORY_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } finally { + db.close(); + } + return true; + } + return false; + } + + public boolean removeAll(){ + SQLiteConnection db = openConnection(false); + if(db != null){ + try { + db.execSQL("DELETE FROM " + HISTORY_TABLE_NAME); //$NON-NLS-1$ + } finally { + db.close(); + } + return true; + } + return false; + } + + public boolean update(HistoryEntry e){ + SQLiteConnection db = openConnection(false); + if(db != null){ + try { + db.execSQL( + "UPDATE " + HISTORY_TABLE_NAME + " SET time = ? WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { System.currentTimeMillis(), e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } finally { + db.close(); + } + return true; + } + return false; + } + + public boolean add(HistoryEntry e){ + SQLiteConnection db = openConnection(false); + if(db != null){ + try { + db.execSQL( + "INSERT INTO " + HISTORY_TABLE_NAME + " VALUES (?, ?, ?, ?, ?)", new Object[] { e.getName(), System.currentTimeMillis(), null, e.getLat(), e.getLon() }); //$NON-NLS-1$ //$NON-NLS-2$ + } finally { + db.close(); + } + return true; + } + return false; + } + + public List getEntries(){ + List entries = new ArrayList(); + SQLiteConnection db = openConnection(true); + if(db != null){ + try { + SQLiteCursor query = db.rawQuery( + "SELECT " + HISTORY_COL_NAME + ", " + HISTORY_COL_LAT + "," + HISTORY_COL_LON + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + HISTORY_TABLE_NAME + " ORDER BY " + HISTORY_COL_TIME + " DESC", null); //$NON-NLS-1$//$NON-NLS-2$ + if (query.moveToFirst()) { + do { + HistoryEntry e = new HistoryEntry(query.getDouble(1), query.getDouble(2), query.getString(0)); + entries.add(e); + } while (query.moveToNext()); + } + query.close(); + } finally { + db.close(); + } + } + return entries; + } + + } + + + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/SpecialPhrases.java b/OsmAnd-java/src/net/osmand/plus/SpecialPhrases.java new file mode 100644 index 0000000000..de6836fc6f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/SpecialPhrases.java @@ -0,0 +1,100 @@ +package net.osmand.plus; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import net.osmand.PlatformUtil; +import net.osmand.util.Algorithms; + +import org.apache.commons.logging.Log; + + +public class SpecialPhrases { + + + private static Map m; + private static final Log log = PlatformUtil.getLog(SpecialPhrases.class); + + /** + * Use this method to query a special phrase for a certain subtype + * + * If the language isn't set yet, a nullpointer exception will be thrown + * + * @param value the subtype to query + * @return the special phrase according to the asked key, or "null" if the key isn't found + */ + public static String getSpecialPhrase(String value) { + if (m == null) { + // do not throw exception because OsmAndApplication is not always initiliazed before + // this call + log.warn("The language has not been set for special phrases"); + return value; + + } + String specialValue = m.get(value); + if(Algorithms.isEmpty(specialValue)) { + return value.replace('_', ' '); + } + return specialValue; + } + + /** + * Set the special phrases to a certain language. + * This method needs to be used before the getSpecialPhrase method + * + * @param lang the language to use + * @throws IOException when reading the text file failed + */ + public static void setLanguage(ClientContext ctx, OsmandSettings settings) throws IOException { + String lang = getPreferredLanguage(settings).getLanguage(); + m = new HashMap(); + // The InputStream opens the resourceId and sends it to the buffer + InputStream is = null; + BufferedReader br = null; + try { + try { + is = ctx.getInternalAPI().openAsset("specialphrases/specialphrases_" + lang + ".txt"); + } catch (IOException ex) { + // second try: default to English, if this fails, the error is thrown outside + is = ctx.getInternalAPI().openAsset("specialphrases/specialphrases_en.txt"); + } + br = new BufferedReader(new InputStreamReader(is)); + String readLine = null; + + // While the BufferedReader readLine is not null + while ((readLine = br.readLine()) != null) { + String[] arr = readLine.split(","); + if (arr != null && arr.length == 2) { + m.put(arr[0], arr[1]); + } + + } + + } finally { + Algorithms.closeStream(is); + Algorithms.closeStream(br); + } + + } + + /** + * Returns the preferred language + * @param set the OsmandSettings used + * @return ENGLISH if English names are chosen in the settings, Locale.getDefault otherwise + */ + public static Locale getPreferredLanguage(OsmandSettings set){ + if (set.usingEnglishNames()) { + return Locale.ENGLISH; + } + return Locale.getDefault(); + + } + + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd-java/src/net/osmand/plus/TargetPointsHelper.java new file mode 100644 index 0000000000..5e05aea399 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/TargetPointsHelper.java @@ -0,0 +1,197 @@ +package net.osmand.plus; + + +import java.util.ArrayList; +import java.util.List; + +import net.osmand.Location; +import net.osmand.StateChangedListener; +import net.osmand.data.LatLon; +import net.osmand.plus.routing.RoutingHelper; + +public class TargetPointsHelper { + + private List intermediatePoints = new ArrayList(); + private List intermediatePointNames = new ArrayList(); + private LatLon pointToNavigate = null; + private OsmandSettings settings; + private RoutingHelper routingHelper; + private ClientContext ctx; + private List> listeners = new ArrayList>(); + + public TargetPointsHelper(ClientContext ctx){ + this.ctx = ctx; + this.settings = ctx.getSettings(); + this.routingHelper = ctx.getRoutingHelper(); + readFromSettings(settings); + } + + private void readFromSettings(OsmandSettings settings) { + pointToNavigate = settings.getPointToNavigate(); + intermediatePoints.clear(); + intermediatePointNames.clear(); + intermediatePoints.addAll(settings.getIntermediatePoints()); + intermediatePointNames.addAll(settings.getIntermediatePointDescriptions(intermediatePoints.size())); + } + + public LatLon getPointToNavigate() { + return pointToNavigate; + } + + public String getPointNavigateDescription(){ + return settings.getPointNavigateDescription(); + } + + public List getIntermediatePointNames() { + return intermediatePointNames; + } + + public List getIntermediatePoints() { + return intermediatePoints; + } + + public List getIntermediatePointsWithTarget() { + List res = new ArrayList(); + res.addAll(intermediatePoints); + if(pointToNavigate != null) { + res.add(pointToNavigate); + } + return res; + } + + public List getIntermediatePointNamesWithTarget() { + List res = new ArrayList(); + res.addAll(intermediatePointNames); + if(pointToNavigate != null) { + res.add(getPointNavigateDescription()); + } + return res; + } + + public LatLon getFirstIntermediatePoint(){ + if(intermediatePoints.size() > 0) { + return intermediatePoints.get(0); + } + return null; + } + + /** + * Clear the local and persistent waypoints list and destination. + */ + public void removeAllWayPoints(boolean updateRoute){ + settings.clearPointToNavigate(); + pointToNavigate = null; + settings.clearIntermediatePoints(); + settings.clearPointToNavigate(); + intermediatePoints.clear(); + intermediatePointNames.clear(); + updateRouteAndReferesh(updateRoute); + } + + /** + * Move an intermediate waypoint to the destination. + */ + public void makeWayPointDestination(boolean updateRoute, int index){ + pointToNavigate = intermediatePoints.remove(index); + settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), + intermediatePointNames.remove(index)); + settings.deleteIntermediatePoint(index); + updateRouteAndReferesh(updateRoute); + } + + public void removeWayPoint(boolean updateRoute, int index){ + if(index < 0){ + settings.clearPointToNavigate(); + pointToNavigate = null; + int sz = intermediatePoints.size(); + if(sz > 0) { + settings.deleteIntermediatePoint(sz- 1); + pointToNavigate = intermediatePoints.remove(sz - 1); + settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), + intermediatePointNames.remove(sz - 1)); + } + } else { + settings.deleteIntermediatePoint(index); + intermediatePoints.remove(index); + intermediatePointNames.remove(index); + } + updateRouteAndReferesh(updateRoute); + } + + private void updateRouteAndReferesh(boolean updateRoute) { + if(updateRoute && ( routingHelper.isRouteBeingCalculated() || routingHelper.isRouteCalculated() || + routingHelper.isFollowingMode())) { + Location lastKnownLocation = ctx.getLastKnownLocation(); + routingHelper.setFinalAndCurrentLocation(settings.getPointToNavigate(), + settings.getIntermediatePoints(), lastKnownLocation, routingHelper.getCurrentGPXRoute()); + } + updateListeners(); + } + + public void addListener(StateChangedListener l) { + listeners.add(l); + } + + + private void updateListeners() { + for(StateChangedListener l : listeners) { + l.stateChanged(null); + } + } + + public void clearPointToNavigate(boolean updateRoute) { + settings.clearPointToNavigate(); + settings.clearIntermediatePoints(); + readFromSettings(settings); + updateRouteAndReferesh(updateRoute); + } + + + public void reorderAllTargetPoints(List point, + List names, boolean updateRoute){ + settings.clearPointToNavigate(); + if (point.size() > 0) { + settings.saveIntermediatePoints(point.subList(0, point.size() - 1), names.subList(0, point.size() - 1)); + LatLon p = point.get(point.size() - 1); + String nm = names.get(point.size() - 1); + settings.setPointToNavigate(p.getLatitude(), p.getLongitude(), nm); + } else { + settings.clearIntermediatePoints(); + } + readFromSettings(settings); + updateRouteAndReferesh(updateRoute); + } + + public void navigateToPoint(LatLon point, boolean updateRoute, int intermediate){ + if(point != null){ + if(intermediate < 0) { + settings.setPointToNavigate(point.getLatitude(), point.getLongitude(), null); + } else { + settings.insertIntermediatePoint(point.getLatitude(), point.getLongitude(), null, + intermediate, false); + } + } else { + settings.clearPointToNavigate(); + settings.clearIntermediatePoints(); + } + readFromSettings(settings); + updateRouteAndReferesh(updateRoute); + + } + + public boolean checkPointToNavigate(ClientContext ctx ){ + if(pointToNavigate == null){ + ctx.showToastMessage(R.string.mark_final_location_first); + return false; + } + return true; + } + + + + public void updatePointsFromSettings() { + readFromSettings(settings); + } + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/Version.java b/OsmAnd-java/src/net/osmand/plus/Version.java new file mode 100644 index 0000000000..aee72e682f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/Version.java @@ -0,0 +1,98 @@ +package net.osmand.plus; + + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +public class Version { + + private final String appVersion; + private final String appName; + private final static String FREE_VERSION_NAME = "net.osmand"; + + + public static boolean isGpsStatusEnabled(ClientContext ctx) { + return ctx.getString(R.string.versionFeatures).contains("+gps_status"); + } + + public static boolean isBlackberry(ClientContext ctx) { + return ctx.getString(R.string.versionFeatures).contains("+blackberry"); + } + + public static boolean isGooglePlayEnabled(ClientContext ctx) { + return ctx.getString(R.string.versionFeatures).contains("+play_market"); + } + + public static boolean isFreeVersionEnabled(ClientContext ctx) { + return ctx.getString(R.string.versionFeatures).contains("+free_version"); + } + + public static boolean isParkingPluginInlined(ClientContext ctx) { + return ctx.getString(R.string.versionFeatures).contains("+parking_plugin"); + } + + private Version(ClientContext ctx) { + appVersion = ctx.getString(R.string.app_version); + appName = ctx.getString(R.string.app_name); + } + + private static Version ver = null; + private static Version getVersion(ClientContext ctx){ + if(ver == null){ + ver = new Version(ctx); + } + return ver; + } + + public static String getFullVersion(ClientContext ctx){ + Version v = getVersion(ctx); + return v.appName + " " + v.appVersion; + } + + public static String getAppVersion(ClientContext ctx){ + Version v = getVersion(ctx); + return v.appVersion; + } + + public static String getAppName(ClientContext ctx){ + Version v = getVersion(ctx); + return v.appName; + } + + public static boolean isProductionVersion(ClientContext ctx){ + Version v = getVersion(ctx); + return !v.appVersion.contains("#"); + } + + public static String getVersionAsURLParam(ClientContext ctx) { + try { + return "osmandver=" + URLEncoder.encode(getVersionForTracker(ctx), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException(e); + } + } + + public static boolean isFreeVersion(ClientContext ctx){ + return ctx.getInternalAPI().getPackageName().equals(FREE_VERSION_NAME) || isFreeVersionEnabled(ctx); + + } + + public static boolean isDeveloperVersion(ClientContext ctx){ + return "osmand~".equalsIgnoreCase(getAppName(ctx)); + + } + + public static String getVersionForTracker(ClientContext ctx) { + String v = Version.getAppName(ctx); + if(Version.isProductionVersion(ctx)){ + v = Version.getFullVersion(ctx); + } else { + v +=" test"; + } + return v; + } + + public static boolean isOldCoreVersion(ClientContext ctx) { + return ctx.getString(R.string.versionFeatures).contains("+oldCore"); + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/access/AccessibilityMode.java b/OsmAnd-java/src/net/osmand/plus/access/AccessibilityMode.java new file mode 100644 index 0000000000..f71179329f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/access/AccessibilityMode.java @@ -0,0 +1,22 @@ +package net.osmand.plus.access; + +import net.osmand.plus.ClientContext; +import net.osmand.plus.R; + +public enum AccessibilityMode { + + ON(R.string.accessibility_on), + OFF(R.string.accessibility_off), + DEFAULT(R.string.accessibility_default); + + private final int key; + + AccessibilityMode(int key) { + this.key = key; + } + + public String toHumanString(ClientContext ctx) { + return ctx.getString(key); + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/access/RelativeDirectionStyle.java b/OsmAnd-java/src/net/osmand/plus/access/RelativeDirectionStyle.java new file mode 100644 index 0000000000..f4f8849b6d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/access/RelativeDirectionStyle.java @@ -0,0 +1,21 @@ +package net.osmand.plus.access; + +import net.osmand.plus.ClientContext; +import net.osmand.plus.R; + +public enum RelativeDirectionStyle { + + SIDEWISE(R.string.direction_style_sidewise), + CLOCKWISE(R.string.direction_style_clockwise); + + private final int key; + + RelativeDirectionStyle(int key) { + this.key = key; + } + + public String toHumanString(ClientContext ctx) { + return ctx.getString(key); + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/ExternalServiceAPI.java b/OsmAnd-java/src/net/osmand/plus/api/ExternalServiceAPI.java new file mode 100644 index 0000000000..da7ac2b043 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/ExternalServiceAPI.java @@ -0,0 +1,24 @@ +package net.osmand.plus.api; + +import net.osmand.plus.ClientContext; + +public interface ExternalServiceAPI { + + public boolean isWifiConnected(); + + public boolean isInternetConnected(); + + + public boolean isLightSensorEnabled(); + + public String getExternalStorageDirectory(); + + public AudioFocusHelper getAudioFocuseHelper(); + + public interface AudioFocusHelper { + + public boolean requestFocus(ClientContext context, int streamType); + + public boolean abandonFocus(ClientContext context, int streamType); + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/InternalOsmAndAPI.java b/OsmAnd-java/src/net/osmand/plus/api/InternalOsmAndAPI.java new file mode 100644 index 0000000000..698c657753 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/InternalOsmAndAPI.java @@ -0,0 +1,61 @@ +package net.osmand.plus.api; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import net.osmand.NativeLibrary; +import net.osmand.ResultMatcher; +import net.osmand.data.Amenity; +import net.osmand.plus.PoiFilter; +import net.osmand.plus.TargetPointsHelper; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlSerializer; + +public interface InternalOsmAndAPI { + + public XmlSerializer newSerializer(); + + public XmlPullParser newPullParser(); + + public String getPackageName(); + + public String getVersionName(); + + public int getVersionCode(); + + public InputStream openAsset(String name) throws IOException; + + public NativeLibrary getNativeLibrary(); + + public boolean accessibilityEnabled(); + + public boolean accessibilityExtensions(); + + public List searchAmenities(PoiFilter filter, + double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, + double lat, double lon, ResultMatcher matcher); + + public List searchAmenitiesByName(String searchQuery, + double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, + double lat, double lon, ResultMatcher matcher); + + public String getDeviceName(); + + public String getBrandName(); + + public String getModelName(); + + public TargetPointsHelper getTargetPointsHelper(); + + public boolean isNavigationServiceStarted(); + + public boolean isNavigationServiceStartedForNavigation(); + + public void startNavigationService(boolean forNavigation); + + public void stopNavigationService(); + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/InternalToDoAPI.java b/OsmAnd-java/src/net/osmand/plus/api/InternalToDoAPI.java new file mode 100644 index 0000000000..21b1f3a186 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/InternalToDoAPI.java @@ -0,0 +1,17 @@ +package net.osmand.plus.api; + +import java.io.File; +import java.util.List; + +import net.osmand.binary.BinaryMapIndexReader; +import net.osmand.map.ITileSource; +import net.osmand.map.TileSourceManager.TileSourceTemplate; + +public interface InternalToDoAPI { + + public BinaryMapIndexReader[] getRoutingMapFiles(); + + public ITileSource newSqliteTileSource(File dir, List knownTemplates); + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/RendererAPI.java b/OsmAnd-java/src/net/osmand/plus/api/RendererAPI.java new file mode 100644 index 0000000000..f95f15fa9c --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/RendererAPI.java @@ -0,0 +1,9 @@ +package net.osmand.plus.api; + +import net.osmand.plus.api.render.Paint; + +public interface RendererAPI { + + public Paint newPaint(); + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/SQLiteAPI.java b/OsmAnd-java/src/net/osmand/plus/api/SQLiteAPI.java new file mode 100644 index 0000000000..1d6c599b6c --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/SQLiteAPI.java @@ -0,0 +1,81 @@ +package net.osmand.plus.api; + + + +public interface SQLiteAPI { + + public interface SQLiteConnection { + + void close(); + + SQLiteCursor rawQuery(String sql, String[] selectionArgs); + + void execSQL(String query); + + void execSQL(String query, Object[] objects); + + SQLiteStatement compileStatement(String string); + + void setVersion(int newVersion); + + int getVersion(); + + boolean isReadOnly(); + + boolean isDbLockedByOtherThreads(); + + boolean isClosed(); + + } + + public interface SQLiteCursor { + + boolean moveToFirst(); + + boolean moveToNext(); + + /** + * Takes parameter value (zero based) + */ + String getString(int ind); + + double getDouble(int ind); + + long getLong(int ind); + + long getInt(int ind); + + byte[] getBlob(int ind); + + void close(); + + + + } + + public interface SQLiteStatement { + + // 1 based argument + void bindString(int i, String filterId); + + // 1 based argument + void bindNull(int i); + + void execute(); + + void close(); + + long simpleQueryForLong(); + + String simpleQueryForString(); + + void bindLong(int i, long val); + + void bindBlob(int i, byte[] val); + + } + + public SQLiteConnection getOrCreateDatabase(String name, boolean readOnly); + + public SQLiteConnection openByAbsolutePath(String path, boolean readOnly); +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/SettingsAPI.java b/OsmAnd-java/src/net/osmand/plus/api/SettingsAPI.java new file mode 100644 index 0000000000..54267c3c5c --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/SettingsAPI.java @@ -0,0 +1,33 @@ +package net.osmand.plus.api; + +public interface SettingsAPI { + + // world readable + public Object getPreferenceObject(String key); + + public interface SettingsEditor { + + public SettingsEditor putString(String key, String value); + public SettingsEditor putBoolean(String key, boolean value); + public SettingsEditor putFloat(String key, float value); + public SettingsEditor putInt(String key, int value); + public SettingsEditor putLong(String key, long value); + public SettingsEditor remove(String key); + public boolean commit(); + } + + public SettingsEditor edit(Object pref); + + public String getString(Object pref, String key, String defValue); + + public float getFloat(Object pref, String key, float defValue); + + public boolean getBoolean(Object pref, String key, boolean defValue); + + public int getInt(Object pref, String key, int defValue); + + public long getLong(Object pref, String key, long defValue); + + public boolean contains(Object pref, String key); + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/render/Canvas.java b/OsmAnd-java/src/net/osmand/plus/api/render/Canvas.java new file mode 100644 index 0000000000..e767e66c61 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/render/Canvas.java @@ -0,0 +1,5 @@ +package net.osmand.plus.api.render; + +public interface Canvas { + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/render/Color.java b/OsmAnd-java/src/net/osmand/plus/api/render/Color.java new file mode 100644 index 0000000000..5df8aad7fc --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/render/Color.java @@ -0,0 +1,24 @@ +package net.osmand.plus.api.render; + +public class Color { + public static final int BLACK = 0xFF000000; + public static final int DKGRAY = 0xFF444444; + public static final int GRAY = 0xFF888888; + public static final int LTGRAY = 0xFFCCCCCC; + public static final int WHITE = 0xFFFFFFFF; + public static final int RED = 0xFFFF0000; + public static final int GREEN = 0xFF00FF00; + public static final int BLUE = 0xFF0000FF; + public static final int YELLOW = 0xFFFFFF00; + public static final int CYAN = 0xFF00FFFF; + public static final int MAGENTA = 0xFFFF00FF; + public static final int TRANSPARENT = 0; + + public static int rgb(int red, int green, int blue) { + return (0xFF << 24) | (red << 16) | (green << 8) | blue; + } + + public static int argb(int alpha, int red, int green, int blue) { + return (alpha << 24) | (red << 16) | (green << 8) | blue; + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/render/Paint.java b/OsmAnd-java/src/net/osmand/plus/api/render/Paint.java new file mode 100644 index 0000000000..018ac9ab3e --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/render/Paint.java @@ -0,0 +1,56 @@ +package net.osmand.plus.api.render; + + +public interface Paint { + public enum Style { + FILL (0), + STROKE (1), + FILL_AND_STROKE (2); + Style(int nativeInt) { + this.nativeInt = nativeInt; + } + final int nativeInt; + } + + public enum Cap { + BUTT (0), + ROUND (1), + SQUARE (2); + private Cap(int nativeInt) { + this.nativeInt = nativeInt; + } + final int nativeInt; + } + + public enum Join { + MITER (0), + ROUND (1), + BEVEL (2); + private Join(int nativeInt) { + this.nativeInt = nativeInt; + } + final int nativeInt; + } + + public enum Align { + LEFT (0), + CENTER (1), + RIGHT (2); + private Align(int nativeInt) { + this.nativeInt = nativeInt; + } + final int nativeInt; + } + + void setColor(int color); + + int getColor(); + + void setTextAlign(Align align); + + void setStrokeWidth(float width); + + void setAntiAlias(boolean flag); + + void setStyle(Style style); +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/render/Path.java b/OsmAnd-java/src/net/osmand/plus/api/render/Path.java new file mode 100644 index 0000000000..0a384baf05 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/render/Path.java @@ -0,0 +1,5 @@ +package net.osmand.plus.api.render; + +public interface Path { + +} diff --git a/OsmAnd-java/src/net/osmand/plus/api/render/Typeface.java b/OsmAnd-java/src/net/osmand/plus/api/render/Typeface.java new file mode 100644 index 0000000000..a234efd27b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/api/render/Typeface.java @@ -0,0 +1,5 @@ +package net.osmand.plus.api.render; + +public class Typeface { + +} diff --git a/OsmAnd-java/src/net/osmand/plus/download/DownloadActivityType.java b/OsmAnd-java/src/net/osmand/plus/download/DownloadActivityType.java new file mode 100644 index 0000000000..af145dcc09 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/DownloadActivityType.java @@ -0,0 +1,5 @@ +package net.osmand.plus.download; + +public enum DownloadActivityType { + NORMAL_FILE, ROADS_FILE, SRTM_FILE, HILLSHADE_FILE +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/download/DownloadEntry.java b/OsmAnd-java/src/net/osmand/plus/download/DownloadEntry.java new file mode 100644 index 0000000000..cbbea40b88 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/DownloadEntry.java @@ -0,0 +1,33 @@ +package net.osmand.plus.download; + +import java.io.File; +import java.util.List; + +public class DownloadEntry { + public File fileToSave; + public File fileToUnzip; + public boolean unzip; + public Long dateModified; + public double sizeMB; + public String baseName; + public String urlToDownload; + public int parts; + public File existingBackupFile; + public boolean isAsset; + public DownloadActivityType type; + + public List srtmFilesToDownload; + public DownloadEntry attachedEntry; + + public DownloadEntry() { + // default + } + + public DownloadEntry(String assetName, String fileName, long dateModified) { + this.dateModified = dateModified; + fileToUnzip = new File(fileName); + fileToSave = new File(assetName); + isAsset = true; + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/download/DownloadFileHelper.java b/OsmAnd-java/src/net/osmand/plus/download/DownloadFileHelper.java new file mode 100644 index 0000000000..5de4bbb7f1 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/DownloadFileHelper.java @@ -0,0 +1,320 @@ +package net.osmand.plus.download; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import net.osmand.IProgress; +import net.osmand.IndexConstants; +import net.osmand.PlatformUtil; +import net.osmand.plus.ClientContext; +import net.osmand.plus.R; +import net.osmand.plus.Version; + +import org.apache.commons.logging.Log; + +public class DownloadFileHelper { + + private final static Log log = PlatformUtil.getLog(DownloadFileHelper.class); + private static final int BUFFER_SIZE = 32256; + protected final int TRIES_TO_DOWNLOAD = 15; + protected final long TIMEOUT_BETWEEN_DOWNLOADS = 8000; + private final ClientContext ctx; + private boolean interruptDownloading = false; + + + public DownloadFileHelper(ClientContext ctx){ + this.ctx = ctx; + } + + public interface DownloadFileShowWarning { + + public void showWarning(String warning); + } + + private void downloadFileInternal(String fileName, FileOutputStream out, URL url, String part, String indexOfAllFiles, + IProgress progress, boolean forceWifi) throws IOException, InterruptedException { + InputStream is = null; + byte[] buffer = new byte[BUFFER_SIZE]; + int read = 0; + int length = 0; + int fileread = 0; + int triesDownload = TRIES_TO_DOWNLOAD; + boolean notFound = false; + boolean first = true; + try { + while (triesDownload > 0) { + try { + if (!first) { + log.info("Reconnecting"); //$NON-NLS-1$ + try { + Thread.sleep(TIMEOUT_BETWEEN_DOWNLOADS); + } catch (InterruptedException e) { + } + } + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty("User-Agent", Version.getFullVersion(ctx)); //$NON-NLS-1$ + conn.setReadTimeout(30000); + if (fileread > 0) { + String range = "bytes="+fileread + "-" + (length -1); //$NON-NLS-1$ //$NON-NLS-2$ + conn.setRequestProperty("Range", range); //$NON-NLS-1$ + } + conn.setConnectTimeout(30000); + log.info(conn.getResponseMessage() + " " + conn.getResponseCode()); //$NON-NLS-1$ + boolean wifiConnectionBroken = forceWifi && !isWifiConnected(); + if(conn.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND){ + notFound = true; + break; + } + if ((conn.getResponseCode() != HttpURLConnection.HTTP_PARTIAL && + conn.getResponseCode() != HttpURLConnection.HTTP_OK ) || wifiConnectionBroken) { + conn.disconnect(); + triesDownload--; + continue; + } + is = conn.getInputStream(); + if (first) { + length = conn.getContentLength(); + String taskName = ctx.getString(R.string.downloading_file) + indexOfAllFiles +" " + fileName; + if(part != null){ + taskName += part; + } + progress.startTask(taskName, length / 1024); //$NON-NLS-1$ + } + + first = false; + while ((read = is.read(buffer)) != -1) { + if(interruptDownloading){ + throw new InterruptedException(); + } + out.write(buffer, 0, read); + fileread += read; + progress.remaining((length - fileread) / 1024); + } + if(length <= fileread){ + triesDownload = 0; + } + } catch (IOException e) { + log.error("IOException", e); //$NON-NLS-1$ + triesDownload--; + } + + } + } finally { + if (is != null) { + is.close(); + } + } + if(notFound) { + throw new IOException("File not found " + fileName); //$NON-NLS-1$ + } else if(length != fileread || length == 0){ + throw new IOException("File was not fully read"); //$NON-NLS-1$ + } + + } + + public boolean isWifiConnected(){ + return ctx.getExternalServiceAPI().isWifiConnected(); + } + + public boolean downloadFile(DownloadEntry de, IProgress progress, + List toReIndex, String indexOfAllFiles, + DownloadFileShowWarning showWarningCallback, boolean forceWifi) throws InterruptedException { + try { + FileOutputStream out = new FileOutputStream(de.fileToSave); + try { + + if (de.parts == 1) { + URL url = new URL(de.urlToDownload); //$NON-NLS-1$ + log.info("Download " + de.urlToDownload); + downloadFileInternal(de.baseName, out, url, null, indexOfAllFiles, progress, forceWifi); + } else { + for (int i = 1; i <= de.parts; i++) { + URL url = new URL(de.urlToDownload + "-" + i); //$NON-NLS-1$ + log.info("Download " + de.urlToDownload + "-" + i); + downloadFileInternal(de.baseName, out, url, " [" + i + "/" + de.parts + "]", indexOfAllFiles, progress, forceWifi); + } + } + } finally { + out.close(); + } + unzipFile(de, progress, toReIndex); + showWarningCallback.showWarning(ctx.getString(R.string.download_index_success)); + return true; + } catch (IOException e) { + log.error("Exception ocurred", e); //$NON-NLS-1$ + showWarningCallback.showWarning(ctx.getString(R.string.error_io_error) + " : " + e.getMessage()); + // Possibly file is corrupted + de.fileToSave.delete(); + return false; + } catch (InterruptedException e) { + // Possibly file is corrupted + de.fileToSave.delete(); + throw e; + } + } + + private void unzipFile(DownloadEntry de, IProgress progress, List toReIndex) + throws FileNotFoundException, IOException { + if (de.fileToSave.getName().endsWith(".zip")) { //$NON-NLS-1$ + if (de.unzip) { + de.fileToUnzip.mkdirs(); + } + CountingInputStream fin = new CountingInputStream(new FileInputStream(de.fileToSave)); + ZipInputStream zipIn = new ZipInputStream(fin); + ZipEntry entry = null; + boolean first = true; + int len = (int) de.fileToSave.length(); + progress.startTask(ctx.getString(R.string.unzipping_file), len / 1024); + while ((entry = zipIn.getNextEntry()) != null) { + if (entry.isDirectory() || entry.getName().endsWith(IndexConstants.GEN_LOG_EXT)) { + continue; + } + File fs; + if (!de.unzip) { + if (first) { + fs = de.fileToUnzip; + first = false; + } else { + String name = entry.getName(); + // small simplification + int ind = name.lastIndexOf('_'); + if (ind > 0) { + // cut version + int i = name.indexOf('.', ind); + if (i > 0) { + name = name.substring(0, ind) + name.substring(i, name.length()); + } + } + fs = new File(de.fileToUnzip.getParent(), name); + } + } else { + fs = new File(de.fileToUnzip, entry.getName()); + } + FileOutputStream out = new FileOutputStream(fs); + int read; + byte[] buffer = new byte[BUFFER_SIZE]; + int remaining = len; + while ((read = zipIn.read(buffer)) != -1) { + out.write(buffer, 0, read); + remaining -= fin.lastReadCount(); + progress.remaining(remaining / 1024); + } + out.close(); + + if (de.dateModified != null) { + fs.setLastModified(de.dateModified); + } + toReIndex.add(fs); + } + zipIn.close(); + de.fileToSave.delete(); // zip is no needed more + } + } + + + public void setInterruptDownloading(boolean interruptDownloading) { + this.interruptDownloading = interruptDownloading; + } + + public boolean isInterruptDownloading() { + return interruptDownloading; + } + + private static class CountingInputStream extends InputStream { + + private final InputStream delegate; + private int count; + + public CountingInputStream(InputStream delegate) { + this.delegate = delegate; + } + + public int lastReadCount() { + int last = count; + count = 0; + return last; + } + + @Override + public int available() throws IOException { + return delegate.available(); + } + + @Override + public void close() throws IOException { + delegate.close(); + } + + @Override + public boolean equals(Object o) { + return delegate.equals(o); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public void mark(int readlimit) { + delegate.mark(readlimit); + } + + @Override + public boolean markSupported() { + return delegate.markSupported(); + } + + @Override + public int read() throws IOException { + int read = delegate.read(); + if (read > 0) { + this.count++;; + } + return read; + } + + @Override + public int read(byte[] buffer, int offset, int length) + throws IOException { + int read = delegate.read(buffer, offset, length); + if (read > 0) { + this.count += read; + } + return read; + } + + @Override + public int read(byte[] buffer) throws IOException { + int read = delegate.read(buffer); + if (read > 0) { + this.count += read; + } + return read; + } + + @Override + public void reset() throws IOException { + delegate.reset(); + } + + @Override + public long skip(long byteCount) throws IOException { + return delegate.skip(byteCount); + } + + @Override + public String toString() { + return delegate.toString(); + } + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/download/DownloadTracker.java b/OsmAnd-java/src/net/osmand/plus/download/DownloadTracker.java new file mode 100644 index 0000000000..e21529c5e5 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/DownloadTracker.java @@ -0,0 +1,110 @@ +package net.osmand.plus.download; + +import java.io.File; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.text.MessageFormat; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; + +import net.osmand.PlatformUtil; +import net.osmand.plus.ClientContext; +import net.osmand.plus.Version; + +import org.apache.commons.logging.Log; + +public class DownloadTracker { + private static final Log log = PlatformUtil.getLog(DownloadTracker.class); + + private Map getCustomVars(ClientContext ctx) { + Map map = new LinkedHashMap(); + map.put("App", Version.getFullVersion(ctx)); + map.put("Device", ctx.getInternalAPI().getDeviceName()); + map.put("Brand", ctx.getInternalAPI().getBrandName()); + map.put("Model", ctx.getInternalAPI().getModelName()); + map.put("Package", ctx.getInternalAPI().getPackageName()); + + map.put("Version name", ctx.getInternalAPI().getVersionName()); + map.put("Version code", ctx.getInternalAPI().getVersionCode()+""); + return map; + } + + private String randomNumber() { + return (new Random(System.currentTimeMillis()).nextInt(100000000) + 100000000) + ""; + } + + final String beaconUrl = "http://www.google-analytics.com/__utm.gif"; + final String analyticsVersion = "4.3"; // Analytics version - AnalyticsVersion + + public void trackEvent(ClientContext a, + String category, String action, String label, int value, String trackingAcount) { + Map parameters = new LinkedHashMap(); + try { + Map customVariables = getCustomVars(a); + parameters.put("AnalyticsVersion", analyticsVersion); + parameters.put("utmn", randomNumber()); + parameters.put("utmhn", "http://app.osmand.net"); + parameters.put("utmni", "1"); + parameters.put("utmt", "event"); + + StringBuilder customVars = new StringBuilder(); + Iterator> customs = customVariables.entrySet().iterator(); + for (int i = 0; i < customVariables.size(); i++) { + Entry n = customs.next(); + if (i > 0) { + customVars.append("*"); + } + // "'" => "'0", ')' => "'1", '*' => "'2", '!' => "'3", + customVars.append((i + 1) + "!").append((n.getKey() + n.getValue())); + } + + parameters.put("utmcs", "UTF-8"); + parameters.put("utmul", "en"); + parameters.put("utmhid", (System.currentTimeMillis() / 1000) + ""); + parameters.put("utmac", trackingAcount); + String domainHash = "app.osmand.net".hashCode() + ""; + + String utma = domainHash + "."; + File fl = a.getAppPath(".nomedia"); + if (fl.exists()) { + utma += (fl.lastModified()) + "."; + } else { + utma += (randomNumber()) + "."; + } + utma += ((System.currentTimeMillis() / 1000) + "."); + utma += ((System.currentTimeMillis() / 1000) + "."); + utma += ((System.currentTimeMillis() / 1000) + "."); + utma += "1"; + parameters.put("utmcc", "__utma=" + utma + ";"); + parameters.put("utme", MessageFormat.format("5({0}*{1}*{2})({3})", category, action, label == null ? "" : label, value) + + customVars); + + StringBuilder urlString = new StringBuilder(beaconUrl + "?"); + Iterator> it = parameters.entrySet().iterator(); + while (it.hasNext()) { + Entry e = it.next(); + urlString.append(e.getKey()).append("=").append(URLEncoder.encode(e.getValue(), "UTF-8")); + if (it.hasNext()) { + urlString.append("&"); + } + } + + log.debug(urlString); + URL url = new URL(urlString.toString()); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(5000); + conn.setDoInput(false); + conn.setDoOutput(false); + conn.connect(); + log.info("Response analytics is " + conn.getResponseCode() + " " + conn.getResponseMessage()); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/download/IndexFileList.java b/OsmAnd-java/src/net/osmand/plus/download/IndexFileList.java new file mode 100644 index 0000000000..5086dda169 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/IndexFileList.java @@ -0,0 +1,92 @@ +package net.osmand.plus.download; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.osmand.IndexConstants; + +public class IndexFileList implements Serializable { + private static final long serialVersionUID = 1L; + + private boolean downloadedFromInternet = false; + IndexItem basemap; + ArrayList indexFiles = new ArrayList(); + private String mapversion; + + private Comparator comparator = new Comparator(){ + @Override + public int compare(IndexItem o1, IndexItem o2) { + String object1 = o1.getFileName(); + String object2 = o2.getFileName(); + if(object1.endsWith(IndexConstants.ANYVOICE_INDEX_EXT_ZIP)){ + if(object2.endsWith(IndexConstants.ANYVOICE_INDEX_EXT_ZIP)){ + return object1.compareTo(object2); + } else { + return -1; + } + } else if(object2.endsWith(IndexConstants.ANYVOICE_INDEX_EXT_ZIP)){ + return 1; + } + return object1.compareTo(object2); + } + }; + + public void setDownloadedFromInternet(boolean downloadedFromInternet) { + this.downloadedFromInternet = downloadedFromInternet; + } + + public boolean isDownloadedFromInternet() { + return downloadedFromInternet; + } + + public void setMapVersion(String mapversion) { + this.mapversion = mapversion; + } + + public void add(IndexItem indexItem) { + if (indexItem.isAccepted()) { + indexFiles.add(indexItem); + } + if(indexItem.getFileName().toLowerCase().startsWith("world_basemap")) { + basemap = indexItem; + } + } + + public void sort(){ + Collections.sort(indexFiles, comparator); + } + + public boolean isAcceptable() { + return (indexFiles != null && !indexFiles.isEmpty()) || (mapversion != null); + } + + public List getIndexFiles() { + return indexFiles; + } + + public IndexItem getBasemap() { + return basemap; + } + + public boolean isIncreasedMapVersion() { + try { + int mapVersionInList = Integer.parseInt(mapversion); + return IndexConstants.BINARY_MAP_VERSION < mapVersionInList; + } catch (NumberFormatException e) { + //ignore this... + } + return false; + } + + public IndexItem getIndexFilesByName(String key) { + for(IndexItem i : indexFiles) { + if(i.getFileName().equals(key)) { + return i; + } + } + return null; + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/download/IndexItem.java b/OsmAnd-java/src/net/osmand/plus/download/IndexItem.java new file mode 100644 index 0000000000..55bb5ff507 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/IndexItem.java @@ -0,0 +1,272 @@ +package net.osmand.plus.download; + +import static net.osmand.IndexConstants.BINARY_MAP_INDEX_EXT; +import static net.osmand.IndexConstants.BINARY_MAP_INDEX_EXT_ZIP; +import static net.osmand.IndexConstants.TTSVOICE_INDEX_EXT_ZIP; +import static net.osmand.IndexConstants.VOICE_INDEX_EXT_ZIP; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import net.osmand.IndexConstants; +import net.osmand.PlatformUtil; +import net.osmand.plus.ClientContext; +import net.osmand.plus.R; +import net.osmand.plus.Version; +import net.osmand.util.Algorithms; + +import org.apache.commons.logging.Log; + +public class IndexItem implements Comparable { + private static final Log log = PlatformUtil.getLog(IndexItem.class); + + String description; + String date; + String parts; + String fileName; + String size; + IndexItem attachedItem; + DownloadActivityType type; + + public IndexItem(String fileName, String description, String date, String size, String parts) { + this.fileName = fileName; + this.description = description; + this.date = date; + this.size = size; + this.parts = parts; + this.type = DownloadActivityType.NORMAL_FILE; + } + + public DownloadActivityType getType() { + return type; + } + + public void setType(DownloadActivityType type) { + this.type = type; + } + + public String getVisibleDescription(ClientContext ctx) { + String s = ""; //$NON-NLS-1$ + if (type == DownloadActivityType.SRTM_FILE) { + return ctx.getString(R.string.download_srtm_maps); + } else if (type == DownloadActivityType.ROADS_FILE) { + return ctx.getString(R.string.download_roads_only_item); + } + if (fileName.endsWith(IndexConstants.BINARY_MAP_INDEX_EXT) || fileName.endsWith(IndexConstants.BINARY_MAP_INDEX_EXT_ZIP)) { + } else if (fileName.endsWith(IndexConstants.VOICE_INDEX_EXT_ZIP)) { + s = ctx.getString(R.string.voice); + } else if (fileName.endsWith(IndexConstants.TTSVOICE_INDEX_EXT_ZIP)) { + s = ctx.getString(R.string.ttsvoice); + } + return s; + } + + public String getVisibleName(ClientContext ctx) { + return getBasename().replace('_', ' '); + } + + public String getBasename() { + if (fileName.endsWith(IndexConstants.EXTRA_ZIP_EXT)) { + return fileName.substring(0, fileName.length() - IndexConstants.EXTRA_ZIP_EXT.length()); + } + if (fileName.endsWith(IndexConstants.SQLITE_EXT)) { + return fileName.substring(0, fileName.length() - IndexConstants.SQLITE_EXT.length()).replace('_', ' '); + } + int ls = fileName.lastIndexOf('_'); + if (ls >= 0) { + return fileName.substring(0, ls); + } + return fileName; + } + + public boolean isAccepted() { + // POI index download is not supported any longer + if (fileName.endsWith(addVersionToExt(IndexConstants.BINARY_MAP_INDEX_EXT, IndexConstants.BINARY_MAP_VERSION)) // + || fileName.endsWith(addVersionToExt(IndexConstants.BINARY_MAP_INDEX_EXT_ZIP, IndexConstants.BINARY_MAP_VERSION)) // + || fileName.endsWith(addVersionToExt(IndexConstants.VOICE_INDEX_EXT_ZIP, IndexConstants.VOICE_VERSION)) + || fileName.endsWith(IndexConstants.EXTRA_ZIP_EXT) + || fileName.endsWith(IndexConstants.SQLITE_EXT) + // || fileName.endsWith(addVersionToExt(IndexConstants.TTSVOICE_INDEX_EXT_ZIP, IndexConstants.TTSVOICE_VERSION)) drop support for + // downloading tts files from inet + ) { + return true; + } + return false; + } + + protected static String addVersionToExt(String ext, int version) { + return "_" + version + ext; + } + + public String getFileName() { + return fileName; + } + + public String getDescription() { + return description; + } + + public String getDate() { + return date; + } + + public String getSizeDescription(ClientContext ctx) { + return size + " MB"; + } + + public String getSize() { + return size; + } + + public List createDownloadEntry(ClientContext ctx, DownloadActivityType type, + List downloadEntries) { + String fileName = this.fileName; + File parent = null; + String toSavePostfix = null; + String toCheckPostfix = null; + boolean unzipDir = false; + boolean preventMediaIndexing = false; + if (fileName.endsWith(IndexConstants.BINARY_MAP_INDEX_EXT)) { + parent = ctx.getAppPath(IndexConstants.MAPS_PATH); + toSavePostfix = BINARY_MAP_INDEX_EXT; + toCheckPostfix = BINARY_MAP_INDEX_EXT; + } else if (fileName.endsWith(IndexConstants.BINARY_MAP_INDEX_EXT_ZIP)) { + parent = ctx.getAppPath(IndexConstants.MAPS_PATH); + toSavePostfix = BINARY_MAP_INDEX_EXT_ZIP; + toCheckPostfix = BINARY_MAP_INDEX_EXT; + } else if (fileName.endsWith(IndexConstants.EXTRA_ZIP_EXT)) { + parent = ctx.getAppPath(""); + // unzipDir = true; + toSavePostfix = IndexConstants.EXTRA_ZIP_EXT; + toCheckPostfix = IndexConstants.EXTRA_EXT; + } else if (fileName.endsWith(IndexConstants.SQLITE_EXT)) { + parent = ctx.getAppPath(IndexConstants.TILES_INDEX_DIR); + toSavePostfix = IndexConstants.SQLITE_EXT; + toCheckPostfix = IndexConstants.SQLITE_EXT; + } else if (fileName.endsWith(IndexConstants.VOICE_INDEX_EXT_ZIP)) { + parent = ctx.getAppPath(IndexConstants.VOICE_INDEX_DIR); + toSavePostfix = VOICE_INDEX_EXT_ZIP; + toCheckPostfix = ""; //$NON-NLS-1$ + unzipDir = true; + preventMediaIndexing = true; + } else if (fileName.endsWith(IndexConstants.TTSVOICE_INDEX_EXT_ZIP)) { + parent = ctx.getAppPath(IndexConstants.VOICE_INDEX_DIR); + toSavePostfix = TTSVOICE_INDEX_EXT_ZIP; + toCheckPostfix = ""; //$NON-NLS-1$ + unzipDir = true; + } + if (type == DownloadActivityType.ROADS_FILE) { + toSavePostfix = "-roads" + toSavePostfix; + toCheckPostfix = "-roads" + toCheckPostfix; + } + if (parent != null) { + parent.mkdirs(); + // ".nomedia" indicates there are no pictures and no music to list in this dir for the Gallery and Music apps + if (preventMediaIndexing) { + try { + new File(parent, ".nomedia").createNewFile();//$NON-NLS-1$ + } catch (IOException e) { + // swallow io exception + log.error("IOException", e); + } + } + } + final DownloadEntry entry; + if (parent == null || !parent.exists()) { + ctx.showToastMessage(R.string.sd_dir_not_accessible); + } else { + entry = new DownloadEntry(); + entry.type = type; + entry.baseName = getBasename(); + String url = "http://" + IndexConstants.INDEX_DOWNLOAD_DOMAIN + "/download?event=2&"; + url += Version.getVersionAsURLParam(ctx) + "&"; + if (type == DownloadActivityType.ROADS_FILE) { + url += "road=yes&"; + } + if (type == DownloadActivityType.HILLSHADE_FILE) { + url += "hillshade=yes&"; + } + entry.urlToDownload = url + "file=" + fileName; + entry.fileToSave = new File(parent, entry.baseName + toSavePostfix); + entry.unzip = unzipDir; + try { + Date d = Algorithms.getDateFormat().parse(date); + entry.dateModified = d.getTime(); + } catch (ParseException e1) { + log.error("ParseException", e1); + } + try { + entry.sizeMB = Double.parseDouble(size); + } catch (NumberFormatException e1) { + log.error("ParseException", e1); + } + entry.parts = 1; + if (parts != null) { + entry.parts = Integer.parseInt(parts); + } + entry.fileToUnzip = new File(parent, entry.baseName + toCheckPostfix); + File backup = new File(ctx.getAppPath(IndexConstants.BACKUP_INDEX_DIR), entry.fileToUnzip.getName()); + if (backup.exists()) { + entry.existingBackupFile = backup; + } + if (attachedItem != null) { + ArrayList sz = new ArrayList(); + attachedItem.createDownloadEntry(ctx, type, sz); + if(sz.size() > 0) { + entry.attachedEntry = sz.get(0); + } + } + downloadEntries.add(entry); + } + return downloadEntries; + } + + public String getTargetFileName(){ + String e = getFileName(); + + if (e.endsWith(IndexConstants.BINARY_MAP_INDEX_EXT) || e.endsWith(IndexConstants.BINARY_MAP_INDEX_EXT_ZIP)) { + int l = e.lastIndexOf('_'); + if(l == -1) { + l = e.length(); + } + String s = e.substring(0, l); + if (getType() == DownloadActivityType.ROADS_FILE) { + s += "-roads" ; + } + s += IndexConstants.BINARY_MAP_INDEX_EXT; + return s; + } else if(e.endsWith(IndexConstants.SQLITE_EXT)){ + return e.replace('_', ' '); + } else if(e.endsWith(IndexConstants.EXTRA_ZIP_EXT)){ + return e.substring(0, e.length() - IndexConstants.EXTRA_ZIP_EXT.length()) + IndexConstants.EXTRA_EXT; + } else if(e.endsWith(IndexConstants.VOICE_INDEX_EXT_ZIP) || e.endsWith(IndexConstants.TTSVOICE_INDEX_EXT_ZIP)) { + int l = e.lastIndexOf('_'); + if(l == -1) { + l = e.length(); + } + String s = e.substring(0, l); + return s; + } + + return e; + } + + @Override + public int compareTo(IndexItem another) { + if(another == null) { + return -1; + } + return getFileName().compareTo(another.getFileName()); + } + + public boolean isAlreadyDownloaded(Map listAlreadyDownloaded) { + return listAlreadyDownloaded.containsKey(getTargetFileName()); + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/download/IndexItemCategory.java b/OsmAnd-java/src/net/osmand/plus/download/IndexItemCategory.java new file mode 100644 index 0000000000..2d3faf3aaa --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/IndexItemCategory.java @@ -0,0 +1,93 @@ +package net.osmand.plus.download; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.osmand.plus.ClientContext; +import net.osmand.plus.R; + +public class IndexItemCategory implements Comparable { + public final String name; + public final List items = new ArrayList(); + private final int order; + + public IndexItemCategory(String name, int order) { + this.name = name; + this.order = order; + } + + @Override + public int compareTo(IndexItemCategory another) { + return order < another.order ? -1 : 1; + } + + public static List categorizeIndexItems(ClientContext ctx, Collection indexItems) { + final Map cats = new TreeMap(); + for (IndexItem i : indexItems) { + int nameId = R.string.index_name_other; + int order = 0; + String lc = i.getFileName().toLowerCase(); + if (lc.endsWith(".voice.zip")) { + nameId = R.string.index_name_voice; + order = 1; + } else if (lc.contains(".ttsvoice.zip")) { + nameId = R.string.index_name_tts_voice; + order = 2; + } else if (lc.startsWith("us") || + (lc.contains("united states") && lc.startsWith("north-america")) ) { + nameId = R.string.index_name_us; + order = 31; + } else if (lc.contains("openmaps")) { + nameId = R.string.index_name_openmaps; + order = 10; + } else if (lc.contains("northamerica") || lc.contains("north-america")) { + nameId = R.string.index_name_north_america; + order = 30; + } else if (lc.contains("centralamerica") || lc.contains("central-america") + || lc.contains("caribbean")) { + nameId = R.string.index_name_central_america; + order = 40; + } else if (lc.contains("southamerica") || lc.contains("south-america")) { + nameId = R.string.index_name_south_america; + order = 45; + } else if (lc.startsWith("france_")) { + nameId = R.string.index_name_france; + order = 17; + } else if ( lc.contains("germany")) { + nameId = R.string.index_name_germany; + order = 16; + } else if (lc.contains("europe")) { + nameId = R.string.index_name_europe; + order = 15; + } else if (lc.contains("russia")) { + nameId = R.string.index_name_russia; + order = 18; + } else if (lc.contains("africa")) { + nameId = R.string.index_name_africa; + order = 80; + } else if (lc.contains("_asia")|| lc.startsWith("asia")) { + nameId = R.string.index_name_asia; + order = 50; + } else if (lc.contains("oceania") || lc.contains("australia")) { + nameId = R.string.index_name_oceania; + order = 70; + } else if (lc.contains("_wiki_")) { + nameId = R.string.index_name_wiki; + order = 10; + } + + String name = ctx.getString(nameId); + if (!cats.containsKey(name)) { + cats.put(name, new IndexItemCategory(name, order)); + } + cats.get(name).items.add(i); + } + ArrayList r = new ArrayList(cats.values()); + Collections.sort(r); + return r; + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/download/SrtmIndexItem.java b/OsmAnd-java/src/net/osmand/plus/download/SrtmIndexItem.java new file mode 100644 index 0000000000..c37272e697 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/download/SrtmIndexItem.java @@ -0,0 +1,140 @@ +package net.osmand.plus.download; + + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.osmand.IndexConstants; +import net.osmand.map.RegionCountry; +import net.osmand.plus.ClientContext; +import net.osmand.plus.R; +import net.osmand.plus.Version; + +public class SrtmIndexItem extends IndexItem { + + private RegionCountry item; + private List tilesToDownload = new ArrayList(); + public SrtmIndexItem(RegionCountry item, Map existingFileNames) { + super(fileName(item), "Elevation lines", "", item.getTileSize()+"", null); + this.item = item; + type = DownloadActivityType.SRTM_FILE; + updateExistingTiles(existingFileNames); + } + + public void updateExistingTiles(Map existingFileNames) { + tilesToDownload.clear(); + for (int i = 0; i < item.getTileSize(); i++) { + int lat = item.getLat(i); + int lon = item.getLon(i); + String fname = getFileName(lat, lon); + if (!existingFileNames.containsKey(fname + IndexConstants.BINARY_MAP_INDEX_EXT)) { + tilesToDownload.add(fname); + } + } + } + + private String getFileName(int lat, int lon) { + String fn = lat >= 0 ? "N" : "S"; + if(Math.abs(lat) < 10) { + fn += "0"; + } + fn += Math.abs(lat); + fn += lon >= 0 ? "e" : "w"; + if(Math.abs(lon) < 10) { + fn += "00"; + } else if(Math.abs(lon) < 100) { + fn += "0"; + } + fn += Math.abs(lon); + return fn; + } + + private static String fileName(RegionCountry r) { + if(r.parent == null) { + return (r.continentName + " " + r.name).trim(); + } else { + return (r.parent.continentName + " " + r.parent.name + " " + r.name).trim(); + } + } + + @Override + public boolean isAccepted() { + return true; + } + + @Override + public List createDownloadEntry(ClientContext ctx, DownloadActivityType type, + List downloadEntries) { + File parent = ctx.getAppPath(IndexConstants.SRTM_INDEX_DIR); + parent.mkdirs(); + List toDownload = new ArrayList(); + if (parent == null || !parent.exists()) { + ctx.showToastMessage(R.string.sd_dir_not_accessible); + } else { + for (String fileToDownload : tilesToDownload) { + DownloadEntry entry = new DownloadEntry(); + entry.type = type; + entry.baseName = fileToDownload; + String url = "http://" + IndexConstants.INDEX_DOWNLOAD_DOMAIN; + url += "/download?event=2&srtm=yes&"; + url += Version.getVersionAsURLParam(ctx) + "&"; + String fullName = fileToDownload + "_" + IndexConstants.BINARY_MAP_VERSION + IndexConstants.BINARY_MAP_INDEX_EXT_ZIP; + entry.urlToDownload = url +"file=" + fullName; + // url + "file=" + fileName; + entry.fileToSave = new File(parent, fullName); + entry.unzip = false; + entry.dateModified = System.currentTimeMillis(); + entry.sizeMB = 10; + entry.parts = 1; + entry.fileToUnzip = new File(parent, entry.baseName + IndexConstants.BINARY_MAP_INDEX_EXT); + downloadEntries.add(entry); + toDownload.size(); + } + } + return downloadEntries; + } + + @Override + public String getTargetFileName() { + return fileName+".nonexistent"; + } + + @Override + public String getBasename() { + return fileName; + } + + @Override + public String getSizeDescription(ClientContext ctx) { + return (item.getTileSize() - tilesToDownload.size()) + "/" + item.getTileSize() + " " + ctx.getString(R.string.index_srtm_parts); + } + + @Override + public String getVisibleDescription(ClientContext ctx) { + return ctx.getString(R.string.index_srtm_ele); + } + + @Override + public boolean isAlreadyDownloaded(Map listAlreadyDownloaded) { + for (int i = 0; i < item.getTileSize(); i++) { + int lat = item.getLat(i); + int lon = item.getLon(i); + String fname = getFileName(lat, lon); + if (listAlreadyDownloaded.containsKey(fname + IndexConstants.BINARY_MAP_INDEX_EXT)) { + return true; + } + } + return false; + } + + @Override + public String getVisibleName(ClientContext ctx) { + if(item.parent == null) { + return item.name; + } else { + return item.parent.name +" "+item.name; + } + } +} diff --git a/OsmAnd-java/src/net/osmand/plus/render/RendererRegistry.java b/OsmAnd-java/src/net/osmand/plus/render/RendererRegistry.java new file mode 100644 index 0000000000..2d2660554a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/render/RendererRegistry.java @@ -0,0 +1,165 @@ +package net.osmand.plus.render; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; + +import net.osmand.PlatformUtil; +import net.osmand.render.RenderingRulesStorage; +import net.osmand.render.RenderingRulesStorage.RenderingRulesStorageResolver; + +import org.apache.commons.logging.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + + +public class RendererRegistry { + + private final static Log log = PlatformUtil.getLog(RendererRegistry.class); + + public final static String DEFAULT_RENDER = "default"; //$NON-NLS-1$ + + private RenderingRulesStorage defaultRender = null; + private RenderingRulesStorage currentSelectedRender = null; + + private Map externalRenderers = new LinkedHashMap(); + private Map internalRenderers = new LinkedHashMap(); + + private Map renderers = new LinkedHashMap(); + + public RendererRegistry(){ + internalRenderers.put(DEFAULT_RENDER, "default.render.xml"); + internalRenderers.put("Touring-view_(more-contrast-and-details)", "Touring-view_(more-contrast-and-details)" +".render.xml"); + internalRenderers.put("High-contrast-roads", "High-contrast-roads" + ".render.xml"); + internalRenderers.put("Winter-and-ski", "Winter-and-ski" + ".render.xml"); + } + + public RenderingRulesStorage defaultRender() { + if(defaultRender == null){ + defaultRender = getRenderer(DEFAULT_RENDER); + } + return defaultRender; + } + + public RenderingRulesStorage getRenderer(String name) { + if(renderers.containsKey(name)){ + return renderers.get(name); + } + if(!hasRender(name)){ + return null; + } + try { + RenderingRulesStorage r = loadRenderer(name, new LinkedHashMap(), new LinkedHashMap()); + renderers.put(name, r); + return r; + } catch (IOException e) { + log.error("Error loading renderer", e); //$NON-NLS-1$ + } catch (XmlPullParserException e) { + log.error("Error loading renderer", e); //$NON-NLS-1$ + } + return null; + } + + private boolean hasRender(String name) { + return externalRenderers.containsKey(name) || internalRenderers.containsKey(name); + } + + private RenderingRulesStorage loadRenderer(String name, final Map loadedRenderers, + final Map renderingConstants) throws IOException, XmlPullParserException { + InputStream is = getInputStream(name); + try { + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + parser.setInput(is, "UTF-8"); + int tok; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + String tagName = parser.getName(); + if (tagName.equals("renderingConstant")) { + if (!renderingConstants.containsKey(parser.getAttributeValue("", "name"))) { + renderingConstants.put(parser.getAttributeValue("", "name"), + parser.getAttributeValue("", "value")); + } + } + } + } + } finally { + is.close(); + } + + // parse content + is = getInputStream(name); + final RenderingRulesStorage main = new RenderingRulesStorage(name, renderingConstants); + + loadedRenderers.put(name, main); + try { + main.parseRulesFromXmlInputStream(is, new RenderingRulesStorageResolver() { + + @Override + public RenderingRulesStorage resolve(String name, RenderingRulesStorageResolver ref) throws XmlPullParserException { + // reload every time to propogate rendering constants + if (loadedRenderers.containsKey(name)) { + log.warn("Circular dependencies found " + name); //$NON-NLS-1$ + } + RenderingRulesStorage dep = null; + try { + dep = loadRenderer(name, loadedRenderers, renderingConstants); + } catch (IOException e) { + log.warn("Dependent renderer not found : " + e.getMessage(), e); //$NON-NLS-1$ + } + if (dep == null) { + log.warn("Dependent renderer not found : " + name); //$NON-NLS-1$ + } + return dep; + } + }); + } finally { + is.close(); + } + return main; + } + + @SuppressWarnings("resource") + private InputStream getInputStream(String name) throws FileNotFoundException { + InputStream is = null; + if(externalRenderers.containsKey(name)){ + is = new FileInputStream(externalRenderers.get(name)); + } else if(internalRenderers.containsKey(name)){ + is = RenderingRulesStorage.class.getResourceAsStream(internalRenderers.get(name)); + } else { + throw new IllegalArgumentException("Not found " + name); //$NON-NLS-1$ + } + return is; + } + + + public void setExternalRenderers(Map externalRenderers) { + this.externalRenderers = externalRenderers; + } + + public Collection getRendererNames(){ + LinkedHashSet names = new LinkedHashSet(); + names.add(DEFAULT_RENDER); + names.addAll(internalRenderers.keySet()); + names.addAll(externalRenderers.keySet()); + return names; + } + + public RenderingRulesStorage getCurrentSelectedRenderer() { + if(currentSelectedRender == null){ + return defaultRender(); + } + return currentSelectedRender; + } + + public void setCurrentSelectedRender(RenderingRulesStorage currentSelectedRender) { + this.currentSelectedRender = currentSelectedRender; + } + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/render/TextRenderer.java.bak b/OsmAnd-java/src/net/osmand/plus/render/TextRenderer.java.bak new file mode 100644 index 0000000000..6935dd9173 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/render/TextRenderer.java.bak @@ -0,0 +1,494 @@ +package net.osmand.plus.render; + + +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.procedure.TIntObjectProcedure; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.osmand.FloatMath; +import net.osmand.QuadRect; +import net.osmand.RenderingContext; +import net.osmand.binary.BinaryMapDataObject; +import net.osmand.binary.BinaryMapIndexReader.TagValuePair; +import net.osmand.data.QuadTree; +import net.osmand.plus.ClientContext; +import net.osmand.plus.api.render.Canvas; +import net.osmand.plus.api.render.Color; +import net.osmand.plus.api.render.Paint; +import net.osmand.plus.api.render.Paint.Align; +import net.osmand.plus.api.render.Paint.Style; +import net.osmand.plus.api.render.Path; +import net.osmand.plus.api.render.Typeface; +import net.osmand.render.RenderingRuleSearchRequest; +import net.osmand.render.RenderingRulesStorage; +import net.sf.junidecode.Junidecode; + +import org.w3c.dom.css.Rect; + + +public class TextRenderer { + + private Paint paintText; + private final ClientContext context; + private Paint paintIcon; + + static class TextDrawInfo { + + public TextDrawInfo(String text) { + this.text = text; + } + + String text = null; + Path drawOnPath = null; + QuadRect bounds = null; + float vOffset = 0; + float centerX = 0; + float pathRotate = 0; + float centerY = 0; + float textSize = 0; + float minDistance = 0; + int textColor = Color.BLACK; + int textShadow = 0; + int textWrap = 0; + boolean bold = false; + String shieldRes = null; + int textOrder = 100; + + public void fillProperties(RenderingRuleSearchRequest render, float centerX, float centerY) { + this.centerX = centerX; + this.centerY = centerY + render.getIntPropertyValue(render.ALL.R_TEXT_DY, 0); + // used only for draw on path where centerY doesn't play role + this.vOffset = render.getIntPropertyValue(render.ALL.R_TEXT_DY, 0); + textColor = render.getIntPropertyValue(render.ALL.R_TEXT_COLOR); + if (textColor == 0) { + textColor = Color.BLACK; + } + textSize = render.getIntPropertyValue(render.ALL.R_TEXT_SIZE); + textShadow = render.getIntPropertyValue(render.ALL.R_TEXT_HALO_RADIUS, 0); + textWrap = render.getIntPropertyValue(render.ALL.R_TEXT_WRAP_WIDTH, 0); + bold = render.getIntPropertyValue(render.ALL.R_TEXT_BOLD, 0) > 0; + minDistance = render.getIntPropertyValue(render.ALL.R_TEXT_MIN_DISTANCE, 0); + if (render.isSpecified(render.ALL.R_TEXT_SHIELD)) { + shieldRes = render.getStringPropertyValue(render.ALL.R_TEXT_SHIELD); + } + textOrder = render.getIntPropertyValue(render.ALL.R_TEXT_ORDER, 100); + } + } + + public TextRenderer(ClientContext context) { + this.context = context; + paintText = context.getRendererAPI().newPaint(); + paintText.setStyle(Style.FILL); + paintText.setStrokeWidth(1); + paintText.setColor(Color.BLACK); + paintText.setTextAlign(Align.CENTER); + paintText.setTypeface(Typeface.create("Droid Serif", Typeface.NORMAL)); //$NON-NLS-1$ + paintText.setAntiAlias(true); + + paintIcon = context.getRendererAPI().newPaint(); + paintIcon.setStyle(Style.STROKE); + } + + public Paint getPaintText() { + return paintText; + } + + private float sqr(float a) { + return a * a; + } + + boolean intersects(QuadRect tRect, float tRot, QuadRect sRect, float sRot) { + if (FloatMath.abs(tRot) < FloatMath.PI / 15 && FloatMath.abs(sRot) < FloatMath.PI / 15) { + return QuadRect.intersects(tRect, sRect); + } + double dist = FloatMath.sqrt(sqr(tRect.centerX() - sRect.centerX()) + sqr(tRect.centerY() - sRect.centerY())); + if (dist < 3) { + return true; + } + + // difference close to 90/270 degrees + if (FloatMath.abs(FloatMath.cos(tRot - sRot)) < 0.3) { + // rotate one rectangle to 90 degrees + tRot += FloatMath.PI / 2; + float l = tRect.centerX() - tRect.height() / 2; + float t = tRect.centerY() - tRect.width() / 2; + tRect = new QuadRect(l, t, l + tRect.height(), t + tRect.width()); + } + + // determine difference close to 180/0 degrees + if (FloatMath.abs(FloatMath.sin(tRot - sRot)) < 0.3) { + // rotate t box + // (calculate offset for t center suppose we rotate around s center) + float diff = (float) (-FloatMath.atan2(tRect.centerX() - sRect.centerX(), tRect.centerY() - sRect.centerY()) + Math.PI / 2); + diff -= sRot; + float left = sRect.centerX() + dist * FloatMath.cos(diff) - tRect.width() / 2f; + float top = sRect.centerY() - dist * FloatMath.sin(diff) - tRect.height() / 2f; + QuadRect nRect = new QuadRect(left, top, left + tRect.width(), top + tRect.height()); + return QuadRect.intersects(nRect, sRect); + } + + // TODO other cases not covered + return QuadRect.intersects(tRect, sRect); + } + + void drawTestBox(Canvas cv, RectF r, float rot, String text) { + cv.save(); + cv.translate(r.centerX(), r.centerY()); + cv.rotate((float) (rot * 180 / Math.PI)); + RectF rs = new RectF(-r.width() / 2, -r.height() / 2, r.width() / 2, r.height() / 2); + cv.drawRect(rs, paintIcon); + if (text != null) { + paintText.setTextSize(paintText.getTextSize() - 4); + cv.drawText(text, rs.centerX(), rs.centerY(), paintText); + paintText.setTextSize(paintText.getTextSize() + 4); + } + cv.restore(); + } + + List tempSearch = new ArrayList(); + + private boolean findTextIntersection(Canvas cv, RenderingContext rc, QuadTree boundIntersections, TextDrawInfo text) { + // for test purposes +// drawTestBox(cv, text.bounds, text.pathRotate, text.text); + boundIntersections.queryInBox(text.bounds, tempSearch); + for (int i = 0; i < tempSearch.size(); i++) { + TextDrawInfo t = tempSearch.get(i); + if (intersects(text.bounds, text.pathRotate, t.bounds, t.pathRotate)) { + return true; + } + } + if (text.minDistance > 0) { + QuadRect boundsSearch = new QuadRect(text.bounds); + boundsSearch.inset(-rc.getDensityValue(FloatMath.max(5.0f, text.minDistance)), -rc.getDensityValue(15)); + boundIntersections.queryInBox(boundsSearch, tempSearch); + // drawTestBox(cv, &boundsSearch, text.pathRotate, paintIcon, text.text, NULL/*paintText*/); + for (int i = 0; i < tempSearch.size(); i++) { + TextDrawInfo t = tempSearch.get(i); + if (t.minDistance > 0 && t.text.equals(text.text) && + intersects(boundsSearch, text.pathRotate, t.bounds, t.pathRotate)) { + return true; + } + } + } + boundIntersections.insert(text, text.bounds); + return false; + } + + private void drawTextOnCanvas(Canvas cv, String text, float centerX, float centerY, Paint paint, float textShadow) { + if (textShadow > 0) { + int c = paintText.getColor(); + paintText.setStyle(Style.STROKE); + paintText.setColor(Color.WHITE); + paintText.setStrokeWidth(2 + textShadow); + cv.drawText(text, centerX, centerY, paint); + // reset + paintText.setStrokeWidth(2); + paintText.setStyle(Style.FILL); + paintText.setColor(c); + } + cv.drawText(text, centerX, centerY, paint); + } + + public void drawTextOverCanvas(RenderingContext rc, Canvas cv, boolean useEnglishNames) { + int size = rc.textToDraw.size(); + + // 1. Sort text using text order + Collections.sort(rc.textToDraw, new Comparator() { + @Override + public int compare(TextDrawInfo object1, TextDrawInfo object2) { + return object1.textOrder - object2.textOrder; + } + }); + QuadRect r = new QuadRect(0, 0, rc.width, rc.height); + r.inset(-100, -100); + QuadTree nonIntersectedBounds = new QuadTree(r, 4, 0.6f); + + for (int i = 0; i < size; i++) { + TextDrawInfo text = rc.textToDraw.get(i); + if (text.text != null && text.text.length() > 0) { + if (useEnglishNames) { + text.text = Junidecode.unidecode(text.text); + } + + // sest text size before finding intersection (it is used there) + float textSize = rc.getDensityValue(text.textSize); + paintText.setTextSize(textSize); + paintText.setFakeBoldText(text.bold); + paintText.setColor(text.textColor); + // align center y + text.centerY += (-paintText.ascent()); + + // calculate if there is intersection + boolean intersects = findTextIntersection(cv, rc, nonIntersectedBounds, text); + if (!intersects) { + if (text.drawOnPath != null) { + if (text.textShadow > 0) { + paintText.setColor(Color.WHITE); + paintText.setStyle(Style.STROKE); + paintText.setStrokeWidth(2 + text.textShadow); + cv.drawTextOnPath(text.text, text.drawOnPath, 0, text.vOffset, paintText); + // reset + paintText.setStyle(Style.FILL); + paintText.setStrokeWidth(2); + paintText.setColor(text.textColor); + } + cv.drawTextOnPath(text.text, text.drawOnPath, 0, text.vOffset, paintText); + } else { + if (text.shieldRes != null) { + Bitmap ico = RenderingIcons.getIcon(context, text.shieldRes); + if (ico != null) { + if (rc.getDensityValue(1) != 1) { + float left = text.centerX - rc.getDensityValue(ico.getWidth() / 2) - 0.5f; + float top = text.centerY - rc.getDensityValue(ico.getHeight() / 2) - rc.getDensityValue(4.5f); + Rect rec = new Rect(0, 0, ico.getWidth(), ico.getHeight()); + cv.drawBitmap(ico, rec, + new RectF(left, top, left + rc.getDensityValue(ico.getWidth()), top + + rc.getDensityValue(ico.getHeight())), paintIcon); + } else { + float left = text.centerX - ico.getWidth() / 2 - 0.5f; + float top = text.centerY - ico.getHeight() / 2 - rc.getDensityValue(4.5f); + cv.drawBitmap(ico, left, top, paintIcon); + } + } + } + + drawWrappedText(cv, text, textSize); + } + } + } + } + } + + private void drawWrappedText(Canvas cv, TextDrawInfo text, float textSize) { + if (text.textWrap == 0) { + // set maximum for all text + text.textWrap = 40; + } + + if (text.text.length() > text.textWrap) { + int start = 0; + int end = text.text.length(); + int lastSpace = -1; + int line = 0; + int pos = 0; + int limit = 0; + while (pos < end) { + lastSpace = -1; + limit += text.textWrap; + while (pos < limit && pos < end) { + if (!Character.isLetterOrDigit(text.text.charAt(pos))) { + lastSpace = pos; + } + pos++; + } + if (lastSpace == -1 || pos == end) { + drawTextOnCanvas(cv, text.text.substring(start, pos), text.centerX, text.centerY + line * (textSize + 2), paintText, + text.textShadow); + start = pos; + } else { + drawTextOnCanvas(cv, text.text.substring(start, lastSpace), text.centerX, text.centerY + line * (textSize + 2), + paintText, text.textShadow); + start = lastSpace + 1; + limit += (start - pos) - 1; + } + line++; + + } + } else { + drawTextOnCanvas(cv, text.text, text.centerX, text.centerY, paintText, text.textShadow); + } + } + + private void createTextDrawInfo(BinaryMapDataObject o, RenderingRuleSearchRequest render, RenderingContext rc, TagValuePair pair, float xMid, float yMid, + Path path, PointF[] points, String name, String tagName) { + render.setInitialTagValueZoom(pair.tag, pair.value, rc.zoom, o); + render.setIntFilter(render.ALL.R_TEXT_LENGTH, name.length()); + render.setStringFilter(render.ALL.R_NAME_TAG, tagName); + if(render.search(RenderingRulesStorage.TEXT_RULES)){ + if(render.getIntPropertyValue(render.ALL.R_TEXT_SIZE) > 0){ + TextDrawInfo text = new TextDrawInfo(name); + text.fillProperties(render, xMid, yMid); + paintText.setTextSize(rc.getDensityValue(text.textSize)); + Rect bs = new Rect(); + paintText.getTextBounds(name, 0, name.length(), bs); + text.bounds = new QuadRect(bs.left, bs.top, bs.right, bs.bottom); + text.bounds.inset(-rc.getDensityValue(3), -rc.getDensityValue(10)); + boolean display = true; + if(path != null) { + text.drawOnPath = path; + display = calculatePathToRotate(rc, text, points, + render.getIntPropertyValue(render.ALL.R_TEXT_ON_PATH, 0) != 0); + } + if(text.drawOnPath == null) { + text.bounds.offset(text.centerX, text.centerY); + // shift to match alignment + text.bounds.offset(-text.bounds.width()/2, 0); + } else { + text.bounds.offset(text.centerX - text.bounds.width()/2, text.centerY - text.bounds.height()/2); + } + if(display) { + rc.textToDraw.add(text); + } + } + } + } + + public void renderText(final BinaryMapDataObject obj, final RenderingRuleSearchRequest render, final RenderingContext rc, + final TagValuePair pair, final float xMid, final float yMid, final Path path, final PointF[] points) { + TIntObjectHashMap map = obj.getObjectNames(); + if (map != null) { + map.forEachEntry(new TIntObjectProcedure() { + @Override + public boolean execute(int tag, String name) { + if (name != null && name.trim().length() > 0) { + createTextDrawInfo(obj, render, rc, pair, xMid, yMid, path, points, name, tag == obj.getMapIndex().nameEncodingType ? "" + : obj.getMapIndex().decodeType(tag).tag); + } + return true; + } + }); + } + } + + + boolean calculatePathToRotate(RenderingContext rc, TextDrawInfo p, PointF[] points, boolean drawOnPath) { + int len = points.length; + if (!drawOnPath) { + p.drawOnPath = null; + // simply calculate rotation of path used for shields + float px = 0; + float py = 0; + for (int i = 1; i < len; i++) { + px += points[i].x - points[i - 1].x; + py += points[i].y - points[i - 1].y; + } + if (px != 0 || py != 0) { + p.pathRotate = (float) (-FloatMath.atan2(px, py) + FloatMath.PI / 2); + } + return true; + } + + boolean inverse = false; + float roadLength = 0; + boolean prevInside = false; + float visibleRoadLength = 0; + float textw = p.bounds.width(); + int last = 0; + int startVisible = 0; + float[] distances = new float[points.length - 1]; + + float normalTextLen = 1.5f * textw; + for (int i = 0; i < len; i++, last++) { + boolean inside = points[i].x >= 0 && points[i].x <= rc.width && + points[i].x >= 0 && points[i].y <= rc.height; + if (i > 0) { + float d = FloatMath.sqrt(sqr(points[i].x - points[i - 1].x) + + sqr(points[i].y - points[i - 1].y)); + distances[i-1]= d; + roadLength += d; + if(inside) { + visibleRoadLength += d; + if(!prevInside) { + startVisible = i - 1; + } + } else if(prevInside) { + if(visibleRoadLength >= normalTextLen) { + break; + } + visibleRoadLength = 0; + } + + } + prevInside = inside; + } + if (textw >= roadLength) { + return false; + } + int startInd = 0; + int endInd = len; + + if(textw < visibleRoadLength && last - startVisible > 1) { + startInd = startVisible; + endInd = last; + // display long road name in center + if (visibleRoadLength > 3 * textw) { + boolean ch ; + do { + ch = false; + if(endInd - startInd > 2 && visibleRoadLength - distances[startInd] > normalTextLen){ + visibleRoadLength -= distances[startInd]; + startInd++; + ch = true; + } + if(endInd - startInd > 2 && visibleRoadLength - distances[endInd - 2] > normalTextLen){ + visibleRoadLength -= distances[endInd - 2]; + endInd--; + ch = true; + } + } while(ch); + } + } + // shrink path to display more text + if (startInd > 0 || endInd < len) { + // find subpath + Path path = new Path(); + for (int i = startInd; i < endInd; i++) { + if (i == startInd) { + path.moveTo(points[i].x, points[i].y); + } else { + path.lineTo(points[i].x, points[i].y); + } + } + p.drawOnPath = path; + } + // calculate vector of the road (px, py) to proper rotate it + float px = 0; + float py = 0; + for (int i = startInd + 1; i < endInd; i++) { + px += points[i].x - points[i - 1].x; + py += points[i].y - points[i - 1].y; + } + float scale = 0.5f; + float plen = (float) FloatMath.sqrt(px * px + py * py); + // vector ox,oy orthogonal to px,py to measure height + float ox = -py; + float oy = px; + if(plen > 0) { + float rot = (float) (-FloatMath.atan2(px, py) + FloatMath.PI / 2); + if (rot < 0) rot += FloatMath.PI * 2; + if (rot > FloatMath.PI / 2f && rot < 3 * FloatMath.PI / 2f) { + rot += FloatMath.PI; + inverse = true; + ox = -ox; + oy = -oy; + } + p.pathRotate = rot; + ox *= (p.bounds.height() / plen) / 2; + oy *= (p.bounds.height() / plen) / 2; + } + + p.centerX = points[startInd].x + scale * px + ox; + p.centerY = points[startInd].y + scale * py + oy; + p.vOffset += p.textSize / 2 - 1; +// p.hOffset = 0; + + if (inverse) { + Path path = new Path(); + for (int i = endInd - 1; i >= startInd; i--) { + if (i == endInd - 1) { + path.moveTo(points[i].x, points[i].y); + } else { + path.lineTo(points[i].x, points[i].y); + } + } + p.drawOnPath = path; + } + return true; + } + + +} diff --git a/OsmAnd-java/src/net/osmand/plus/routing/AlarmInfo.java b/OsmAnd-java/src/net/osmand/plus/routing/AlarmInfo.java new file mode 100644 index 0000000000..99418ffba8 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/AlarmInfo.java @@ -0,0 +1,101 @@ +package net.osmand.plus.routing; + +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; + +public class AlarmInfo { + public static int SPEED_CAMERA = 1; + public static int SPEED_LIMIT = SPEED_CAMERA + 1; + public static int BORDER_CONTROL = SPEED_LIMIT + 1; + public static int TRAFFIC_CALMING = BORDER_CONTROL + 1; + public static int TOLL_BOOTH = TRAFFIC_CALMING + 1; + public static int STOP = TOLL_BOOTH + 1; + public static int MAXIMUM = STOP + 1; + + private int type; + private float distance; + private float time; + protected final int locationIndex; + private int intValue; + + public AlarmInfo(int type, int locationIndex){ + this.type = type; + this.locationIndex = locationIndex; + } + + public float getDistance() { + return distance; + } + + public float getTime() { + return time; + } + + + public void setTime(float time) { + this.time = time; + } + + public void setDistance(float distance) { + this.distance = distance; + } + + public int getType() { + return type; + } + + public int getIntValue() { + return intValue; + } + + public void setIntValue(int intValue) { + this.intValue = intValue; + } + + + + public static AlarmInfo createSpeedLimit(int speed){ + AlarmInfo info = new AlarmInfo(SPEED_LIMIT, 0); + info.setIntValue(speed); + return info; + } + + public static AlarmInfo createAlarmInfo(RouteTypeRule ruleType, int locInd) { + if("highway".equals(ruleType.getTag())) { + if("speed_camera".equals(ruleType.getValue())) { + return new AlarmInfo(SPEED_CAMERA, locInd); + } else if("stop".equals(ruleType.getValue())) { + return new AlarmInfo(STOP, locInd); + } + } else if("barrier".equals(ruleType.getTag())) { + if("toll_booth".equals(ruleType.getValue())) { + return new AlarmInfo(TOLL_BOOTH, locInd); + } else if("border_control".equals(ruleType.getValue())) { + return new AlarmInfo(BORDER_CONTROL, locInd); + } + } else if("traffic_calming".equals(ruleType.getTag())) { + return new AlarmInfo(TRAFFIC_CALMING, locInd); + } + return null; + } + + public int updateDistanceAndGetPriority(float time, float distance) { + this.distance = distance; + this.time = time; + if (distance > 1500) { + return 0; + } + // 1 level of priorities + if (time < 8 || distance < 100 || type == SPEED_LIMIT) { + return type; + } + if (type == SPEED_CAMERA && (time < 15 || distance < 150)) { + return type; + } + // 2nd level + if (time < 10 || distance < 150) { + return type + MAXIMUM; + } + return 0; + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationParams.java b/OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationParams.java new file mode 100644 index 0000000000..9cf6a51088 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationParams.java @@ -0,0 +1,29 @@ +package net.osmand.plus.routing; + +import java.util.List; + +import net.osmand.Location; +import net.osmand.data.LatLon; +import net.osmand.plus.ApplicationMode; +import net.osmand.plus.ClientContext; +import net.osmand.plus.routing.RouteProvider.GPXRouteParams; +import net.osmand.plus.routing.RouteProvider.RouteService; +import net.osmand.router.RouteCalculationProgress; + +public class RouteCalculationParams { + + public Location start; + public LatLon end; + public List intermediates; + + public ClientContext ctx; + public ApplicationMode mode; + public RouteService type; + public GPXRouteParams gpxRoute; + public RouteCalculationResult previousToRecalculate; + public boolean fast; + public boolean optimal; + public boolean leftSide; + public RouteCalculationProgress calculationProgress; + public boolean preciseRouting; +} diff --git a/OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationResult.java b/OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationResult.java new file mode 100644 index 0000000000..10052a4cdc --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/RouteCalculationResult.java @@ -0,0 +1,848 @@ +package net.osmand.plus.routing; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.osmand.Location; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; +import net.osmand.data.LatLon; +import net.osmand.plus.ApplicationMode; +import net.osmand.plus.ClientContext; +import net.osmand.plus.OsmAndFormatter; +import net.osmand.plus.OsmandSettings; +import net.osmand.plus.R; +import net.osmand.router.RouteSegmentResult; +import net.osmand.router.TurnType; +import net.osmand.util.MapUtils; + +public class RouteCalculationResult { + // could not be null and immodifiable! + private final List locations; + private final List directions; + private final List segments; + private final List alarmInfo; + private final String errorMessage; + private final int[] listDistance; + private final int[] intermediatePoints; + private final float routingTime; + + + // Note always currentRoute > get(currentDirectionInfo).routeOffset, + // but currentRoute <= get(currentDirectionInfo+1).routeOffset + protected int currentDirectionInfo = 0; + protected int currentRoute = 0; + protected int nextIntermediate = 0; + protected int nextAlarmInfo = 0; + + public RouteCalculationResult(String errorMessage) { + this(null, null, null, null, null, errorMessage, null, false, false); + } + + public RouteCalculationResult(List list, List directions, Location start, LatLon end, + List intermediates, String errorMessage, ClientContext ctx, boolean leftSide, boolean addMissingTurns) { + this.routingTime = 0; + this.errorMessage = errorMessage; + this.intermediatePoints = new int[intermediates == null ? 0 : intermediates.size()]; + List locations = list == null ? new ArrayList() : new ArrayList(list); + List localDirections = directions == null? new ArrayList() : new ArrayList(directions); + if (!locations.isEmpty()) { + checkForDuplicatePoints(locations, localDirections); + } + if(addMissingTurns) { + removeUnnecessaryGoAhead(localDirections); + OsmandSettings settings = ctx.getSettings(); + addMissingTurnsToRoute(locations, localDirections, start, end, settings.getApplicationMode(), ctx, leftSide); + // if there is no closest points to start - add it + introduceFirstPointAndLastPoint(locations, localDirections, null, start, end); + } + + this.locations = Collections.unmodifiableList(locations); + this.segments = new ArrayList(); + this.listDistance = new int[locations.size()]; + updateListDistanceTime(); + this.alarmInfo = new ArrayList(); + calculateIntermediateIndexes(ctx, intermediates, localDirections); + this.directions = Collections.unmodifiableList(localDirections); + updateDirectionsTime(); + } + + public RouteCalculationResult(List list, Location start, LatLon end, List intermediates, + ClientContext ctx, boolean leftSide, float routingTime) { + this.routingTime = routingTime; + List computeDirections = new ArrayList(); + this.errorMessage = null; + this.intermediatePoints = new int[intermediates == null ? 0 : intermediates.size()]; + List locations = new ArrayList(); + ArrayList alarms = new ArrayList(); + List segments = convertVectorResult(computeDirections, locations, list, alarms, ctx); + introduceFirstPointAndLastPoint(locations, computeDirections, segments, start, end); + + this.locations = Collections.unmodifiableList(locations); + this.segments = Collections.unmodifiableList(segments); + this.listDistance = new int[locations.size()]; + calculateIntermediateIndexes(ctx, intermediates, computeDirections); + updateListDistanceTime(); + + this.directions = Collections.unmodifiableList(computeDirections); + updateDirectionsTime(); + this.alarmInfo = Collections.unmodifiableList(alarms); + + } + + private void calculateIntermediateIndexes(ClientContext ctx, List intermediates, List localDirections) { + if(intermediates != null && localDirections != null) { + int[] interLocations = new int[intermediates.size()]; + int currentIntermediate = 0; + int currentLocation = 0; + double distanceThreshold = 25; + double prevDistance = distanceThreshold * 4; + while((currentIntermediate < intermediates.size() || prevDistance > distanceThreshold) + && currentLocation < this.locations.size()){ + if(currentIntermediate < intermediates.size() && + getDistanceToLocation(intermediates.get(currentIntermediate), currentLocation) < 50) { + prevDistance = getDistanceToLocation(intermediates.get(currentIntermediate), currentLocation); + interLocations[currentIntermediate] = currentLocation; + currentIntermediate++; + } else if(currentIntermediate > 0 && prevDistance > distanceThreshold && + getDistanceToLocation(intermediates.get(currentIntermediate - 1), + currentLocation) < prevDistance) { + prevDistance = getDistanceToLocation(intermediates.get(currentIntermediate - 1), currentLocation); + interLocations[currentIntermediate - 1] = currentLocation; + } + currentLocation ++; + } + int currentDirection = 0; + currentIntermediate = 0; + while(currentIntermediate < intermediates.size() && currentDirection < localDirections.size()){ + int locationIndex = localDirections.get(currentDirection).routePointOffset ; + if (locationIndex >= interLocations[currentIntermediate]) { + // split directions + if (locationIndex > interLocations[currentIntermediate] + && getDistanceToLocation(intermediates.get(currentIntermediate), locationIndex) > 50) { + RouteDirectionInfo toSplit = localDirections.get(currentDirection); + RouteDirectionInfo info = new RouteDirectionInfo(localDirections.get(currentDirection).getAverageSpeed(), TurnType.valueOf(TurnType.C, + false)); + info.setRef(toSplit.getRef()); + info.setStreetName(toSplit.getStreetName()); + info.setDestinationName(toSplit.getDestinationName()); + info.routePointOffset = interLocations[currentIntermediate]; + info.setDescriptionRoute(ctx.getString(R.string.route_head));//; //$NON-NLS-1$ + localDirections.add(currentDirection, info); + } + intermediatePoints[currentIntermediate] = currentDirection; + currentIntermediate++; + } + currentDirection ++; + } + } + } + + private double getDistanceToLocation(LatLon p, int currentLocation) { + return MapUtils.getDistance(p, + this.locations.get(currentLocation).getLatitude(), this.locations.get(currentLocation).getLongitude()); + } + + private void attachAlarmInfo(List alarms, RouteSegmentResult res, int intId, int locInd) { + int[] pointTypes = res.getObject().getPointTypes(intId); + RouteRegion reg = res.getObject().region; + if (pointTypes != null) { + for (int r = 0; r < pointTypes.length; r++) { + RouteTypeRule typeRule = reg.quickGetEncodingRule(pointTypes[r]); + AlarmInfo info = AlarmInfo.createAlarmInfo(typeRule, locInd); + if(info != null) { + alarms.add(info); + } + } + } + } + + public List getOriginalRoute() { + if (segments.size() == 0) { + return null; + } + List list = new ArrayList(); + list.add(segments.get(0)); + for (int i = 1; i < segments.size(); i++) { + if (segments.get(i - 1) != segments.get(i)) { + list.add(segments.get(i)); + } + } + return list; + } + + /** + * PREPARATION + */ + private List convertVectorResult(List directions, List locations, List list, + List alarms, ClientContext ctx) { + float prevDirectionTime = 0; + float prevDirectionDistance = 0; + List segmentsToPopulate = new ArrayList(); + for (int routeInd = 0; routeInd < list.size(); routeInd++) { + RouteSegmentResult s = list.get(routeInd); + boolean plus = s.getStartPointIndex() < s.getEndPointIndex(); + int i = s.getStartPointIndex(); + int prevLocationSize = locations.size(); + while (true) { + Location n = new Location(""); //$NON-NLS-1$ + LatLon point = s.getPoint(i); + n.setLatitude(point.getLatitude()); + n.setLongitude(point.getLongitude()); + if (i == s.getEndPointIndex() && routeInd != list.size() - 1) { + break; + } + locations.add(n); + attachAlarmInfo(alarms, s, i, locations.size()); + segmentsToPopulate.add(s); + if (i == s.getEndPointIndex() ) { + break; + } + if (plus) { + i++; + } else { + i--; + } + } + TurnType turn = s.getTurnType(); + + if(turn != null) { + RouteDirectionInfo info = new RouteDirectionInfo(s.getSegmentSpeed(), turn); + if(routeInd + 1< list.size()) { + RouteSegmentResult next = list.get(routeInd); + info.setRef(next.getObject().getRef()); + info.setStreetName(next.getObject().getName()); + info.setDestinationName(next.getObject().getDestinationName()); + } + + String description = toString(turn, ctx); + info.setDescriptionRoute(description); + info.routePointOffset = prevLocationSize; + if(directions.size() > 0 && prevDirectionTime > 0 && prevDirectionDistance > 0) { + RouteDirectionInfo prev = directions.get(directions.size() - 1); + prev.setAverageSpeed(prevDirectionDistance / prevDirectionTime); + prev.setDescriptionRoute(prev.getDescriptionRoute() + " " + OsmAndFormatter.getFormattedDistance(prevDirectionDistance, ctx)); + prevDirectionDistance = 0; + prevDirectionTime = 0; + } + directions.add(info); + } + prevDirectionDistance += s.getDistance(); + prevDirectionTime += s.getSegmentTime(); + } + if(directions.size() > 0 && prevDirectionTime > 0 && prevDirectionDistance > 0) { + RouteDirectionInfo prev = directions.get(directions.size() - 1); + prev.setAverageSpeed(prevDirectionDistance / prevDirectionTime); + prev.setDescriptionRoute(prev.getDescriptionRoute() + " " + OsmAndFormatter.getFormattedDistance(prevDirectionDistance, ctx)); + } + return segmentsToPopulate; + } + + protected void addMissingTurnsToRoute(List locations, + List originalDirections, Location start, LatLon end, ApplicationMode mode, ClientContext ctx, + boolean leftSide){ + if(locations.isEmpty()){ + return; + } + // speed m/s + float speed = 1.5f; + int minDistanceForTurn = 5; + if(mode == ApplicationMode.CAR){ + speed = 15.3f; + minDistanceForTurn = 35; + } else if(mode == ApplicationMode.BICYCLE){ + speed = 5.5f; + minDistanceForTurn = 12; + } + + List computeDirections = new ArrayList(); + + int[] listDistance = new int[locations.size()]; + listDistance[locations.size() - 1] = 0; + for (int i = locations.size() - 1; i > 0; i--) { + listDistance[i - 1] = (int) locations.get(i - 1).distanceTo(locations.get(i)); + listDistance[i - 1] += listDistance[i]; + } + + int previousLocation = 0; + int prevBearingLocation = 0; + RouteDirectionInfo previousInfo = new RouteDirectionInfo(speed, TurnType.valueOf(TurnType.C, leftSide)); + previousInfo.routePointOffset = 0; + previousInfo.setDescriptionRoute(ctx.getString( R.string.route_head)); + computeDirections.add(previousInfo); + + int distForTurn = 0; + float previousBearing = 0; + int startTurnPoint = 0; + + + for (int i = 1; i < locations.size() - 1; i++) { + + Location next = locations.get(i + 1); + Location current = locations.get(i); + float bearing = current.bearingTo(next); + // try to get close to current location if possible + while(prevBearingLocation < i - 1){ + if(locations.get(prevBearingLocation + 1).distanceTo(current) > 70){ + prevBearingLocation ++; + } else { + break; + } + } + + if(distForTurn == 0){ + // measure only after turn + previousBearing = locations.get(prevBearingLocation).bearingTo(current); + startTurnPoint = i; + } + + TurnType type = null; + String description = null; + float delta = previousBearing - bearing; + while(delta < 0){ + delta += 360; + } + while(delta > 360){ + delta -= 360; + } + + distForTurn += locations.get(i).distanceTo(locations.get(i + 1)); + if (i < locations.size() - 1 && distForTurn < minDistanceForTurn) { + // For very smooth turn we try to accumulate whole distance + // simply skip that turn needed for situation + // 1) if you are going to have U-turn - not 2 left turns + // 2) if there is a small gap between roads (turn right and after 4m next turn left) - so the direction head + continue; + } + + + if(delta > 45 && delta < 315){ + + if(delta < 60){ + type = TurnType.valueOf(TurnType.TSLL, leftSide); + description = ctx.getString( R.string.route_tsll); + } else if(delta < 120){ + type = TurnType.valueOf(TurnType.TL, leftSide); + description = ctx.getString( R.string.route_tl); + } else if(delta < 150){ + type = TurnType.valueOf(TurnType.TSHL, leftSide); + description = ctx.getString( R.string.route_tshl); + } else if(delta < 210){ + type = TurnType.valueOf(TurnType.TU, leftSide); + description = ctx.getString( R.string.route_tu); + } else if(delta < 240){ + description = ctx.getString( R.string.route_tshr); + type = TurnType.valueOf(TurnType.TSHR, leftSide); + } else if(delta < 300){ + description = ctx.getString( R.string.route_tr); + type = TurnType.valueOf(TurnType.TR, leftSide); + } else { + description = ctx.getString( R.string.route_tslr); + type = TurnType.valueOf(TurnType.TSLR, leftSide); + } + + // calculate for previousRoute + previousInfo.distance = listDistance[previousLocation]- listDistance[i]; + previousInfo.setDescriptionRoute(previousInfo.getDescriptionRoute() + + " " + OsmAndFormatter.getFormattedDistance(previousInfo.distance, ctx)); //$NON-NLS-1$ + type.setTurnAngle(360 - delta); + previousInfo = new RouteDirectionInfo(speed, type); + previousInfo.setDescriptionRoute(description); + previousInfo.routePointOffset = startTurnPoint; + computeDirections.add(previousInfo); + previousLocation = startTurnPoint; + prevBearingLocation = i; // for bearing using current location + } + // clear dist for turn + distForTurn = 0; + } + + previousInfo.distance = listDistance[previousLocation]; + previousInfo.setDescriptionRoute(previousInfo.getDescriptionRoute() + + " " + OsmAndFormatter.getFormattedDistance(previousInfo.distance, ctx)); //$NON-NLS-1$ + + if (originalDirections.isEmpty()) { + originalDirections.addAll(computeDirections); + } else { + int currentDirection = 0; + // one more + for (int i = 0; i <= originalDirections.size() && currentDirection < computeDirections.size(); i++) { + while (currentDirection < computeDirections.size()) { + int distanceAfter = 0; + if (i < originalDirections.size()) { + RouteDirectionInfo resInfo = originalDirections.get(i); + int r1 = computeDirections.get(currentDirection).routePointOffset; + int r2 = resInfo.routePointOffset; + distanceAfter = listDistance[resInfo.routePointOffset]; + float dist = locations.get(r1).distanceTo(locations.get(r2)); + // take into account that move roundabout is special turn that could be very lengthy + if (dist < 100) { + // the same turn duplicate + currentDirection++; + continue; // while cycle + } else if (computeDirections.get(currentDirection).routePointOffset > resInfo.routePointOffset) { + // check it at the next point + break; + } + } + + // add turn because it was missed + RouteDirectionInfo toAdd = computeDirections.get(currentDirection); + + if (i > 0) { + // update previous + RouteDirectionInfo previous = originalDirections.get(i - 1); + toAdd.setAverageSpeed(previous.getAverageSpeed()); + } + toAdd.distance = listDistance[toAdd.routePointOffset] - distanceAfter; + if (i < originalDirections.size()) { + originalDirections.add(i, toAdd); + } else { + originalDirections.add(toAdd); + } + i++; + currentDirection++; + } + } + + } + + int sum = 0; + for (int i = originalDirections.size() - 1; i >= 0; i--) { + originalDirections.get(i).afterLeftTime = sum; + sum += originalDirections.get(i).getExpectedTime(); + } + } + + + public String toString(TurnType type, ClientContext ctx) { + if(type.isRoundAbout()){ + return ctx.getString(R.string.route_roundabout, type.getExitOut()); + } else if(type.getValue().equals(TurnType.C)) { + return ctx.getString(R.string.route_head); + } else if(type.getValue().equals(TurnType.TSLL)) { + return ctx.getString(R.string.route_tsll); + } else if(type.getValue().equals(TurnType.TL)) { + return ctx.getString(R.string.route_tl); + } else if(type.getValue().equals(TurnType.TSHL)) { + return ctx.getString(R.string.route_tshl); + } else if(type.getValue().equals(TurnType.TSLR)) { + return ctx.getString(R.string.route_tslr); + } else if(type.getValue().equals(TurnType.TR)) { + return ctx.getString(R.string.route_tr); + } else if(type.getValue().equals(TurnType.TSHR)) { + return ctx.getString(R.string.route_tshr); + } else if(type.getValue().equals(TurnType.TU)) { + return ctx.getString(R.string.route_tu); + } else if(type.getValue().equals(TurnType.TRU)) { + return ctx.getString(R.string.route_tu); + } else if(type.getValue().equals(TurnType.KL)) { + return ctx.getString(R.string.route_kl); + } else if(type.getValue().equals(TurnType.KR)) { + return ctx.getString(R.string.route_kr); + } + return ""; + } + + public String getErrorMessage() { + return errorMessage; + } + + + /** + * PREPARATION + * Remove unnecessary go straight from CloudMade. + * Remove also last direction because it will be added after. + */ + private void removeUnnecessaryGoAhead(List directions) { + if (directions != null && directions.size() > 1) { + for (int i = 1; i < directions.size();) { + RouteDirectionInfo r = directions.get(i); + if (r.getTurnType().getValue().equals(TurnType.C)) { + RouteDirectionInfo prev = directions.get(i - 1); + prev.setAverageSpeed((prev.distance + r.distance) + / (prev.distance / prev.getAverageSpeed() + r.distance / r.getAverageSpeed())); + directions.remove(i); + } else { + i++; + } + } + } + } + + /** + * PREPARATION + * Check points for duplicates (it is very bad for routing) - cloudmade could return it + */ + private void checkForDuplicatePoints(List locations, List directions) { + // + for (int i = 0; i < locations.size() - 1;) { + if (locations.get(i).distanceTo(locations.get(i + 1)) == 0) { + locations.remove(i); + if (directions != null) { + for (RouteDirectionInfo info : directions) { + if (info.routePointOffset > i) { + info.routePointOffset--; + } + } + } + } else { + i++; + } + } + } + + /** + * PREPARATION + * If beginning is too far from start point, then introduce GO Ahead + * @param end + */ + private void introduceFirstPointAndLastPoint(List locations, List directions, List segs, Location start, + LatLon end) { + if (!locations.isEmpty() && locations.get(0).distanceTo(start) > 200) { + // add start point + locations.add(0, start); + if(segs != null) { + segs.add(0, segs.get(0)); + } + if (directions != null && !directions.isEmpty()) { + for (RouteDirectionInfo i : directions) { + i.routePointOffset++; + } + RouteDirectionInfo info = new RouteDirectionInfo(directions.get(0).getAverageSpeed(), + TurnType.valueOf(TurnType.C, false)); + info.routePointOffset = 0; + // info.setDescriptionRoute(ctx.getString( R.string.route_head));//; //$NON-NLS-1$ + directions.add(0, info); + } + } + RouteDirectionInfo lastDirInf = directions.size() > 0 ? directions.get(directions.size() - 1) : null; + if((lastDirInf == null || lastDirInf.routePointOffset < locations.size() - 1) && locations.size() - 1 > 0) { + String type = TurnType.C; + Location prevLast = locations.get(locations.size() - 2); + float lastBearing = prevLast.bearingTo(locations.get(locations.size() - 1)); + float[] compute = new float[2]; + Location.distanceBetween(prevLast.getLatitude(), prevLast.getLongitude(), + end.getLatitude(), end.getLongitude(), compute); + float bearingToEnd = compute[1]; + double diff = MapUtils.degreesDiff(lastBearing, bearingToEnd); + if(Math.abs(diff) > 10) { + type = diff > 0 ? TurnType.KL : TurnType.KR; + } + RouteDirectionInfo info = new RouteDirectionInfo(1, TurnType.valueOf(type, false)); + info.distance = 0; + info.afterLeftTime = 0; + info.routePointOffset = locations.size() - 1; + directions.add(info); + } + } + + /** + * PREPARATION + * At the end always update listDistance local vars and time + */ + private void updateListDistanceTime() { + if (listDistance.length > 0) { + listDistance[locations.size() - 1] = 0; + for (int i = locations.size() - 1; i > 0; i--) { + listDistance[i - 1] = (int) locations.get(i - 1).distanceTo(locations.get(i)); + listDistance[i - 1] += listDistance[i]; + } + } + } + + /** + * PREPARATION + * At the end always update listDistance local vars and time + */ + private void updateDirectionsTime() { + int sum = 0; + for (int i = directions.size() - 1; i >= 0; i--) { + directions.get(i).afterLeftTime = sum; + directions.get(i).distance = listDistance[directions.get(i).routePointOffset]; + if (i < directions.size() - 1) { + directions.get(i).distance -= listDistance[directions.get(i + 1).routePointOffset]; + } + sum += directions.get(i).getExpectedTime(); + } + } + + //////////////////// MUST BE ALL SYNCHRONIZED ??? ////////////////////// + + public List getImmutableLocations() { + return locations; + } + + public List getDirections() { + return directions; + } + + + public List getNextLocations() { + if(currentRoute < locations.size()) { + return locations.subList(currentRoute, locations.size()); + } + return Collections.emptyList(); + } + + public RouteSegmentResult getCurrentSegmentResult() { + int cs = currentRoute > 0 ? currentRoute - 1 : 0; + if(cs < segments.size()) { + return segments.get(cs); + } + return null; + } + + public float getCurrentMaxSpeed() { + RouteSegmentResult res = getCurrentSegmentResult(); + if(res != null) { + return res.getObject().getMaximumSpeed(); + } + return 0; + } + + public float getRoutingTime() { + return routingTime; + } + + + public int getWholeDistance() { + if(listDistance.length > 0) { + return listDistance[0]; + } + return 0; + } + + public boolean isCalculated() { + return !locations.isEmpty(); + } + + public boolean isEmpty() { + return locations.isEmpty() || currentRoute >= locations.size(); + } + + + public void updateCurrentRoute(int currentRoute) { + this.currentRoute = currentRoute; + while (currentDirectionInfo < directions.size() - 1 && directions.get(currentDirectionInfo + 1).routePointOffset < currentRoute) { + currentDirectionInfo++; + } + while (nextAlarmInfo < alarmInfo.size() && alarmInfo.get(nextAlarmInfo).locationIndex < currentRoute) { + nextAlarmInfo++; + } + while(nextIntermediate < intermediatePoints.length) { + RouteDirectionInfo dir = directions.get(intermediatePoints[nextIntermediate]); + if(dir.routePointOffset < currentRoute) { + nextIntermediate ++; + } else { + break; + } + } + } + + public void passIntermediatePoint(){ + nextIntermediate ++ ; + } + + public Location getLocationFromRouteDirection(RouteDirectionInfo i){ + if(i.routePointOffset < locations.size()){ + return locations.get(i.routePointOffset); + } + return null; + } + + + /*public */NextDirectionInfo getNextRouteDirectionInfo(NextDirectionInfo info, Location fromLoc, boolean toSpeak) { + int dirInfo = currentDirectionInfo; + if (dirInfo < directions.size()) { + int dist = listDistance[currentRoute]; + int nextInd = dirInfo + 1; + if (toSpeak) { + while (nextInd < directions.size()) { + RouteDirectionInfo i = directions.get(nextInd); + if (i.getTurnType() != null && !i.getTurnType().isSkipToSpeak()) { + break; + } + nextInd++; + } + } + if (fromLoc != null) { + dist += fromLoc.distanceTo(locations.get(currentRoute)); + } + if (nextInd < directions.size()) { + info.directionInfo = directions.get(nextInd); + dist -= listDistance[directions.get(nextInd).routePointOffset]; + } + if(intermediatePoints != null && nextIntermediate < intermediatePoints.length) { + info.intermediatePoint = intermediatePoints[nextIntermediate] == nextInd; + } + info.directionInfoInd = nextInd; + info.distanceTo = dist; + return info; + } + info.directionInfoInd = -1; + info.distanceTo = -1; + info.directionInfo = null; + return null; + } + + /*public */NextDirectionInfo getNextRouteDirectionInfoAfter(NextDirectionInfo prev, NextDirectionInfo next, boolean toSpeak) { + int dirInfo = prev.directionInfoInd; + if (dirInfo < directions.size() && prev.directionInfo != null) { + int dist = listDistance[prev.directionInfo.routePointOffset]; + int nextInd = dirInfo + 1; + if (toSpeak) { + while (nextInd < directions.size()) { + RouteDirectionInfo i = directions.get(nextInd); + if (i.getTurnType() != null && !i.getTurnType().isSkipToSpeak()) { + break; + } + nextInd++; + } + } + if (nextInd < directions.size()) { + next.directionInfo = directions.get(nextInd); + dist -= listDistance[directions.get(nextInd).routePointOffset]; + } + if(intermediatePoints != null && nextIntermediate < intermediatePoints.length) { + next.intermediatePoint = intermediatePoints[nextIntermediate] == nextInd; + } + next.distanceTo = dist; + next.directionInfoInd = nextInd; + return next; + } + next.directionInfoInd = -1; + next.distanceTo = -1; + next.directionInfo = null; + return null; + } + + public List getRouteDirections() { + if(currentDirectionInfo < directions.size()){ + if(currentDirectionInfo == 0){ + return directions; + } + if(currentDirectionInfo < directions.size() - 1){ + return directions.subList(currentDirectionInfo + 1, directions.size()); + } + } + return Collections.emptyList(); + } + + public Location getNextRouteLocation() { + if(currentRoute < locations.size()) { + return locations.get(currentRoute); + } + return null; + } + + public AlarmInfo getMostImportantAlarm(Location fromLoc, AlarmInfo speedAlarm, boolean showCameras) { + int cRoute = currentRoute; + AlarmInfo mostImportant = speedAlarm; + int value = speedAlarm != null? speedAlarm.updateDistanceAndGetPriority(0, 0) : Integer.MAX_VALUE; + int aInfo = nextAlarmInfo; + if (aInfo < alarmInfo.size()) { + int dist = 0; + float speed = 0; + if (fromLoc != null && fromLoc.hasSpeed()) { + speed = fromLoc.getSpeed(); + } + if (fromLoc != null) { + dist += fromLoc.distanceTo(locations.get(cRoute)); + } + dist += listDistance[cRoute]; + while(aInfo < alarmInfo.size()) { + AlarmInfo inf = alarmInfo.get(aInfo); + int d = dist - listDistance[inf.locationIndex]; + if(d > 700){ + break; + } + float time = speed > 0 ? d / speed : Integer.MAX_VALUE; + int vl = inf.updateDistanceAndGetPriority(time, d); + if(vl < value && (showCameras || inf.getType() != AlarmInfo.SPEED_CAMERA)){ + mostImportant = inf; + value = vl; + } + aInfo++; + } + } + return mostImportant; + } + + public Location getNextRouteLocation(int after) { + if(currentRoute + after < locations.size()) { + return locations.get(currentRoute + after); + } + return null; + } + + public boolean directionsAvailable(){ + return currentDirectionInfo < directions.size(); + } + + public int getDistanceToFinish(Location fromLoc) { + if(listDistance != null && currentRoute < listDistance.length){ + int dist = listDistance[currentRoute]; + Location l = locations.get(currentRoute); + if(fromLoc != null){ + dist += fromLoc.distanceTo(l); + } + return dist; + } + return 0; + } + + public int getDistanceToNextIntermediate(Location fromLoc) { + if(listDistance != null && currentRoute < listDistance.length){ + int dist = listDistance[currentRoute]; + Location l = locations.get(currentRoute); + if(fromLoc != null){ + dist += fromLoc.distanceTo(l); + } + if(nextIntermediate >= intermediatePoints.length ){ + return 0; + } else { + int directionInd = intermediatePoints[nextIntermediate]; + return dist - listDistance[directions.get(directionInd).routePointOffset]; + } + } + return 0; + } + + public int getIntermediatePointsToPass(){ + if(nextIntermediate >= intermediatePoints.length) { + return 0; + } + return intermediatePoints.length - nextIntermediate; + } + + public int getLeftTime(Location fromLoc){ + int time = 0; + if(currentDirectionInfo < directions.size()) { + RouteDirectionInfo current = directions.get(currentDirectionInfo); + time = current.afterLeftTime; + + int distanceToNextTurn = listDistance[currentRoute]; + if(currentDirectionInfo + 1 < directions.size()) { + distanceToNextTurn -= listDistance[directions.get(currentDirectionInfo + 1).routePointOffset]; + } + Location l = locations.get(currentRoute); + if(fromLoc != null){ + distanceToNextTurn += fromLoc.distanceTo(l); + } + time += distanceToNextTurn / current.getAverageSpeed(); + } + return time; + } + + + public static class NextDirectionInfo { + public RouteDirectionInfo directionInfo; + public int distanceTo; + public boolean intermediatePoint; + public int imminent; + private int directionInfoInd; + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/routing/RouteDirectionInfo.java b/OsmAnd-java/src/net/osmand/plus/routing/RouteDirectionInfo.java new file mode 100644 index 0000000000..3b42b7cb9d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/RouteDirectionInfo.java @@ -0,0 +1,83 @@ +package net.osmand.plus.routing; + +import net.osmand.router.TurnType; + +public class RouteDirectionInfo { + // location when you should action (turn or go ahead) + public int routePointOffset; + // Type of action to take + private TurnType turnType; + // Description of the turn and route after + private String descriptionRoute = ""; //$NON-NLS-1$ + // Speed after the action till next turn + private float averageSpeed; + + private String ref; + + private String streetName; + + private String destinationName; + + public String getDestinationName() { + return destinationName; + } + + public void setDestinationName(String destinationName) { + this.destinationName = destinationName; + } + + // Constructor to verify average speed always > 0 + public RouteDirectionInfo(float averageSpeed, TurnType turnType) { + this.averageSpeed = averageSpeed == 0 ? 1 : averageSpeed; + this.turnType = turnType; + } + + public String getDescriptionRoute() { + return descriptionRoute; + } + + public String getRef() { + return ref; + } + + public void setRef(String ref) { + this.ref = ref; + } + + public String getStreetName() { + return streetName; + } + + public void setStreetName(String streetName) { + this.streetName = streetName; + } + + public void setDescriptionRoute(String descriptionRoute) { + this.descriptionRoute = descriptionRoute; + } + + public float getAverageSpeed() { + return averageSpeed; + } + + public void setAverageSpeed(float averageSpeed) { + this.averageSpeed = averageSpeed == 0 ? 1 : averageSpeed; + } + + // expected time after route point + public int getExpectedTime() { + return (int) (distance / averageSpeed); + } + + + public TurnType getTurnType() { + return turnType; + } + + + // calculated vars + // after action (excluding expectedTime) + public int afterLeftTime; + // distance after action (for i.e. after turn to next turn) + public int distance; +} diff --git a/OsmAnd-java/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd-java/src/net/osmand/plus/routing/RouteProvider.java new file mode 100644 index 0000000000..764a2d90c6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/RouteProvider.java @@ -0,0 +1,725 @@ +package net.osmand.plus.routing; + + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.FactoryConfigurationError; +import javax.xml.parsers.ParserConfigurationException; + +import net.osmand.IndexConstants; +import net.osmand.Location; +import net.osmand.PlatformUtil; +import net.osmand.NativeLibrary; +import net.osmand.binary.BinaryMapIndexReader; +import net.osmand.data.LatLon; +import net.osmand.plus.ApplicationMode; +import net.osmand.plus.ClientContext; +import net.osmand.plus.GPXUtilities; +import net.osmand.plus.OsmandSettings; +import net.osmand.plus.R; +import net.osmand.plus.GPXUtilities.GPXFile; +import net.osmand.plus.GPXUtilities.Route; +import net.osmand.plus.GPXUtilities.Track; +import net.osmand.plus.GPXUtilities.TrkSegment; +import net.osmand.plus.GPXUtilities.WptPt; +import net.osmand.router.GeneralRouter; +import net.osmand.router.GeneralRouter.GeneralRouterProfile; +import net.osmand.router.RoutePlannerFrontEnd; +import net.osmand.router.RouteSegmentResult; +import net.osmand.router.RoutingConfiguration; +import net.osmand.router.RoutingContext; +import net.osmand.router.TurnType; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xmlpull.v1.XmlPullParserException; + + +public class RouteProvider { + private static final org.apache.commons.logging.Log log = PlatformUtil.getLog(RouteProvider.class); + private static final String OSMAND_ROUTER = "OsmAndRouter"; + + public enum RouteService { + OSMAND("OsmAnd (offline)"), CLOUDMADE("CloudMade"), YOURS("YOURS"), ORS("OpenRouteService"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + private final String name; + private RouteService(String name){ + this.name = name; + } + public String getName() { + return name; + } + } + + public RouteProvider(){ + } + + public static class GPXRouteParams { + List points = new ArrayList(); + List directions; + + public GPXRouteParams(GPXFile file, boolean reverse, OsmandSettings settings){ + prepareEverything(file, reverse, settings.LEFT_SIDE_NAVIGATION.get()); + } + + public void setStartPoint(Location startPoint) { + points.add(0, startPoint); + } + + public List getPoints() { + return points; + } + + public Location getStartPointForRoute(){ + if(!points.isEmpty()){ + return points.get(0); + } + return null; + } + + public LatLon getLastPoint() { + if(!points.isEmpty()){ + Location l = points.get(points.size() - 1); + LatLon point = new LatLon(l.getLatitude(), l.getLongitude()); + return point; + } + return null; + } + + private void prepareEverything(GPXFile file, boolean reverse, boolean leftSide){ + if(file.isCloudmadeRouteFile() || OSMAND_ROUTER.equals(file.author)){ + directions = parseCloudmadeRoute(points, file, OSMAND_ROUTER.equals(file.author), leftSide, 10); + if(reverse){ + // clear directions all turns should be recalculated + directions = null; + Collections.reverse(points); + } + } else { + // first of all check tracks + for (Track tr : file.tracks) { + for (TrkSegment tkSeg : tr.segments) { + for (WptPt pt : tkSeg.points) { + points.add(createLocation(pt)); + } + } + } + if (points.isEmpty()) { + for (Route rte : file.routes) { + for (WptPt pt : rte.points) { + points.add(createLocation(pt)); + } + } + } + if (reverse) { + Collections.reverse(points); + } + } + } + } + + private static Location createLocation(WptPt pt){ + Location loc = new Location("OsmandRouteProvider"); + loc.setLatitude(pt.lat); + loc.setLongitude(pt.lon); + loc.setSpeed((float) pt.speed); + if(!Double.isNaN(pt.ele)) { + loc.setAltitude(pt.ele); + } + loc.setTime(pt.time); + if(!Double.isNaN(pt.hdop)) { + loc.setAccuracy((float) pt.hdop); + } + return loc; + } + + + + + public RouteCalculationResult calculateRouteImpl(RouteCalculationParams params){ + long time = System.currentTimeMillis(); + if (params.start != null && params.end != null) { + if(log.isInfoEnabled()){ + log.info("Start finding route from " + params.start + " to " + params.end +" using " + + params.type.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + try { + RouteCalculationResult res; + if(params.gpxRoute != null && !params.gpxRoute.points.isEmpty()){ + res = calculateGpxRoute(params); + } else if (params.type == RouteService.YOURS) { + res = findYOURSRoute(params); + } else if (params.type == RouteService.ORS) { + res = findORSRoute(params); + } else if (params.type == RouteService.OSMAND) { + res = findVectorMapsRoute(params); + } else { + res = findCloudMadeRoute(params); + } + if(log.isInfoEnabled() ){ + log.info("Finding route contained " + res.getImmutableLocations().size() + " points for " + (System.currentTimeMillis() - time) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + return res; + } catch (IOException e) { + log.error("Failed to find route ", e); //$NON-NLS-1$ + } catch (ParserConfigurationException e) { + log.error("Failed to find route ", e); //$NON-NLS-1$ + } catch (SAXException e) { + log.error("Failed to find route ", e); //$NON-NLS-1$ + } + } + return new RouteCalculationResult(null); + } + + + private RouteCalculationResult calculateGpxRoute(RouteCalculationParams pars) { + RouteCalculationResult res; + // get the closest point to start and to end + float minDist = Integer.MAX_VALUE; + int startI = 0; + GPXRouteParams params = pars.gpxRoute; + List gpxRoute = params.points; + int endI = gpxRoute.size(); + if (pars.start != null) { + for (int i = 0; i < gpxRoute.size(); i++) { + float d = gpxRoute.get(i).distanceTo(pars.start); + if (d < minDist) { + startI = i; + minDist = d; + } + } + } else { + pars.start = gpxRoute.get(0); + } + Location l = new Location("temp"); //$NON-NLS-1$ + l.setLatitude(pars.end.getLatitude()); + l.setLongitude(pars.end.getLongitude()); + minDist = Integer.MAX_VALUE; + // get in reverse order taking into account ways with cycle + for (int i = gpxRoute.size() - 1; i >= startI; i--) { + float d = gpxRoute.get(i).distanceTo(l); + if (d < minDist) { + endI = i + 1; + // slightly modify to allow last point to be added + minDist = d - 40; + } + } + ArrayList sublist = new ArrayList(gpxRoute.subList(startI, endI)); + if(params.directions == null){ + res = new RouteCalculationResult(sublist, params.directions, pars.start, pars.end, null, null, + pars.ctx, pars.leftSide, true); + } else { + List subdirections = new ArrayList(); + for (RouteDirectionInfo info : params.directions) { + if(info.routePointOffset >= startI && info.routePointOffset < endI){ + RouteDirectionInfo ch = new RouteDirectionInfo(info.getAverageSpeed(), info.getTurnType()); + ch.routePointOffset = info.routePointOffset - startI; + ch.setDescriptionRoute(info.getDescriptionRoute()); + + // recalculate + ch.distance = 0; + ch.afterLeftTime = 0; + subdirections.add(ch); + } + } + res = new RouteCalculationResult(sublist, subdirections, pars.start, pars.end, null, null, + pars.ctx, pars.leftSide, true); + } + return res; + } + + protected String getString(ClientContext ctx, int resId){ + if(ctx == null){ + return ""; //$NON-NLS-1$ + } + return ctx.getString(resId); + } + + + + + protected RouteCalculationResult findYOURSRoute(RouteCalculationParams params) throws MalformedURLException, IOException, + ParserConfigurationException, FactoryConfigurationError, SAXException { + List res = new ArrayList(); + StringBuilder uri = new StringBuilder(); + uri.append("http://www.yournavigation.org/api/1.0/gosmore.php?format=kml"); //$NON-NLS-1$ + uri.append("&flat=").append(params.start.getLatitude()); //$NON-NLS-1$ + uri.append("&flon=").append(params.start.getLongitude()); //$NON-NLS-1$ + uri.append("&tlat=").append(params.end.getLatitude()); //$NON-NLS-1$ + uri.append("&tlon=").append(params.end.getLongitude()); //$NON-NLS-1$ + if(ApplicationMode.PEDESTRIAN == params.mode){ + uri.append("&v=foot") ; //$NON-NLS-1$ + } else if(ApplicationMode.BICYCLE == params.mode){ + uri.append("&v=bicycle") ; //$NON-NLS-1$ + } else { + uri.append("&v=motorcar"); //$NON-NLS-1$ + } + uri.append("&fast=").append(params.fast ? "1" : "0").append("&layer=mapnik"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + log.info("URL route " + uri); + URL url = new URL(uri.toString()); + URLConnection connection = url.openConnection(); + DocumentBuilder dom = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = dom.parse(new InputSource(new InputStreamReader(connection.getInputStream()))); + NodeList list = doc.getElementsByTagName("coordinates"); //$NON-NLS-1$ + for(int i=0; i specs = new ArrayList(); + if (!settings.FAST_ROUTE_MODE.getModeValue(params.mode)) { + specs.add(GeneralRouter.USE_SHORTEST_WAY); + } + if(settings.AVOID_FERRIES.getModeValue(params.mode)){ + specs.add(GeneralRouter.AVOID_FERRIES); + } + if(settings.AVOID_TOLL_ROADS.getModeValue(params.mode)){ + specs.add(GeneralRouter.AVOID_TOLL); + } + if(settings.AVOID_MOTORWAY.getModeValue(params.mode)){ + specs.add(GeneralRouter.AVOID_MOTORWAY); + } else if(settings.PREFER_MOTORWAYS.getModeValue(params.mode)){ + specs.add(GeneralRouter.PREFER_MOTORWAYS); + } + if(settings.AVOID_UNPAVED_ROADS.getModeValue(params.mode)){ + specs.add(GeneralRouter.AVOID_UNPAVED); + } + String[] specialization = specs.toArray(new String[specs.size()]); + float mb = (1 << 20); + Runtime rt = Runtime.getRuntime(); + // make visible + int memoryLimit = (int) (0.95 * ((rt.maxMemory() - rt.totalMemory()) + rt.freeMemory()) / mb); + log.warn("Use " + memoryLimit + " MB Free " + rt.freeMemory() / mb + " of " + rt.totalMemory() / mb + " max " + rt.maxMemory() / mb); + + RoutingConfiguration cf = config.build(p.name().toLowerCase(), params.start.hasBearing() ? + params.start.getBearing() / 180d * Math.PI : null, + memoryLimit, specialization); + if(!params.optimal){ + cf.heuristicCoefficient *= 1.5; + // native use + cf.attributes.put("heuristicCoefficient", cf.heuristicCoefficient+""); + } + RoutingContext ctx = new RoutingContext(cf, params.ctx.getInternalAPI().getNativeLibrary(), files); + ctx.calculationProgress = params.calculationProgress; + if(params.previousToRecalculate != null) { + ctx.previouslyCalculatedRoute = params.previousToRecalculate.getOriginalRoute(); + } + LatLon st = new LatLon(params.start.getLatitude(), params.start.getLongitude()); + LatLon en = new LatLon(params.end.getLatitude(), params.end.getLongitude()); + List inters = new ArrayList(); + if (params.intermediates != null) { + inters = new ArrayList(params.intermediates); + } + try { + List result = router.searchRoute(ctx, st, en, inters, params.leftSide); + if(result == null || result.isEmpty()) { + if(ctx.calculationProgress.segmentNotFound == 0) { + return new RouteCalculationResult(params.ctx.getString(R.string.starting_point_too_far)); + } else if(ctx.calculationProgress.segmentNotFound == inters.size() + 1) { + return new RouteCalculationResult(params.ctx.getString(R.string.ending_point_too_far)); + } else if(ctx.calculationProgress.segmentNotFound > 0) { + return new RouteCalculationResult(params.ctx.getString(R.string.intermediate_point_too_far, "'" + ctx.calculationProgress.segmentNotFound + "'")); + } + if(ctx.calculationProgress.directSegmentQueueSize == 0) { + return new RouteCalculationResult("Route can not be found from start point (" +ctx.calculationProgress.distanceFromBegin/1000f+" km)"); + } else if(ctx.calculationProgress.reverseSegmentQueueSize == 0) { + return new RouteCalculationResult("Route can not be found from end point (" +ctx.calculationProgress.distanceFromEnd/1000f+" km)"); + } + if(ctx.calculationProgress.isCancelled) { + return new RouteCalculationResult("Route calculation was interrupted"); + } + // something really strange better to see that message on the scren + return new RouteCalculationResult("Empty result"); + } else { + RouteCalculationResult res = new RouteCalculationResult(result, params.start, params.end, + params.intermediates, params.ctx, params.leftSide, ctx.routingTime); + return res; + } + } catch (RuntimeException e) { + return new RouteCalculationResult(e.getMessage() ); + } catch (InterruptedException e) { + return new RouteCalculationResult("Route calculation was interrupted"); + } catch (OutOfMemoryError e) { +// ActivityManager activityManager = (ActivityManager)app.getSystemService(Context.ACTIVITY_SERVICE); +// ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); +// activityManager.getMemoryInfo(memoryInfo); +// int avl = (int) (memoryInfo.availMem / (1 << 20)); + int max = (int) (Runtime.getRuntime().maxMemory() / (1 << 20)); + int avl = (int) (Runtime.getRuntime().freeMemory() / (1 << 20)); + String s = " (" + avl + " MB available of " + max + ") "; + return new RouteCalculationResult("Not enough process memory "+ s); + } + } + + + protected RouteCalculationResult findCloudMadeRoute(RouteCalculationParams params) + throws MalformedURLException, IOException, ParserConfigurationException, FactoryConfigurationError, SAXException { + List res = new ArrayList(); + List directions = null; + StringBuilder uri = new StringBuilder(); + // possibly hide that API key because it is privacy of osmand + // A6421860EBB04234AB5EF2D049F2CD8F key is compromised + uri.append("http://routes.cloudmade.com/A6421860EBB04234AB5EF2D049F2CD8F/api/0.3/"); //$NON-NLS-1$ + uri.append(params.start.getLatitude() + "").append(","); //$NON-NLS-1$ //$NON-NLS-2$ + uri.append(params.start.getLongitude() + "").append(","); //$NON-NLS-1$ //$NON-NLS-2$ + if(params.intermediates != null && params.intermediates.size() > 0) { + uri.append("["); + boolean first = true; + for(LatLon il : params.intermediates) { + if(!first){ + uri.append(","); + } else { + first = false; + } + uri.append(il.getLatitude() + "").append(","); //$NON-NLS-1$ //$NON-NLS-2$ + uri.append(il.getLongitude() + ""); //$NON-NLS-1$ //$NON-NLS-2$ + } + uri.append("],"); + } + uri.append(params.end.getLatitude() + "").append(","); //$NON-NLS-1$//$NON-NLS-2$ + uri.append(params.end.getLongitude() + "").append("/"); //$NON-NLS-1$ //$NON-NLS-2$ + + float speed = 1.5f; + if (ApplicationMode.PEDESTRIAN == params.mode) { + uri.append("foot.gpx"); //$NON-NLS-1$ + } else if (ApplicationMode.BICYCLE == params.mode) { + speed = 5.5f; + uri.append("bicycle.gpx"); //$NON-NLS-1$ + } else { + speed = 15.3f; + if (params.fast) { + uri.append("car.gpx"); //$NON-NLS-1$ + } else { + uri.append("car/shortest.gpx"); //$NON-NLS-1$ + } + } + uri.append("?lang=").append(Locale.getDefault().getLanguage()); //$NON-NLS-1$ + log.info("URL route " + uri); + URL url = new URL(uri.toString()); + URLConnection connection = url.openConnection(); + GPXFile gpxFile = GPXUtilities.loadGPXFile(params.ctx, connection.getInputStream(), false); + directions = parseCloudmadeRoute(res, gpxFile, false, params.leftSide, speed); + + return new RouteCalculationResult(res, directions, params.start, params.end, params.intermediates, + null, params.ctx, params.leftSide, true); + } + + private static List parseCloudmadeRoute(List res, GPXFile gpxFile, boolean osmandRouter, + boolean leftSide, float defSpeed) { + List directions = null; + if (!osmandRouter) { + for (WptPt pt : gpxFile.points) { + res.add(createLocation(pt)); + } + } else { + for (Track tr : gpxFile.tracks) { + for (TrkSegment ts : tr.segments) { + for (WptPt p : ts.points) { + res.add(createLocation(p)); + } + } + } + } + float[] distanceToEnd = new float[res.size()]; + for (int i = res.size() - 2; i >= 0; i--) { + distanceToEnd[i] = distanceToEnd[i + 1] + res.get(i).distanceTo(res.get(i + 1)); + } + + Route route = null; + if (gpxFile.routes.size() > 0) { + route = gpxFile.routes.get(0); + } + RouteDirectionInfo previous = null; + if (route != null && route.points.size() > 0) { + directions = new ArrayList(); + Iterator iterator = route.points.iterator(); + while(iterator.hasNext()){ + WptPt item = iterator.next(); + try { + String stime = item.getExtensionsToRead().get("time"); + int time = 0; + if (stime != null) { + time = Integer.parseInt(stime); + } + int offset = Integer.parseInt(item.getExtensionsToRead().get("offset")); //$NON-NLS-1$ + if(directions.size() > 0) { + RouteDirectionInfo last = directions.get(directions.size() - 1); + // update speed using time and idstance + last.setAverageSpeed((distanceToEnd[last.routePointOffset] - distanceToEnd[offset])/last.getAverageSpeed()); + last.distance = (int) (distanceToEnd[last.routePointOffset] - distanceToEnd[offset]); + } + // save time as a speed because we don't know distance of the route segment + float avgSpeed = time; + if(!iterator.hasNext() && time > 0) { + avgSpeed = distanceToEnd[offset] / time; + } + String stype = item.getExtensionsToRead().get("turn"); //$NON-NLS-1$ + TurnType turnType; + if (stype != null) { + turnType = TurnType.valueOf(stype.toUpperCase(), leftSide); + } else { + turnType = TurnType.valueOf(TurnType.C, leftSide); + } + String sturn = item.getExtensionsToRead().get("turn-angle"); //$NON-NLS-1$ + if (sturn != null) { + turnType.setTurnAngle((float) Double.parseDouble(sturn)); + } + RouteDirectionInfo dirInfo = new RouteDirectionInfo(avgSpeed, turnType); + dirInfo.setDescriptionRoute(item.desc); //$NON-NLS-1$ + dirInfo.routePointOffset = offset; + if (previous != null && !TurnType.C.equals(previous.getTurnType().getValue()) && + !osmandRouter) { + // calculate angle + if (previous.routePointOffset > 0) { + float paz = res.get(previous.routePointOffset - 1).bearingTo(res.get(previous.routePointOffset)); + float caz; + if (previous.getTurnType().isRoundAbout() && dirInfo.routePointOffset < res.size() - 1) { + caz = res.get(dirInfo.routePointOffset).bearingTo(res.get(dirInfo.routePointOffset + 1)); + } else { + caz = res.get(dirInfo.routePointOffset - 1).bearingTo(res.get(dirInfo.routePointOffset)); + } + float angle = caz - paz; + if (angle < 0) { + angle += 360; + } else if (angle > 360) { + angle -= 360; + } + // that magic number helps to fix some errors for turn + angle += 75; + + if (previous.getTurnType().getTurnAngle() < 0.5f) { + previous.getTurnType().setTurnAngle(angle); + } + } + } + + directions.add(dirInfo); + + previous = dirInfo; + } catch (NumberFormatException e) { + log.info("Exception", e); //$NON-NLS-1$ + } catch (IllegalArgumentException e) { + log.info("Exception", e); //$NON-NLS-1$ + } + } + } + if (previous != null && !TurnType.C.equals(previous.getTurnType().getValue())) { + // calculate angle + if (previous.routePointOffset > 0 && previous.routePointOffset < res.size() - 1) { + float paz = res.get(previous.routePointOffset - 1).bearingTo(res.get(previous.routePointOffset)); + float caz = res.get(previous.routePointOffset).bearingTo(res.get(res.size() - 1)); + float angle = caz - paz; + if (angle < 0) { + angle += 360; + } + if (previous.getTurnType().getTurnAngle() < 0.5f) { + previous.getTurnType().setTurnAngle(angle); + } + } + } + return directions; + } + + protected RouteCalculationResult findORSRoute(RouteCalculationParams params) throws MalformedURLException, IOException, ParserConfigurationException, FactoryConfigurationError, + SAXException { + List res = new ArrayList(); + + String rpref = "Fastest"; + if (ApplicationMode.PEDESTRIAN == params.mode) { + rpref = "Pedestrian"; + } else if (ApplicationMode.BICYCLE == params.mode) { + rpref = "Bicycle"; + // } else if (ApplicationMode.LOWTRAFFIC == mode) { + // rpref = "BicycleSafety"; + // } else if (ApplicationMode.RACEBIKE == mode) { + // rpref = "BicycleRacer"; + // } else if (ApplicationMode.TOURBIKE == mode) { + // rpref = "BicycleRoute"; + // } else if (ApplicationMode.MTBIKE == mode) { + // rpref = "BicycleMTB"; + } else if (!params.fast) { + rpref = "Shortest"; + } + + StringBuilder request = new StringBuilder(); + request.append("http://openls.geog.uni-heidelberg.de/osm/eu/routing?").append("start=").append(params.start.getLongitude()).append(',') + .append(params.start.getLatitude()).append("&end=").append(params.end.getLongitude()).append(',').append(params.end.getLatitude()) + .append("&preference=").append(rpref); + // TODO if we would get instructions from the service, we could use this language setting + // .append("&language=").append(Locale.getDefault().getLanguage()); + + log.info("URL route " + request.toString()); + URI uri = URI.create(request.toString()); + URL url = uri.toURL(); + URLConnection connection = url.openConnection(); + + DocumentBuilder dom = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = dom.parse(new InputSource(new InputStreamReader(connection.getInputStream()))); + NodeList list = doc.getElementsByTagName("xls:RouteGeometry"); //$NON-NLS-1$ + for (int i = 0; i < list.getLength(); i++) { + NodeList poslist = ((Element) list.item(i)).getElementsByTagName("gml:pos"); //$NON-NLS-1$ + for (int j = 0; j < poslist.getLength(); j++) { + String text = poslist.item(j).getFirstChild().getNodeValue(); + int s = text.indexOf(' '); + try { + double lon = Double.parseDouble(text.substring(0, s)); + double lat = Double.parseDouble(text.substring(s + 1)); + Location l = new Location("router"); //$NON-NLS-1$ + l.setLatitude(lat); + l.setLongitude(lon); + res.add(l); + } catch (NumberFormatException nfe) { + } + } + } + if (list.getLength() == 0) { + if (doc.getChildNodes().getLength() == 1) { + Node item = doc.getChildNodes().item(0); + return new RouteCalculationResult(item.getNodeValue()); + + } + } + return new RouteCalculationResult(res, null, params.start, params.end, null, null, params.ctx, params.leftSide, true); + } + + public GPXFile createOsmandRouterGPX(RouteCalculationResult srcRoute){ + int currentRoute = srcRoute.currentRoute; + List routeNodes = srcRoute.getImmutableLocations(); + List directionInfo = srcRoute.getDirections(); + int currentDirectionInfo = srcRoute.currentDirectionInfo; + + GPXFile gpx = new GPXFile(); + gpx.author = OSMAND_ROUTER; + Track track = new Track(); + gpx.tracks.add(track); + TrkSegment trkSegment = new TrkSegment(); + track.segments.add(trkSegment); + int cRoute = currentRoute; + int cDirInfo = currentDirectionInfo; + + for(int i = cRoute; i< routeNodes.size(); i++){ + Location loc = routeNodes.get(i); + WptPt pt = new WptPt(); + pt.lat = loc.getLatitude(); + pt.lon = loc.getLongitude(); + if(loc.hasSpeed()){ + pt.speed = loc.getSpeed(); + } + if(loc.hasAltitude()){ + pt.ele = loc.getAltitude(); + } + if(loc.hasAccuracy()){ + pt.hdop = loc.getAccuracy(); + } + trkSegment.points.add(pt); + } + Route route = new Route(); + gpx.routes.add(route); + for (int i = cDirInfo; i < directionInfo.size(); i++) { + RouteDirectionInfo dirInfo = directionInfo.get(i); + if (dirInfo.routePointOffset >= cRoute) { + Location loc = routeNodes.get(dirInfo.routePointOffset); + WptPt pt = new WptPt(); + pt.lat = loc.getLatitude(); + pt.lon = loc.getLongitude(); + pt.desc = dirInfo.getDescriptionRoute(); + Map extensions = pt.getExtensionsToWrite(); + extensions.put("time", dirInfo.getExpectedTime() + ""); + String turnType = dirInfo.getTurnType().getValue(); + if (dirInfo.getTurnType().isRoundAbout()) { + turnType += dirInfo.getTurnType().getExitOut(); + } + if(!TurnType.C.equals(turnType)){ + extensions.put("turn", turnType); + extensions.put("turn-angle", dirInfo.getTurnType().getTurnAngle() + ""); + } + extensions.put("offset", (dirInfo.routePointOffset - cRoute) + ""); + route.points.add(pt); + } + } + return gpx; + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd-java/src/net/osmand/plus/routing/RoutingHelper.java new file mode 100644 index 0000000000..95f08c6fe9 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/RoutingHelper.java @@ -0,0 +1,810 @@ +package net.osmand.plus.routing; + + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.osmand.Location; +import net.osmand.PlatformUtil; +import net.osmand.binary.RouteDataObject; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; +import net.osmand.data.LatLon; +import net.osmand.plus.ApplicationMode; +import net.osmand.plus.GPXUtilities.GPXFile; +import net.osmand.plus.ClientContext; +import net.osmand.plus.OsmAndFormatter; +import net.osmand.plus.OsmandSettings; +import net.osmand.plus.OsmandSettings.MetricsConstants; +import net.osmand.plus.R; +import net.osmand.plus.TargetPointsHelper; +import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo; +import net.osmand.plus.routing.RouteProvider.GPXRouteParams; +import net.osmand.plus.routing.RouteProvider.RouteService; +import net.osmand.plus.voice.CommandPlayer; +import net.osmand.router.RouteCalculationProgress; +import net.osmand.router.RouteSegmentResult; +import net.osmand.util.Algorithms; +import net.osmand.util.MapUtils; + +public class RoutingHelper { + + private static final org.apache.commons.logging.Log log = PlatformUtil.getLog(RoutingHelper.class); + + public static interface IRouteInformationListener { + + public void newRouteIsCalculated(boolean newRoute); + + public void routeWasCancelled(); + } + + private final float POSITION_TOLERANCE = 60; + + private List listeners = new ArrayList(); + + private ClientContext app; + + private boolean isFollowingMode = false; + + private GPXRouteParams currentGPXRoute = null; + + private RouteCalculationResult route = new RouteCalculationResult(""); + + private LatLon finalLocation; + private List intermediatePoints; + private Location lastProjection; + private Location lastFixedLocation; + + private Thread currentRunningJob; + private long lastTimeEvaluatedRoute = 0; + private int evalWaitInterval = 3000; + + private ApplicationMode mode; + private OsmandSettings settings; + + private RouteProvider provider = new RouteProvider(); + private VoiceRouter voiceRouter; + + private boolean makeUturnWhenPossible = false; + private long makeUTwpDetected = 0; + //private long wrongMovementDetected = 0; + + private RouteCalculationProgressCallback progressRoute; + +// private ProgressBar progress; +// private Handler progressHandler; + + + + public boolean makeUturnWhenPossible() { + return makeUturnWhenPossible; + } + + + public RoutingHelper(ClientContext context, CommandPlayer player){ + this.app = context; + settings = context.getSettings(); + voiceRouter = new VoiceRouter(this, player); + } + + public boolean isFollowingMode() { + return isFollowingMode; + } + + public void setFollowingMode(boolean follow) { + isFollowingMode = follow; + if(follow) { + if(!app.getInternalAPI().isNavigationServiceStarted()) { + app.getInternalAPI().startNavigationService(true); + } + } else { + if(app.getInternalAPI().isNavigationServiceStartedForNavigation()) { + app.getInternalAPI().stopNavigationService(); + } + } + } + + + + public synchronized void setFinalAndCurrentLocation(LatLon finalLocation, List intermediatePoints, Location currentLocation, GPXRouteParams gpxRoute){ + clearCurrentRoute(finalLocation, intermediatePoints); + currentGPXRoute = gpxRoute; + // to update route + setCurrentLocation(currentLocation, false); + + } + + public synchronized void clearCurrentRoute(LatLon newFinalLocation, List newIntermediatePoints) { + route = new RouteCalculationResult(""); + makeUturnWhenPossible = false; + evalWaitInterval = 3000; + app.runInUIThread(new Runnable() { + @Override + public void run() { + for (IRouteInformationListener l : listeners) { + l.routeWasCancelled(); + } + } + }); + this.finalLocation = newFinalLocation; + this.intermediatePoints = newIntermediatePoints; + if(currentRunningJob instanceof RouteRecalculationThread) { + ((RouteRecalculationThread) currentRunningJob).stopCalculation(); + } + if (newFinalLocation == null) { + settings.FOLLOW_THE_ROUTE.set(false); + settings.FOLLOW_THE_GPX_ROUTE.set(null); + // clear last fixed location + this.lastProjection = null; + setFollowingMode(false); + } + } + + public GPXRouteParams getCurrentGPXRoute() { + return currentGPXRoute; + } + + public List getCurrentRoute() { + return currentGPXRoute == null || currentGPXRoute.points.isEmpty() ? route.getImmutableLocations() : Collections + .unmodifiableList(currentGPXRoute.points); + } + + public void setAppMode(ApplicationMode mode){ + this.mode = mode; + voiceRouter.updateAppMode(); + } + + public ApplicationMode getAppMode() { + return mode; + } + + public LatLon getFinalLocation() { + return finalLocation; + } + + public List getIntermediatePoints() { + return intermediatePoints; + } + + public boolean isRouteCalculated(){ + return route.isCalculated(); + } + + public VoiceRouter getVoiceRouter() { + return voiceRouter; + } + + public Location getLastProjection(){ + return lastProjection; + } + + public void addListener(IRouteInformationListener l){ + listeners.add(l); + } + + public boolean removeListener(IRouteInformationListener l){ + return listeners.remove(l); + } + + public void updateLocation(Location currentLocation) { + if(isFollowingMode()) { + setCurrentLocation(currentLocation, false); + } + } + + + public Location setCurrentLocation(Location currentLocation, boolean returnUpdatedLocation ) { + Location locationProjection = currentLocation; + if (finalLocation == null || currentLocation == null) { + makeUturnWhenPossible = false; + return locationProjection; + } + float posTolerance = POSITION_TOLERANCE; + if(currentLocation.hasAccuracy()) { + posTolerance = POSITION_TOLERANCE / 2 + currentLocation.getAccuracy(); + } + boolean calculateRoute = false; + synchronized (this) { + // 0. Route empty or needs to be extended? Then re-calculate route. + if(route.isEmpty()) { + calculateRoute = true; + } else { + // 1. Update current route position status according to latest received location + boolean finished = updateCurrentRouteStatus(currentLocation, posTolerance); + if (finished) { + return null; + } + List routeNodes = route.getImmutableLocations(); + int currentRoute = route.currentRoute; + + // 2. Analyze if we need to recalculate route + // >100m off current route (sideways) + if (currentRoute > 0) { + double dist = getOrthogonalDistance(currentLocation, routeNodes.get(currentRoute - 1), routeNodes.get(currentRoute)); + if (dist > 1.7 * posTolerance) { + log.info("Recalculate route, because correlation : " + dist); //$NON-NLS-1$ + calculateRoute = true; + } + } + // 3. Identify wrong movement direction + Location next = route.getNextRouteLocation(); + boolean wrongMovementDirection = checkWrongMovementDirection(currentLocation, next); + if (wrongMovementDirection && currentLocation.distanceTo(routeNodes.get(currentRoute)) > 2 * posTolerance) { + log.info("Recalculate route, because wrong movement direction: " + currentLocation.distanceTo(routeNodes.get(currentRoute))); //$NON-NLS-1$ + calculateRoute = true; + } + // 4. Identify if UTurn is needed + boolean uTurnIsNeeded = identifyUTurnIsNeeded(currentLocation, posTolerance); + // 5. Update Voice router + boolean inRecalc = calculateRoute || isRouteBeingCalculated(); + if (!inRecalc && !uTurnIsNeeded && !wrongMovementDirection) { + voiceRouter.updateStatus(currentLocation, false); + } else if (uTurnIsNeeded) { + voiceRouter.makeUTStatus(); + } + + // calculate projection of current location + if (currentRoute > 0) { + locationProjection = new Location(currentLocation); + Location nextLocation = routeNodes.get(currentRoute); + LatLon project = getProject(currentLocation, routeNodes.get(currentRoute - 1), routeNodes.get(currentRoute)); + + locationProjection.setLatitude(project.getLatitude()); + locationProjection.setLongitude(project.getLongitude()); + // we need to update bearing too + float bearingTo = locationProjection.bearingTo(nextLocation); + locationProjection.setBearing(bearingTo); + } + } + lastFixedLocation = currentLocation; + lastProjection = locationProjection; + } + + if (calculateRoute) { + recalculateRouteInBackground(currentLocation, finalLocation, intermediatePoints, currentGPXRoute, route.isCalculated() ? route + : null); + } + double projectDist = mode == ApplicationMode.CAR ? posTolerance : posTolerance / 2; + if(returnUpdatedLocation && locationProjection != null && currentLocation.distanceTo(locationProjection) < projectDist) { + return locationProjection; + } else { + return currentLocation; + } + } + + private static double getOrthogonalDistance(Location loc, Location from, Location to) { + return MapUtils.getOrthogonalDistance(loc.getLatitude(), + loc.getLongitude(), from.getLatitude(), from.getLongitude(), + to.getLatitude(), to.getLongitude()); + } + + private static LatLon getProject(Location loc, Location from, Location to) { + return MapUtils.getProjection(loc.getLatitude(), + loc.getLongitude(), from.getLatitude(), from.getLongitude(), + to.getLatitude(), to.getLongitude()); + } + + private static int lookAheadFindMinOrthogonalDistance(Location currentLocation, List routeNodes, int currentRoute, int iterations) { + double newDist; + double dist = Double.POSITIVE_INFINITY; + int index = currentRoute; + while (iterations > 0 && currentRoute + 1 < routeNodes.size()) { + newDist = getOrthogonalDistance(currentLocation, routeNodes.get(currentRoute), routeNodes.get(currentRoute + 1)); + if (newDist < dist) { + index = currentRoute; + dist = newDist; + } + currentRoute++; + iterations--; + } + return index; + } + + private boolean updateCurrentRouteStatus(Location currentLocation, float posTolerance) { + List routeNodes = route.getImmutableLocations(); + int currentRoute = route.currentRoute; + // 1. Try to proceed to next point using orthogonal distance (finding minimum orthogonal dist) + while (currentRoute + 1 < routeNodes.size()) { + double dist = currentLocation.distanceTo(routeNodes.get(currentRoute)); + if(currentRoute > 0) { + dist = getOrthogonalDistance(currentLocation, routeNodes.get(currentRoute - 1), + routeNodes.get(currentRoute)); + } + boolean processed = false; + // if we are still too far try to proceed many points + // if not then look ahead only 3 in order to catch sharp turns + boolean longDistance = dist >= 250; + int newCurrentRoute = lookAheadFindMinOrthogonalDistance(currentLocation, routeNodes, currentRoute, longDistance ? 15 : 8); + double newDist = getOrthogonalDistance(currentLocation, routeNodes.get(newCurrentRoute), + routeNodes.get(newCurrentRoute + 1)); + if(longDistance) { + if(newDist < dist) { + if (log.isDebugEnabled()) { + log.debug("Processed by distance : (new) " + newDist + " (old) " + dist); //$NON-NLS-1$//$NON-NLS-2$ + } + processed = true; + } + } else if (newDist < dist || newDist < 10) { + // newDist < 10 (avoid distance 0 till next turn) + if (dist > posTolerance) { + processed = true; + if (log.isDebugEnabled()) { + log.debug("Processed by distance : " + newDist + " " + dist); //$NON-NLS-1$//$NON-NLS-2$ + } + } else { + // case if you are getting close to the next point after turn + // but you have not yet turned (could be checked bearing) + if (currentLocation.hasBearing() || lastFixedLocation != null) { + float bearingToRoute = currentLocation.bearingTo(routeNodes.get(currentRoute)); + float bearingRouteNext = routeNodes.get(newCurrentRoute).bearingTo(routeNodes.get(newCurrentRoute + 1)); + float bearingMotion = currentLocation.hasBearing() ? currentLocation.getBearing() : lastFixedLocation + .bearingTo(currentLocation); + double diff = Math.abs(MapUtils.degreesDiff(bearingMotion, bearingToRoute)); + double diffToNext = Math.abs(MapUtils.degreesDiff(bearingMotion, bearingRouteNext)); + if (diff > diffToNext) { + if (log.isDebugEnabled()) { + log.debug("Processed point bearing deltas : " + diff + " " + diffToNext); + } + processed = true; + } + } + } + } + if (processed) { + // that node already passed + route.updateCurrentRoute(newCurrentRoute + 1); + currentRoute = newCurrentRoute + 1; + } else { + break; + } + } + + // 2. check if intermediate found + if(route.getIntermediatePointsToPass() > 0 && route.getDistanceToNextIntermediate(lastFixedLocation) < POSITION_TOLERANCE * 2) { + showMessage(app.getString(R.string.arrived_at_intermediate_point)); + voiceRouter.arrivedIntermediatePoint(); + route.passIntermediatePoint(); + TargetPointsHelper targets = app.getInternalAPI().getTargetPointsHelper(); + int toDel = targets.getIntermediatePoints().size() - route.getIntermediatePointsToPass(); + while(toDel > 0) { + targets.removeWayPoint(false, 0); + toDel--; + } + while(intermediatePoints != null && route.getIntermediatePointsToPass() < intermediatePoints.size()) { + intermediatePoints.remove(0); + } + } + + // 3. check if destination found + Location lastPoint = routeNodes.get(routeNodes.size() - 1); + if (currentRoute > routeNodes.size() - 3 && currentLocation.distanceTo(lastPoint) < POSITION_TOLERANCE * 1.5) { + showMessage(app.getString(R.string.arrived_at_destination)); + voiceRouter.arrivedDestinationPoint(); + clearCurrentRoute(null, null); + TargetPointsHelper targets = app.getInternalAPI().getTargetPointsHelper(); + targets.clearPointToNavigate(false); + return true; + } + return false; + } + + + public boolean identifyUTurnIsNeeded(Location currentLocation, float posTolerance) { + if (finalLocation == null || currentLocation == null || !route.isCalculated()) { + this.makeUturnWhenPossible = false; + return makeUturnWhenPossible; + } + boolean makeUturnWhenPossible = false; + if (currentLocation.hasBearing()) { + float bearingMotion = currentLocation.getBearing() ; + Location nextRoutePosition = route.getNextRouteLocation(); + float bearingToRoute = currentLocation.bearingTo(nextRoutePosition); + double diff = MapUtils.degreesDiff(bearingMotion, bearingToRoute); + // 7. Check if you left the route and an unscheduled U-turn would bring you back (also Issue 863) + // This prompt is an interim advice and does only sound if a new route in forward direction could not be found in x seconds + if (Math.abs(diff) > 135f) { + float d = currentLocation.distanceTo(nextRoutePosition); + // 60m tolerance to allow for GPS inaccuracy + if (d > posTolerance) { + // require x sec continuous since first detection + if (makeUTwpDetected == 0) { + makeUTwpDetected = System.currentTimeMillis(); + } else if ((System.currentTimeMillis() - makeUTwpDetected > 10000)) { + makeUturnWhenPossible = true; + //log.info("bearingMotion is opposite to bearingRoute"); //$NON-NLS-1$ + } + } + } else { + makeUTwpDetected = 0; + } + } + this.makeUturnWhenPossible = makeUturnWhenPossible; + return makeUturnWhenPossible; + } + + /** + * Wrong movement direction is considered when between + * current location bearing (determines by 2 last fixed position or provided) + * and bearing from currentLocation to next (current) point + * the difference is more than 60 degrees + */ + public boolean checkWrongMovementDirection(Location currentLocation, Location nextRouteLocation) { + // measuring without bearing could be really error prone (with last fixed location) + // this code has an effect on route recalculation which should be detected without mistakes + if (currentLocation.hasBearing() && nextRouteLocation != null) { + float bearingMotion = currentLocation.getBearing(); + float bearingToRoute = currentLocation.bearingTo(nextRouteLocation); + double diff = MapUtils.degreesDiff(bearingMotion, bearingToRoute); + if (Math.abs(diff) > 60f) { + // require delay interval since first detection, to avoid false positive + //but leave out for now, as late detection is worse than false positive (it may reset voice router then cause bogus turn and u-turn prompting) + //if (wrongMovementDetected == 0) { + // wrongMovementDetected = System.currentTimeMillis(); + //} else if ((System.currentTimeMillis() - wrongMovementDetected > 500)) { + return true; + //} + } else { + //wrongMovementDetected = 0; + return false; + } + } + //wrongMovementDetected = 0; + return false; + } + + private synchronized void setNewRoute(RouteCalculationResult res, Location start){ + final boolean newRoute = !this.route.isCalculated(); + route = res; + if (isFollowingMode) { + if(lastFixedLocation != null) { + start = lastFixedLocation; + } + // try remove false route-recalculated prompts by checking direction to second route node + boolean wrongMovementDirection = false; + List routeNodes = res.getImmutableLocations(); + if (routeNodes != null && !routeNodes.isEmpty()) { + int newCurrentRoute = lookAheadFindMinOrthogonalDistance(start, routeNodes, res.currentRoute, 15); + if (newCurrentRoute + 1 < routeNodes.size()) { + // This check is valid for Online/GPX services (offline routing is aware of route direction) + wrongMovementDirection = checkWrongMovementDirection(start, routeNodes.get(newCurrentRoute + 1)); + // set/reset evalWaitInterval only if new route is in forward direction + if (!wrongMovementDirection) { + evalWaitInterval = 3000; + } else { + evalWaitInterval = evalWaitInterval * 3 / 2; + evalWaitInterval = Math.min(evalWaitInterval, 120000); + } + } + } + + + // trigger voice prompt only if new route is in forward direction + // If route is in wrong direction after one more setLocation it will be recalculated + if (!wrongMovementDirection || newRoute) { + voiceRouter.newRouteIsCalculated(newRoute); + } + } + + app.runInUIThread(new Runnable() { + @Override + public void run() { + for (IRouteInformationListener l : listeners) { + l.newRouteIsCalculated(newRoute); + } + } + }); + + } + + public synchronized int getLeftDistance(){ + return route.getDistanceToFinish(lastFixedLocation); + } + + public synchronized int getLeftDistanceNextIntermediate() { + return route.getDistanceToNextIntermediate(lastFixedLocation); + } + + public synchronized int getLeftTime() { + return route.getLeftTime(lastFixedLocation); + } + + public String getGeneralRouteInformation(){ + int dist = getLeftDistance(); + int hours = getLeftTime() / (60 * 60); + int minutes = (getLeftTime() / 60) % 60; + return app.getString(R.string.route_general_information, OsmAndFormatter.getFormattedDistance(dist, app), + hours, minutes); + } + + public Location getLocationFromRouteDirection(RouteDirectionInfo i){ + return route.getLocationFromRouteDirection(i); + } + + public synchronized NextDirectionInfo getNextRouteDirectionInfo(NextDirectionInfo info, boolean toSpeak){ + NextDirectionInfo i = route.getNextRouteDirectionInfo(info, lastProjection, toSpeak); + if(i != null) { + i.imminent = voiceRouter.calculateImminent(i.distanceTo, lastProjection); + } + return i; + } + + public synchronized float getCurrentMaxSpeed() { + return route.getCurrentMaxSpeed(); + } + + public synchronized AlarmInfo getMostImportantAlarm(MetricsConstants mc, boolean showCameras){ + float mxspeed = route.getCurrentMaxSpeed(); + AlarmInfo speedAlarm = createSpeedAlarm(mc, mxspeed, lastProjection); + AlarmInfo alarm = route.getMostImportantAlarm(lastProjection, speedAlarm, showCameras); + if(alarm != null) { +// voiceRouter.announceAlarm(alarm); + } + return alarm; + + } + + public static AlarmInfo calculateMostImportantAlarm(RouteDataObject ro, Location loc, + MetricsConstants mc, boolean showCameras) { + float mxspeed = ro.getMaximumSpeed(); + AlarmInfo speedAlarm = createSpeedAlarm(mc, mxspeed, loc); + if (speedAlarm != null) { +// voiceRouter.announceAlarm(speedAlarm); + return speedAlarm; + } + for (int i = 0; i < ro.getPointsLength(); i++) { + int[] pointTypes = ro.getPointTypes(i); + RouteRegion reg = ro.region; + if (pointTypes != null) { + for (int r = 0; r < pointTypes.length; r++) { + RouteTypeRule typeRule = reg.quickGetEncodingRule(pointTypes[r]); + AlarmInfo info = AlarmInfo.createAlarmInfo(typeRule, 0); + if (info != null) { + if (info.getType() != AlarmInfo.SPEED_CAMERA || showCameras) { +// voiceRouter.announceAlarm(info); + return info; + } + } + } + } + } + return null; + } + + + private static AlarmInfo createSpeedAlarm(MetricsConstants mc, float mxspeed, Location loc) { + AlarmInfo speedAlarm = null; + if (mxspeed != 0 && loc != null && loc.hasSpeed() && mxspeed != RouteDataObject.NONE_MAX_SPEED) { + float delta = 5f / 3.6f; + if (loc.getSpeed() > mxspeed + delta) { + int speed; + if (mc == MetricsConstants.KILOMETERS_AND_METERS) { + speed = Math.round(mxspeed * 3.6f); + } else { + speed = Math.round(mxspeed * 3.6f / 1.6f); + } + speedAlarm = AlarmInfo.createSpeedLimit(speed); + } + } + return speedAlarm; + } + + public static String formatStreetName(String name, String ref, String destination) { + if(destination != null && destination.length() > 0){ + if(ref != null && ref.length() > 0) { + destination = ref + " " + destination; + } + return destination; + } else if(name != null && name.length() > 0){ + if(ref != null && ref.length() > 0) { + name = ref + " " + name; + } + return name; + } else { + return ref; + } + } + + public synchronized String getCurrentName(){ + NextDirectionInfo n = getNextRouteDirectionInfo(new NextDirectionInfo(), false); + if((n.imminent == 0 || n.imminent == 1) && (n.directionInfo != null)) { + String nm = n.directionInfo.getStreetName(); + String rf = n.directionInfo.getRef(); + String dn = n.directionInfo.getDestinationName(); + return formatStreetName(nm, rf, dn); + } + RouteSegmentResult rs = route.getCurrentSegmentResult(); + if(rs != null) { + String nm = rs.getObject().getName(); + String rf = rs.getObject().getRef(); + String dn = rs.getObject().getDestinationName(); + return formatStreetName(nm, rf, dn); + } + return null; + } + + public synchronized NextDirectionInfo getNextRouteDirectionInfoAfter(NextDirectionInfo previous, NextDirectionInfo to, boolean toSpeak){ + NextDirectionInfo i = route.getNextRouteDirectionInfoAfter(previous, to, toSpeak); + if(i != null) { + i.imminent = voiceRouter.calculateImminent(i.distanceTo, null); + } + return i; + } + + public List getRouteDirections(){ + return route.getRouteDirections(); + } + + + + private class RouteRecalculationThread extends Thread { + + private final RouteCalculationParams params; + + public RouteRecalculationThread(String name, RouteCalculationParams params) { + super(name); + this.params = params; + if(params.calculationProgress == null) { + params.calculationProgress = new RouteCalculationProgress(); + } + } + + public void stopCalculation(){ + params.calculationProgress.isCancelled = true; + } + + + @Override + public void run() { + + RouteCalculationResult res = provider.calculateRouteImpl(params); + if (params.calculationProgress.isCancelled) { + currentRunningJob = null; + return; + } + + synchronized (RoutingHelper.this) { + if (res.isCalculated()) { + setNewRoute(res, params.start); + } else { + evalWaitInterval = evalWaitInterval * 3 / 2; + evalWaitInterval = Math.min(evalWaitInterval, 120000); + } + currentRunningJob = null; + } + + if (res.isCalculated()) { + String msg = app.getString(R.string.new_route_calculated_dist) + ": " + + OsmAndFormatter.getFormattedDistance(res.getWholeDistance(), app); + if (res.getRoutingTime() != 0f) { + msg += " (" + Algorithms.formatDuration((int) res.getRoutingTime()) + ")"; + } + showMessage(msg); + } else if (params.type != RouteService.OSMAND && !settings.isInternetConnectionAvailable()) { + showMessage(app.getString(R.string.error_calculating_route) + + ":\n" + app.getString(R.string.internet_connection_required_for_online_route)); //$NON-NLS-1$ + } else { + if (res.getErrorMessage() != null) { + showMessage(app.getString(R.string.error_calculating_route) + ":\n" + res.getErrorMessage()); //$NON-NLS-1$ + } else { + showMessage(app.getString(R.string.empty_route_calculated)); + } + } + lastTimeEvaluatedRoute = System.currentTimeMillis(); + } + + } + + private void recalculateRouteInBackground(final Location start, final LatLon end, final List intermediates, final GPXRouteParams gpxRoute, final RouteCalculationResult previousRoute){ + if (start == null || end == null) { + return; + } + if(currentRunningJob == null){ + // do not evaluate very often + if (System.currentTimeMillis() - lastTimeEvaluatedRoute > evalWaitInterval) { + RouteCalculationParams params = new RouteCalculationParams(); + params.start = start; + params.end = end; + params.intermediates = intermediates; + params.gpxRoute = gpxRoute; + params.previousToRecalculate = previousRoute; + params.leftSide = settings.LEFT_SIDE_NAVIGATION.get(); + params.preciseRouting = settings.PRECISE_ROUTING_MODE.getModeValue(mode); + params.optimal = settings.OPTIMAL_ROUTE_MODE.getModeValue(mode); + params.fast = settings.FAST_ROUTE_MODE.getModeValue(mode); + params.type = settings.ROUTER_SERVICE.getModeValue(mode); + params.mode = mode; + params.ctx = app; + if(previousRoute == null && params.type == RouteService.OSMAND) { + params.calculationProgress = new RouteCalculationProgress(); + updateProgress(params.calculationProgress); + } + synchronized (this) { + currentRunningJob = new RouteRecalculationThread("Calculating route", params); //$NON-NLS-1$ + currentRunningJob.start(); + } + } + } + } + + public Thread startTaskInRouteThreadIfPossible(final Runnable r) { + if(currentRunningJob == null) { + synchronized (this) { + currentRunningJob = new Thread(new Runnable() { + @Override + public void run() { + try { + r.run(); + } finally { + synchronized (RoutingHelper.this) { + currentRunningJob = null; + } + } + } + }, "Calculating position"); //$NON-NLS-1$ + currentRunningJob.start(); + } + } + return currentRunningJob; + } + + + private void updateProgress(final RouteCalculationProgress calculationProgress) { + if(progressRoute != null) { + app.runInUIThread(new Runnable() { + @Override + public void run() { + if (isRouteBeingCalculated()) { + float p = calculationProgress.distanceFromBegin + calculationProgress.distanceFromEnd; + float all = calculationProgress.totalEstimatedDistance * 1.5f; + if (all > 0) { + int t = (int) Math.min(p * p / (all * all) * 100f, 99); + progressRoute.updateProgress(t); + } + updateProgress(calculationProgress); + } else { + progressRoute.finish(); + } + } + }, 300); + } + } + + public void setProgressBar(RouteCalculationProgressCallback progressRoute) { + this.progressRoute = progressRoute; + } + + public interface RouteCalculationProgressCallback { + + // set visibility + public void updateProgress(int progress); + + public void finish(); + + } + + + public boolean isRouteBeingCalculated(){ + return currentRunningJob instanceof RouteRecalculationThread; + } + + private void showMessage(final String msg){ + app.runInUIThread(new Runnable() { + @Override + public void run() { + app.showToastMessage(msg); + } + }); + } + + + // NEVER returns null + public RouteCalculationResult getRoute() { + return route; + } + + public GPXFile generateGPXFileWithRoute(){ + return provider.createOsmandRouterGPX(route); + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/routing/VoiceRouter.java b/OsmAnd-java/src/net/osmand/plus/routing/VoiceRouter.java new file mode 100644 index 0000000000..c84d05e6c3 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/routing/VoiceRouter.java @@ -0,0 +1,519 @@ +package net.osmand.plus.routing; + + +import net.osmand.Location; +import net.osmand.plus.ApplicationMode; +import net.osmand.plus.ClientContext; +import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo; +import net.osmand.plus.voice.AbstractPrologCommandPlayer; +import net.osmand.plus.voice.CommandBuilder; +import net.osmand.plus.voice.CommandPlayer; +import net.osmand.router.TurnType; + + +public class VoiceRouter { + private final int STATUS_UTWP_TOLD = -1; + private final int STATUS_UNKNOWN = 0; + private final int STATUS_LONG_PREPARE = 1; + private final int STATUS_PREPARE = 2; + private final int STATUS_TURN_IN = 3; + private final int STATUS_TURN = 4; + private final int STATUS_TOLD = 5; + + private final RoutingHelper router; + private boolean mute = false; + private CommandPlayer player; + + + private int currentStatus = STATUS_UNKNOWN; + private float playGoAheadDist = 0; + + // private long lastTimeRouteRecalcAnnounced = 0; + + // default speed to have comfortable announcements (if actual speed is higher than it would be problem) + // Speed in m/s + protected float DEFAULT_SPEED = 12; + protected float TURN_DEFAULT_SPEED = 5; + + protected int PREPARE_LONG_DISTANCE = 0; + protected int PREPARE_LONG_DISTANCE_END = 0; + protected int PREPARE_DISTANCE = 0; + protected int PREPARE_DISTANCE_END = 0; + protected int TURN_IN_DISTANCE = 0; + protected int TURN_IN_DISTANCE_END = 0; + protected int TURN_DISTANCE = 0; + + protected VoiceCommandPending pendingCommand = null; + private RouteDirectionInfo nextRouteDirection; + + + public VoiceRouter(RoutingHelper router, CommandPlayer player) { + this.router = router; + this.player = player; + updateAppMode(); + } + + public void setPlayer(CommandPlayer player) { + this.player = player; + if(pendingCommand != null && player != null){ + CommandBuilder newCommand = getNewCommandPlayerToPlay(); + if (newCommand != null) { + pendingCommand.play(newCommand); + } + pendingCommand = null; + } + } + + public CommandPlayer getPlayer() { + return player; + } + + public void setMute(boolean mute) { + this.mute = mute; + } + + public boolean isMute() { + return mute; + } + + + protected CommandBuilder getNewCommandPlayerToPlay(){ + if(player == null || mute){ + return null; + } + return player.newCommandBuilder(); + } + + + + public void updateAppMode(){ + // turn prompt starts either at distance, or if actual-lead-time(currentSpeed) < maximum-lead-time + // lead time criterion only for TURN_IN and TURN + PREPARE_LONG_DISTANCE = 3500; // (105 sec) - 120 km/h + PREPARE_LONG_DISTANCE_END = 3000; // (90 sec) - 120 km/h + if(router.getAppMode() == ApplicationMode.PEDESTRIAN){ + // prepare distance is not needed for pedestrian + PREPARE_DISTANCE = 200; //(100 sec) + PREPARE_DISTANCE_END = 150 + 100; //( 75 sec) + not play + TURN_IN_DISTANCE = 100; // 50 sec + TURN_IN_DISTANCE_END = 70; // 35 sec + TURN_DISTANCE = 25; // 12 sec + TURN_DEFAULT_SPEED = DEFAULT_SPEED = 2f; // 7,2 km/h + } else if(router.getAppMode() == ApplicationMode.BICYCLE){ + PREPARE_DISTANCE = 500; //(100 sec) + PREPARE_DISTANCE_END = 350; //( 70 sec) + TURN_IN_DISTANCE = 225; // 45 sec + TURN_IN_DISTANCE_END = 80; // 16 sec + TURN_DISTANCE = 45; // 9 sec + TURN_DEFAULT_SPEED = DEFAULT_SPEED = 5; // 18 km/h + } else { + PREPARE_DISTANCE = 1500; //(125 sec) + PREPARE_DISTANCE_END = 1200;//(100 sec) + TURN_IN_DISTANCE = 390; // 30 sec + TURN_IN_DISTANCE_END = 182; // 14 sec + TURN_DISTANCE = 50; // 7 sec + TURN_DEFAULT_SPEED = 7f; // 25 km/h + DEFAULT_SPEED = 13; // 48 km/h + } + } + + protected boolean isDistanceLess(float currentSpeed, double dist, double etalon){ + if(dist < etalon || ((dist / currentSpeed) < (etalon / DEFAULT_SPEED))){ + return true; + } + return false; + } + + protected boolean isDistanceLess(float currentSpeed, double dist, double etalon, double defSpeed){ + if(dist < etalon || ((dist / currentSpeed) < (etalon / defSpeed))){ + return true; + } + return false; + } + + public int calculateImminent(float dist, Location loc){ + float speed = DEFAULT_SPEED; + if(loc != null && loc.hasSpeed()) { + speed = loc.getSpeed(); + } + if (isDistanceLess(speed, dist, TURN_IN_DISTANCE_END)) { + return 0; + } else if ( dist <= PREPARE_DISTANCE) { + return 1; + } else if (dist <= PREPARE_LONG_DISTANCE) { + return 2; + } else { + return -1; + } + } + + + private void nextStatusAfter(int previousStatus){ + //STATUS_UNKNOWN=0 -> STATUS_LONG_PREPARE=1 -> STATUS_PREPARE=2 -> STATUS_TURN_IN=3 -> STATUS_TURN=4 -> STATUS_TOLD=5 + if(previousStatus != STATUS_TOLD){ + this.currentStatus = previousStatus + 1; + } else { + this.currentStatus = previousStatus; + } + } + + private boolean statusNotPassed(int statusToCheck){ + return currentStatus <= statusToCheck; + } + + protected void makeUTStatus() { + // Mechanism via STATUS_UTWP_TOLD: Until turn in the right direction, or route is re-calculated in forward direction + if (currentStatus != STATUS_UTWP_TOLD) { + if (playMakeUTwp()) { + currentStatus = STATUS_UTWP_TOLD; + playGoAheadDist = 0; + } + } + + } + + /** + * Updates status of voice guidance + * @param currentLocation + */ + protected void updateStatus(Location currentLocation, boolean repeat) { + // Directly after turn: goAhead (dist), unless: + // < PREPARE_LONG_DISTANCE (3000m): playPrepareTurn + // < PREPARE_DISTANCE (1500m): playPrepareTurn + // < TURN_IN_DISTANCE (300m or 25sec): playMakeTurnIn + // < TURN_DISTANCE (60m or 5sec): playMakeTurn + float speed = DEFAULT_SPEED; + if (currentLocation != null && currentLocation.hasSpeed()) { + speed = Math.max(currentLocation.getSpeed(), speed); + } + + + NextDirectionInfo nextInfo = router.getNextRouteDirectionInfo(new NextDirectionInfo(), true); + // after last turn say: + if (nextInfo == null || nextInfo.directionInfo == null || nextInfo.directionInfo.distance == 0) { + // if(currentStatus <= STATUS_UNKNOWN && currentDirection > 0){ This caused this prompt to be suppressed when coming back from a + if (repeat || currentStatus <= STATUS_UNKNOWN) { + if (playGoAheadToDestination()) { + currentStatus = STATUS_TOLD; + playGoAheadDist = 0; + } + } + return; + } + if(nextInfo.intermediatePoint){ + if (repeat || currentStatus <= STATUS_UNKNOWN) { + if (playGoAheadToIntermediate()) { + currentStatus = STATUS_TOLD; + playGoAheadDist = 0; + } + } + return; + } + int dist = nextInfo.distanceTo; + RouteDirectionInfo next = nextInfo.directionInfo; + + // if routing is changed update status to unknown + if (next != nextRouteDirection) { + nextRouteDirection = next; + currentStatus = STATUS_UNKNOWN; + playGoAheadDist = 0; + } + + if (!repeat && (dist == 0 || currentStatus == STATUS_TOLD)) { + // nothing said possibly that's wrong case we should say before that + // however it should be checked manually ? + return; + } + // say how much to go if there is next turn is a bit far + if (currentStatus == STATUS_UNKNOWN) { + if (!isDistanceLess(speed, dist, TURN_IN_DISTANCE * 1.3)) { + playGoAheadDist = dist - 80; + } + // say long distance message only for long distances > 10 km + // if (dist >= PREPARE_LONG_DISTANCE && !isDistanceLess(speed, dist, PREPARE_LONG_DISTANCE)) { + if (dist > PREPARE_LONG_DISTANCE + 300) { + nextStatusAfter(STATUS_UNKNOWN); + } else if (dist > PREPARE_DISTANCE + 300) { + // say prepare message if it is far enough and don't say preare long distance + nextStatusAfter(STATUS_LONG_PREPARE); + } else { + // don't say even prepare message + nextStatusAfter(STATUS_PREPARE); + } + } + + NextDirectionInfo nextNextInfo = router.getNextRouteDirectionInfoAfter(nextInfo, new NextDirectionInfo(), !repeat); + if ((repeat || statusNotPassed(STATUS_TURN)) && isDistanceLess(speed, dist, TURN_DISTANCE, TURN_DEFAULT_SPEED)) { + if (next.distance < TURN_IN_DISTANCE_END && nextNextInfo != null) { + playMakeTurn(next, nextNextInfo.directionInfo); + } else { + playMakeTurn(next, null); + } + nextStatusAfter(STATUS_TURN); + } else if ((repeat || statusNotPassed(STATUS_TURN_IN)) && isDistanceLess(speed, dist, TURN_IN_DISTANCE)) { + if (repeat || dist >= TURN_IN_DISTANCE_END) { + if ((isDistanceLess(speed, next.distance, TURN_DISTANCE) || next.distance < TURN_IN_DISTANCE_END) && + nextNextInfo != null) { + playMakeTurnIn(next, dist, nextNextInfo.directionInfo); + } else { + playMakeTurnIn(next, dist, null); + } + } + nextStatusAfter(STATUS_TURN_IN); + // } else if (statusNotPassed(STATUS_PREPARE) && isDistanceLess(speed, dist, PREPARE_DISTANCE)) { + } else if ((repeat || statusNotPassed(STATUS_PREPARE)) && (dist <= PREPARE_DISTANCE)) { + if (repeat || dist >= PREPARE_DISTANCE_END) { + if (!repeat && (next.getTurnType().keepLeft() || next.getTurnType().keepRight())){ + // do not play prepare for keep left/right + } else { + playPrepareTurn(next, dist); + } + } + nextStatusAfter(STATUS_PREPARE); + // } else if (statusNotPassed(STATUS_LONG_PREPARE) && isDistanceLess(speed, dist, PREPARE_LONG_DISTANCE)){ + } else if ((repeat || statusNotPassed(STATUS_LONG_PREPARE)) && (dist <= PREPARE_LONG_DISTANCE)) { + if (repeat || dist >= PREPARE_LONG_DISTANCE_END) { + playPrepareTurn(next, dist); + } + nextStatusAfter(STATUS_LONG_PREPARE); + } else if (statusNotPassed(STATUS_UNKNOWN)) { + // strange how we get here but + nextStatusAfter(STATUS_UNKNOWN); + } else if (repeat || (statusNotPassed(STATUS_TURN_IN) && dist < playGoAheadDist)) { + playGoAheadDist = 0; + playGoAhead(dist); + } + } + + public void announceCurrentDirection(Location currentLocation) { + synchronized (router) { + if (currentStatus != STATUS_UTWP_TOLD) { + updateStatus(currentLocation, true); + } else if (playMakeUTwp()) { + playGoAheadDist = 0; + } + } + } + + + private boolean playGoAheadToDestination() { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + play.goAhead(router.getLeftDistance()).andArriveAtDestination().play(); + return true; + } + return false; + } + + private boolean playGoAheadToIntermediate() { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + play.goAhead(router.getLeftDistanceNextIntermediate()).andArriveAtIntermediatePoint().play(); + return true; + } + return false; + } + + private boolean playMakeUTwp() { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + play.makeUTwp().play(); + return true; + } + return false; + } + + private void playGoAhead(int dist) { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + play.goAhead(dist).play(); + } + } + + private void playPrepareTurn(RouteDirectionInfo next, int dist) { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + String tParam = getTurnType(next.getTurnType()); + if(tParam != null){ + play.prepareTurn(tParam, dist).play(); + } else if(next.getTurnType().isRoundAbout()){ + play.prepareRoundAbout(dist).play(); + } else if(next.getTurnType().getValue().equals(TurnType.TU) || next.getTurnType().getValue().equals(TurnType.TRU)){ + play.prepareMakeUT(dist).play(); + } + } + } + + private void playMakeTurnIn(RouteDirectionInfo next, int dist, RouteDirectionInfo pronounceNextNext) { + CommandBuilder play = getNewCommandPlayerToPlay(); + if (play != null) { + String tParam = getTurnType(next.getTurnType()); + boolean isPlay = true; + if (tParam != null) { + play.turn(tParam, dist); + } else if (next.getTurnType().isRoundAbout()) { + play.roundAbout(dist, next.getTurnType().getTurnAngle(), next.getTurnType().getExitOut()); + } else if (next.getTurnType().getValue().equals(TurnType.TU) || next.getTurnType().getValue().equals(TurnType.TRU)) { + play.makeUT(dist); + } else { + isPlay = false; + } + // small preparation to next after next + if (pronounceNextNext != null) { + TurnType t = pronounceNextNext.getTurnType(); + isPlay = true; + if (next.getTurnType().getValue().equals(TurnType.C) && + !TurnType.C.equals(t.getValue())) { + play.goAhead(dist); + } + if (TurnType.TL.equals(t.getValue()) || TurnType.TSHL.equals(t.getValue()) || TurnType.TSLL.equals(t.getValue()) + || TurnType.TU.equals(t.getValue()) || TurnType.KL.equals(t.getValue())) { + play.then().bearLeft(); + } else if (TurnType.TR.equals(t.getValue()) || TurnType.TSHR.equals(t.getValue()) || TurnType.TSLR.equals(t.getValue()) + || TurnType.KR.equals(t.getValue())) { + play.then().bearRight(); + } + } + if(isPlay){ + play.play(); + } + } + } + + private void playMakeTurn(RouteDirectionInfo next, RouteDirectionInfo nextNext) { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + String tParam = getTurnType(next.getTurnType()); + boolean isplay = true; + if(tParam != null){ + play.turn(tParam); + } else if(next.getTurnType().isRoundAbout()){ + play.roundAbout(next.getTurnType().getTurnAngle(), next.getTurnType().getExitOut()); + } else if(next.getTurnType().getValue().equals(TurnType.TU) || next.getTurnType().getValue().equals(TurnType.TRU)){ + play.makeUT(); + // do not say it +// } else if(next.getTurnType().getValue().equals(TurnType.C)){ +// play.goAhead(); + } else { + isplay = false; + } + // add turn after next + if (nextNext != null) { + String t2Param = getTurnType(nextNext.getTurnType()); + if (t2Param != null) { + if(isplay) { play.then(); } + play.turn(t2Param, next.distance); + } else if (nextNext.getTurnType().isRoundAbout()) { + if(isplay) { play.then(); } + play.roundAbout(next.distance, nextNext.getTurnType().getTurnAngle(), nextNext.getTurnType().getExitOut()); + } else if (nextNext.getTurnType().getValue().equals(TurnType.TU)) { + if(isplay) { play.then(); } + play.makeUT(next.distance); + } + isplay = true; + } + if(isplay){ + play.play(); + } + } + } + + private String getTurnType(TurnType t){ + if(TurnType.TL.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_LEFT; + } else if(TurnType.TSHL.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_LEFT_SH; + } else if(TurnType.TSLL.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_LEFT_SL; + } else if(TurnType.TR.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_RIGHT; + } else if(TurnType.TSHR.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_RIGHT_SH; + } else if(TurnType.TSLR.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_RIGHT_SL; + } else if(TurnType.KL.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_LEFT_KEEP; + } else if(TurnType.KR.equals(t.getValue())){ + return AbstractPrologCommandPlayer.A_RIGHT_KEEP; + } + return null; + } + + public void gpsLocationLost(){ + CommandBuilder play = getNewCommandPlayerToPlay(); + if (play != null) { + play.gpsLocationLost().play(); + } + } + + public void newRouteIsCalculated(boolean newRoute) { + CommandBuilder play = getNewCommandPlayerToPlay(); + if (play != null) { + if (!newRoute) { + // suppress "route recalculated" prompt for GPX-routing, it makes no sense + // suppress "route recalculated" prompt for 60sec (this workaround now outdated after more intelligent route recalculation and directional voice prompt suppression) + // if (router.getCurrentGPXRoute() == null && (System.currentTimeMillis() - lastTimeRouteRecalcAnnounced > 60000)) { + if (router.getCurrentGPXRoute() == null) { + play.routeRecalculated(router.getLeftDistance()).play(); + currentStatus = STATUS_UNKNOWN; + // lastTimeRouteRecalcAnnounced = System.currentTimeMillis(); + } + } else { + play.newRouteCalculated(router.getLeftDistance()).play(); + currentStatus = STATUS_UNKNOWN; + } + } else if (player == null) { + pendingCommand = new VoiceCommandPending(!newRoute ? VoiceCommandPending.ROUTE_RECALCULATED + : VoiceCommandPending.ROUTE_CALCULATED, this); + currentStatus = STATUS_UNKNOWN; + } + nextRouteDirection = null; + } + + public void arrivedDestinationPoint() { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + play.arrivedAtDestination().play(); + } + } + + public void arrivedIntermediatePoint() { + CommandBuilder play = getNewCommandPlayerToPlay(); + if(play != null){ + play.arrivedAtIntermediatePoint().play(); + } + } + + public void onApplicationTerminate(ClientContext ctx) { + if (player != null) { + player.clear(); + } + } + + /** + * Command to wait until voice player is initialized + */ + private class VoiceCommandPending { + public static final int ROUTE_CALCULATED = 1; + public static final int ROUTE_RECALCULATED = 2; + protected final int type; + private final VoiceRouter voiceRouter; + + public VoiceCommandPending(int type, VoiceRouter voiceRouter){ + this.type = type; + this.voiceRouter = voiceRouter; + } + + public void play(CommandBuilder newCommand) { + int left = voiceRouter.router.getLeftDistance(); + if (left > 0) { + if (type == ROUTE_CALCULATED) { + newCommand.newRouteCalculated(left).play(); + } else if (type == ROUTE_RECALCULATED) { + newCommand.routeRecalculated(left).play(); + } + } + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java b/OsmAnd-java/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java new file mode 100644 index 0000000000..df4abf1109 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java @@ -0,0 +1,214 @@ +package net.osmand.plus.voice; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import net.osmand.IndexConstants; +import net.osmand.PlatformUtil; +import net.osmand.plus.ClientContext; +import net.osmand.plus.OsmandSettings; +import net.osmand.plus.OsmandSettings.MetricsConstants; +import net.osmand.plus.R; +import net.osmand.plus.api.ExternalServiceAPI.AudioFocusHelper; + +import org.apache.commons.logging.Log; + +import alice.tuprolog.InvalidLibraryException; +import alice.tuprolog.InvalidTheoryException; +import alice.tuprolog.NoSolutionException; +import alice.tuprolog.Number; +import alice.tuprolog.Prolog; +import alice.tuprolog.SolveInfo; +import alice.tuprolog.Struct; +import alice.tuprolog.Term; +import alice.tuprolog.Theory; +import alice.tuprolog.Var; + +public abstract class AbstractPrologCommandPlayer implements CommandPlayer { + + private static final Log log = PlatformUtil.getLog(AbstractPrologCommandPlayer.class); + + protected ClientContext ctx; + protected File voiceDir; + protected Prolog prologSystem; + protected static final String P_VERSION = "version"; + protected static final String P_RESOLVE = "resolve"; + public static final String A_LEFT = "left"; + public static final String A_LEFT_SH = "left_sh"; + public static final String A_LEFT_SL = "left_sl"; + public static final String A_LEFT_KEEP = "left_keep"; + public static final String A_RIGHT = "right"; + public static final String A_RIGHT_SH = "right_sh"; + public static final String A_RIGHT_SL = "right_sl"; + public static final String A_RIGHT_KEEP = "right_keep"; + protected static final String DELAY_CONST = "delay_"; + /** Must be sorted array! */ + private final int[] sortedVoiceVersions; + private AudioFocusHelper mAudioFocusHelper; + + protected int streamType; + + protected AbstractPrologCommandPlayer(ClientContext ctx, String voiceProvider, String configFile, int[] sortedVoiceVersions) + throws CommandPlayerException + { + this.ctx = ctx; + this.sortedVoiceVersions = sortedVoiceVersions; + long time = System.currentTimeMillis(); + try { + this.ctx = ctx; + prologSystem = new Prolog(getLibraries()); + } catch (InvalidLibraryException e) { + log.error("Initializing error", e); //$NON-NLS-1$ + throw new RuntimeException(e); + } + if (log.isInfoEnabled()) { + log.info("Initializing prolog system : " + (System.currentTimeMillis() - time)); //$NON-NLS-1$ + } + this.streamType = ctx.getSettings().AUDIO_STREAM_GUIDANCE.get(); + init(voiceProvider, ctx.getSettings(), configFile); + } + + public String[] getLibraries(){ + return new String[] { "alice.tuprolog.lib.BasicLibrary", + "alice.tuprolog.lib.ISOLibrary"}; + } + + private void init(String voiceProvider, OsmandSettings settings, String configFile) throws CommandPlayerException { + prologSystem.clearTheory(); + voiceDir = null; + if (voiceProvider != null) { + File parent = ctx.getAppPath(IndexConstants.VOICE_INDEX_DIR); + voiceDir = new File(parent, voiceProvider); + if (!voiceDir.exists()) { + voiceDir = null; + throw new CommandPlayerException( + ctx.getString(R.string.voice_data_unavailable)); + } + } + + // see comments below why it is impossible to read from zip (don't know + // how to play file from zip) + // voiceZipFile = null; + if (voiceDir != null) { + long time = System.currentTimeMillis(); + boolean wrong = false; + try { + InputStream config; + // if (voiceDir.getName().endsWith(".zip")) { //$NON-NLS-1$ + // voiceZipFile = new ZipFile(voiceDir); + // config = voiceZipFile.getInputStream(voiceZipFile.getEntry("_config.p")); //$NON-NLS-1$ + // } else { + config = new FileInputStream(new File(voiceDir, configFile)); //$NON-NLS-1$ + // } + MetricsConstants mc = settings.METRIC_SYSTEM.get(); + prologSystem.addTheory(new Theory("measure('"+mc.toTTSString()+"').")); + prologSystem.addTheory(new Theory(config)); + } catch (InvalidTheoryException e) { + log.error("Loading voice config exception " + voiceProvider, e); //$NON-NLS-1$ + wrong = true; + } catch (IOException e) { + log.error("Loading voice config exception " + voiceProvider, e); //$NON-NLS-1$ + wrong = true; + } + if (wrong) { + throw new CommandPlayerException(ctx.getString(R.string.voice_data_corrupted)); + } else { + Term val = solveSimplePredicate(P_VERSION); + if (!(val instanceof Number) || Arrays.binarySearch(sortedVoiceVersions,((Number)val).intValue()) < 0) { + throw new CommandPlayerException(ctx.getString(R.string.voice_data_not_supported)); + } + } + if (log.isInfoEnabled()) { + log.info("Initializing voice subsystem " + voiceProvider + " : " + (System.currentTimeMillis() - time)); //$NON-NLS-1$ //$NON-NLS-2$ + } + + } + } + + protected Term solveSimplePredicate(String predicate) { + Term val = null; + Var v = new Var("MyVariable"); //$NON-NLS-1$ + SolveInfo s = prologSystem.solve(new Struct(predicate, v)); + if (s.isSuccess()) { + prologSystem.solveEnd(); + try { + val = s.getVarValue(v.getName()); + } catch (NoSolutionException e) { + } + } + return val; + } + + @Override + public List execute(List listCmd){ + Struct list = new Struct(listCmd.toArray(new Term[listCmd.size()])); + Var result = new Var("RESULT"); //$NON-NLS-1$ + List files = new ArrayList(); + SolveInfo res = prologSystem.solve(new Struct(P_RESOLVE, list, result)); + + if (res.isSuccess()) { + try { + prologSystem.solveEnd(); + Term solution = res.getVarValue(result.getName()); + + Iterator listIterator = ((Struct) solution).listIterator(); + while(listIterator.hasNext()){ + Object term = listIterator.next(); + if(term instanceof Struct){ + files.add(((Struct) term).getName()); + } + } + + } catch (NoSolutionException e) { + } + } + return files; + } + + @Override + public String getCurrentVoice() { + if (voiceDir == null) { + return null; + } + return voiceDir.getName(); + } + + @Override + public CommandBuilder newCommandBuilder() { + return new CommandBuilder(this); + } + + @Override + public void clear() { + ctx = null; + prologSystem = null; + } + + @Override + public void updateAudioStream(int streamType) { + this.streamType = streamType; + } + + protected void requestAudioFocus() { + log.debug("requestAudioFocus"); + mAudioFocusHelper = ctx.getExternalServiceAPI().getAudioFocuseHelper(); + if (mAudioFocusHelper != null) { + mAudioFocusHelper.requestFocus(ctx, streamType); + } + } + + protected void abandonAudioFocus() { + log.debug("abandonAudioFocus"); + if (mAudioFocusHelper != null) { + mAudioFocusHelper.abandonFocus(ctx, streamType); + mAudioFocusHelper = null; + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/plus/voice/CommandBuilder.java b/OsmAnd-java/src/net/osmand/plus/voice/CommandBuilder.java new file mode 100644 index 0000000000..cd5e7c7f58 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/voice/CommandBuilder.java @@ -0,0 +1,202 @@ +package net.osmand.plus.voice; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.osmand.PlatformUtil; + +import org.apache.commons.logging.Log; + +import alice.tuprolog.Struct; +import alice.tuprolog.Term; + +public class CommandBuilder { + + private static final Log log = PlatformUtil.getLog(CommandBuilder.class); + + protected static final String C_PREPARE_TURN = "prepare_turn"; //$NON-NLS-1$ + protected static final String C_PREPARE_ROUNDABOUT = "prepare_roundabout"; //$NON-NLS-1$ + protected static final String C_PREPARE_MAKE_UT = "prepare_make_ut"; //$NON-NLS-1$ + protected static final String C_ROUNDABOUT = "roundabout"; //$NON-NLS-1$ + protected static final String C_GO_AHEAD = "go_ahead"; //$NON-NLS-1$ + protected static final String C_TURN = "turn"; //$NON-NLS-1$ + protected static final String C_MAKE_UT = "make_ut"; //$NON-NLS-1$ + protected static final String C_MAKE_UTWP = "make_ut_wp"; //$NON-NLS-1$ + protected static final String C_PREAMBLE = "preamble"; //$NON-NLS-1$ + protected static final String C_AND_ARRIVE_DESTINATION = "and_arrive_destination"; //$NON-NLS-1$ + protected static final String C_REACHED_DESTINATION = "reached_destination"; //$NON-NLS-1$ + protected static final String C_AND_ARRIVE_INTERMEDIATE = "and_arrive_intermediate"; //$NON-NLS-1$ + protected static final String C_REACHED_INTERMEDIATE = "reached_intermediate"; //$NON-NLS-1$ + protected static final String C_THEN = "then"; //$NON-NLS-1$ + + protected static final String C_BEAR_LEFT = "bear_left"; //$NON-NLS-1$ + protected static final String C_BEAR_RIGHT = "bear_right"; //$NON-NLS-1$ + protected static final String C_ROUTE_RECALC = "route_recalc"; //$NON-NLS-1$ + protected static final String C_ROUTE_NEW_CALC = "route_new_calc"; //$NON-NLS-1$ + protected static final String C_LOCATION_LOST = "location_lost"; //$NON-NLS-1$ + + /** + * + */ + private final CommandPlayer commandPlayer; + private boolean alreadyExecuted = false; + private List listStruct = new ArrayList(); + + public CommandBuilder(CommandPlayer commandPlayer){ + this(commandPlayer, true); + } + + public CommandBuilder(CommandPlayer commandPlayer, boolean preamble) { + this.commandPlayer = commandPlayer; + if (preamble) { + addCommand(C_PREAMBLE); + } + } + + private void checkState(){ + if(alreadyExecuted){ + throw new IllegalArgumentException(); + } + } + + private CommandBuilder addCommand(String name, Object... args){ + checkState(); + Term[] list = new Term[args.length]; + for (int i = 0; i < args.length; i++) { + Object o = args[i]; + if(o instanceof java.lang.Number){ + if(o instanceof java.lang.Double){ + list[i] = new alice.tuprolog.Double((Double) o); + } else if(o instanceof java.lang.Float){ + list[i] = new alice.tuprolog.Float((Float) o); + } else if(o instanceof java.lang.Long){ + list[i] = new alice.tuprolog.Long((Long) o); + } else { + list[i] = new alice.tuprolog.Int(((java.lang.Number)o).intValue()); + } + } else if(o instanceof String){ + list[i] = new Struct((String) o); + } + if(list[i]== null){ + throw new NullPointerException(name +" " + o); //$NON-NLS-1$ + } + } + Struct struct = new Struct(name, list); + if(log.isDebugEnabled()){ + log.debug("Adding command : " + name + " " + Arrays.toString(args)); //$NON-NLS-1$ //$NON-NLS-2$ + } + listStruct.add(struct); + return this; + } + + + public CommandBuilder goAhead(){ + return addCommand(C_GO_AHEAD); + } + + public CommandBuilder goAhead(double dist){ + return addCommand(C_GO_AHEAD, dist); + } + + public CommandBuilder makeUTwp(){ + return addCommand(C_MAKE_UTWP); + } + + public CommandBuilder makeUT(){ + return addCommand(C_MAKE_UT); + } + + public CommandBuilder makeUT(double dist){ + return addCommand(C_MAKE_UT, dist); + } + + public CommandBuilder prepareMakeUT(double dist){ + return addCommand(C_PREPARE_MAKE_UT, dist); + } + + + public CommandBuilder turn(String param){ + return addCommand(C_TURN, param); + } + + public CommandBuilder turn(String param, double dist){ + return addCommand(C_TURN, param, dist); + } + + /** + * + * @param param A_LEFT, A_RIGHT, ... + * @param dist + * @return + */ + public CommandBuilder prepareTurn(String param, double dist){ + return addCommand(C_PREPARE_TURN, param, dist); + } + + public CommandBuilder prepareRoundAbout(double dist){ + return addCommand(C_PREPARE_ROUNDABOUT, dist); + } + + public CommandBuilder roundAbout(double dist, double angle, int exit){ + return addCommand(C_ROUNDABOUT, dist, angle, exit); + } + + public CommandBuilder roundAbout(double angle, int exit){ + return addCommand(C_ROUNDABOUT, angle, exit); + } + + public CommandBuilder andArriveAtDestination(){ + return addCommand(C_AND_ARRIVE_DESTINATION); + } + + public CommandBuilder arrivedAtDestination(){ + return addCommand(C_REACHED_DESTINATION); + } + + public CommandBuilder arrivedAtIntermediatePoint() { + return addCommand(C_REACHED_INTERMEDIATE); + } + + public CommandBuilder andArriveAtIntermediatePoint(){ + return addCommand(C_AND_ARRIVE_INTERMEDIATE); + } + + public CommandBuilder bearLeft(){ + return addCommand(C_BEAR_LEFT); + } + + public CommandBuilder bearRight(){ + return addCommand(C_BEAR_RIGHT); + } + + public CommandBuilder then(){ + return addCommand(C_THEN); + } + + public CommandBuilder gpsLocationLost() { + return addCommand(C_LOCATION_LOST); + } + + public CommandBuilder newRouteCalculated(double dist){ + return addCommand(C_ROUTE_NEW_CALC, dist); + } + + public CommandBuilder routeRecalculated(double dist){ + return addCommand(C_ROUTE_RECALC, dist); + } + + + + public void play(){ + this.commandPlayer.playCommands(this); + } + + protected List execute(){ + alreadyExecuted = true; + return this.commandPlayer.execute(listStruct); + } + + + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/plus/voice/CommandPlayer.java b/OsmAnd-java/src/net/osmand/plus/voice/CommandPlayer.java new file mode 100644 index 0000000000..d4da089a04 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/voice/CommandPlayer.java @@ -0,0 +1,20 @@ +package net.osmand.plus.voice; + +import java.util.List; + +import alice.tuprolog.Struct; + +public interface CommandPlayer { + + public abstract String getCurrentVoice(); + + public abstract CommandBuilder newCommandBuilder(); + + public abstract void playCommands(CommandBuilder builder); + + public abstract void clear(); + + public abstract List execute(List listStruct); + + public abstract void updateAudioStream(int streamType); +} diff --git a/OsmAnd-java/src/net/osmand/plus/voice/CommandPlayerException.java b/OsmAnd-java/src/net/osmand/plus/voice/CommandPlayerException.java new file mode 100644 index 0000000000..d9d14d8787 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/plus/voice/CommandPlayerException.java @@ -0,0 +1,22 @@ +package net.osmand.plus.voice; + + +/** + * Exception on CommandPlayer + * + * @author Pavol Zibrita + */ +public class CommandPlayerException extends Exception { + + private static final long serialVersionUID = 8413902962574061832L; + private final String error; + + public CommandPlayerException(String error) { + this.error = error; + } + + public String getError() { + return error; + } + +} diff --git a/OsmAnd-java/src/net/osmand/render/Depends-template.render.xml b/OsmAnd-java/src/net/osmand/render/Depends-template.render.xml new file mode 100644 index 0000000000..4893864877 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/Depends-template.render.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/render/High-contrast-roads.render.xml b/OsmAnd-java/src/net/osmand/render/High-contrast-roads.render.xml new file mode 100644 index 0000000000..44644c11b4 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/High-contrast-roads.render.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRule.java b/OsmAnd-java/src/net/osmand/render/RenderingRule.java new file mode 100644 index 0000000000..c1d5f171b1 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/RenderingRule.java @@ -0,0 +1,163 @@ +package net.osmand.render; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class RenderingRule { + + private RenderingRuleProperty[] properties; + private int[] intProperties; + private float[] floatProperties; + private List ifElseChildren; + private List ifChildren; + + private final RenderingRulesStorage storage; + + public RenderingRule(Map attributes, RenderingRulesStorage storage){ + this.storage = storage; + process(attributes); + } + + private void process(Map attributes) { + ArrayList props = new ArrayList(attributes.size()); + intProperties = new int[attributes.size()]; + int i = 0; + Iterator> it = attributes.entrySet().iterator(); + while (it.hasNext()) { + Entry e = it.next(); + RenderingRuleProperty property = storage.PROPS.get(e.getKey()); + if (property != null) { + props.add(property); + + if (property.isString()) { + intProperties[i] = storage.getDictionaryValue(e.getValue()); + } else if (property.isFloat()) { + if (floatProperties == null) { + // lazy creates + floatProperties = new float[attributes.size()]; + } + floatProperties[i] = property.parseFloatValue(e.getValue()); + } else { + intProperties[i] = property.parseIntValue(e.getValue()); + } + i++; + } + } + properties = props.toArray(new RenderingRuleProperty[props.size()]); + } + + private int getPropertyIndex(String property){ + for (int i = 0; i < properties.length; i++) { + RenderingRuleProperty prop = properties[i]; + if (prop.getAttrName().equals(property)) { + return i; + } + } + return -1; + } + + public String getStringPropertyValue(String property) { + int i = getPropertyIndex(property); + if(i >= 0){ + return storage.getStringValue(intProperties[i]); + } + + return null; + } + + public float getFloatPropertyValue(String property) { + int i = getPropertyIndex(property); + if(i >= 0){ + return floatProperties[i]; + } + return 0; + } + + public String getColorPropertyValue(String property) { + int i = getPropertyIndex(property); + if(i >= 0){ + return RenderingRuleProperty.colorToString(intProperties[i]); + } + return null; + } + + public int getIntPropertyValue(String property) { + int i = getPropertyIndex(property); + if(i >= 0){ + return intProperties[i]; + } + return -1; + } + + protected int getIntProp(int ind){ + return intProperties[ind]; + } + + protected float getFloatProp(int ind){ + return floatProperties[ind]; + } + + public RenderingRuleProperty[] getProperties() { + return properties; + } + + @SuppressWarnings("unchecked") + public List getIfChildren() { + return ifChildren != null ? ifChildren : Collections.EMPTY_LIST ; + } + + @SuppressWarnings("unchecked") + public List getIfElseChildren() { + return ifElseChildren != null ? ifElseChildren : Collections.EMPTY_LIST ; + } + + public void addIfChildren(RenderingRule rr){ + if(ifChildren == null){ + ifChildren = new ArrayList(); + } + ifChildren.add(rr); + } + + public void addIfElseChildren(RenderingRule rr){ + if(ifElseChildren == null){ + ifElseChildren = new ArrayList(); + } + ifElseChildren.add(rr); + } + + @Override + public String toString() { + StringBuilder bls = new StringBuilder(); + toString("", bls); + return bls.toString(); + } + + public StringBuilder toString(String indent, StringBuilder bls ) { + bls.append("RenderingRule ["); + for(RenderingRuleProperty p : getProperties()){ + bls.append(" " + p.getAttrName() + "= "); + if(p.isString()){ + bls.append("\"" + getStringPropertyValue(p.getAttrName()) + "\""); + } else if(p.isFloat()){ + bls.append(getFloatPropertyValue(p.getAttrName())); + } else if(p.isColor()){ + bls.append(getColorPropertyValue(p.getAttrName())); + } else if(p.isIntParse()){ + bls.append(getIntPropertyValue(p.getAttrName())); + } + } + bls.append("]"); + indent += " "; + for(RenderingRule rc : getIfElseChildren()){ + bls.append("\n"+indent); + rc.toString(indent, bls); + } + + return bls; + } + +} diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRuleProperty.java b/OsmAnd-java/src/net/osmand/render/RenderingRuleProperty.java new file mode 100644 index 0000000000..1fee7ab32a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/RenderingRuleProperty.java @@ -0,0 +1,291 @@ +package net.osmand.render; + + +import net.osmand.PlatformUtil; +import net.osmand.binary.BinaryMapDataObject; + +import org.apache.commons.logging.Log; + + +public class RenderingRuleProperty { + private final static Log log = PlatformUtil.getLog(RenderingRuleProperty.class); + + private final static int INT_TYPE = 1; + private final static int FLOAT_TYPE = 2; + private final static int STRING_TYPE = 3; + private final static int COLOR_TYPE = 4; + private final static int BOOLEAN_TYPE = 5; + + public static final int TRUE_VALUE = 1; + public static final int FALSE_VALUE = 0; + + // Fields C++ + protected final int type; + protected final boolean input; + protected final String attrName; + + protected int id = -1; + + // use for custom rendering rule properties + protected String name; + protected String description; + protected String[] possibleValues; + + private RenderingRuleProperty(String attrName, int type, boolean input){ + this.attrName = attrName; + this.type = type; + this.input = input; + } + + public boolean isInputProperty() { + return input; + } + + public boolean isOutputProperty() { + return !input; + } + + public void setId(int id) { + if (this.id != -1) { + throw new IllegalArgumentException(); + } + this.id = id; + } + + public int getId() { + return id; + } + + public String getAttrName() { + return attrName; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + protected void setName(String name) { + this.name = name; + } + + protected void setDescription(String description) { + this.description = description; + } + + protected void setPossibleValues(String[] possibleValues) { + this.possibleValues = possibleValues; + } + + public String[] getPossibleValues() { + if (isBoolean()) { + return new String[] { "true", "false" }; + } + return possibleValues; + } + + public boolean isBoolean() { + return type == BOOLEAN_TYPE; + } + + public boolean isFloat() { + return type == FLOAT_TYPE; + } + + public boolean isInt() { + return type == INT_TYPE; + } + + public boolean isColor() { + return type == COLOR_TYPE; + } + + public boolean isString() { + return type == STRING_TYPE; + } + + public boolean isIntParse(){ + return type == INT_TYPE || type == STRING_TYPE || type == COLOR_TYPE || type == BOOLEAN_TYPE; + } + + public boolean accept(int ruleValue, int renderingProperty, RenderingRuleSearchRequest req){ + if(!isIntParse() || !input){ + return false; + } + return ruleValue == renderingProperty; + } + + public boolean accept(float ruleValue, float renderingProperty, RenderingRuleSearchRequest req){ + if(type != FLOAT_TYPE || !input){ + return false; + } + return ruleValue == renderingProperty; + } + + @Override + public String toString() { + return "#RenderingRuleProperty " + getAttrName(); + } + + + public int parseIntValue(String value){ + if(type == INT_TYPE){ + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + log.error("Rendering parse " + value); + } + return -1; + } else if(type == BOOLEAN_TYPE){ + return Boolean.parseBoolean(value) ? TRUE_VALUE : FALSE_VALUE; + } else if(type == STRING_TYPE){ + // requires dictionary to parse + return -1; + } else if(type == COLOR_TYPE){ + try { + return parseColor(value); + } catch (RuntimeException e) { + log.error("Rendering parse " + e.getMessage()); + } + return -1; + } else { + return -1; + } + } + + public float parseFloatValue(String value){ + if(type == FLOAT_TYPE){ + try { + return Float.parseFloat(value); + } catch (NumberFormatException e) { + log.error("Rendering parse " + value); + } + return -1; + } else { + return -1; + } + } + + + + public static RenderingRuleProperty createOutputIntProperty(String name){ + return new RenderingRuleProperty(name, INT_TYPE, false); + } + + public static RenderingRuleProperty createOutputBooleanProperty(String name){ + return new RenderingRuleProperty(name, BOOLEAN_TYPE, false); + } + + public static RenderingRuleProperty createInputBooleanProperty(String name){ + return new RenderingRuleProperty(name, BOOLEAN_TYPE, true); + } + + public static RenderingRuleProperty createOutputFloatProperty(String name){ + return new RenderingRuleProperty(name, FLOAT_TYPE, false); + } + + public static RenderingRuleProperty createOutputStringProperty(String name){ + return new RenderingRuleProperty(name, STRING_TYPE, false); + } + + public static RenderingRuleProperty createInputIntProperty(String name){ + return new RenderingRuleProperty(name, INT_TYPE, true); + } + + public static RenderingRuleProperty createInputColorProperty(String name){ + return new RenderingRuleProperty(name, COLOR_TYPE, true); + } + + public static RenderingRuleProperty createOutputColorProperty(String name){ + return new RenderingRuleProperty(name, COLOR_TYPE, false); + } + + public static RenderingRuleProperty createInputStringProperty(String name){ + return new RenderingRuleProperty(name, STRING_TYPE, true); + } + + public static RenderingRuleProperty createInputLessIntProperty(String name){ + return new RenderingRuleProperty(name, INT_TYPE, true) { + @Override + public boolean accept(int ruleValue, int renderingProperty, RenderingRuleSearchRequest req) { + if(!isIntParse() || !input){ + return false; + } + return ruleValue >= renderingProperty; + } + }; + } + + public static RenderingRuleProperty createInputGreaterIntProperty(String name){ + return new RenderingRuleProperty(name, INT_TYPE, true) { + @Override + public boolean accept(int ruleValue, int renderingProperty, RenderingRuleSearchRequest req) { + if(!isIntParse() || !input){ + return false; + } + return ruleValue <= renderingProperty; + } + }; + } + + public static RenderingRuleProperty createAdditionalStringProperty(String name) { + return new RenderingRuleProperty(name, STRING_TYPE, true) { + @Override + public boolean accept(int ruleValue, int renderingProperty, RenderingRuleSearchRequest req) { + BinaryMapDataObject obj = req.getObject(); + if (obj == null) { + return true; + } + String val = req.getStorage().getStringValue(ruleValue); + int i = val.indexOf('='); + if (i != -1) { + String ts = val.substring(0, i); + String vs = val.substring(i + 1); + Integer ruleInd = req.getObject().getMapIndex().getRule(ts, vs); + if (ruleInd != null) { + if (req.getObject().containsAdditionalType(ruleInd)) { + return true; + } + } + } + return false; + } + }; + } + + /** + * Parse the color string, and return the corresponding color-int. + * If the string cannot be parsed, throws an IllegalArgumentException + * exception. Supported formats are: + * #RRGGBB + * #AARRGGBB + * 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', + * 'yellow', 'lightgray', 'darkgray' + */ + public static int parseColor(String colorString) { + if (colorString.charAt(0) == '#') { + // Use a long to avoid rollovers on #ffXXXXXX + long color = Long.parseLong(colorString.substring(1), 16); + if (colorString.length() == 7) { + // Set the alpha value + color |= 0x00000000ff000000; + } else if (colorString.length() != 9) { + throw new IllegalArgumentException("Unknown color " + colorString); //$NON-NLS-1$ + } + return (int)color; + } + throw new IllegalArgumentException("Unknown color " + colorString); //$NON-NLS-1$ + } + + public static String colorToString(int color) { + if ((0xFF000000 & color) == 0xFF000000) { + return "#" + Integer.toHexString(color & 0x00FFFFFF); //$NON-NLS-1$ + } else { + return "#" + Integer.toHexString(color); //$NON-NLS-1$ + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRuleSearchRequest.java b/OsmAnd-java/src/net/osmand/render/RenderingRuleSearchRequest.java new file mode 100644 index 0000000000..4124cb2372 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/RenderingRuleSearchRequest.java @@ -0,0 +1,241 @@ +package net.osmand.render; + +import net.osmand.binary.BinaryMapDataObject; + + +public class RenderingRuleSearchRequest { + + private final RenderingRulesStorage storage; + RenderingRuleProperty[] props; + int[] values; + BinaryMapDataObject object; + float[] fvalues; + + int[] savedValues; + float[] savedFvalues; + + boolean searchResult = false; + + + public final RenderingRuleStorageProperties ALL; + + public RenderingRuleSearchRequest(RenderingRulesStorage storage) { + this.storage = storage; + this.ALL = storage.PROPS; + props = storage.PROPS.getPoperties(); + values = new int[props.length]; + for (int i = 0; i < props.length; i++) { + if (!props[i].isColor()) { + values[i] = -1; + } + } + fvalues = new float[props.length]; + setBooleanFilter(storage.PROPS.R_TEST, true); + saveState(); + } + + public void setStringFilter(RenderingRuleProperty p, String filter) { + assert p.isInputProperty(); + values[p.getId()] = storage.getDictionaryValue(filter); + } + + public void setIntFilter(RenderingRuleProperty p, int filter) { + assert p.isInputProperty(); + values[p.getId()] = filter; + } + + public void setBooleanFilter(RenderingRuleProperty p, boolean filter) { + assert p.isInputProperty(); + values[p.getId()] = filter ? RenderingRuleProperty.TRUE_VALUE : RenderingRuleProperty.FALSE_VALUE; + } + + public void saveState() { + savedValues = new int[values.length]; + savedFvalues = new float[fvalues.length]; + System.arraycopy(values, 0, savedValues, 0, values.length); + System.arraycopy(fvalues, 0, savedFvalues, 0, fvalues.length); + } + + public void clearState() { + System.arraycopy(savedValues, 0, values, 0, values.length); + System.arraycopy(savedFvalues, 0, fvalues, 0, fvalues.length); + object = null; + } + + public void clearValue(RenderingRuleProperty p) { + if(p.isIntParse()){ + values[p.getId()] = savedValues[p.getId()]; + } else { + fvalues[p.getId()] = savedFvalues[p.getId()]; + } + } + + public BinaryMapDataObject getObject() { + return object; + } + + public void setInitialTagValueZoom(String tag, String val, int zoom, BinaryMapDataObject obj){ + clearState(); + object = obj; + setIntFilter(ALL.R_MINZOOM, zoom); + setIntFilter(ALL.R_MAXZOOM, zoom); + setStringFilter(ALL.R_TAG, tag); + setStringFilter(ALL.R_VALUE, val); + } + + public void setTagValueZoomLayer(String tag, String val, int zoom, int layer, BinaryMapDataObject obj){ + object = obj; + setIntFilter(ALL.R_MINZOOM, zoom); + setIntFilter(ALL.R_MAXZOOM, zoom); + setIntFilter(ALL.R_LAYER, layer); + setStringFilter(ALL.R_TAG, tag); + setStringFilter(ALL.R_VALUE, val); + } + + public boolean isFound() { + return searchResult; + } + + public boolean searchRenderingAttribute(String attribute) { + searchResult = false; + RenderingRule rule = storage.getRenderingAttributeRule(attribute); + if(rule == null){ + return false; + } + searchResult = visitRule(rule, true); + return searchResult; + } + + + public boolean search(int state) { + return search(state, true); + } + + public boolean search(int state, boolean loadOutput) { + searchResult = false; + int tagKey = values[storage.PROPS.R_TAG.getId()]; + int valueKey = values[storage.PROPS.R_VALUE.getId()]; + boolean result = searchInternal(state, tagKey, valueKey, loadOutput); + if (result) { + searchResult = true; + return true; + } + result = searchInternal(state, tagKey, 0, loadOutput); + if (result) { + searchResult = true; + return true; + } + result = searchInternal(state, 0, 0, loadOutput); + if (result) { + searchResult = true; + return true; + } + + return false; + } + + + private boolean searchInternal(int state, int tagKey, int valueKey, boolean loadOutput) { + values[storage.PROPS.R_TAG.getId()] = tagKey; + values[storage.PROPS.R_VALUE.getId()] = valueKey; + RenderingRule accept = storage.getRule(state, tagKey, valueKey); + if (accept == null) { + return false; + } + boolean match = visitRule(accept, loadOutput); + return match; + } + + private boolean visitRule(RenderingRule rule, boolean loadOutput) { + RenderingRuleProperty[] properties = rule.getProperties(); + for (int i = 0; i < properties.length; i++) { + RenderingRuleProperty rp = properties[i]; + if (rp.isInputProperty()) { + boolean match; + if (rp.isFloat()) { + match = rp.accept(rule.getFloatProp(i), fvalues[rp.getId()], this); + } else { + match = rp.accept(rule.getIntProp(i), values[rp.getId()], this); + } + if (!match) { + return false; + } + } + } + if (!loadOutput) { + return true; + } + // accept it + for (int i = 0; i < properties.length; i++) { + RenderingRuleProperty rp = properties[i]; + if (rp.isOutputProperty()) { + searchResult = true; + if (rp.isFloat()) { + fvalues[rp.getId()] = rule.getFloatProp(i); + } else { + values[rp.getId()] = rule.getIntProp(i); + } + } + } + + for (RenderingRule rr : rule.getIfElseChildren()) { + boolean match = visitRule(rr, loadOutput); + if (match) { + break; + } + } + + for(RenderingRule rr : rule.getIfChildren()){ + visitRule(rr, loadOutput); + } + return true; + + } + + public boolean isSpecified(RenderingRuleProperty property){ + if(property.isFloat()){ + return fvalues[property.getId()] != 0; + } else { + int val = values[property.getId()]; + if(property.isColor()){ + return val != 0; + } else { + return val != -1; + } + } + } + + public RenderingRuleProperty[] getProperties() { + return props; + } + + public String getStringPropertyValue(RenderingRuleProperty property) { + int val = values[property.getId()]; + if(val < 0){ + return null; + } + return storage.getStringValue(val); + } + + public float getFloatPropertyValue(RenderingRuleProperty property) { + return fvalues[property.getId()]; + } + + public String getColorStringPropertyValue(RenderingRuleProperty property) { + return RenderingRuleProperty.colorToString(values[property.getId()]); + } + + public int getIntPropertyValue(RenderingRuleProperty property) { + return values[property.getId()]; + } + + public int getIntPropertyValue(RenderingRuleProperty property, int defValue) { + int val = values[property.getId()]; + return val == -1 ? defValue : val; + } + + /**/ RenderingRulesStorage getStorage() { + return storage; + } + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java b/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java new file mode 100644 index 0000000000..2a2578e3a6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java @@ -0,0 +1,243 @@ +package net.osmand.render; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class RenderingRuleStorageProperties { + + public static final String A_DEFAULT_COLOR = "defaultColor"; + public static final String A_SHADOW_RENDERING = "shadowRendering"; + public static final String ATTR_INT_VALUE = "attrIntValue"; + public static final String ATTR_BOOL_VALUE = "attrBoolValue"; + public static final String ATTR_COLOR_VALUE = "attrColorValue"; + public static final String ATTR_STRING_VALUE = "attrStringValue"; + public static final String TEST = "test"; + + public static final String TEXT_LENGTH = "textLength"; + public static final String NAME_TAG = "nameTag"; + public static final String TEXT_SHIELD = "textShield"; + public static final String SHADOW_RADIUS = "shadowRadius"; + public static final String SHADOW_COLOR = "shadowColor"; + public static final String SHADER = "shader"; + public static final String CAP_3 = "cap_3"; + public static final String CAP_2 = "cap_2"; + public static final String CAP = "cap"; + public static final String CAP_0 = "cap_0"; + public static final String CAP__1 = "cap__1"; + public static final String PATH_EFFECT_3 = "pathEffect_3"; + public static final String PATH_EFFECT_2 = "pathEffect_2"; + public static final String PATH_EFFECT = "pathEffect"; + public static final String PATH_EFFECT_0 = "pathEffect_0"; + public static final String PATH_EFFECT__1 = "pathEffect__1"; + public static final String STROKE_WIDTH_3 = "strokeWidth_3"; + public static final String STROKE_WIDTH_2 = "strokeWidth_2"; + public static final String STROKE_WIDTH = "strokeWidth"; + public static final String STROKE_WIDTH_0 = "strokeWidth_0"; + public static final String STROKE_WIDTH__1 = "strokeWidth__1"; + public static final String COLOR_3 = "color_3"; + public static final String COLOR = "color"; + public static final String COLOR_2 = "color_2"; + public static final String COLOR_0 = "color_0"; + public static final String COLOR__1 = "color__1"; + public static final String TEXT_BOLD = "textBold"; + public static final String TEXT_ORDER = "textOrder"; + public static final String TEXT_MIN_DISTANCE = "textMinDistance"; + public static final String TEXT_ON_PATH = "textOnPath"; + public static final String ICON = "icon"; + public static final String LAYER = "layer"; + public static final String ORDER = "order"; + public static final String OBJECT_TYPE = "objectType"; + public static final String POINT = "point"; + public static final String AREA = "area"; + public static final String CYCLE = "cycle"; + public static final String TAG = "tag"; + public static final String VALUE = "value"; + public static final String MINZOOM = "minzoom"; + public static final String MAXZOOM = "maxzoom"; + public static final String ADDITIONAL = "additional"; + public static final String NIGHT_MODE = "nightMode"; + public static final String TEXT_DY = "textDy"; + public static final String TEXT_SIZE = "textSize"; + public static final String TEXT_COLOR = "textColor"; + public static final String TEXT_HALO_RADIUS = "textHaloRadius"; + public static final String TEXT_WRAP_WIDTH = "textWrapWidth"; + public static final String SHADOW_LEVEL = "shadowLevel"; + + + public RenderingRuleProperty R_TEST; + public RenderingRuleProperty R_ATTR_INT_VALUE; + public RenderingRuleProperty R_ATTR_BOOL_VALUE; + public RenderingRuleProperty R_ATTR_COLOR_VALUE; + public RenderingRuleProperty R_ATTR_STRING_VALUE; + public RenderingRuleProperty R_TEXT_LENGTH; + public RenderingRuleProperty R_NAME_TAG; + public RenderingRuleProperty R_TEXT_SHIELD; + public RenderingRuleProperty R_SHADOW_RADIUS; + public RenderingRuleProperty R_SHADOW_COLOR; + public RenderingRuleProperty R_SHADER; + public RenderingRuleProperty R_CAP_3; + public RenderingRuleProperty R_CAP_2; + public RenderingRuleProperty R_CAP; + public RenderingRuleProperty R_CAP_0; + public RenderingRuleProperty R_CAP__1; + public RenderingRuleProperty R_PATH_EFFECT_3; + public RenderingRuleProperty R_PATH_EFFECT_2; + public RenderingRuleProperty R_PATH_EFFECT; + public RenderingRuleProperty R_PATH_EFFECT_0; + public RenderingRuleProperty R_PATH_EFFECT__1; + public RenderingRuleProperty R_STROKE_WIDTH_3; + public RenderingRuleProperty R_STROKE_WIDTH_2; + public RenderingRuleProperty R_STROKE_WIDTH; + public RenderingRuleProperty R_STROKE_WIDTH_0; + public RenderingRuleProperty R_STROKE_WIDTH__1; + public RenderingRuleProperty R_COLOR_3; + public RenderingRuleProperty R_COLOR; + public RenderingRuleProperty R_COLOR_2; + public RenderingRuleProperty R_COLOR_0; + public RenderingRuleProperty R_COLOR__1; + public RenderingRuleProperty R_TEXT_BOLD; + public RenderingRuleProperty R_TEXT_ORDER; + public RenderingRuleProperty R_TEXT_MIN_DISTANCE; + public RenderingRuleProperty R_TEXT_ON_PATH; + public RenderingRuleProperty R_ICON; + public RenderingRuleProperty R_LAYER; + public RenderingRuleProperty R_ORDER; + public RenderingRuleProperty R_POINT; + public RenderingRuleProperty R_AREA; + public RenderingRuleProperty R_CYCLE; + public RenderingRuleProperty R_OBJECT_TYPE; + public RenderingRuleProperty R_TAG; + public RenderingRuleProperty R_VALUE; + public RenderingRuleProperty R_MINZOOM; + public RenderingRuleProperty R_ADDITIONAL; + public RenderingRuleProperty R_SHADOW_LEVEL; + public RenderingRuleProperty R_MAXZOOM; + public RenderingRuleProperty R_NIGHT_MODE; + public RenderingRuleProperty R_TEXT_DY; + public RenderingRuleProperty R_TEXT_SIZE; + public RenderingRuleProperty R_TEXT_COLOR; + public RenderingRuleProperty R_TEXT_HALO_RADIUS; + public RenderingRuleProperty R_TEXT_WRAP_WIDTH; + + final Map properties; + // C++ + final List rules ; + final List customRules ; + + public RenderingRuleStorageProperties() { + properties = new LinkedHashMap(); + rules = new ArrayList(); + customRules = new ArrayList(); + createDefaultRenderingRuleProperties(); + } + + public RenderingRuleStorageProperties(RenderingRuleStorageProperties toClone) { + properties = new LinkedHashMap(toClone.properties); + rules = new ArrayList(toClone.rules); + customRules = new ArrayList(toClone.customRules); + createDefaultRenderingRuleProperties(); + } + + public void createDefaultRenderingRuleProperties() { + R_TEST = registerRuleInternal(RenderingRuleProperty.createInputBooleanProperty(TEST)); + R_TAG = registerRuleInternal(RenderingRuleProperty.createInputStringProperty(TAG)); + R_VALUE = registerRuleInternal(RenderingRuleProperty.createInputStringProperty(VALUE)); + R_ADDITIONAL = registerRuleInternal(RenderingRuleProperty.createAdditionalStringProperty(ADDITIONAL)); + R_MINZOOM = registerRuleInternal(RenderingRuleProperty.createInputGreaterIntProperty(MINZOOM)); + R_MAXZOOM = registerRuleInternal(RenderingRuleProperty.createInputLessIntProperty(MAXZOOM)); + R_NIGHT_MODE = registerRuleInternal(RenderingRuleProperty.createInputBooleanProperty(NIGHT_MODE)); + R_LAYER = registerRuleInternal(RenderingRuleProperty.createInputIntProperty(LAYER)); + R_POINT = registerRuleInternal(RenderingRuleProperty.createInputBooleanProperty(POINT)); + R_AREA = registerRuleInternal(RenderingRuleProperty.createInputBooleanProperty(AREA)); + R_CYCLE = registerRuleInternal(RenderingRuleProperty.createInputBooleanProperty(CYCLE)); + + R_TEXT_LENGTH = registerRuleInternal(RenderingRuleProperty.createInputIntProperty(TEXT_LENGTH)); + R_NAME_TAG = registerRuleInternal(RenderingRuleProperty.createInputStringProperty(NAME_TAG)); + + R_ATTR_INT_VALUE = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(ATTR_INT_VALUE)); + R_ATTR_BOOL_VALUE = registerRuleInternal(RenderingRuleProperty.createOutputBooleanProperty(ATTR_BOOL_VALUE)); + R_ATTR_COLOR_VALUE = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(ATTR_COLOR_VALUE)); + R_ATTR_STRING_VALUE = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(ATTR_STRING_VALUE)); + + // order - no sense to make it float + R_ORDER = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(ORDER)); + R_OBJECT_TYPE = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(OBJECT_TYPE)); + R_SHADOW_LEVEL = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(SHADOW_LEVEL)); + + // text properties + R_TEXT_WRAP_WIDTH = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(TEXT_WRAP_WIDTH)); + R_TEXT_DY = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(TEXT_DY)); + R_TEXT_HALO_RADIUS = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(TEXT_HALO_RADIUS)); + R_TEXT_SIZE = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(TEXT_SIZE)); + R_TEXT_ORDER = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(TEXT_ORDER)); + R_TEXT_MIN_DISTANCE = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(TEXT_MIN_DISTANCE)); + R_TEXT_SHIELD = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(TEXT_SHIELD)); + + + R_TEXT_COLOR = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(TEXT_COLOR)); + + R_TEXT_BOLD = registerRuleInternal(RenderingRuleProperty.createOutputBooleanProperty(TEXT_BOLD)); + R_TEXT_ON_PATH = registerRuleInternal(RenderingRuleProperty.createOutputBooleanProperty(TEXT_ON_PATH)); + + // point + R_ICON = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(ICON)); + + // polygon/way + R_COLOR = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(COLOR)); + R_COLOR_2 = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(COLOR_2)); + R_COLOR_3 = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(COLOR_3)); + R_COLOR_0 = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(COLOR_0)); + R_COLOR__1 = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(COLOR__1)); + R_STROKE_WIDTH = registerRuleInternal(RenderingRuleProperty.createOutputFloatProperty(STROKE_WIDTH)); + R_STROKE_WIDTH_2 = registerRuleInternal(RenderingRuleProperty.createOutputFloatProperty(STROKE_WIDTH_2)); + R_STROKE_WIDTH_3 = registerRuleInternal(RenderingRuleProperty.createOutputFloatProperty(STROKE_WIDTH_3)); + R_STROKE_WIDTH_0 = registerRuleInternal(RenderingRuleProperty.createOutputFloatProperty(STROKE_WIDTH_0)); + R_STROKE_WIDTH__1 = registerRuleInternal(RenderingRuleProperty.createOutputFloatProperty(STROKE_WIDTH__1)); + + R_PATH_EFFECT = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(PATH_EFFECT)); + R_PATH_EFFECT_2 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(PATH_EFFECT_2)); + R_PATH_EFFECT_3 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(PATH_EFFECT_3)); + R_PATH_EFFECT_0 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(PATH_EFFECT_0)); + R_PATH_EFFECT__1 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(PATH_EFFECT__1)); + R_CAP = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(CAP)); + R_CAP_2 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(CAP_2)); + R_CAP_3 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(CAP_3)); + R_CAP_0 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(CAP_0)); + R_CAP__1 = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(CAP__1)); + R_SHADER = registerRuleInternal(RenderingRuleProperty.createOutputStringProperty(SHADER)); + + R_SHADOW_COLOR = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(SHADOW_COLOR)); + R_SHADOW_RADIUS = registerRuleInternal(RenderingRuleProperty.createOutputIntProperty(SHADOW_RADIUS)); + } + + public RenderingRuleProperty get(String name) { + return properties.get(name); + } + + public RenderingRuleProperty[] getPoperties() { + return rules.toArray(new RenderingRuleProperty[rules.size()]); + } + + public List getCustomRules() { + return customRules; + } + + private RenderingRuleProperty registerRuleInternal(RenderingRuleProperty p) { + if(get(p.getAttrName()) == null) { + properties.put(p.getAttrName(), p); + p.setId(rules.size()); + rules.add(p); + } + return get(p.getAttrName()); + } + + public RenderingRuleProperty registerRule(RenderingRuleProperty p) { + RenderingRuleProperty ps = registerRuleInternal(p); + if(!customRules.contains(ps)) { + customRules.add(p); + } + return ps; + } +} diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java b/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java new file mode 100644 index 0000000000..1f03751f09 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java @@ -0,0 +1,495 @@ +package net.osmand.render; + +import gnu.trove.map.hash.TIntObjectHashMap; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Stack; + +import net.osmand.PlatformUtil; + +import org.apache.commons.logging.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +public class RenderingRulesStorage { + + private final static Log log = PlatformUtil.getLog(RenderingRulesStorage.class); + + // keep sync ! + // keep sync ! not change values + public final static int MULTY_POLYGON_TYPE = 0; + public final static int POINT_RULES = 1; + public final static int LINE_RULES = 2; + public final static int POLYGON_RULES = 3; + public final static int TEXT_RULES = 4; + public final static int ORDER_RULES = 5; + private final static int LENGTH_RULES = 6; + + private final static int SHIFT_TAG_VAL = 16; + + // C++ + List dictionary = new ArrayList(); + Map dictionaryMap = new LinkedHashMap(); + + public RenderingRuleStorageProperties PROPS = new RenderingRuleStorageProperties(); + + @SuppressWarnings("unchecked") + protected TIntObjectHashMap[] tagValueGlobalRules = new TIntObjectHashMap[LENGTH_RULES]; + + protected Map renderingAttributes = new LinkedHashMap(); + protected Map renderingConstants= new LinkedHashMap(); + + private String renderingName; + private String internalRenderingName; + + + public static interface RenderingRulesStorageResolver { + + RenderingRulesStorage resolve(String name, RenderingRulesStorageResolver ref) throws XmlPullParserException, IOException; + } + + public RenderingRulesStorage(String name, Map renderingConstants){ + getDictionaryValue(""); + this.renderingName = name; + if(renderingConstants != null) { + this.renderingConstants.putAll(renderingConstants); + } + } + + public int getDictionaryValue(String val) { + if(dictionaryMap.containsKey(val)){ + return dictionaryMap.get(val); + } + int nextInd = dictionaryMap.size(); + dictionaryMap.put(val, nextInd); + dictionary.add(val); + return nextInd; + + } + + public String getStringValue(int i){ + return dictionary.get(i); + } + + + public String getName() { + return renderingName; + } + + public String getInternalRenderingName() { + return internalRenderingName; + } + + + public void parseRulesFromXmlInputStream(InputStream is, RenderingRulesStorageResolver resolver) throws XmlPullParserException, + IOException { + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + RenderingRulesHandler handler = new RenderingRulesHandler(parser, resolver); + handler.parse(is); + RenderingRulesStorage depends = handler.getDependsStorage(); + if (depends != null) { + // merge results + // dictionary and props are already merged + Iterator> it = depends.renderingAttributes.entrySet().iterator(); + while (it.hasNext()) { + Entry e = it.next(); + if (renderingAttributes.containsKey(e.getKey())) { + RenderingRule root = renderingAttributes.get(e.getKey()); + List list = e.getValue().getIfElseChildren(); + for (RenderingRule every : list) { + root.addIfElseChildren(every); + } + } else { + renderingAttributes.put(e.getKey(), e.getValue()); + } + } + + for (int i = 0; i < LENGTH_RULES; i++) { + if (depends.tagValueGlobalRules[i] == null || depends.tagValueGlobalRules[i].isEmpty()) { + continue; + } + if (tagValueGlobalRules[i] != null) { + int[] keys = depends.tagValueGlobalRules[i].keys(); + for (int j = 0; j < keys.length; j++) { + RenderingRule rule = tagValueGlobalRules[i].get(keys[j]); + RenderingRule dependsRule = depends.tagValueGlobalRules[i].get(keys[j]); + if (dependsRule != null) { + if (rule != null) { + RenderingRule toInsert = createTagValueRootWrapperRule(keys[j], rule); + toInsert.addIfElseChildren(dependsRule); + tagValueGlobalRules[i].put(keys[j], toInsert); + } else { + tagValueGlobalRules[i].put(keys[j], dependsRule); + } + } + } + } else { + tagValueGlobalRules[i] = depends.tagValueGlobalRules[i]; + } + } + + } + } + + public static String colorToString(int color) { + if ((0xFF000000 & color) == 0xFF000000) { + return "#" + Integer.toHexString(color & 0x00FFFFFF); //$NON-NLS-1$ + } else { + return "#" + Integer.toHexString(color); //$NON-NLS-1$ + } + } + + private void registerGlobalRule(RenderingRule rr, int state, Map attrsMap) throws XmlPullParserException { + int tag = rr.getIntPropertyValue(RenderingRuleStorageProperties.TAG); + if(tag == -1){ + throw new XmlPullParserException("Attribute tag should be specified for root filter " + attrsMap.toString()); + } + int value = rr.getIntPropertyValue(RenderingRuleStorageProperties.VALUE); + if(value == -1){ + throw new XmlPullParserException("Attribute tag should be specified for root filter " + attrsMap.toString()); + } + int key = (tag << SHIFT_TAG_VAL) + value; + RenderingRule toInsert = rr; + RenderingRule previous = tagValueGlobalRules[state].get(key); + if(previous != null){ + // all root rules should have at least tag/value + toInsert = createTagValueRootWrapperRule(key, previous); + toInsert.addIfElseChildren(rr); + } + tagValueGlobalRules[state].put(key, toInsert); + } + + + private RenderingRule createTagValueRootWrapperRule(int tagValueKey, RenderingRule previous) { + if (previous.getProperties().length > 2) { + Map m = new HashMap(); + m.put("tag", getTagString(tagValueKey)); + m.put("value", getValueString(tagValueKey)); + RenderingRule toInsert = new RenderingRule(m, RenderingRulesStorage.this); + toInsert.addIfElseChildren(previous); + return toInsert; + } else { + return previous; + } + } + + private class GroupRules { + Map groupAttributes = new LinkedHashMap(); + List children = new ArrayList(); + List childrenGroups = new ArrayList(); + + private void addGroupFilter(RenderingRule rr) { + for (RenderingRule ch : children) { + ch.addIfChildren(rr); + } + for(GroupRules gch : childrenGroups){ + gch.addGroupFilter(rr); + } + } + + public void registerGlobalRules(int state) throws XmlPullParserException { + for (RenderingRule ch : children) { + registerGlobalRule(ch, state, groupAttributes); + } + for(GroupRules gch : childrenGroups){ + gch.registerGlobalRules(state); + } + + } + } + + private class RenderingRulesHandler { + private final XmlPullParser parser; + private int state; + + Stack stack = new Stack(); + + Map attrsMap = new LinkedHashMap(); + private final RenderingRulesStorageResolver resolver; + private RenderingRulesStorage dependsStorage; + + + + public RenderingRulesHandler(XmlPullParser parser, RenderingRulesStorageResolver resolver){ + this.parser = parser; + this.resolver = resolver; + } + + public void parse(InputStream is) throws XmlPullParserException, IOException { + parser.setInput(is, "UTF-8"); + int tok; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + startElement(parser.getName()); + } else if (tok == XmlPullParser.END_TAG) { + endElement(parser.getName()); + } + } + + } + + public RenderingRulesStorage getDependsStorage() { + return dependsStorage; + } + + public void startElement(String name) throws XmlPullParserException, IOException { + boolean stateChanged = false; + if("filter".equals(name)){ //$NON-NLS-1$ + attrsMap.clear(); + if (stack.size() > 0 && stack.peek() instanceof GroupRules) { + GroupRules parent = ((GroupRules) stack.peek()); + attrsMap.putAll(parent.groupAttributes); + } + parseAttributes(attrsMap); + RenderingRule renderingRule = new RenderingRule(attrsMap, RenderingRulesStorage.this); + + if (stack.size() > 0 && stack.peek() instanceof GroupRules) { + GroupRules parent = ((GroupRules) stack.peek()); + parent.children.add(renderingRule); + } else if (stack.size() > 0 && stack.peek() instanceof RenderingRule) { + RenderingRule parent = ((RenderingRule) stack.peek()); + parent.addIfElseChildren(renderingRule); + } else { + registerGlobalRule(renderingRule, state, attrsMap); + } + stack.push(renderingRule); + } else if("groupFilter".equals(name)){ //$NON-NLS-1$ + attrsMap.clear(); + parseAttributes(attrsMap); + RenderingRule renderingRule = new RenderingRule(attrsMap, RenderingRulesStorage.this); + if (stack.size() > 0 && stack.peek() instanceof GroupRules) { + GroupRules parent = ((GroupRules) stack.peek()); + parent.addGroupFilter(renderingRule); + } else if (stack.size() > 0 && stack.peek() instanceof RenderingRule) { + ((RenderingRule) stack.peek()).addIfChildren(renderingRule); + } else { + throw new XmlPullParserException("Group filter without parent"); + } + stack.push(renderingRule); + } else if("group".equals(name)){ //$NON-NLS-1$ + GroupRules groupRules = new GroupRules(); + if (stack.size() > 0 && stack.peek() instanceof GroupRules) { + GroupRules parent = ((GroupRules) stack.peek()); + groupRules.groupAttributes.putAll(parent.groupAttributes); + parent.childrenGroups.add(groupRules); + } + parseAttributes(groupRules.groupAttributes); + stack.push(groupRules); + } else if("order".equals(name)){ //$NON-NLS-1$ + state = ORDER_RULES; + stateChanged = true; + } else if("text".equals(name)){ //$NON-NLS-1$ + state = TEXT_RULES; + stateChanged = true; + } else if("point".equals(name)){ //$NON-NLS-1$ + state = POINT_RULES; + stateChanged = true; + } else if("line".equals(name)){ //$NON-NLS-1$ + state = LINE_RULES; + stateChanged = true; + } else if("polygon".equals(name)){ //$NON-NLS-1$ + state = POLYGON_RULES; + stateChanged = true; + } else if("renderingAttribute".equals(name)){ //$NON-NLS-1$ + String attr = parser.getAttributeValue("", "name"); + @SuppressWarnings("unchecked") + RenderingRule root = new RenderingRule(new HashMap( ), RenderingRulesStorage.this); + renderingAttributes.put(attr, root); + stack.push(root); + } else if("renderingProperty".equals(name)){ //$NON-NLS-1$ + String attr = parser.getAttributeValue("", "attr"); + RenderingRuleProperty prop; + String type = parser.getAttributeValue("", "type"); + if("boolean".equalsIgnoreCase(type)){ + prop = RenderingRuleProperty.createInputBooleanProperty(attr); + } else if("string".equalsIgnoreCase(type)){ + prop = RenderingRuleProperty.createInputStringProperty(attr); + } else { + prop = RenderingRuleProperty.createInputIntProperty(attr); + } + prop.setDescription(parser.getAttributeValue("", "description")); + prop.setName(parser.getAttributeValue("", "name")); + if(parser.getAttributeValue("", "possibleValues") != null){ + prop.setPossibleValues(parser.getAttributeValue("", "possibleValues").split(",")); + } + PROPS.registerRule(prop); + } else if("renderingConstant".equals(name)){ //$NON-NLS-1$ + if(!renderingConstants.containsKey(parser.getAttributeValue("", "name"))){ + renderingConstants.put(parser.getAttributeValue("", "name"), parser.getAttributeValue("", "value")); + } + } else if("renderingStyle".equals(name)){ //$NON-NLS-1$ + String depends = parser.getAttributeValue("", "depends"); + if(depends != null && depends.length()> 0){ + this.dependsStorage = resolver.resolve(depends, resolver); + } + if(dependsStorage != null){ + // copy dictionary + dictionary = new ArrayList(dependsStorage.dictionary); + dictionaryMap = new LinkedHashMap(dependsStorage.dictionaryMap); + PROPS = new RenderingRuleStorageProperties(dependsStorage.PROPS); + + } + internalRenderingName = parser.getAttributeValue("", "name"); + + } else if("renderer".equals(name)){ //$NON-NLS-1$ + throw new XmlPullParserException("Rendering style is deprecated and no longer supported."); + } else { + log.warn("Unknown tag : " + name); //$NON-NLS-1$ + } + + if(stateChanged){ + tagValueGlobalRules[state] = new TIntObjectHashMap(); + } + + } + + private Map parseAttributes(Map m) { + for(int i=0; i< parser.getAttributeCount(); i++) { + String name = parser.getAttributeName(i); + String vl = parser.getAttributeValue(i); + if(vl != null && vl.startsWith("$")) { + String cv = vl.substring(1); + if(!renderingConstants.containsKey(cv)){ + throw new IllegalStateException("Rendering constant '" + cv + "' was not specified."); + } + vl = renderingConstants.get(cv); + } + m.put(name, vl); + } + return m; + } + + + public void endElement(String name) throws XmlPullParserException { + if ("filter".equals(name)) { //$NON-NLS-1$ + stack.pop(); + } else if("group".equals(name)){ //$NON-NLS-1$ + GroupRules group = (GroupRules) stack.pop(); + if (stack.size() == 0) { + group.registerGlobalRules(state); + } + } else if("groupFilter".equals(name)){ //$NON-NLS-1$ + stack.pop(); + } else if("renderingAttribute".equals(name)){ //$NON-NLS-1$ + stack.pop(); + } + } + + } + + public int getTagValueKey(String tag, String value){ + int itag = getDictionaryValue(tag); + int ivalue = getDictionaryValue(value); + return (itag << SHIFT_TAG_VAL) | ivalue; + } + + public String getValueString(int tagValueKey){ + return getStringValue(tagValueKey & ((1 << SHIFT_TAG_VAL) - 1)); + } + + public String getTagString(int tagValueKey){ + return getStringValue(tagValueKey >> SHIFT_TAG_VAL); + } + + protected RenderingRule getRule(int state, int itag, int ivalue){ + if(tagValueGlobalRules[state] != null){ + return tagValueGlobalRules[state].get((itag << SHIFT_TAG_VAL) | ivalue); + } + return null; + } + + protected RenderingRule getRenderingAttributeRule(String attribute){ + return renderingAttributes.get(attribute); + } + + public String[] getRenderingAttributeNames() { + return renderingAttributes.keySet().toArray(new String[renderingAttributes.size()]); + } + public RenderingRule[] getRenderingAttributeValues() { + return renderingAttributes.values().toArray(new RenderingRule[renderingAttributes.size()]); + } + + public RenderingRule[] getRules(int state){ + if(state >= tagValueGlobalRules.length || tagValueGlobalRules[state] == null) { + return new RenderingRule[0]; + } + return tagValueGlobalRules[state].values(new RenderingRule[tagValueGlobalRules[state].size()]); + } + + + public void printDebug(int state, PrintStream out){ + for(int key : tagValueGlobalRules[state].keys()) { + RenderingRule rr = tagValueGlobalRules[state].get(key); + out.print("\n\n"+getTagString(key) + " : " + getValueString(key)); + printRenderingRule("", rr, out); + } + } + + private static void printRenderingRule(String indent, RenderingRule rr, PrintStream out){ + out.print(rr.toString(indent, new StringBuilder()).toString()); + } + + + public static void main(String[] args) throws XmlPullParserException, IOException { + RenderingRulesStorage storage = new RenderingRulesStorage("test", null); + final RenderingRulesStorageResolver resolver = new RenderingRulesStorageResolver() { + @Override + public RenderingRulesStorage resolve(String name, RenderingRulesStorageResolver ref) throws XmlPullParserException, IOException { + RenderingRulesStorage depends = new RenderingRulesStorage("test", null); + depends.parseRulesFromXmlInputStream(RenderingRulesStorage.class.getResourceAsStream(name + ".render.xml"), ref); + return depends; + } + }; + storage.parseRulesFromXmlInputStream(RenderingRulesStorage.class.getResourceAsStream("winter+ski.render.xml"), resolver); +// storage.printDebug(TEXT_RULES, System.out); +// long tm = System.nanoTime(); +// int count = 100000; +// for (int i = 0; i < count; i++) { + RenderingRuleSearchRequest searchRequest = new RenderingRuleSearchRequest(storage); + searchRequest.setStringFilter(storage.PROPS.R_TAG, "landuse"); + searchRequest.setStringFilter(storage.PROPS.R_VALUE, "wood"); + searchRequest.setIntFilter(storage.PROPS.R_LAYER, 1); + searchRequest.setIntFilter(storage.PROPS.R_MINZOOM, 15); + searchRequest.setIntFilter(storage.PROPS.R_MAXZOOM, 15); + // searchRequest.setBooleanFilter(storage.PROPS.R_NIGHT_MODE, true); + // searchRequest.setBooleanFilter(storage.PROPS.get("hmRendered"), true); + + boolean res = searchRequest.search(POLYGON_RULES); + System.out.println("Result " + res); + printResult(searchRequest, System.out); +// } +// System.out.println((System.nanoTime()- tm)/ (1e6f * count) ); + } + + private static void printResult(RenderingRuleSearchRequest searchRequest, PrintStream out) { + if(searchRequest.isFound()){ + out.print(" Found : "); + for (RenderingRuleProperty rp : searchRequest.getProperties()) { + if(rp.isOutputProperty() && searchRequest.isSpecified(rp)){ + out.print(" " + rp.getAttrName() + "= "); + if(rp.isString()){ + out.print("\"" + searchRequest.getStringPropertyValue(rp) + "\""); + } else if(rp.isFloat()){ + out.print(searchRequest.getFloatPropertyValue(rp)); + } else if(rp.isColor()){ + out.print(searchRequest.getColorStringPropertyValue(rp)); + } else if(rp.isIntParse()){ + out.print(searchRequest.getIntPropertyValue(rp)); + } + } + } + } else { + out.println("Not found"); + } + + } +} diff --git a/OsmAnd-java/src/net/osmand/render/Touring-view_(more-contrast-and-details).render.xml b/OsmAnd-java/src/net/osmand/render/Touring-view_(more-contrast-and-details).render.xml new file mode 100644 index 0000000000..75013674fc --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/Touring-view_(more-contrast-and-details).render.xml @@ -0,0 +1,576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd-java/src/net/osmand/render/Winter-and-ski.render.xml b/OsmAnd-java/src/net/osmand/render/Winter-and-ski.render.xml new file mode 100644 index 0000000000..876fcc3d63 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/Winter-and-ski.render.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/render/default.render.xml b/OsmAnd-java/src/net/osmand/render/default.render.xml new file mode 100644 index 0000000000..a351c26ba7 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/render/default.render.xml @@ -0,0 +1,1583 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/router/BaseRouteResult.java b/OsmAnd-java/src/net/osmand/router/BaseRouteResult.java new file mode 100644 index 0000000000..efcf6cfbe6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/BaseRouteResult.java @@ -0,0 +1,35 @@ +package net.osmand.router; + +import java.util.List; + +import net.osmand.data.DataTileManager; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; + +public class BaseRouteResult { + + private final List baseResult; + private DataTileManager indexedData = new DataTileManager(15); + + public BaseRouteResult(List baseResult) { + this.baseResult = baseResult; + indexData(); + } + + + private void indexData() { + for(RouteSegmentResult r : baseResult){ +// r.getObject().getPoint31XTile(i); + +// indexedData.evaluateTile(latitude, longitude) + } + + } + + + public float getOrthogonalDistance(RouteSegment r){ + float dist = 0; + int x = r.getRoad().getPoint31XTile(r.getSegmentStart()); + int y = r.getRoad().getPoint31YTile(r.getSegmentStart()); + return dist; + } +} diff --git a/OsmAnd-java/src/net/osmand/router/BinaryRoutePlanner.java b/OsmAnd-java/src/net/osmand/router/BinaryRoutePlanner.java new file mode 100644 index 0000000000..4a79d36da9 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/BinaryRoutePlanner.java @@ -0,0 +1,854 @@ +package net.osmand.router; + +import gnu.trove.map.hash.TLongObjectHashMap; + +import java.io.IOException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.PriorityQueue; + +import net.osmand.PlatformUtil; +import net.osmand.binary.RouteDataBorderLinePoint; +import net.osmand.binary.RouteDataObject; +import net.osmand.osm.MapRenderingTypes; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + +public class BinaryRoutePlanner { + + private final int REVERSE_WAY_RESTRICTION_ONLY = 1024; + /*private*/ final int STANDARD_ROAD_IN_QUEUE_OVERHEAD = 220; + /*private */final int STANDARD_ROAD_VISITED_OVERHEAD = 150; + + protected static final Log log = PlatformUtil.getLog(BinaryRoutePlanner.class); + + private static final int ROUTE_POINTS = 11; + private static final boolean TRACE_ROUTING = false; + + + public static double squareRootDist(int x1, int y1, int x2, int y2) { + // translate into meters + double dy = MapUtils.convert31YToMeters(y1, y2); + double dx = MapUtils.convert31XToMeters(x1, x2); + return Math.sqrt(dx * dx + dy * dy); +// return measuredDist(x1, y1, x2, y2); + } + + + private static class SegmentsComparator implements Comparator { + final RoutingContext ctx; + public SegmentsComparator(RoutingContext ctx) { + this.ctx = ctx; + } + @Override + public int compare(RouteSegment o1, RouteSegment o2) { + return ctx.roadPriorityComparator(o1.distanceFromStart, o1.distanceToEnd, o2.distanceFromStart, o2.distanceToEnd); + } + } + + private static class NonHeuristicSegmentsComparator implements Comparator { + public NonHeuristicSegmentsComparator() { + } + @Override + public int compare(RouteSegment o1, RouteSegment o2) { + return roadPriorityComparator(o1.distanceFromStart, o1.distanceToEnd, o2.distanceFromStart, o2.distanceToEnd, 0.5); + } + } + /** + * Calculate route between start.segmentEnd and end.segmentStart (using A* algorithm) + * return list of segments + */ + @SuppressWarnings("unused") + FinalRouteSegment searchRouteInternal(final RoutingContext ctx, RouteSegment start, RouteSegment end) throws InterruptedException, IOException { + // measure time + ctx.timeToLoad = 0; + ctx.visitedSegments = 0; + ctx.memoryOverhead = 1000; + ctx.timeToCalculate = System.nanoTime(); + if(ctx.config.initialDirection != null) { + // mark here as positive for further check + ctx.firstRoadId = calculateRoutePointId(start.getRoad(), start.getSegmentStart(), true); + double plusDir = start.getRoad().directionRoute(start.getSegmentStart(), true); + double diff = plusDir - ctx.config.initialDirection; + if(Math.abs(MapUtils.alignAngleDifference(diff)) <= Math.PI / 3) { + ctx.firstRoadDirection = 1; + } else if(Math.abs(MapUtils.alignAngleDifference(diff - Math.PI)) <= Math.PI / 3) { + ctx.firstRoadDirection = -1; + } + + } + + // Initializing priority queue to visit way segments + Comparator nonHeuristicSegmentsComparator = new NonHeuristicSegmentsComparator(); + PriorityQueue graphDirectSegments = new PriorityQueue(50, new SegmentsComparator(ctx)); + PriorityQueue graphReverseSegments = new PriorityQueue(50, new SegmentsComparator(ctx)); + + // Set to not visit one segment twice (stores road.id << X + segmentStart) + TLongObjectHashMap visitedDirectSegments = new TLongObjectHashMap(); + TLongObjectHashMap visitedOppositeSegments = new TLongObjectHashMap(); + + RouteSegment recalcEndSegment = smartRecalculationEnabled(ctx, visitedOppositeSegments); + boolean runRecalculation = false; + if(recalcEndSegment != null) { + runRecalculation = true; + end = recalcEndSegment; + } + + // for start : f(start) = g(start) + h(start) = 0 + h(start) = h(start) + float estimatedDistance = (float) estimatedDistance(ctx, ctx.targetX, ctx.targetY, ctx.startX, ctx.startY); + end.distanceToEnd = start.distanceToEnd = estimatedDistance; + + graphDirectSegments.add(start); + graphReverseSegments.add(end); + + // Extract & analyze segment with min(f(x)) from queue while final segment is not found + boolean inverse = false; + boolean init = false; + + PriorityQueue graphSegments; + if(inverse) { + graphSegments = graphReverseSegments; + } else { + graphSegments = graphDirectSegments; + } + ctx.loadBorderPoints(); + + FinalRouteSegment finalSegment = null; + while (!graphSegments.isEmpty()) { + RouteSegment segment = graphSegments.poll(); + // use accumulative approach + ctx.memoryOverhead = (visitedDirectSegments.size() + visitedOppositeSegments.size()) * STANDARD_ROAD_VISITED_OVERHEAD + + (graphDirectSegments.size() + + graphReverseSegments.size()) * STANDARD_ROAD_IN_QUEUE_OVERHEAD; + + if(TRACE_ROUTING){ + printRoad(">", segment); + } + if(segment instanceof FinalRouteSegment) { + if(RoutingContext.SHOW_GC_SIZE){ + log.warn("Estimated overhead " + (ctx.memoryOverhead / (1<<20))+ " mb"); + printMemoryConsumption("Memory occupied after calculation : "); + } + finalSegment = (FinalRouteSegment) segment; + break; + } + if (ctx.memoryOverhead > ctx.config.memoryLimitation * 0.95 && RoutingContext.SHOW_GC_SIZE) { + printMemoryConsumption("Memory occupied before exception : "); + } + if(ctx.memoryOverhead > ctx.config.memoryLimitation * 0.95) { + throw new IllegalStateException("There is no enough memory " + ctx.config.memoryLimitation/(1<<20) + " Mb"); + } + ctx.visitedSegments++; + if (!inverse) { + processRouteSegment(ctx, false, graphDirectSegments, visitedDirectSegments, + segment, visitedOppositeSegments, true); + processRouteSegment(ctx, false, graphDirectSegments, visitedDirectSegments, + segment, visitedOppositeSegments, false); + } else { + processRouteSegment(ctx, true, graphReverseSegments, visitedOppositeSegments, segment, + visitedDirectSegments, true); + processRouteSegment(ctx, true, graphReverseSegments, visitedOppositeSegments,segment, + visitedDirectSegments, false); + } + updateCalculationProgress(ctx, graphDirectSegments, graphReverseSegments); + if(graphReverseSegments.isEmpty()){ + throw new IllegalArgumentException("Route is not found to selected target point."); + } + if(graphDirectSegments.isEmpty()){ + throw new IllegalArgumentException("Route is not found from selected start point."); + } + if(runRecalculation) { + // nothing to do + inverse = false; + } else if (!init) { + inverse = !inverse; + init = true; + } else if (ctx.planRouteIn2Directions()) { + inverse = nonHeuristicSegmentsComparator.compare(graphDirectSegments.peek(), graphReverseSegments.peek()) > 0; + if (graphDirectSegments.size() * 1.3 > graphReverseSegments.size()) { + inverse = true; + } else if (graphDirectSegments.size() < 1.3 * graphReverseSegments.size()) { + inverse = false; + } + } else { + // different strategy : use onedirectional graph + inverse = ctx.getPlanRoadDirection() < 0; + } + if (inverse) { + graphSegments = graphReverseSegments; + } else { + graphSegments = graphDirectSegments; + } + + // check if interrupted + if(ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) { + throw new InterruptedException("Route calculation interrupted"); + } + } + printDebugMemoryInformation(ctx, graphDirectSegments, graphReverseSegments, visitedDirectSegments, visitedOppositeSegments); + return finalSegment; + } + + + private void printMemoryConsumption( String string) { + long h1 = RoutingContext.runGCUsedMemory(); + float mb = (1 << 20); + log.warn(string + h1 / mb); + } + + + private void updateCalculationProgress(final RoutingContext ctx, PriorityQueue graphDirectSegments, + PriorityQueue graphReverseSegments) { + if(ctx.calculationProgress != null) { + ctx.calculationProgress.reverseSegmentQueueSize = graphReverseSegments.size(); + ctx.calculationProgress.directSegmentQueueSize = graphDirectSegments.size(); + if(graphDirectSegments.size() > 0) { + ctx.calculationProgress.distanceFromBegin = + Math.max(graphDirectSegments.peek().distanceFromStart, ctx.calculationProgress.distanceFromBegin); + } + if(graphDirectSegments.size() > 0) { + ctx.calculationProgress.distanceFromEnd = + Math.max(graphReverseSegments.peek().distanceFromStart, ctx.calculationProgress.distanceFromBegin); + } + } + } + + + private RouteSegment smartRecalculationEnabled(final RoutingContext ctx, TLongObjectHashMap visitedOppositeSegments) { + boolean runRecalculation = ctx.previouslyCalculatedRoute != null && ctx.previouslyCalculatedRoute.size() > 0 + && ctx.config.recalculateDistance != 0; + if (runRecalculation) { + RouteSegment previous = null; + List rlist = new ArrayList(); + float distanceThreshold = ctx.config.recalculateDistance; + float threshold = 0; + for(RouteSegmentResult rr : ctx.previouslyCalculatedRoute) { + threshold += rr.getDistance(); + if(threshold > distanceThreshold) { + rlist.add(rr); + } + } + runRecalculation = rlist.size() > 0; + if (rlist.size() > 0) { + for (RouteSegmentResult rr : rlist) { + RouteSegment segment = new RouteSegment(rr.getObject(), rr.getEndPointIndex()); + if (previous != null) { + previous.setParentRoute(segment); + previous.setParentSegmentEnd(rr.getStartPointIndex()); + boolean positive = rr.getStartPointIndex() < rr.getEndPointIndex(); + long t = calculateRoutePointId(rr.getObject(), positive ? rr.getEndPointIndex() - 1 : rr.getEndPointIndex(), + positive); + visitedOppositeSegments.put(t, segment); + } + previous = segment; + } + return previous; + } + } + return null; + } + + + + private void printRoad(String prefix, RouteSegment segment) { + String pr; + if(segment.parentRoute != null){ + pr = " pend="+segment.parentSegmentEnd +" parent=" + segment.parentRoute.road; + } else { + pr = ""; + } + println(prefix +"" + segment.road + " ind=" + segment.getSegmentStart() + + " ds=" + ((float)segment.distanceFromStart) + " es="+((float)segment.distanceToEnd) + pr); + } + + private float estimatedDistance(final RoutingContext ctx, int targetEndX, int targetEndY, + int startX, int startY) { + double distance = squareRootDist(startX, startY, targetEndX, targetEndY); + return (float) (distance / ctx.getRouter().getMaxDefaultSpeed()); + } + + protected static float h(RoutingContext ctx, int begX, int begY, int endX, int endY, + RouteSegment next) { + double distToFinalPoint = squareRootDist(begX, begY, endX, endY); + if (RoutingContext.USE_BORDER_LINES) { + int begBorder = ctx.searchBorderLineIndex(begY); + int endBorder = ctx.searchBorderLineIndex(endY); + if (begBorder != endBorder) { + double res = 0; + boolean plus = begBorder < endBorder; + boolean beginEqStart = begX == ctx.startX && begY == ctx.startY; + boolean beginEqTarget = begX == ctx.targetX && begY == ctx.targetY; + boolean endEqStart = endX == ctx.startX && endY == ctx.startY; + boolean endEqTarget = endX == ctx.targetX && endY == ctx.targetY; + if(endEqStart || endEqTarget) { + // we start from intermediate point and end in target or start + if (begX > ctx.leftBorderBoundary && begX < ctx.rightBorderBoundary) { + List pnts = ctx.borderLines[plus ? begBorder : begBorder - 1].borderPoints; + for (RouteDataBorderLinePoint p : pnts) { + double f = (endEqTarget ? p.distanceToEndPoint : p.distanceToStartPoint) + squareRootDist(p.x, p.y, begX, begY); + if (res > f || res <= 0) { + res = f; + } + } + } + } else if(beginEqStart || beginEqTarget) { + if (endX > ctx.leftBorderBoundary && endX < ctx.rightBorderBoundary) { + List pnts = ctx.borderLines[plus ? endBorder - 1 : endBorder].borderPoints; + for (RouteDataBorderLinePoint p : pnts) { + double f = (beginEqTarget ? p.distanceToEndPoint : p.distanceToStartPoint) + + squareRootDist(p.x, p.y, endX, endY); + if (res > f || res <= 0) { + res = f; + } + } + } + } else { + throw new IllegalStateException(); + } + if(res > 0) { + if(res < distToFinalPoint - 0.01) { + throw new IllegalStateException("Estimated distance " + res + " > " + distToFinalPoint); + } +// if(endEqStart && res - distToFinalPoint > 13000) { +// System.out.println(" Res="+res + " dist=" +distToFinalPoint); +// } + distToFinalPoint = res; + + } else { + // FIXME put penalty +// distToFinalPoint = distToFinalPoint; + } + } + } + + double result = distToFinalPoint / ctx.getRouter().getMaxDefaultSpeed(); + return (float) result; + } + + + + private static void println(String logMsg) { +// log.info(logMsg); + System.out.println(logMsg); + } + + private static void printInfo(String logMsg) { + log.warn(logMsg); + } + + public void printDebugMemoryInformation(RoutingContext ctx, PriorityQueue graphDirectSegments, PriorityQueue graphReverseSegments, + TLongObjectHashMap visitedDirectSegments,TLongObjectHashMap visitedOppositeSegments) { + printInfo("Time to calculate : " + (System.nanoTime() - ctx.timeToCalculate) / 1e6 + ", time to load : " + ctx.timeToLoad / 1e6 + ", time to load headers : " + ctx.timeToLoadHeaders / 1e6); + int maxLoadedTiles = Math.max(ctx.maxLoadedTiles, ctx.getCurrentlyLoadedTiles()); + printInfo("Current loaded tiles : " + ctx.getCurrentlyLoadedTiles() + ", maximum loaded tiles " + maxLoadedTiles); + printInfo("Loaded tiles " + ctx.loadedTiles + " (distinct "+ctx.distinctLoadedTiles+ "), unloaded tiles " + ctx.unloadedTiles + + ", loaded more than once same tiles " + + ctx.loadedPrevUnloadedTiles ); + printInfo("Visited roads " + ctx.visitedSegments + ", relaxed roads " + ctx.relaxedSegments); + if (graphDirectSegments != null && graphReverseSegments != null) { + printInfo("Priority queues sizes : " + graphDirectSegments.size() + "/" + graphReverseSegments.size()); + } + if (visitedDirectSegments != null && visitedOppositeSegments != null) { + printInfo("Visited interval sizes: " + visitedDirectSegments.size() + "/" + visitedOppositeSegments.size()); + } + + for(int k=0; k> 17) + " points " + ctx.borderLines[k].borderPoints.size()); + } + + } + + + private void processRouteSegment(final RoutingContext ctx, boolean reverseWaySearch, + PriorityQueue graphSegments, TLongObjectHashMap visitedSegments, + RouteSegment segment, TLongObjectHashMap oppositeSegments, boolean direction) throws IOException { + final RouteDataObject road = segment.road; + boolean initDirectionAllowed = checkIfInitialMovementAllowedOnSegment(ctx, reverseWaySearch, visitedSegments, segment, direction, road); + boolean directionAllowed = initDirectionAllowed; + // Go through all point of the way and find ways to continue + // ! Actually there is small bug when there is restriction to move forward on the way (it doesn't take into account) + float obstaclesTime = 0; + if(segment.getParentRoute() != null && directionAllowed) { + obstaclesTime = (float) ctx.getRouter().calculateTurnTime(segment, direction? segment.getRoad().getPointsLength() - 1 : 0, + segment.getParentRoute(), segment.getParentSegmentEnd()); + } + if(ctx.firstRoadId == calculateRoutePointId(road, segment.getSegmentStart(), true) ) { + if(direction && ctx.firstRoadDirection < 0) { + obstaclesTime += 500; + } else if(!direction && ctx.firstRoadDirection > 0) { + obstaclesTime += 500; + } + } + float segmentDist = 0; + // +/- diff from middle point + int segmentEnd = segment.getSegmentStart(); + while (directionAllowed) { + int prevInd = segmentEnd; + if(direction) { + segmentEnd ++; + } else { + segmentEnd --; + } + if (segmentEnd < 0 || segmentEnd >= road.getPointsLength()) { + directionAllowed = false; + continue; + } + final int intervalId = direction ? segmentEnd - 1 : segmentEnd; + visitedSegments.put(calculateRoutePointId(road, intervalId, direction), segment); + final int x = road.getPoint31XTile(segmentEnd); + final int y = road.getPoint31YTile(segmentEnd); + final int prevx = road.getPoint31XTile(prevInd); + final int prevy = road.getPoint31YTile(prevInd); + if(x == prevx && y == prevy) { + continue; + } + if(RoutingContext.USE_BORDER_LINES) { + int st = ctx.searchBorderLineIndex(y); + int tt = ctx.searchBorderLineIndex(prevy); + if(st != tt){ +// System.out.print(" " + st + " != " + tt + " " + road.id + " ? "); + for(int i = Math.min(st, tt); i < Math.max(st, tt) & i < ctx.borderLines.length ; i++) { + Iterator pnts = ctx.borderLines[i].borderPoints.iterator(); + boolean changed = false; + while(pnts.hasNext()) { + RouteDataBorderLinePoint o = pnts.next(); + if(o.id == road.id) { +// System.out.println("Point removed !"); + pnts.remove(); + changed = true; + } + } + if(changed){ + ctx.updateDistanceForBorderPoints(ctx.startX, ctx.startY, true); + ctx.updateDistanceForBorderPoints(ctx.targetX, ctx.targetY, false); + } + } + } + } + // 2. calculate point and try to load neighbor ways if they are not loaded + segmentDist += squareRootDist(x, y, prevx, prevy); + + // 2.1 calculate possible obstacle plus time + double obstacle = ctx.getRouter().defineRoutingObstacle(road, segmentEnd); + if (obstacle < 0) { + directionAllowed = false; + continue; + } + obstaclesTime += obstacle; + + boolean alreadyVisited = checkIfOppositieSegmentWasVisited(ctx, reverseWaySearch, graphSegments, segment, oppositeSegments, road, + segmentEnd, direction, intervalId, segmentDist, obstaclesTime); + if (alreadyVisited) { + directionAllowed = false; + continue; + } + + // could be expensive calculation + // 3. get intersected ways + final RouteSegment roadNext = ctx.loadRouteSegment(x, y, ctx.config.memoryLimitation - ctx.memoryOverhead); + if(roadNext != null && + !((roadNext == segment || roadNext.road.id == road.id) && roadNext.next == null)) { + // check if there are outgoing connections in that case we need to stop processing + boolean outgoingConnections = false; + RouteSegment r = roadNext; + while(r != null && !outgoingConnections) { + if(r.road.id != road.id || r.getSegmentStart() != 0 || r.road.getOneway() != 1){ + outgoingConnections = true; + } + r = r.next; + } + if (outgoingConnections) { + directionAllowed = false; + } + + float distStartObstacles = segment.distanceFromStart + calculateTimeWithObstacles(ctx, road, segmentDist , obstaclesTime); + processIntersections(ctx, graphSegments, visitedSegments, + distStartObstacles, segment, segmentEnd, + roadNext, reverseWaySearch, outgoingConnections); + } + } + if(initDirectionAllowed && ctx.visitor != null){ + ctx.visitor.visitSegment(segment, segmentEnd, true); + } + } + + private boolean checkIfInitialMovementAllowedOnSegment(final RoutingContext ctx, boolean reverseWaySearch, + TLongObjectHashMap visitedSegments, RouteSegment segment, boolean direction, final RouteDataObject road + ) { + boolean directionAllowed; + final int middle = segment.getSegmentStart(); + int oneway = ctx.getRouter().isOneWay(road); + // use positive direction as agreed + if (!reverseWaySearch) { + if(direction){ + directionAllowed = oneway >= 0; + } else { + directionAllowed = oneway <= 0; + } + } else { + if(direction){ + directionAllowed = oneway <= 0; + } else { + directionAllowed = oneway >= 0; + } + } + if(direction) { + if(middle == road.getPointsLength() - 1 || + visitedSegments.containsKey(calculateRoutePointId(road, middle, true)) || + segment.getAllowedDirection() == -1) { + directionAllowed = false; + } + } else { + if(middle == 0 || visitedSegments.containsKey(calculateRoutePointId(road, middle - 1, false)) || + segment.getAllowedDirection() == 1) { + directionAllowed = false; + } + } + return directionAllowed; + } + + private boolean checkIfOppositieSegmentWasVisited(final RoutingContext ctx, boolean reverseWaySearch, + PriorityQueue graphSegments, RouteSegment segment, TLongObjectHashMap oppositeSegments, + final RouteDataObject road, int segmentEnd, boolean positive, int intervalId, float segmentDist, float obstaclesTime) { + long opp = calculateRoutePointId(road, intervalId, !positive); + if (oppositeSegments.containsKey(opp)) { + RouteSegment opposite = oppositeSegments.get(opp); + if (opposite.getSegmentStart() == segmentEnd) { + FinalRouteSegment frs = new FinalRouteSegment(road, segment.getSegmentStart()); + float distStartObstacles = segment.distanceFromStart + calculateTimeWithObstacles(ctx, road, segmentDist , obstaclesTime); + frs.setParentRoute(segment.getParentRoute()); + frs.setParentSegmentEnd(segment.getParentSegmentEnd()); + frs.reverseWaySearch = reverseWaySearch; + frs.distanceFromStart = opposite.distanceFromStart + distStartObstacles; + frs.distanceToEnd = 0; + frs.opposite = opposite; + graphSegments.add(frs); + return true; + } + } + return false; + } + + + private float calculateTimeWithObstacles(RoutingContext ctx, RouteDataObject road, float distOnRoadToPass, float obstaclesTime) { + float priority = ctx.getRouter().defineSpeedPriority(road); + float speed = (ctx.getRouter().defineSpeed(road) * priority); + if (speed == 0) { + speed = (ctx.getRouter().getMinDefaultSpeed() * priority); + } + // speed can not exceed max default speed according to A* + if(speed > ctx.getRouter().getMaxDefaultSpeed()) { + speed = ctx.getRouter().getMaxDefaultSpeed(); + } + float distStartObstacles = obstaclesTime + + distOnRoadToPass / speed; + return distStartObstacles; + + } + + private long calculateRoutePointId(final RouteDataObject road, int intervalId, boolean positive) { + return (road.getId() << ROUTE_POINTS) + (intervalId << 1) + (positive ? 1 : 0); + } + + + private boolean proccessRestrictions(RoutingContext ctx, RouteDataObject road, RouteSegment inputNext, boolean reverseWay) { + ctx.segmentsToVisitPrescripted.clear(); + ctx.segmentsToVisitNotForbidden.clear(); + boolean exclusiveRestriction = false; + RouteSegment next = inputNext; + if (!reverseWay && road.getRestrictionLength() == 0) { + return false; + } + if(!ctx.getRouter().restrictionsAware()) { + return false; + } + while (next != null) { + int type = -1; + if (!reverseWay) { + for (int i = 0; i < road.getRestrictionLength(); i++) { + if (road.getRestrictionId(i) == next.road.id) { + type = road.getRestrictionType(i); + break; + } + } + } else { + for (int i = 0; i < next.road.getRestrictionLength(); i++) { + int rt = next.road.getRestrictionType(i); + long restrictedTo = next.road.getRestrictionId(i); + if (restrictedTo == road.id) { + type = rt; + break; + } + + // Check if there is restriction only to the other than current road + if (rt == MapRenderingTypes.RESTRICTION_ONLY_RIGHT_TURN || rt == MapRenderingTypes.RESTRICTION_ONLY_LEFT_TURN + || rt == MapRenderingTypes.RESTRICTION_ONLY_STRAIGHT_ON) { + // check if that restriction applies to considered junk + RouteSegment foundNext = inputNext; + while (foundNext != null) { + if (foundNext.getRoad().id == restrictedTo) { + break; + } + foundNext = foundNext.next; + } + if (foundNext != null) { + type = REVERSE_WAY_RESTRICTION_ONLY; // special constant + } + } + } + } + if (type == REVERSE_WAY_RESTRICTION_ONLY) { + // next = next.next; continue; + } else if (type == -1 && exclusiveRestriction) { + // next = next.next; continue; + } else if (type == MapRenderingTypes.RESTRICTION_NO_LEFT_TURN || type == MapRenderingTypes.RESTRICTION_NO_RIGHT_TURN + || type == MapRenderingTypes.RESTRICTION_NO_STRAIGHT_ON || type == MapRenderingTypes.RESTRICTION_NO_U_TURN) { + // next = next.next; continue; + } else if (type == -1) { + // case no restriction + ctx.segmentsToVisitNotForbidden.add(next); + } else { + // case exclusive restriction (only_right, only_straight, ...) + // 1. in case we are going backward we should not consider only_restriction + // as exclusive because we have many "in" roads and one "out" + // 2. in case we are going forward we have one "in" and many "out" + if (!reverseWay) { + exclusiveRestriction = true; + ctx.segmentsToVisitNotForbidden.clear(); + ctx.segmentsToVisitPrescripted.add(next); + } else { + ctx.segmentsToVisitNotForbidden.add(next); + } + } + next = next.next; + } + ctx.segmentsToVisitPrescripted.addAll(ctx.segmentsToVisitNotForbidden); + return true; + } + + + + + private void processIntersections(RoutingContext ctx, PriorityQueue graphSegments, + TLongObjectHashMap visitedSegments, float distFromStart, + RouteSegment segment, int segmentEnd, + RouteSegment inputNext, boolean reverseWaySearch, + boolean addSameRoadFutureDirection) { + byte searchDirection = reverseWaySearch ? (byte)-1 : (byte)1; + boolean thereAreRestrictions = proccessRestrictions(ctx, segment.road, inputNext, reverseWaySearch); + Iterator nextIterator = null; + if (thereAreRestrictions) { + nextIterator = ctx.segmentsToVisitPrescripted.iterator(); + if(TRACE_ROUTING){ + println(" >> There are restrictions"); + } + } + // Calculate possible ways to put into priority queue + RouteSegment next = inputNext; + boolean hasNext = nextIterator == null || nextIterator.hasNext(); + while (hasNext) { + if (nextIterator != null) { + next = nextIterator.next(); + } + boolean nextPlusNotAllowed = (next.getSegmentStart() == next.road.getPointsLength() - 1) || + visitedSegments.containsKey(calculateRoutePointId(next.road, next.getSegmentStart(), true)); + boolean nextMinusNotAllowed = (next.getSegmentStart() == 0) || + visitedSegments.containsKey(calculateRoutePointId(next.road, next.getSegmentStart() - 1, false)); + boolean sameRoadFutureDirection = next.road.id == segment.road.id && next.getSegmentStart() == segmentEnd; + // road.id could be equal on roundabout, but we should accept them + boolean alreadyVisited = nextPlusNotAllowed && nextMinusNotAllowed; + boolean skipRoad = sameRoadFutureDirection && !addSameRoadFutureDirection; + if (!alreadyVisited && !skipRoad) { + int targetEndX = reverseWaySearch? ctx.startX : ctx.targetX; + int targetEndY = reverseWaySearch? ctx.startY : ctx.targetY; + float distanceToEnd = h(ctx, segment.getRoad().getPoint31XTile(segmentEnd), + segment.getRoad().getPoint31YTile(segmentEnd), targetEndX, targetEndY, next); + // assigned to wrong direction + if(next.getDirectionAssigned() == -searchDirection){ + next = new RouteSegment(next.getRoad(), next.getSegmentStart()); + } + + if (next.getParentRoute() == null + || ctx.roadPriorityComparator(next.distanceFromStart, next.distanceToEnd, distFromStart, distanceToEnd) > 0) { + if (next.getParentRoute() != null) { + if (!graphSegments.remove(next)) { + throw new IllegalStateException("Should be handled by direction flag"); + } + } + next.assignDirection(searchDirection); + next.distanceFromStart = distFromStart; + next.distanceToEnd = distanceToEnd; + if(sameRoadFutureDirection) { + next.setAllowedDirection((byte) (segment.getSegmentStart() < next.getSegmentStart() ? 1 : - 1)); + } + if(TRACE_ROUTING) { + printRoad(" >>", next); + } + // put additional information to recover whole route after + next.setParentRoute(segment); + next.setParentSegmentEnd(segmentEnd); + + graphSegments.add(next); + } + if (ctx.visitor != null) { +// ctx.visitor.visitSegment(next, false); + } + } else if(!sameRoadFutureDirection){ + // the segment was already visited! We need to follow better route if it exists + // that is very strange situation and almost exception (it can happen when we underestimate distnceToEnd) + if (next.getDirectionAssigned() == searchDirection && + distFromStart < next.distanceFromStart && next.road.id != segment.road.id) { + if(ctx.config.heuristicCoefficient <= 1) { + throw new IllegalStateException("distance from start " + distFromStart + " < " +next.distanceFromStart); + } + // That code is incorrect (when segment is processed itself, + // then it tries to make wrong u-turn) - + // this situation should be very carefully checked in future (seems to be fixed) + next.distanceFromStart = distFromStart; + next.setParentRoute(segment); + next.setParentSegmentEnd(segmentEnd); + if (ctx.visitor != null) { +// ctx.visitor.visitSegment(next, false); + } + } + } + + // iterate to next road + if (nextIterator == null) { + next = next.next; + hasNext = next != null; + } else { + hasNext = nextIterator.hasNext(); + } + } + } + + + /*public */static int roadPriorityComparator(double o1DistanceFromStart, double o1DistanceToEnd, + double o2DistanceFromStart, double o2DistanceToEnd, double heuristicCoefficient ) { + // f(x) = g(x) + h(x) --- g(x) - distanceFromStart, h(x) - distanceToEnd (not exact) + return Double.compare(o1DistanceFromStart + heuristicCoefficient * o1DistanceToEnd, + o2DistanceFromStart + heuristicCoefficient * o2DistanceToEnd); + } + + + public interface RouteSegmentVisitor { + + public void visitSegment(RouteSegment segment, int segmentEnd, boolean poll); + } + + public static class RouteSegment { + final short segStart; + final RouteDataObject road; + // needed to store intersection of routes + RouteSegment next = null; + + // search context (needed for searching route) + // Initially it should be null (!) because it checks was it segment visited before + RouteSegment parentRoute = null; + short parentSegmentEnd = 0; + // 1 - positive , -1 - negative, 0 not assigned + byte directionAssgn = 0; + // 1 - only positive allowed, -1 - only negative allowed + byte allowedDirection = 0; + + // distance measured in time (seconds) + float distanceFromStart = 0; + float distanceToEnd = 0; + + public RouteSegment(RouteDataObject road, int segmentStart) { + this.road = road; + this.segStart = (short) segmentStart; + } + + public byte getDirectionAssigned(){ + return directionAssgn; + } + + public RouteSegment getParentRoute() { + return parentRoute; + } + + public void setParentRoute(RouteSegment parentRoute) { + this.parentRoute = parentRoute; + } + + public void assignDirection(byte b) { + directionAssgn = b; + } + + public byte getAllowedDirection() { + return allowedDirection; + } + + public void setAllowedDirection(byte allowedDirection) { + this.allowedDirection = allowedDirection; + } + + + public void setParentSegmentEnd(int parentSegmentEnd) { + this.parentSegmentEnd = (short) parentSegmentEnd; + } + + public int getParentSegmentEnd() { + return parentSegmentEnd; + } + + public RouteSegment getNext() { + return next; + } + + public int getSegmentStart() { + return segStart; + } + + public RouteDataObject getRoad() { + return road; + } + + public String getTestName(){ + return MessageFormat.format("s{0,number,#.##} e{1,number,#.##}", ((float)distanceFromStart), ((float)distanceToEnd)); + } + + + public Iterator getIterator() { + return new Iterator() { + RouteSegment next = RouteSegment.this; + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + @Override + public RouteSegment next() { + RouteSegment c = next; + if(next != null) { + next = next.next; + } + return c; + } + + @Override + public boolean hasNext() { + return next != null; + } + }; + } + } + + static class FinalRouteSegment extends RouteSegment { + + boolean reverseWaySearch; + RouteSegment opposite; + + public FinalRouteSegment(RouteDataObject road, int segmentStart) { + super(road, segmentStart); + } + + } + +} diff --git a/OsmAnd-java/src/net/osmand/router/BinaryRoutePlannerOld.java b/OsmAnd-java/src/net/osmand/router/BinaryRoutePlannerOld.java new file mode 100644 index 0000000000..bdd65b420d --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/BinaryRoutePlannerOld.java @@ -0,0 +1,585 @@ +package net.osmand.router; + +import gnu.trove.map.hash.TLongObjectHashMap; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.PriorityQueue; + +import net.osmand.PlatformUtil; +import net.osmand.binary.RouteDataObject; +import net.osmand.osm.MapRenderingTypes; +import net.osmand.router.BinaryRoutePlanner.FinalRouteSegment; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + +public class BinaryRoutePlannerOld { + + public static boolean PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true; + private final int REVERSE_WAY_RESTRICTION_ONLY = 1024; + private final int STANDARD_ROAD_IN_QUEUE_OVERHEAD = 900; + + protected static final Log log = PlatformUtil.getLog(BinaryRoutePlannerOld.class); + + private static final int ROUTE_POINTS = 11; + + + private static double squareRootDist(int x1, int y1, int x2, int y2) { + // translate into meters + double dy = MapUtils.convert31YToMeters(y1, y2); + double dx = MapUtils.convert31XToMeters(x1, x2); + return Math.sqrt(dx * dx + dy * dy); +// return measuredDist(x1, y1, x2, y2); + } + + + /** + * Calculate route between start.segmentEnd and end.segmentStart (using A* algorithm) + * return list of segments + */ + void searchRouteInternal(final RoutingContext ctx, RouteSegment start, RouteSegment end) throws IOException, InterruptedException { + // measure time + ctx.timeToLoad = 0; + ctx.visitedSegments = 0; + ctx.timeToCalculate = System.nanoTime(); + if(ctx.config.initialDirection != null) { + ctx.firstRoadId = (start.getRoad().id << ROUTE_POINTS) + start.getSegmentStart(); + double plusDir = start.getRoad().directionRoute(start.getSegmentStart(), true); + double diff = plusDir - ctx.config.initialDirection; + if(Math.abs(MapUtils.alignAngleDifference(diff)) <= Math.PI / 3) { + ctx.firstRoadDirection = 1; + } else if(Math.abs(MapUtils.alignAngleDifference(diff - Math.PI)) <= Math.PI / 3) { + ctx.firstRoadDirection = -1; + } + + } + + // Initializing priority queue to visit way segments + Comparator segmentsComparator = new Comparator(){ + @Override + public int compare(RouteSegment o1, RouteSegment o2) { + return ctx.roadPriorityComparator(o1.distanceFromStart, o1.distanceToEnd, o2.distanceFromStart, o2.distanceToEnd); + } + }; + + Comparator nonHeuristicSegmentsComparator = new Comparator(){ + @Override + public int compare(RouteSegment o1, RouteSegment o2) { + return roadPriorityComparator(o1.distanceFromStart, o1.distanceToEnd, o2.distanceFromStart, o2.distanceToEnd, 0.5); + } + }; + + PriorityQueue graphDirectSegments = new PriorityQueue(50, segmentsComparator); + PriorityQueue graphReverseSegments = new PriorityQueue(50, segmentsComparator); + + // Set to not visit one segment twice (stores road.id << X + segmentStart) + TLongObjectHashMap visitedDirectSegments = new TLongObjectHashMap(); + TLongObjectHashMap visitedOppositeSegments = new TLongObjectHashMap(); + + boolean runRecalculation = ctx.previouslyCalculatedRoute != null && ctx.previouslyCalculatedRoute.size() > 0 + && ctx.config.recalculateDistance != 0; + if (runRecalculation) { + RouteSegment previous = null; + List rlist = new ArrayList(); + float distanceThreshold = ctx.config.recalculateDistance; + float threshold = 0; + for(RouteSegmentResult rr : ctx.previouslyCalculatedRoute) { + threshold += rr.getDistance(); + if(threshold > distanceThreshold) { + rlist.add(rr); + } + } + runRecalculation = rlist.size() > 0; + if (rlist.size() > 0) { + for (RouteSegmentResult rr : rlist) { + RouteSegment segment = new RouteSegment(rr.getObject(), rr.getEndPointIndex()); + if (previous != null) { + previous.setParentRoute(segment); + previous.setParentSegmentEnd(rr.getStartPointIndex()); + long t = (rr.getObject().getId() << ROUTE_POINTS) + segment.getSegmentStart(); + visitedOppositeSegments.put(t, segment); + } + previous = segment; + } + end = previous; + } + } + + // for start : f(start) = g(start) + h(start) = 0 + h(start) = h(start) + int targetEndX = end.road.getPoint31XTile(end.getSegmentStart()); + int targetEndY = end.road.getPoint31YTile(end.getSegmentStart()); + int startX = start.road.getPoint31XTile(start.getSegmentStart()); + int startY = start.road.getPoint31YTile(start.getSegmentStart()); + float estimatedDistance = (float) h(ctx, targetEndX, targetEndY, startX, startY); + end.distanceToEnd = start.distanceToEnd = estimatedDistance; + + graphDirectSegments.add(start); + graphReverseSegments.add(end); + + // Extract & analyze segment with min(f(x)) from queue while final segment is not found + boolean inverse = false; + boolean init = false; + + PriorityQueue graphSegments; + if(inverse) { + graphSegments = graphReverseSegments; + } else { + graphSegments = graphDirectSegments; + } + while (!graphSegments.isEmpty()) { + RouteSegment segment = graphSegments.poll(); + ctx.visitedSegments++; + // for debug purposes + if (ctx.visitor != null) { +// ctx.visitor.visitSegment(segment, true); + } + updateCalculationProgress(ctx, graphDirectSegments, graphReverseSegments); + boolean routeFound = false; + if (!inverse) { + routeFound = processRouteSegment(ctx, false, graphDirectSegments, visitedDirectSegments, targetEndX, targetEndY, + segment, visitedOppositeSegments); + } else { + routeFound = processRouteSegment(ctx, true, graphReverseSegments, visitedOppositeSegments, startX, startY, segment, + visitedDirectSegments); + } + if (graphReverseSegments.isEmpty() || graphDirectSegments.isEmpty() || routeFound) { + break; + } + if(runRecalculation) { + // nothing to do + inverse = false; + } else if (!init) { + inverse = !inverse; + init = true; + } else if (ctx.planRouteIn2Directions()) { + inverse = nonHeuristicSegmentsComparator.compare(graphDirectSegments.peek(), graphReverseSegments.peek()) > 0; + if (graphDirectSegments.size() * 1.3 > graphReverseSegments.size()) { + inverse = true; + } else if (graphDirectSegments.size() < 1.3 * graphReverseSegments.size()) { + inverse = false; + } + } else { + // different strategy : use onedirectional graph + inverse = ctx.getPlanRoadDirection() < 0; + } + if (inverse) { + graphSegments = graphReverseSegments; + } else { + graphSegments = graphDirectSegments; + } + // check if interrupted + if(ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) { + throw new InterruptedException("Route calculation interrupted"); + } + } + println("Result is found"); + printDebugMemoryInformation(ctx, graphDirectSegments, graphReverseSegments, visitedDirectSegments, visitedOppositeSegments); + } + + private void updateCalculationProgress(final RoutingContext ctx, PriorityQueue graphDirectSegments, + PriorityQueue graphReverseSegments) { + if(ctx.calculationProgress != null) { + ctx.calculationProgress.reverseSegmentQueueSize = graphReverseSegments.size(); + ctx.calculationProgress.directSegmentQueueSize = graphDirectSegments.size(); + RouteSegment dirPeek = graphDirectSegments.peek(); + if(dirPeek != null) { + ctx.calculationProgress.distanceFromBegin = + Math.max(dirPeek.distanceFromStart, ctx.calculationProgress.distanceFromBegin); + } + RouteSegment revPeek = graphReverseSegments.peek(); + if(revPeek != null) { + ctx.calculationProgress.distanceFromEnd = + Math.max(revPeek.distanceFromStart, ctx.calculationProgress.distanceFromEnd); + } + } + } + + + private double h(final RoutingContext ctx, int targetEndX, int targetEndY, + int startX, int startY) { + double distance = squareRootDist(startX, startY, targetEndX, targetEndY); + return distance / ctx.getRouter().getMaxDefaultSpeed(); + } + + protected static double h(RoutingContext ctx, double distToFinalPoint, RouteSegment next) { + double result = distToFinalPoint / ctx.getRouter().getMaxDefaultSpeed(); + return result; + } + + private static void println(String logMsg) { +// log.info(logMsg); + System.out.println(logMsg); + } + + private static void printInfo(String logMsg) { + log.warn(logMsg); + } + + public void printDebugMemoryInformation(RoutingContext ctx, PriorityQueue graphDirectSegments, PriorityQueue graphReverseSegments, + TLongObjectHashMap visitedDirectSegments,TLongObjectHashMap visitedOppositeSegments) { + printInfo("Time to calculate : " + (System.nanoTime() - ctx.timeToCalculate) / 1e6 + ", time to load : " + ctx.timeToLoad / 1e6 + ", time to load headers : " + ctx.timeToLoadHeaders / 1e6); + int maxLoadedTiles = Math.max(ctx.maxLoadedTiles, ctx.getCurrentlyLoadedTiles()); + printInfo("Current loaded tiles : " + ctx.getCurrentlyLoadedTiles() + ", maximum loaded tiles " + maxLoadedTiles); + printInfo("Loaded tiles " + ctx.loadedTiles + " (distinct "+ctx.distinctLoadedTiles+ "), unloaded tiles " + ctx.unloadedTiles + + ", loaded more than once same tiles " + + ctx.loadedPrevUnloadedTiles ); + printInfo("Visited roads, " + ctx.visitedSegments + ", relaxed roads " + ctx.relaxedSegments); + if (graphDirectSegments != null && graphReverseSegments != null) { + printInfo("Priority queues sizes : " + graphDirectSegments.size() + "/" + graphReverseSegments.size()); + } + if (visitedDirectSegments != null && visitedOppositeSegments != null) { + printInfo("Visited segments sizes: " + visitedDirectSegments.size() + "/" + visitedOppositeSegments.size()); + } + + } + + + private boolean processRouteSegment(final RoutingContext ctx, boolean reverseWaySearch, + PriorityQueue graphSegments, TLongObjectHashMap visitedSegments, int targetEndX, int targetEndY, + RouteSegment segment, TLongObjectHashMap oppositeSegments) throws IOException { + // Always start from segmentStart (!), not from segmentEnd + // It makes difference only for the first start segment + // Middle point will always be skipped from observation considering already visited + final RouteDataObject road = segment.road; + final int middle = segment.getSegmentStart(); + float obstaclePlusTime = 0; + float obstacleMinusTime = 0; + + + // This is correct way of checking but it has problem with relaxing strategy +// long ntf = (segment.road.getId() << ROUTE_POINTS) + segment.segmentStart; +// visitedSegments.put(ntf, segment); +// if (oppositeSegments.contains(ntf) && oppositeSegments.get(ntf) != null) { +// RouteSegment opposite = oppositeSegments.get(ntf); +// if (opposite.segmentStart == segment.segmentStart) { + // if (reverseWaySearch) { + // reverse : segment.parentSegmentEnd - segment.parentRoute + // } else { + // reverse : opposite.parentSegmentEnd - oppositie.parentRoute + // } +// return true; +// } +// } + + // 0. mark route segment as visited + long nt = (road.getId() << ROUTE_POINTS) + middle; + // avoid empty segments to connect but mark the point as visited + visitedSegments.put(nt, null); + + int oneway = ctx.getRouter().isOneWay(road); + boolean minusAllowed; + boolean plusAllowed; + if(ctx.firstRoadId == nt) { + if(ctx.firstRoadDirection < 0) { + obstaclePlusTime += 500; + } else if(ctx.firstRoadDirection > 0) { + obstacleMinusTime += 500; + } + } + if (!reverseWaySearch) { + minusAllowed = oneway <= 0; + plusAllowed = oneway >= 0; + } else { + minusAllowed = oneway >= 0; + plusAllowed = oneway <= 0; + } + + // +/- diff from middle point + int d = plusAllowed ? 1 : -1; + if(segment.parentRoute != null) { + if(plusAllowed && middle < segment.getRoad().getPointsLength() - 1) { + obstaclePlusTime = (float) ctx.getRouter().calculateTurnTime(segment, segment.getRoad().getPointsLength() - 1, + segment.parentRoute, segment.parentSegmentEnd); + } + if(minusAllowed && middle > 0) { + obstacleMinusTime = (float) ctx.getRouter().calculateTurnTime(segment, 0, + segment.parentRoute, segment.parentSegmentEnd); + } + } + // Go through all point of the way and find ways to continue + // ! Actually there is small bug when there is restriction to move forward on way (it doesn't take into account) + float posSegmentDist = 0; + float negSegmentDist = 0; + while (minusAllowed || plusAllowed) { + // 1. calculate point not equal to middle + // (algorithm should visit all point on way if it is not oneway) + int segmentEnd = middle + d; + boolean positive = d > 0; + if (!minusAllowed && d > 0) { + d++; + } else if (!plusAllowed && d < 0) { + d--; + } else { + if (d <= 0) { + d = -d + 1; + } else { + d = -d; + } + } + if (segmentEnd < 0) { + minusAllowed = false; + continue; + } + if (segmentEnd >= road.getPointsLength()) { + plusAllowed = false; + continue; + } + // if we found end point break cycle + long nts = (road.getId() << ROUTE_POINTS) + segmentEnd; + visitedSegments.put(nts, segment); + + // 2. calculate point and try to load neighbor ways if they are not loaded + int x = road.getPoint31XTile(segmentEnd); + int y = road.getPoint31YTile(segmentEnd); + if(positive) { + posSegmentDist += squareRootDist(x, y, + road.getPoint31XTile(segmentEnd - 1), road.getPoint31YTile(segmentEnd - 1)); + } else { + negSegmentDist += squareRootDist(x, y, + road.getPoint31XTile(segmentEnd + 1), road.getPoint31YTile(segmentEnd + 1)); + } + + // 2.1 calculate possible obstacle plus time + if(positive){ + double obstacle = ctx.getRouter().defineRoutingObstacle(road, segmentEnd); + if (obstacle < 0) { + plusAllowed = false; + continue; + } + obstaclePlusTime += obstacle; + } else { + double obstacle = ctx.getRouter().defineRoutingObstacle(road, segmentEnd); + if (obstacle < 0) { + minusAllowed = false; + continue; + } + obstacleMinusTime += obstacle; + } +// int overhead = 0; + // could be expensive calculation + int overhead = (ctx.visitedSegments - ctx.relaxedSegments ) * + STANDARD_ROAD_IN_QUEUE_OVERHEAD; + if(overhead > ctx.config.memoryLimitation * 0.95){ + throw new OutOfMemoryError("There is no enough memory " + ctx.config.memoryLimitation/(1<<20) + " Mb"); + } + RouteSegment next = ctx.loadRouteSegment(x, y, ctx.config.memoryLimitation - overhead); + // 3. get intersected ways + if (next != null) { + // TO-DO U-Turn + if((next == segment || next.road.id == road.id) && next.next == null) { + // simplification if there is no real intersection + continue; + } + // Using A* routing algorithm + // g(x) - calculate distance to that point and calculate time + + float priority = ctx.getRouter().defineSpeedPriority(road); + float speed = ctx.getRouter().defineSpeed(road) * priority; + if (speed == 0) { + speed = ctx.getRouter().getMinDefaultSpeed() * priority; + } + float distOnRoadToPass = positive? posSegmentDist : negSegmentDist; + float distStartObstacles = segment.distanceFromStart + ( positive ? obstaclePlusTime : obstacleMinusTime) + + distOnRoadToPass / speed; + + float distToFinalPoint = (float) squareRootDist(x, y, targetEndX, targetEndY); + boolean routeFound = processIntersections(ctx, graphSegments, visitedSegments, oppositeSegments, + distStartObstacles, distToFinalPoint, segment, segmentEnd, next, reverseWaySearch); + if(routeFound){ + return routeFound; + } + + } + } + return false; + } + + + private boolean proccessRestrictions(RoutingContext ctx, RouteDataObject road, RouteSegment inputNext, boolean reverseWay) { + ctx.segmentsToVisitPrescripted.clear(); + ctx.segmentsToVisitNotForbidden.clear(); + boolean exclusiveRestriction = false; + RouteSegment next = inputNext; + if (!reverseWay && road.getRestrictionLength() == 0) { + return false; + } + if(!ctx.getRouter().restrictionsAware()) { + return false; + } + while (next != null) { + int type = -1; + if (!reverseWay) { + for (int i = 0; i < road.getRestrictionLength(); i++) { + if (road.getRestrictionId(i) == next.road.id) { + type = road.getRestrictionType(i); + break; + } + } + } else { + for (int i = 0; i < next.road.getRestrictionLength(); i++) { + int rt = next.road.getRestrictionType(i); + long restrictedTo = next.road.getRestrictionId(i); + if (restrictedTo == road.id) { + type = rt; + break; + } + + // Check if there is restriction only to the other than current road + if (rt == MapRenderingTypes.RESTRICTION_ONLY_RIGHT_TURN || rt == MapRenderingTypes.RESTRICTION_ONLY_LEFT_TURN + || rt == MapRenderingTypes.RESTRICTION_ONLY_STRAIGHT_ON) { + // check if that restriction applies to considered junk + RouteSegment foundNext = inputNext; + while (foundNext != null) { + if (foundNext.getRoad().id == restrictedTo) { + break; + } + foundNext = foundNext.next; + } + if (foundNext != null) { + type = REVERSE_WAY_RESTRICTION_ONLY; // special constant + } + } + } + } + if (type == REVERSE_WAY_RESTRICTION_ONLY) { + // next = next.next; continue; + } else if (type == -1 && exclusiveRestriction) { + // next = next.next; continue; + } else if (type == MapRenderingTypes.RESTRICTION_NO_LEFT_TURN || type == MapRenderingTypes.RESTRICTION_NO_RIGHT_TURN + || type == MapRenderingTypes.RESTRICTION_NO_STRAIGHT_ON || type == MapRenderingTypes.RESTRICTION_NO_U_TURN) { + // next = next.next; continue; + } else if (type == -1) { + // case no restriction + ctx.segmentsToVisitNotForbidden.add(next); + } else { + // case exclusive restriction (only_right, only_straight, ...) + // 1. in case we are going backward we should not consider only_restriction + // as exclusive because we have many "in" roads and one "out" + // 2. in case we are going forward we have one "in" and many "out" + if (!reverseWay) { + exclusiveRestriction = true; + ctx.segmentsToVisitNotForbidden.clear(); + ctx.segmentsToVisitPrescripted.add(next); + } else { + ctx.segmentsToVisitNotForbidden.add(next); + } + } + next = next.next; + } + ctx.segmentsToVisitPrescripted.addAll(ctx.segmentsToVisitNotForbidden); + return true; + } + + + + + private boolean processIntersections(RoutingContext ctx, PriorityQueue graphSegments, + TLongObjectHashMap visitedSegments, TLongObjectHashMap oppositeSegments, + float distFromStart, float distToFinalPoint, + RouteSegment segment, int segmentEnd, RouteSegment inputNext, + boolean reverseWay) { + + boolean thereAreRestrictions = proccessRestrictions(ctx, segment.road, inputNext, reverseWay); + Iterator nextIterator = null; + if (thereAreRestrictions) { + nextIterator = ctx.segmentsToVisitPrescripted.iterator(); + } + // Calculate possible ways to put into priority queue + RouteSegment next = inputNext; + boolean hasNext = nextIterator == null || nextIterator.hasNext(); + while (hasNext) { + if (nextIterator != null) { + next = nextIterator.next(); + } + long nts = (next.road.getId() << ROUTE_POINTS) + next.getSegmentStart(); + + // 1. Check if opposite segment found so we can stop calculations + if (oppositeSegments.contains(nts) && oppositeSegments.get(nts) != null) { + // restrictions checked + RouteSegment opposite = oppositeSegments.get(nts); + // additional check if opposite way not the same as current one + if (next.getSegmentStart() != segmentEnd || + opposite.getRoad().getId() != segment.getRoad().getId()) { + FinalRouteSegment frs = new FinalRouteSegment(segment.getRoad(), segment.getSegmentStart()); + float distStartObstacles = segment.distanceFromStart; + frs.setParentRoute(segment.getParentRoute()); + frs.setParentSegmentEnd(segment.getParentSegmentEnd()); + frs.reverseWaySearch = reverseWay; + frs.distanceFromStart = opposite.distanceFromStart + distStartObstacles; + RouteSegment op = new RouteSegment(segment.getRoad(), segmentEnd); + op.setParentRoute(opposite); + op.setParentSegmentEnd(next.getSegmentStart()); + frs.distanceToEnd = 0; + frs.opposite = op; + ctx.finalRouteSegment = frs; + return true; + } + } + // road.id could be equal on roundabout, but we should accept them + boolean alreadyVisited = visitedSegments.contains(nts); + if (!alreadyVisited) { + float distanceToEnd = (float) h(ctx, distToFinalPoint, next); + if (next.parentRoute == null + || ctx.roadPriorityComparator(next.distanceFromStart, next.distanceToEnd, distFromStart, distanceToEnd) > 0) { + if (next.parentRoute != null) { + // already in queue remove it + if (!graphSegments.remove(next)) { + // exist in different queue! + RouteSegment cpy = new RouteSegment(next.getRoad(), next.getSegmentStart()); + next = cpy; + } + } + next.distanceFromStart = distFromStart; + next.distanceToEnd = distanceToEnd; + // put additional information to recover whole route after + next.setParentRoute(segment); + next.setParentSegmentEnd(segmentEnd); + graphSegments.add(next); + } + if (ctx.visitor != null) { +// ctx.visitor.visitSegment(next, false); + } + } else { + // the segment was already visited! We need to follow better route if it exists + // that is very strange situation and almost exception (it can happen when we underestimate distnceToEnd) + if (distFromStart < next.distanceFromStart && next.road.id != segment.road.id) { + // That code is incorrect (when segment is processed itself, + // then it tries to make wrong u-turn) - + // this situation should be very carefully checked in future (seems to be fixed) + // System.out.println(segment.getRoad().getName() + " " + next.getRoad().getName()); + // System.out.println(next.distanceFromStart + " ! " + distFromStart); + next.distanceFromStart = distFromStart; + next.setParentRoute(segment); + next.setParentSegmentEnd(segmentEnd); + if (ctx.visitor != null) { +// ctx.visitor.visitSegment(next, next.getSegmentStart(), false); + } + } + } + + // iterate to next road + if (nextIterator == null) { + next = next.next; + hasNext = next != null; + } else { + hasNext = nextIterator.hasNext(); + } + } + return false; + } + + + + /*public */static int roadPriorityComparator(double o1DistanceFromStart, double o1DistanceToEnd, + double o2DistanceFromStart, double o2DistanceToEnd, double heuristicCoefficient ) { + // f(x) = g(x) + h(x) --- g(x) - distanceFromStart, h(x) - distanceToEnd (not exact) + return Double.compare(o1DistanceFromStart + heuristicCoefficient * o1DistanceToEnd, + o2DistanceFromStart + heuristicCoefficient * o2DistanceToEnd); + } + +} diff --git a/OsmAnd-java/src/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/net/osmand/router/GeneralRouter.java new file mode 100644 index 0000000000..69097e9918 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/GeneralRouter.java @@ -0,0 +1,349 @@ +package net.osmand.router; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + + +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; +import net.osmand.binary.RouteDataObject; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.util.MapUtils; + +public class GeneralRouter extends VehicleRouter { + public static final String USE_SHORTEST_WAY = "short_way"; + public static final String AVOID_FERRIES = "avoid_ferries"; + public static final String AVOID_TOLL = "avoid_toll"; + public static final String AVOID_MOTORWAY = "avoid_motorway"; + public static final String AVOID_UNPAVED = "avoid_unpaved"; + public static final String PREFER_MOTORWAYS = "prefer_motorway"; + + public Map highwaySpeed ; + public Map highwayPriorities ; + public Map avoid ; + public Map obstacles; + public Map routingObstacles; + public Map attributes; + + + private GeneralRouterProfile profile; + + // cached values + private boolean restrictionsAware = true; + private float leftTurn; + private float roundaboutTurn; + private float rightTurn; + private boolean onewayAware = true; + private boolean followSpeedLimitations = true; + private float minDefaultSpeed = 10; + private float maxDefaultSpeed = 10; + + public enum GeneralRouterProfile { + CAR, + PEDESTRIAN, + BICYCLE + } + + public GeneralRouter(GeneralRouterProfile profile, Map attributes) { + this.attributes = new LinkedHashMap(attributes); + this.profile = profile; + highwaySpeed = new LinkedHashMap(); + highwayPriorities = new LinkedHashMap(); + avoid = new LinkedHashMap(); + obstacles = new LinkedHashMap(); + routingObstacles = new LinkedHashMap(); + Iterator> e = attributes.entrySet().iterator(); + while(e.hasNext()){ + Entry next = e.next(); + addAttribute(next.getKey(), next.getValue()); + } + } + + public GeneralRouter(GeneralRouter pr, Map attributes) { + this.highwaySpeed = new LinkedHashMap(pr.highwaySpeed); + this.highwayPriorities = new LinkedHashMap(pr.highwayPriorities); + this.avoid = new LinkedHashMap(pr.avoid); + this.obstacles = new LinkedHashMap(pr.obstacles); + this.routingObstacles = new LinkedHashMap(pr.routingObstacles); + this.attributes = new LinkedHashMap(); + this.profile = pr.profile; + Iterator> e = attributes.entrySet().iterator(); + while(e.hasNext()){ + Entry next = e.next(); + addAttribute(next.getKey(), next.getValue()); + } + + } + + public void addAttribute(String k, String v) { + attributes.put(k, v); + if(k.equals("restrictionsAware")) { + restrictionsAware = parseSilentBoolean(v, restrictionsAware); + } else if(k.equals("onewayAware")) { + onewayAware = parseSilentBoolean(v, onewayAware); + } else if(k.equals("followSpeedLimitations")) { + followSpeedLimitations = parseSilentBoolean(v, followSpeedLimitations); + } else if(k.equals("leftTurn")) { + leftTurn = parseSilentFloat(v, leftTurn); + } else if(k.equals("rightTurn")) { + rightTurn = parseSilentFloat(v, rightTurn); + } else if(k.equals("roundaboutTurn")) { + roundaboutTurn = parseSilentFloat(v, roundaboutTurn); + } else if(k.equals("minDefaultSpeed")) { + minDefaultSpeed = parseSilentFloat(v, minDefaultSpeed * 3.6f) / 3.6f; + } else if(k.equals("maxDefaultSpeed")) { + maxDefaultSpeed = parseSilentFloat(v, maxDefaultSpeed * 3.6f) / 3.6f; + } + } + + @Override + public boolean acceptLine(RouteDataObject way) { + int[] types = way.getTypes(); + RouteRegion reg = way.region; + return acceptLine(types, reg); + } + + public boolean acceptLine(int[] types, RouteRegion reg) { + if(!highwaySpeed.containsKey(RouteDataObject.getHighway(types, reg))) { + boolean accepted = false; + for (int i = 0; i < types.length; i++) { + RouteTypeRule r = reg.quickGetEncodingRule(types[i]); + Float sp = highwaySpeed.get(r.getTag()+"$"+r.getValue()); + if(sp != null){ + if(sp.floatValue() > 0) { + accepted = true; + } + break; + } + } + if(!accepted) { + return false; + } + } + + + for(int i=0; i 0) { + return m; + } + } + + Float value = null; + for (int i = 0; i < road.types.length; i++) { + RouteTypeRule r = road.region.quickGetEncodingRule(road.types[i]); + if(highwaySpeed.containsKey(r.getTag()+"$"+r.getValue())){ + value = highwaySpeed.get(r.getTag()+"$"+r.getValue()); + break; + } + } + if (value == null) { + return getMinDefaultSpeed(); + } + return value / 3.6f; + } + + @Override + public float defineSpeedPriority(RouteDataObject road) { + float priority = 1; + for (int i = 0; i < road.types.length; i++) { + RouteTypeRule r = road.region.quickGetEncodingRule(road.types[i]); + if(highwayPriorities.containsKey(r.getTag()+"$"+r.getValue())){ + priority *= highwayPriorities.get(r.getTag()+"$"+r.getValue()); + } + } + return priority; + } + + @Override + public float getMinDefaultSpeed() { + return minDefaultSpeed; + } + + @Override + public float getMaxDefaultSpeed() { + return maxDefaultSpeed ; + } + + + public double getLeftTurn() { + return leftTurn; + } + + public double getRightTurn() { + return rightTurn; + } + public double getRoundaboutTurn() { + return roundaboutTurn; + } + @Override + public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) { + int[] pt = prev.getRoad().getPointTypes(prevSegmentEnd); + if(pt != null) { + RouteRegion reg = prev.getRoad().region; + for(int i=0; i 0 && !prev.getRoad().roundabout() && segment.getRoad().roundabout()) { + return rt; + } + if (getLeftTurn() > 0 || getRightTurn() > 0) { + double a1 = segment.getRoad().directionRoute(segment.getSegmentStart(), segment.getSegmentStart() < segmentEnd); + double a2 = prev.getRoad().directionRoute(prevSegmentEnd, prevSegmentEnd < prev.getSegmentStart()); + double diff = Math.abs(MapUtils.alignAngleDifference(a1 - a2 - Math.PI)); + // more like UT + if (diff > 2 * Math.PI / 3) { + return getLeftTurn(); + } else if (diff > Math.PI / 2) { + return getRightTurn(); + } + return 0; + } + return 0; + } + + private void specialize(String specializationTag, Map m){ + ArrayList ks = new ArrayList(m.keySet()); + for(String s : ks){ + if(s.startsWith(specializationTag +":")) { + String tagName = s.substring((specializationTag +":").length()); + m.put(tagName, m.get(s)); + } + } + } + + @Override + public GeneralRouter specifyParameter(String specializationTag) { + Map attrs = new LinkedHashMap(attributes); + for(String s : attributes.keySet()){ + if(s.startsWith(specializationTag +":")) { + String tagName = s.substring((specializationTag +":").length()); + attrs.put(tagName, attributes.get(s)); + } + } + GeneralRouter gr = new GeneralRouter(this, attrs); + gr.specialize(specializationTag, gr.highwayPriorities); + gr.specialize(specializationTag, gr.highwaySpeed); + gr.specialize(specializationTag, gr.avoid); + gr.specialize(specializationTag, gr.obstacles); + gr.specialize(specializationTag, gr.routingObstacles); + gr.specialize(specializationTag, gr.attributes); + + return gr; + } + + @Override + public boolean containsAttribute(String attribute) { + return attributes.containsKey(attribute); + } + + @Override + public String getAttribute(String attribute) { + return attributes.get(attribute); + } + + +} + diff --git a/OsmAnd-java/src/net/osmand/router/NewGeneralRouter.java b/OsmAnd-java/src/net/osmand/router/NewGeneralRouter.java new file mode 100644 index 0000000000..c1ea8ab8c6 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/NewGeneralRouter.java @@ -0,0 +1,414 @@ +package net.osmand.router; + +import gnu.trove.list.array.TByteArrayList; +import gnu.trove.list.array.TIntArrayList; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + + +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; +import net.osmand.binary.RouteDataObject; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.util.MapUtils; + +public class NewGeneralRouter extends VehicleRouter { + + public RouteAttributeContext roadSpeed ; + public RouteAttributeContext roadPriorities ; + public RouteAttributeContext access ; + public RouteAttributeContext obstacles; + public RouteAttributeContext routingObstacles; + public RouteAttributeContext oneway; + public Map attributes; + + private Map parameters = new LinkedHashMap(); + private Map universalRules = new LinkedHashMap(); + private Map> freeTagRules = new HashMap>(); + private Map> regionConvert = new LinkedHashMap>(); + + + private GeneralRouterProfile profile; + + // cached values + private boolean restrictionsAware = true; + private float leftTurn; + private float roundaboutTurn; + private float rightTurn; + private float minDefaultSpeed = 10; + private float maxDefaultSpeed = 10; + + public enum RoutingParameterType { + NUMERIC, + BOOLEAN, + SYMBOLIC + } + public enum GeneralRouterProfile { + CAR, + PEDESTRIAN, + BICYCLE + } + + public NewGeneralRouter(GeneralRouterProfile profile, Map attributes) { + this.attributes = new LinkedHashMap(); + this.profile = profile; + Iterator> e = attributes.entrySet().iterator(); + while(e.hasNext()){ + Entry next = e.next(); + addAttribute(next.getKey(), next.getValue()); + } + } + + public void addAttribute(String k, String v) { + attributes.put(k, v); + if(k.equals("restrictionsAware")) { + restrictionsAware = parseSilentBoolean(v, restrictionsAware); + } else if(k.equals("leftTurn")) { + leftTurn = parseSilentFloat(v, leftTurn); + } else if(k.equals("rightTurn")) { + rightTurn = parseSilentFloat(v, rightTurn); + } else if(k.equals("roundaboutTurn")) { + roundaboutTurn = parseSilentFloat(v, roundaboutTurn); + } else if(k.equals("minDefaultSpeed")) { + minDefaultSpeed = parseSilentFloat(v, minDefaultSpeed * 3.6f) / 3.6f; + } else if(k.equals("maxDefaultSpeed")) { + maxDefaultSpeed = parseSilentFloat(v, maxDefaultSpeed * 3.6f) / 3.6f; + } + } + + @Override + public boolean acceptLine(RouteDataObject way) { + int[] utypes = convert(way.region, way.getTypes()); + int res = access.evaluateInt(utypes, 0); + return res >= 0; + } + + private int[] convert(RouteRegion reg, int[] types) { + int[] utypes = new int[types.length]; + Map map = regionConvert.get(reg); + if(map == null){ + map = new HashMap(); + regionConvert.put(reg, map); + } + for(int k = 0; k < types.length; k++) { + Integer nid = map.get(types[k]); + if(nid == null){ + RouteTypeRule r = reg.quickGetEncodingRule(types[k]); + nid = registerRule(r.getTag(), r.getValue()); + map.put(types[k], nid); + } + utypes[k] = nid; + } + Arrays.sort(utypes); + return utypes; + } + + public int registerRule(String tag, String value) { + String key = tag +"$"+value; + if(universalRules.containsKey(key)) { + return universalRules.get(key); + } + universalRules.put(key, universalRules.size()); + return universalRules.size() - 1; + } + + public void build(){ + freeTagRules.clear(); + + roadSpeed.newEvaluationContext(); + roadPriorities.newEvaluationContext(); + access.newEvaluationContext(); + obstacles.newEvaluationContext(); + routingObstacles.newEvaluationContext(); + oneway.newEvaluationContext(); + } + + public void registerFreeTagRule(RouteEvaluationRule r, String tag) { + if(!freeTagRules.containsKey(tag)) { + freeTagRules.put(tag, new ArrayList()); + } + freeTagRules.get(tag).add(r); + Iterator> it = universalRules.entrySet().iterator(); + while (it.hasNext()) { + Entry e = it.next(); + String key = e.getKey(); + if (key.startsWith(tag + "$")) { + r.insertType(e.getValue(), false); + } + if (tag.startsWith("-") && universalRules.containsKey(tag.substring(1) + "$")) { + r.insertType(e.getValue(), true); + } + } + } + + private void updateFreeTagRules() { + + } + + private void updateFreeTagRules(List flist, int value, boolean not) { + + + } + + @Override + public boolean restrictionsAware() { + return restrictionsAware; + } + + @Override + public float defineObstacle(RouteDataObject road, int point) { + int[] ts = road.getPointTypes(point); + if(ts != null) { + + } + // TODO + return 0; + } + + @Override + public float defineRoutingObstacle(RouteDataObject road, int point) { + // TODO + return 0; + } + + @Override + public int isOneWay(RouteDataObject road) { + // TODO + return 0; + } + + + private static boolean parseSilentBoolean(String t, boolean v) { + if (t == null || t.length() == 0) { + return v; + } + return Boolean.parseBoolean(t); + } + + private static float parseSilentFloat(String t, float v) { + if (t == null || t.length() == 0) { + return v; + } + return Float.parseFloat(t); + } + + @Override + public float defineSpeed(RouteDataObject road) { + // TODO + return 0; + } + + @Override + public float defineSpeedPriority(RouteDataObject road) { + return 0; + } + + @Override + public float getMinDefaultSpeed() { + return minDefaultSpeed; + } + + @Override + public float getMaxDefaultSpeed() { + return maxDefaultSpeed ; + } + + + public double getLeftTurn() { + return leftTurn; + } + + public double getRightTurn() { + return rightTurn; + } + public double getRoundaboutTurn() { + return roundaboutTurn; + } + @Override + public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) { + int[] pt = prev.getRoad().getPointTypes(prevSegmentEnd); + if(pt != null) { + RouteRegion reg = prev.getRoad().region; + for(int i=0; i 0 && !prev.getRoad().roundabout() && segment.getRoad().roundabout()) { + return rt; + } + if (getLeftTurn() > 0 || getRightTurn() > 0) { + double a1 = segment.getRoad().directionRoute(segment.getSegmentStart(), segment.getSegmentStart() < segmentEnd); + double a2 = prev.getRoad().directionRoute(prevSegmentEnd, prevSegmentEnd < prev.getSegmentStart()); + double diff = Math.abs(MapUtils.alignAngleDifference(a1 - a2 - Math.PI)); + // more like UT + if (diff > 2 * Math.PI / 3) { + return getLeftTurn(); + } else if (diff > Math.PI / 2) { + return getRightTurn(); + } + return 0; + } + return 0; + } + + + @Override + public NewGeneralRouter specifyParameter(String parameter) { + // TODO + return this; + } + + @Override + public boolean containsAttribute(String attribute) { + return attributes.containsKey(attribute); + } + + @Override + public String getAttribute(String attribute) { + return attributes.get(attribute); + } + + + public static class RoutingParameter { + public String id; + public String name; + public String description; + public RoutingParameterType type; + public String[] possibleValues; + public String[] possibleValueDescriptions; + public Object value; + } + + private class RouteEvaluationRule { + + private List tag = new ArrayList(); + private List values = new ArrayList(); + private List parameters = new ArrayList() ; + + //// evaluation variables + private boolean parameterValue = true; + private TByteArrayList notType = new TByteArrayList(); + private TIntArrayList sortedTypeArrays = new TIntArrayList(); + + public void newEvaluationContext(){ + evaluateParameterExpr(); + sortedTypeArrays.clear(); + notType.clear(); + for(int i = 0; i defParams = NewGeneralRouter.this.parameters; + for(String p : parameters) { + boolean not = false; + if(p.startsWith("-")) { + not = true; + p = p.substring(1); + } + boolean val = false; + if(defParams.containsKey(p)) { + RoutingParameter t = defParams.get(p); + val = t.type == RoutingParameterType.BOOLEAN && t.value != null && ((Boolean)t.value).booleanValue(); + } + if(not && val){ + parameterValue = false; + break; + } else if(!not && !val){ + parameterValue = false; + break; + } + + } + } + + public boolean isAlwaysFalse() { + return !parameterValue; + } + + public boolean isAlwaysTrue() { + return parameterValue && isConst(); + } + + public boolean isConst(){ + return tag == null; + } + + public boolean matches(int[] types) { + if(isAlwaysFalse()){ + return false; + } + // TODO + // TODO + return true; + } + + } + + private class RouteAttributeContext { + List rules = new ArrayList(); + List values = new ArrayList(); + + public void newEvaluationContext(){ + for (int k = 0; k < rules.size(); k++) { + rules.get(k).newEvaluationContext(); + } + } + + public Object evaluate(int[] types) { + for (int k = 0; k < rules.size(); k++) { + if(rules.get(k).matches(types)){ + return values.get(k); + } + } + return null; + } + + public int evaluateInt(int[] types, int defValue) { + Object o = evaluate(types); + if(o == null) { + return defValue; + } + return ((Number)o).intValue(); + } + + public float evaluateFloat(int[] types, float defValue) { + Object o = evaluate(types); + if(o == null) { + return defValue; + } + return ((Float)o).intValue(); + } + + } + + +} + diff --git a/OsmAnd-java/src/net/osmand/router/RouteCalculationProgress.java b/OsmAnd-java/src/net/osmand/router/RouteCalculationProgress.java new file mode 100644 index 0000000000..8e86537c99 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/RouteCalculationProgress.java @@ -0,0 +1,18 @@ +package net.osmand.router; + +public class RouteCalculationProgress { + + public int segmentNotFound = -1; + public float distanceFromBegin; + public int directSegmentQueueSize; + public float distanceFromEnd; + public int reverseSegmentQueueSize; + public float totalEstimatedDistance = 0; + + public float routingCalculatedTime = 0; + public int loadedTiles = 0; + public int visitedSegments = 0; + + public boolean isCancelled; + +} diff --git a/OsmAnd-java/src/net/osmand/router/RoutePlannerFrontEnd.java b/OsmAnd-java/src/net/osmand/router/RoutePlannerFrontEnd.java new file mode 100644 index 0000000000..4c03aa413c --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/RoutePlannerFrontEnd.java @@ -0,0 +1,279 @@ +package net.osmand.router; + + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.osmand.PlatformUtil; +import net.osmand.binary.BinaryMapRouteReaderAdapter; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.RouteDataObject; +import net.osmand.data.LatLon; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + +public class RoutePlannerFrontEnd { + + private boolean useOldVersion; + protected static final Log log = PlatformUtil.getLog(BinaryRoutePlannerOld.class); + + public RoutePlannerFrontEnd(boolean useOldVersion) { + this.useOldVersion = useOldVersion; + } + + private static double squareRootDist(int x1, int y1, int x2, int y2) { + // translate into meters + double dy = MapUtils.convert31YToMeters(y1, y2); + double dx = MapUtils.convert31XToMeters(x1, x2); + return Math.sqrt(dx * dx + dy * dy); +// return measuredDist(x1, y1, x2, y2); + } + + private static double calculateProjection(int xA, int yA, int xB, int yB, int xC, int yC) { + // Scalar multiplication between (AB, AC) + double multiple = MapUtils.convert31XToMeters(xB, xA) * MapUtils.convert31XToMeters(xC, xA) + + MapUtils.convert31YToMeters(yB, yA) * MapUtils.convert31YToMeters(yC, yA); + return multiple; + } + private static double squareDist(int x1, int y1, int x2, int y2) { + // translate into meters + double dy = MapUtils.convert31YToMeters(y1, y2); + double dx = MapUtils. convert31XToMeters(x1, x2); + return dx * dx + dy * dy; + } + + public RouteSegment findRouteSegment(double lat, double lon, RoutingContext ctx) throws IOException { + int px = MapUtils.get31TileNumberX(lon); + int py = MapUtils.get31TileNumberY(lat); + ArrayList dataObjects = new ArrayList(); + ctx.loadTileData(px, py, 17, dataObjects); + if (dataObjects.isEmpty()) { + ctx.loadTileData(px, py, 15, dataObjects); + } + RouteSegment road = null; + double sdist = 0; + int foundProjX = 0; + int foundProjY = 0; + + for (RouteDataObject r : dataObjects) { + if (r.getPointsLength() > 1) { + for (int j = 1; j < r.getPointsLength(); j++) { + double mDist = squareRootDist(r.getPoint31XTile(j), r.getPoint31YTile(j), r.getPoint31XTile(j - 1), + r.getPoint31YTile(j - 1)); + int prx = r.getPoint31XTile(j); + int pry = r.getPoint31YTile(j); + double projection = calculateProjection(r.getPoint31XTile(j - 1), r.getPoint31YTile(j - 1), r.getPoint31XTile(j), + r.getPoint31YTile(j), px, py); + if (projection < 0) { + prx = r.getPoint31XTile(j - 1); + pry = r.getPoint31YTile(j - 1); + } else if (projection >= mDist * mDist) { + prx = r.getPoint31XTile(j); + pry = r.getPoint31YTile(j); + } else { + prx = (int) (r.getPoint31XTile(j - 1) + (r.getPoint31XTile(j) - r.getPoint31XTile(j - 1)) + * (projection / (mDist * mDist))); + pry = (int) (r.getPoint31YTile(j - 1) + (r.getPoint31YTile(j) - r.getPoint31YTile(j - 1)) + * (projection / (mDist * mDist))); + } + double currentsDist = squareDist(prx, pry, px, py); + if (road == null || currentsDist < sdist) { + RouteDataObject ro = new RouteDataObject(r); + road = new RouteSegment(ro, j); + ro.insert(j, prx, pry); + sdist = currentsDist; + foundProjX = prx; + foundProjY = pry; + } + } + } + } + if (road != null) { + // re-register the best road because one more point was inserted + ctx.registerRouteDataObject(road.getRoad()); + } + return road; + } + + public List searchRoute(final RoutingContext ctx, LatLon start, LatLon end, List intermediates, boolean leftSideNavigation) throws IOException, InterruptedException { + if(ctx.calculationProgress == null) { + ctx.calculationProgress = new RouteCalculationProgress(); + } + if((intermediates == null || intermediates.isEmpty()) && useOldVersion && ctx.nativeLib != null) { + ctx.startX = MapUtils.get31TileNumberX(start.getLongitude()); + ctx.startY = MapUtils.get31TileNumberY(start.getLatitude()); + ctx.targetX = MapUtils.get31TileNumberX(end.getLongitude()); + ctx.targetY = MapUtils.get31TileNumberY(end.getLatitude()); + List res = runNativeRouting(ctx, leftSideNavigation); + if(res != null) { + new RouteResultPreparation().printResults(ctx, start, end, res); + } + return res; + } + int indexNotFound = 0; + List points = new ArrayList(); + if(!addSegment(start, ctx, indexNotFound++, points)){ + return null; + } + if (intermediates != null) { + for (LatLon l : intermediates) { + if (!addSegment(l, ctx, indexNotFound++, points)) { + return null; + } + } + } + if(!addSegment(end, ctx, indexNotFound++, points)){ + return null; + } + List res = searchRoute(ctx, points, leftSideNavigation); + if(res != null) { + new RouteResultPreparation().printResults(ctx, start, end, res); + } + return res; + } + + private boolean addSegment(LatLon s, RoutingContext ctx, int indexNotFound, List res) throws IOException { + RouteSegment f = findRouteSegment(s.getLatitude(), s.getLongitude(), ctx); + if(f == null){ + ctx.calculationProgress.segmentNotFound = indexNotFound; + return false; + } else { + log.info("Route segment found " + f.getRoad().id + " " + f.getRoad().getName()); + res.add(f); + return true; + } + + } + + private List searchRouteInternalPrepare(final RoutingContext ctx, RouteSegment start, RouteSegment end, boolean leftSideNavigation) throws IOException, InterruptedException { + ctx.targetX = end.road.getPoint31XTile(end.getSegmentStart()); + ctx.targetY = end.road.getPoint31YTile(end.getSegmentStart()); + ctx.startX = start.road.getPoint31XTile(start.getSegmentStart()); + ctx.startY = start.road.getPoint31YTile(start.getSegmentStart()); + if (ctx.nativeLib != null && useOldVersion) { + return runNativeRouting(ctx, leftSideNavigation); + } else { + refreshProgressDistance(ctx); + // Split into 2 methods to let GC work in between + if(useOldVersion) { + new BinaryRoutePlannerOld().searchRouteInternal(ctx, start, end); + } else { + ctx.finalRouteSegment = new BinaryRoutePlanner().searchRouteInternal(ctx, start, end); + } + // 4. Route is found : collect all segments and prepare result + return new RouteResultPreparation().prepareResult(ctx, ctx.finalRouteSegment, leftSideNavigation); + } + } + + private void refreshProgressDistance(RoutingContext ctx) { + if(ctx.calculationProgress != null) { + ctx.calculationProgress.distanceFromBegin = 0; + ctx.calculationProgress.distanceFromEnd = 0; + ctx.calculationProgress.reverseSegmentQueueSize = 0; + ctx.calculationProgress.directSegmentQueueSize = 0; + float rd = (float) squareRootDist(ctx.startX, ctx.startY, ctx.targetX, ctx.targetY); + float speed = 0.9f * ctx.config.router.getMaxDefaultSpeed(); + ctx.calculationProgress.totalEstimatedDistance = (float) (rd / speed); + } + + } + + private List runNativeRouting(final RoutingContext ctx, boolean leftSideNavigation) throws IOException { + refreshProgressDistance(ctx); + RouteRegion[] regions = ctx.reverseMap.keySet().toArray(new BinaryMapRouteReaderAdapter.RouteRegion[ctx.reverseMap.size()]); + RouteSegmentResult[] res = ctx.nativeLib.runNativeRouting(ctx.startX, ctx.startY, ctx.targetX, ctx.targetY, + ctx.config, regions, ctx.calculationProgress); + ArrayList result = new ArrayList(Arrays.asList(res)); + ctx.routingTime = ctx.calculationProgress.routingCalculatedTime; + ctx.visitedSegments = ctx.calculationProgress.visitedSegments; + ctx.loadedTiles = ctx.calculationProgress.loadedTiles; + return new RouteResultPreparation().prepareResult(ctx, leftSideNavigation, result); + } + + + private List searchRoute(final RoutingContext ctx, List points, boolean leftSideNavigation) throws IOException, InterruptedException { + if(points.size() > 2) { + ArrayList firstPartRecalculatedRoute = null; + ArrayList restPartRecalculatedRoute = null; + if (ctx.previouslyCalculatedRoute != null) { + List prev = ctx.previouslyCalculatedRoute; + long id = points.get(1).getRoad().id; + int ss = points.get(1).getSegmentStart(); + for (int i = 0; i < prev.size(); i++) { + RouteSegmentResult rsr = prev.get(i); + if (id == rsr.getObject().getId() && ss == rsr.getEndPointIndex()) { + firstPartRecalculatedRoute = new ArrayList(i + 1); + restPartRecalculatedRoute = new ArrayList(prev.size() - i); + for(int k = 0; k < prev.size(); k++) { + if(k <= i) { + firstPartRecalculatedRoute.add(prev.get(k)); + } else { + restPartRecalculatedRoute.add(prev.get(k)); + } + } + break; + } + } + } + List results = new ArrayList(); + for (int i = 0; i < points.size() - 1; i++) { + RoutingContext local = new RoutingContext(ctx); + if(i == 0) { + local.previouslyCalculatedRoute = firstPartRecalculatedRoute; + } + local.visitor = ctx.visitor; + local.calculationProgress = ctx.calculationProgress; + List res = searchRouteInternalPrepare(local, points.get(i), points.get(i + 1), leftSideNavigation); + + results.addAll(res); + ctx.distinctLoadedTiles += local.distinctLoadedTiles; + ctx.loadedTiles += local.loadedTiles; + ctx.visitedSegments += local.visitedSegments; + ctx.loadedPrevUnloadedTiles += local.loadedPrevUnloadedTiles; + ctx.timeToCalculate += local.timeToCalculate; + ctx.timeToLoad += local.timeToLoad; + ctx.timeToLoadHeaders += local.timeToLoadHeaders; + ctx.relaxedSegments += local.relaxedSegments; + ctx.routingTime += local.routingTime; + + local.unloadAllData(ctx); + if(restPartRecalculatedRoute != null) { + results.addAll(restPartRecalculatedRoute); + break; + } + } + ctx.unloadAllData(); + return results; + } + return searchRoute(ctx, points.get(0), points.get(1), leftSideNavigation); + } + + @SuppressWarnings("static-access") + private List searchRoute(final RoutingContext ctx, RouteSegment start, RouteSegment end, boolean leftSideNavigation) throws IOException, InterruptedException { + if(ctx.SHOW_GC_SIZE){ + long h1 = ctx.runGCUsedMemory(); + float mb = (1 << 20); + log.warn("Used before routing " + h1 / mb+ " actual"); + } + List result = searchRouteInternalPrepare(ctx, start, end, leftSideNavigation); + if (RoutingContext.SHOW_GC_SIZE) { + int sz = ctx.global.size; + log.warn("Subregion size " + ctx.subregionTiles.size() + " " + " tiles " + ctx.indexedSubregions.size()); + ctx.runGCUsedMemory(); + long h1 = ctx.runGCUsedMemory(); + ctx.unloadAllData(); + ctx.runGCUsedMemory(); + long h2 = ctx.runGCUsedMemory(); + float mb = (1 << 20); + log.warn("Unload context : estimated " + sz / mb + " ?= " + (h1 - h2) / mb + " actual"); + } + return result; + } + + + +} diff --git a/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java new file mode 100644 index 0000000000..19dfd4f533 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java @@ -0,0 +1,587 @@ +package net.osmand.router; + +import java.io.IOException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import net.osmand.binary.BinaryMapIndexReader; +import net.osmand.binary.RouteDataObject; +import net.osmand.data.LatLon; +import net.osmand.router.BinaryRoutePlanner.FinalRouteSegment; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.util.MapUtils; + +public class RouteResultPreparation { + + public static boolean PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true; + private static final float TURN_DEGREE_MIN = 45; + /** + * Helper method to prepare final result + */ + List prepareResult(RoutingContext ctx, FinalRouteSegment finalSegment,boolean leftside) throws IOException { + List result = convertFinalSegmentToResults(ctx, finalSegment); + prepareResult(ctx, leftside, result); + return result; + } + + List prepareResult(RoutingContext ctx, boolean leftside, List result) throws IOException { + validateAllPointsConnected(result); + splitRoadsAndAttachRoadSegments(ctx, result); + // calculate time + calculateTimeSpeed(ctx, result); + + addTurnInfo(leftside, result); + return result; + } + + private void calculateTimeSpeed(RoutingContext ctx, List result) throws IOException { + for (int i = 0; i < result.size(); i++) { + RouteSegmentResult rr = result.get(i); + RouteDataObject road = rr.getObject(); + double distOnRoadToPass = 0; + double speed = ctx.getRouter().defineSpeed(road); + if (speed == 0) { + speed = ctx.getRouter().getMinDefaultSpeed(); + } + boolean plus = rr.getStartPointIndex() < rr.getEndPointIndex(); + int next; + double distance = 0; + for (int j = rr.getStartPointIndex(); j != rr.getEndPointIndex(); j = next) { + next = plus ? j + 1 : j - 1; + double d = measuredDist(road.getPoint31XTile(j), road.getPoint31YTile(j), road.getPoint31XTile(next), + road.getPoint31YTile(next)); + distance += d; + double obstacle = ctx.getRouter().defineObstacle(road, j); + if (obstacle < 0) { + obstacle = 0; + } + distOnRoadToPass += d / speed + obstacle; + + } + // last point turn time can be added + // if(i + 1 < result.size()) { distOnRoadToPass += ctx.getRouter().calculateTurnTime(); } + rr.setSegmentTime((float) distOnRoadToPass); + rr.setSegmentSpeed((float) speed); + rr.setDistance((float) distance); + } + } + + private void splitRoadsAndAttachRoadSegments(RoutingContext ctx, List result) throws IOException { + for (int i = 0; i < result.size(); i++) { + if (ctx.checkIfMemoryLimitCritical(ctx.config.memoryLimitation)) { + ctx.unloadUnusedTiles(ctx.config.memoryLimitation); + } + RouteSegmentResult rr = result.get(i); + RouteDataObject road = rr.getObject(); + checkAndInitRouteRegion(ctx, road); + boolean plus = rr.getStartPointIndex() < rr.getEndPointIndex(); + int next; + for (int j = rr.getStartPointIndex(); j != rr.getEndPointIndex(); j = next) { + next = plus ? j + 1 : j - 1; + if (j == rr.getStartPointIndex()) { + attachRoadSegments(ctx, result, i, j, plus); + } + if (next != rr.getEndPointIndex()) { + attachRoadSegments(ctx, result, i, next, plus); + } + List attachedRoutes = rr.getAttachedRoutes(next); + if (next != rr.getEndPointIndex() && !rr.getObject().roundabout() && attachedRoutes != null) { + float before = rr.getBearing(next, !plus); + float after = rr.getBearing(next, plus); + boolean straight = Math.abs(MapUtils.degreesDiff(before + 180, after)) < TURN_DEGREE_MIN; + boolean isSplit = false; + // split if needed + for (RouteSegmentResult rs : attachedRoutes) { + double diff = MapUtils.degreesDiff(before + 180, rs.getBearingBegin()); + if (Math.abs(diff) <= TURN_DEGREE_MIN) { + isSplit = true; + } else if (!straight && Math.abs(diff) < 100) { + isSplit = true; + } + } + if (isSplit) { + int endPointIndex = rr.getEndPointIndex(); + RouteSegmentResult split = new RouteSegmentResult(rr.getObject(), next, endPointIndex); + split.copyPreattachedRoutes(rr, Math.abs(next - rr.getStartPointIndex())); + rr.setEndPointIndex(next); + result.add(i + 1, split); + i++; + // switch current segment to the splitted + rr = split; + } + } + } + } + } + + private void checkAndInitRouteRegion(RoutingContext ctx, RouteDataObject road) throws IOException { + BinaryMapIndexReader reader = ctx.reverseMap.get(road.region); + if(reader != null) { + reader.initRouteRegion(road.region); + } + } + + private void validateAllPointsConnected(List result) { + for (int i = 1; i < result.size(); i++) { + RouteSegmentResult rr = result.get(i); + RouteSegmentResult pr = result.get(i - 1); + double d = MapUtils.getDistance(pr.getPoint(pr.getEndPointIndex()), rr.getPoint(rr.getStartPointIndex())); + if (d > 0) { + System.err.println("Points are not connected : " + pr.getObject() + "(" + pr.getEndPointIndex() + ") -> " + rr.getObject() + + "(" + rr.getStartPointIndex() + ") " + d + " meters"); + } + } + } + + private List convertFinalSegmentToResults(RoutingContext ctx, FinalRouteSegment finalSegment) { + List result = new ArrayList(); + if (finalSegment != null) { + ctx.routingTime = finalSegment.distanceFromStart; + println("Routing calculated time distance " + finalSegment.distanceFromStart); + // Get results from opposite direction roads + RouteSegment segment = finalSegment.reverseWaySearch ? finalSegment : finalSegment.opposite.getParentRoute(); + int parentSegmentStart = finalSegment.reverseWaySearch ? finalSegment.opposite.getSegmentStart() : finalSegment.opposite.getParentSegmentEnd(); + while (segment != null) { + RouteSegmentResult res = new RouteSegmentResult(segment.road, parentSegmentStart, segment.getSegmentStart()); + parentSegmentStart = segment.getParentSegmentEnd(); + segment = segment.getParentRoute(); + addRouteSegmentToResult(result, res, false); + } + // reverse it just to attach good direction roads + Collections.reverse(result); + + segment = finalSegment.reverseWaySearch ? finalSegment.opposite.getParentRoute() : finalSegment; + int parentSegmentEnd = finalSegment.reverseWaySearch ? finalSegment.opposite.getParentSegmentEnd() : finalSegment.opposite.getSegmentStart(); + + while (segment != null) { + RouteSegmentResult res = new RouteSegmentResult(segment.road, segment.getSegmentStart(), parentSegmentEnd); + parentSegmentEnd = segment.getParentSegmentEnd(); + segment = segment.getParentRoute(); + // happens in smart recalculation + addRouteSegmentToResult(result, res, true); + } + Collections.reverse(result); + + } + return result; + } + + private void addRouteSegmentToResult(List result, RouteSegmentResult res, boolean reverse) { + if (res.getStartPointIndex() != res.getEndPointIndex()) { + if (result.size() > 0) { + RouteSegmentResult last = result.get(result.size() - 1); + if (last.getObject().id == res.getObject().id) { + if (combineTwoSegmentResult(res, last, reverse)) { + return; + } + } + } + result.add(res); + } + } + + private boolean combineTwoSegmentResult(RouteSegmentResult toAdd, RouteSegmentResult previous, + boolean reverse) { + boolean ld = previous.getEndPointIndex() > previous.getStartPointIndex(); + boolean rd = toAdd.getEndPointIndex() > toAdd.getStartPointIndex(); + if (rd == ld) { + if (toAdd.getStartPointIndex() == previous.getEndPointIndex() && !reverse) { + previous.setEndPointIndex(toAdd.getEndPointIndex()); + return true; + } else if (toAdd.getEndPointIndex() == previous.getStartPointIndex() && reverse) { + previous.setStartPointIndex(toAdd.getStartPointIndex()); + return true; + } + } + return false; + } + + void printResults(RoutingContext ctx, LatLon start, LatLon end, List result) { + float completeTime = 0; + float completeDistance = 0; + for(RouteSegmentResult r : result) { + completeTime += r.getSegmentTime(); + completeDistance += r.getDistance(); + } + + println("ROUTE : "); + double startLat = start.getLatitude(); + double startLon = start.getLongitude(); + double endLat = end.getLatitude(); + double endLon = end.getLongitude(); + StringBuilder add = new StringBuilder(); + add.append("loadedTiles = \"").append(ctx.loadedTiles).append("\" "); + add.append("visitedSegments = \"").append(ctx.visitedSegments).append("\" "); + add.append("complete_distance = \"").append(completeDistance).append("\" "); + add.append("complete_time = \"").append(completeTime).append("\" "); + add.append("routing_time = \"").append(ctx.routingTime).append("\" "); + println(MessageFormat.format("", startLat + + "", startLon + "", endLat + "", endLon + "", ctx.config.routerName, add.toString())); + if (PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST) { + for (RouteSegmentResult res : result) { + String name = res.getObject().getName(); + String ref = res.getObject().getRef(); + if (name == null) { + name = ""; + } + if (ref != null) { + name += " (" + ref + ") "; + } + StringBuilder additional = new StringBuilder(); + additional.append("time = \"").append(res.getSegmentTime()).append("\" "); + additional.append("name = \"").append(name).append("\" "); +// float ms = res.getSegmentSpeed(); + float ms = res.getObject().getMaximumSpeed(); + if(ms > 0) { + additional.append("maxspeed = \"").append(ms * 3.6f).append("\" ").append(res.getObject().getHighway()).append(" "); + } + additional.append("distance = \"").append(res.getDistance()).append("\" "); + if (res.getTurnType() != null) { + additional.append("turn = \"").append(res.getTurnType()).append("\" "); + additional.append("turn_angle = \"").append(res.getTurnType().getTurnAngle()).append("\" "); + if (res.getTurnType().getLanes() != null) { + additional.append("lanes = \"").append(Arrays.toString(res.getTurnType().getLanes())).append("\" "); + } + } + additional.append("start_bearing = \"").append(res.getBearingBegin()).append("\" "); + additional.append("end_bearing = \"").append(res.getBearingEnd()).append("\" "); + additional.append("description = \"").append(res.getDescription()).append("\" "); + println(MessageFormat.format("\t", (res.getObject().getId()) + "", + res.getStartPointIndex() + "", res.getEndPointIndex() + "", additional.toString())); + } + } + println(""); + } + + + private void addTurnInfo(boolean leftside, List result) { + int prevSegment = -1; + float dist = 0; + int next = 1; + for (int i = 0; i <= result.size(); i = next) { + TurnType t = null; + next = i + 1; + if (i < result.size()) { + t = getTurnInfo(result, i, leftside); + // justify turn + if(t != null && i < result.size() - 1) { + boolean tl = TurnType.TL.equals(t.getValue()); + boolean tr = TurnType.TR.equals(t.getValue()); + if(tl || tr) { + TurnType tnext = getTurnInfo(result, i + 1, leftside); + if(tnext != null && result.get(i).getDistance() < 35) { + if(tl && TurnType.TL.equals(tnext.getValue()) ) { + next = i + 2; + t = TurnType.valueOf(TurnType.TU, false); + } else if(tr && TurnType.TR.equals(tnext.getValue()) ) { + next = i + 2; + t = TurnType.valueOf(TurnType.TU, true); + } + } + } + } + result.get(i).setTurnType(t); + } + if (t != null || i == result.size()) { + if (prevSegment >= 0) { + String turn = result.get(prevSegment).getTurnType().toString(); + if (result.get(prevSegment).getTurnType().getLanes() != null) { + turn += Arrays.toString(result.get(prevSegment).getTurnType().getLanes()); + } + result.get(prevSegment).setDescription(turn + MessageFormat.format(" and go {0,number,#.##} meters", dist)); + if(result.get(prevSegment).getTurnType().isSkipToSpeak()) { + result.get(prevSegment).setDescription("-*"+result.get(prevSegment).getDescription()); + } + } + prevSegment = i; + dist = 0; + } + if (i < result.size()) { + dist += result.get(i).getDistance(); + } + } + } + + private static final int MAX_SPEAK_PRIORITY = 5; + private int highwaySpeakPriority(String highway) { + if(highway == null || highway.endsWith("track") || highway.endsWith("services") || highway.endsWith("service") + || highway.endsWith("path")) { + return MAX_SPEAK_PRIORITY; + } + if (highway.endsWith("_link") || highway.endsWith("unclassified") || highway.endsWith("road") + || highway.endsWith("living_street") || highway.endsWith("residential") ) { + return 1; + } + return 0; + } + + + private TurnType getTurnInfo(List result, int i, boolean leftSide) { + if (i == 0) { + return TurnType.valueOf(TurnType.C, false); + } + RouteSegmentResult prev = result.get(i - 1) ; + if(prev.getObject().roundabout()) { + // already analyzed! + return null; + } + RouteSegmentResult rr = result.get(i); + if (rr.getObject().roundabout()) { + return processRoundaboutTurn(result, i, leftSide, prev, rr); + } + TurnType t = null; + if (prev != null) { + boolean noAttachedRoads = rr.getAttachedRoutes(rr.getStartPointIndex()).size() == 0; + // add description about turn + double mpi = MapUtils.degreesDiff(prev.getBearingEnd(), rr.getBearingBegin()); + if(noAttachedRoads){ + // TODO VICTOR : look at the comment inside direction route +// double begin = rr.getObject().directionRoute(rr.getStartPointIndex(), rr.getStartPointIndex() < +// rr.getEndPointIndex(), 25); +// mpi = MapUtils.degreesDiff(prev.getBearingEnd(), begin); + } + if (mpi >= TURN_DEGREE_MIN) { + if (mpi < 60) { + t = TurnType.valueOf(TurnType.TSLL, leftSide); + } else if (mpi < 120) { + t = TurnType.valueOf(TurnType.TL, leftSide); + } else if (mpi < 135 || leftSide) { + t = TurnType.valueOf(TurnType.TSHL, leftSide); + } else { + t = TurnType.valueOf(TurnType.TU, leftSide); + } + } else if (mpi < -TURN_DEGREE_MIN) { + if (mpi > -60) { + t = TurnType.valueOf(TurnType.TSLR, leftSide); + } else if (mpi > -120) { + t = TurnType.valueOf(TurnType.TR, leftSide); + } else if (mpi > -135 || !leftSide) { + t = TurnType.valueOf(TurnType.TSHR, leftSide); + } else { + t = TurnType.valueOf(TurnType.TU, leftSide); + } + } else { + t = attachKeepLeftInfoAndLanes(leftSide, prev, rr, t); + } + if (t != null) { + t.setTurnAngle((float) -mpi); + } + } + return t; + } + + + private TurnType processRoundaboutTurn(List result, int i, boolean leftSide, RouteSegmentResult prev, + RouteSegmentResult rr) { + int exit = 1; + RouteSegmentResult last = rr; + for (int j = i; j < result.size(); j++) { + RouteSegmentResult rnext = result.get(j); + last = rnext; + if (rnext.getObject().roundabout()) { + boolean plus = rnext.getStartPointIndex() < rnext.getEndPointIndex(); + int k = rnext.getStartPointIndex(); + if (j == i) { + // first exit could be immediately after roundabout enter +// k = plus ? k + 1 : k - 1; + } + while (k != rnext.getEndPointIndex()) { + int attachedRoads = rnext.getAttachedRoutes(k).size(); + if(attachedRoads > 0) { + exit++; + } + k = plus ? k + 1 : k - 1; + } + } else { + break; + } + } + // combine all roundabouts + TurnType t = TurnType.valueOf("EXIT"+exit, leftSide); + t.setTurnAngle((float) MapUtils.degreesDiff(last.getBearingBegin(), prev.getBearingEnd())) ; + return t; + } + + + private TurnType attachKeepLeftInfoAndLanes(boolean leftSide, RouteSegmentResult prevSegm, RouteSegmentResult currentSegm, TurnType t) { + // keep left/right + int[] lanes = null; + boolean kl = false; + boolean kr = false; + List attachedRoutes = currentSegm.getAttachedRoutes(currentSegm.getStartPointIndex()); + int ls = prevSegm.getObject().getLanes(); + if(ls >= 0 && prevSegm.getObject().getOneway() == 0) { + ls = (ls + 1) / 2; + } + int left = 0; + int right = 0; + boolean speak = false; + int speakPriority = Math.max(highwaySpeakPriority(prevSegm.getObject().getHighway()), highwaySpeakPriority(currentSegm.getObject().getHighway())); + if (attachedRoutes != null) { + for (RouteSegmentResult attached : attachedRoutes) { + double ex = MapUtils.degreesDiff(attached.getBearingBegin(), currentSegm.getBearingBegin()); + double mpi = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), attached.getBearingBegin())); + int rsSpeakPriority = highwaySpeakPriority(attached.getObject().getHighway()); + if (rsSpeakPriority != MAX_SPEAK_PRIORITY || speakPriority == MAX_SPEAK_PRIORITY) { + if ((ex < TURN_DEGREE_MIN || mpi < TURN_DEGREE_MIN) && ex >= 0) { + kl = true; + int lns = attached.getObject().getLanes(); + if(attached.getObject().getOneway() == 0) { + lns = (lns + 1) / 2; + } + if (lns > 0) { + right += lns; + } + speak = speak || rsSpeakPriority <= speakPriority; + } else if ((ex > -TURN_DEGREE_MIN || mpi < TURN_DEGREE_MIN) && ex <= 0) { + kr = true; + int lns = attached.getObject().getLanes(); + if(attached.getObject().getOneway() == 0) { + lns = (lns + 1) / 2; + } + if (lns > 0) { + left += lns; + } + speak = speak || rsSpeakPriority <= speakPriority; + } + } + } + } + if(kr && left == 0) { + left = 1; + } else if(kl && right == 0) { + right = 1; + } + int current = currentSegm.getObject().getLanes(); + if(currentSegm.getObject().getOneway() == 0) { + current = (current + 1) / 2; + } + if (current <= 0) { + current = 1; + } +// if(ls >= 0 /*&& current + left + right >= ls*/){ + lanes = new int[current + left + right]; + ls = current + left + right; + for(int it=0; it< ls; it++) { + if(it < left || it >= left + current) { + lanes[it] = 0; + } else { + lanes[it] = 1; + } + } + // sometimes links are + if ((current <= left + right) && (left > 1 || right > 1)) { + speak = true; + } +// } + + double devation = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), currentSegm.getBearingBegin())); + if (kl) { + t = TurnType.valueOf(devation > 5 ? TurnType.TSLL : TurnType.KL, leftSide); + t.setSkipToSpeak(!speak); + } + if (kr) { + t = TurnType.valueOf(devation > 5 ? TurnType.TSLR : TurnType.KR, leftSide); + t.setSkipToSpeak(!speak); + } + if (t != null && lanes != null) { + t.setLanes(lanes); + } + return t; + } + + + private void attachRoadSegments(RoutingContext ctx, List result, int routeInd, int pointInd, boolean plus) throws IOException { + RouteSegmentResult rr = result.get(routeInd); + RouteDataObject road = rr.getObject(); + long nextL = pointInd < road.getPointsLength() - 1 ? getPoint(road, pointInd + 1) : 0; + long prevL = pointInd > 0 ? getPoint(road, pointInd - 1) : 0; + + // attach additional roads to represent more information about the route + RouteSegmentResult previousResult = null; + + // by default make same as this road id + long previousRoadId = road.getId(); + if (pointInd == rr.getStartPointIndex() && routeInd > 0) { + previousResult = result.get(routeInd - 1); + previousRoadId = previousResult.getObject().getId(); + if (previousRoadId != road.getId()) { + if (previousResult.getStartPointIndex() < previousResult.getEndPointIndex() + && previousResult.getEndPointIndex() < previousResult.getObject().getPointsLength() - 1) { + rr.attachRoute(pointInd, new RouteSegmentResult(previousResult.getObject(), previousResult.getEndPointIndex(), + previousResult.getObject().getPointsLength() - 1)); + } else if (previousResult.getStartPointIndex() > previousResult.getEndPointIndex() + && previousResult.getEndPointIndex() > 0) { + rr.attachRoute(pointInd, new RouteSegmentResult(previousResult.getObject(), previousResult.getEndPointIndex(), 0)); + } + } + } + Iterator it; + if(rr.getPreAttachedRoutes(pointInd) != null) { + final RouteSegmentResult[] list = rr.getPreAttachedRoutes(pointInd); + it = new Iterator() { + int i = 0; + @Override + public boolean hasNext() { + return i < list.length; + } + + @Override + public RouteSegment next() { + RouteSegmentResult r = list[i++]; + return new RouteSegment(r.getObject(), r.getStartPointIndex()); + } + + @Override + public void remove() { + } + }; + } else { + RouteSegment rt = ctx.loadRouteSegment(road.getPoint31XTile(pointInd), road.getPoint31YTile(pointInd), ctx.config.memoryLimitation); + it = rt == null ? null : rt.getIterator(); + } + // try to attach all segments except with current id + while (it != null && it.hasNext()) { + RouteSegment routeSegment = it.next(); + if (routeSegment.road.getId() != road.getId() && routeSegment.road.getId() != previousRoadId) { + RouteDataObject addRoad = routeSegment.road; + checkAndInitRouteRegion(ctx, addRoad); + // TODO restrictions can be considered as well + int oneWay = ctx.getRouter().isOneWay(addRoad); + if (oneWay >= 0 && routeSegment.getSegmentStart() < addRoad.getPointsLength() - 1) { + long pointL = getPoint(addRoad, routeSegment.getSegmentStart() + 1); + if(pointL != nextL && pointL != prevL) { + // if way contains same segment (nodes) as different way (do not attach it) + rr.attachRoute(pointInd, new RouteSegmentResult(addRoad, routeSegment.getSegmentStart(), addRoad.getPointsLength() - 1)); + } + } + if (oneWay <= 0 && routeSegment.getSegmentStart() > 0) { + long pointL = getPoint(addRoad, routeSegment.getSegmentStart() - 1); + // if way contains same segment (nodes) as different way (do not attach it) + if(pointL != nextL && pointL != prevL) { + rr.attachRoute(pointInd, new RouteSegmentResult(addRoad, routeSegment.getSegmentStart(), 0)); + } + } + } + } + } + + private static void println(String logMsg) { +// log.info(logMsg); + System.out.println(logMsg); + } + + private long getPoint(RouteDataObject road, int pointInd) { + return (((long) road.getPoint31XTile(pointInd)) << 31) + (long) road.getPoint31YTile(pointInd); + } + + private static double measuredDist(int x1, int y1, int x2, int y2) { + return MapUtils.getDistance(MapUtils.get31LatitudeY(y1), MapUtils.get31LongitudeX(x1), + MapUtils.get31LatitudeY(y2), MapUtils.get31LongitudeX(x2)); + } +} diff --git a/OsmAnd-java/src/net/osmand/router/RouteSegmentResult.java b/OsmAnd-java/src/net/osmand/router/RouteSegmentResult.java new file mode 100644 index 0000000000..0086e9fcaf --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/RouteSegmentResult.java @@ -0,0 +1,169 @@ +package net.osmand.router; + + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.osmand.binary.RouteDataObject; +import net.osmand.data.LatLon; +import net.osmand.util.MapUtils; + + +public class RouteSegmentResult { + private final RouteDataObject object; + private int startPointIndex; + private int endPointIndex; + private List[] attachedRoutes; + private RouteSegmentResult[][] preAttachedRoutes; + private float segmentTime; + private float speed; + private float distance; + private String description = ""; + // this make not possible to make turns in between segment result for now + private TurnType turnType; + + + public RouteSegmentResult(RouteDataObject object, int startPointIndex, int endPointIndex) { + this.object = object; + this.startPointIndex = startPointIndex; + this.endPointIndex = endPointIndex; + updateCapacity(); + } + + + @SuppressWarnings("unchecked") + private void updateCapacity() { + int capacity = Math.abs(endPointIndex - startPointIndex) + 1; + List[] old = this.attachedRoutes ; + this.attachedRoutes = new List[capacity]; + if(old != null){ + System.arraycopy(old, 0, this.attachedRoutes, 0, Math.min(old.length, this.attachedRoutes.length)); + } + } + + public void attachRoute(int roadIndex, RouteSegmentResult r){ + int st = Math.abs(roadIndex - startPointIndex); + if(attachedRoutes[st] == null) { + attachedRoutes[st] = new ArrayList(); + } + attachedRoutes[st].add(r); + } + + public void copyPreattachedRoutes(RouteSegmentResult toCopy, int shift) { + if(toCopy.preAttachedRoutes != null) { + int l = toCopy.preAttachedRoutes.length - shift; + preAttachedRoutes = new RouteSegmentResult[l][]; + System.arraycopy(toCopy.preAttachedRoutes, shift, preAttachedRoutes, 0, l); + } + } + + public RouteSegmentResult[] getPreAttachedRoutes(int routeInd) { + int st = Math.abs(routeInd - startPointIndex); + if(preAttachedRoutes != null && st < preAttachedRoutes.length) { + return preAttachedRoutes[st]; + } + return null; + } + + public List getAttachedRoutes(int routeInd) { + int st = Math.abs(routeInd - startPointIndex); + List list = attachedRoutes[st]; + if(list == null) { + return Collections.emptyList(); + } + return list; + } + + public TurnType getTurnType() { + return turnType; + } + + public void setTurnType(TurnType turnType) { + this.turnType = turnType; + } + + public RouteDataObject getObject() { + return object; + } + + public float getSegmentTime() { + return segmentTime; + } + + public float getBearingBegin() { + return (float) (object.directionRoute(startPointIndex, startPointIndex < endPointIndex) / Math.PI * 180); + } + + public float getBearing(int point, boolean plus) { + return (float) (object.directionRoute(point, plus) / Math.PI * 180); + } + + public float getBearingEnd() { + return (float) (MapUtils.alignAngleDifference(object.directionRoute(endPointIndex, startPointIndex > endPointIndex) - Math.PI) / Math.PI * 180); + } + + public void setSegmentTime(float segmentTime) { + this.segmentTime = segmentTime; + } + + public LatLon getStartPoint() { + return convertPoint(object, startPointIndex); + } + + public int getStartPointIndex() { + return startPointIndex; + } + + public int getEndPointIndex() { + return endPointIndex; + } + + public LatLon getPoint(int i) { + return convertPoint(object, i); + } + + public LatLon getEndPoint() { + return convertPoint(object, endPointIndex); + } + + private LatLon convertPoint(RouteDataObject o, int ind){ + return new LatLon(MapUtils.get31LatitudeY(o.getPoint31YTile(ind)), MapUtils.get31LongitudeX(o.getPoint31XTile(ind))); + } + + public void setSegmentSpeed(float speed) { + this.speed = speed; + } + + public void setEndPointIndex(int endPointIndex) { + this.endPointIndex = endPointIndex; + updateCapacity(); + } + + public void setStartPointIndex(int startPointIndex) { + this.startPointIndex = startPointIndex; + updateCapacity(); + } + + public float getSegmentSpeed() { + return speed; + } + + public float getDistance() { + return distance; + } + + public void setDistance(float distance) { + this.distance = distance; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/router/RoutingConfiguration.java b/OsmAnd-java/src/net/osmand/router/RoutingConfiguration.java new file mode 100644 index 0000000000..794c9f3702 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/RoutingConfiguration.java @@ -0,0 +1,244 @@ +package net.osmand.router; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedHashMap; +import java.util.Map; + +import net.osmand.Collator; +import net.osmand.PlatformUtil; +import net.osmand.router.GeneralRouter.GeneralRouterProfile; +import net.osmand.util.Algorithms; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +public class RoutingConfiguration { + + public static final int DEFAULT_MEMORY_LIMIT = 30; + public Map attributes = new LinkedHashMap(); + + // 1. parameters of routing and different tweaks + // Influence on A* : f(x) + heuristicCoefficient*g(X) + public float heuristicCoefficient = 1; + + // 1.1 tile load parameters (should not affect routing) + public int ZOOM_TO_LOAD_TILES = 16; + public int memoryLimitation; + + // 1.2 Build A* graph in backward/forward direction (can affect results) + // 0 - 2 ways, 1 - direct way, -1 - reverse way + public int planRoadDirection = 0; + + // 1.3 Router specific coefficients and restrictions + public VehicleRouter router = new GeneralRouter(GeneralRouterProfile.CAR, new LinkedHashMap()); + public String routerName = ""; + + // 1.4 Used to calculate route in movement + public Double initialDirection; + + // 1.5 Recalculate distance help + public float recalculateDistance = 10000f; + + + + public static class Builder { + // Design time storage + private String defaultRouter = ""; + private Map routers = new LinkedHashMap(); + private Map attributes = new LinkedHashMap(); + + public RoutingConfiguration build(String router, int memoryLimitMB) { + return build(router, null, memoryLimitMB, new String[0]); + } + + public RoutingConfiguration build(String router, int memoryLimitMB, String[] specialization) { + return build(router, null, memoryLimitMB, specialization); + } + public RoutingConfiguration build(String router, Double direction, int memoryLimitMB, String[] specialization) { + if (!routers.containsKey(router)) { + router = defaultRouter; + } + RoutingConfiguration i = new RoutingConfiguration(); + if (routers.containsKey(router)) { + i.router = routers.get(router); + if (specialization != null) { + for (String s : specialization) { + i.router = i.router.specifyParameter(s); + } + } + i.routerName = router; + } + attributes.put("routerName", router); + i.attributes.putAll(attributes); + i.initialDirection = direction; + i.recalculateDistance = parseSilentFloat(getAttribute(i.router, "recalculateDistanceHelp"), i.recalculateDistance) ; + i.heuristicCoefficient = parseSilentFloat(getAttribute(i.router, "heuristicCoefficient"), i.heuristicCoefficient); + i.ZOOM_TO_LOAD_TILES = parseSilentInt(getAttribute(i.router, "zoomToLoadTiles"), i.ZOOM_TO_LOAD_TILES); + int desirable = parseSilentInt(getAttribute(i.router, "memoryLimitInMB"), 0); + if(desirable != 0) { + i.memoryLimitation = desirable * (1 << 20); + } else { + if(memoryLimitMB == 0) { + memoryLimitMB = DEFAULT_MEMORY_LIMIT; + } + i.memoryLimitation = memoryLimitMB * (1 << 20); + } + i.planRoadDirection = parseSilentInt(getAttribute(i.router, "planRoadDirection"), i.planRoadDirection); + + return i; + } + + private String getAttribute(VehicleRouter router, String propertyName) { + if (router.containsAttribute(propertyName)) { + return router.getAttribute(propertyName); + } + return attributes.get(propertyName); + } + + } + + private static int parseSilentInt(String t, int v) { + if (t == null || t.length() == 0) { + return v; + } + return Integer.parseInt(t); + } + + + private static float parseSilentFloat(String t, float v) { + if (t == null || t.length() == 0) { + return v; + } + return Float.parseFloat(t); + } + + + private static RoutingConfiguration.Builder DEFAULT; + + public static RoutingConfiguration.Builder getDefault() { + if (DEFAULT == null) { + try { + DEFAULT = parseFromInputStream(RoutingConfiguration.class.getResourceAsStream("routing.xml")); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + return DEFAULT; + } + + public static RoutingConfiguration.Builder parseFromInputStream(InputStream is) throws IOException, XmlPullParserException { + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + final RoutingConfiguration.Builder config = new RoutingConfiguration.Builder(); + GeneralRouter currentRouter = null; + String previousKey = null; + String previousTag = null; + int tok; + parser.setInput(is, "UTF-8"); + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + String name = parser.getName(); + if ("osmand_routing_config".equals(name)) { + config.defaultRouter = parser.getAttributeValue("", "defaultProfile"); + } else if ("routingProfile".equals(name)) { + currentRouter = parseRoutingProfile(parser, config); + } else if ("attribute".equals(name)) { + parseAttribute(parser, config, currentRouter); + previousKey = parser.getAttributeValue("", "name"); + previousTag = name; + } else if ("specialization".equals(name)) { + parseSpecialization(parser, currentRouter, previousKey, previousTag); + } else { + previousKey = parser.getAttributeValue("", "tag") + "$" + parser.getAttributeValue("", "value"); + previousTag = name; + if (parseCurrentRule(parser, currentRouter, previousKey, name)) { + + } else { + + } + } + } + } + return config; + } + + private static boolean parseCurrentRule(XmlPullParser parser, GeneralRouter currentRouter, String key, String name) { + if ("road".equals(name)) { + currentRouter.highwayPriorities.put(key, parseSilentFloat(parser.getAttributeValue("", "priority"), 1)); + currentRouter.highwaySpeed.put(key, parseSilentFloat(parser.getAttributeValue("", "speed"), 10)); + return true; + } else if ("obstacle".equals(name)) { + float penalty = parseSilentFloat(parser.getAttributeValue("", "penalty"), 0); + currentRouter.obstacles.put(key, penalty); + float routingPenalty = parseSilentFloat(parser.getAttributeValue("", "routingPenalty"), penalty); + currentRouter.routingObstacles.put(key, routingPenalty); + return true; + } else if ("avoid".equals(name)) { + float priority = parseSilentFloat(parser.getAttributeValue("", "decreasedPriority"), 0); + if (priority == 0) { + currentRouter.avoid.put(key, priority); + } else { + currentRouter.highwayPriorities.put(key, priority); + } + return true; + } else { + return false; + } + } + + private static void parseSpecialization(XmlPullParser parser, GeneralRouter currentRouter, String previousKey, String previousTag) { + String in = parser.getAttributeValue("","input"); + if (previousKey != null) { + String k = in + ":" + previousKey; + if (parser.getAttributeValue("","penalty") != null) { + float penalty = parseSilentFloat(parser.getAttributeValue("","penalty"), 0); + currentRouter.obstacles.put(k, penalty); + float routingPenalty = parseSilentFloat(parser.getAttributeValue("","routingPenalty"), penalty ); + currentRouter.routingObstacles.put(k, routingPenalty); + } + if (parser.getAttributeValue("","priority") != null) { + currentRouter.highwayPriorities.put(k, parseSilentFloat(parser.getAttributeValue("","priority"), 0)); + } + if (parser.getAttributeValue("","speed") != null) { + currentRouter.highwaySpeed.put(k, parseSilentFloat(parser.getAttributeValue("","speed"), 0)); + } + if ("attribute".equals(previousTag)) { + currentRouter.attributes.put(k, parser.getAttributeValue("","value")); + } + if ("avoid".equals(previousTag)) { + float priority = parseSilentFloat(parser.getAttributeValue("","decreasedPriority"), 0); + if (priority == 0) { + currentRouter.avoid.put(k, priority); + } else { + currentRouter.highwayPriorities.put(k, priority); + } + } + } + } + + private static GeneralRouter parseRoutingProfile(XmlPullParser parser, final RoutingConfiguration.Builder config) { + GeneralRouter currentRouter; + String currentSelectedRouter = parser.getAttributeValue("", "name"); + Map attrs = new LinkedHashMap(); + for(int i=0; i< parser.getAttributeCount(); i++) { + attrs.put(parser.getAttributeName(i), parser.getAttributeValue(i)); + } + GeneralRouterProfile c = Algorithms.parseEnumValue(GeneralRouterProfile.values(), + parser.getAttributeValue("", "baseProfile"), GeneralRouterProfile.CAR); + currentRouter = new GeneralRouter(c, attrs); + config.routers.put(currentSelectedRouter, currentRouter); + return currentRouter; + } + + private static void parseAttribute(XmlPullParser parser, final RoutingConfiguration.Builder config, GeneralRouter currentRouter) { + if(currentRouter != null) { + currentRouter.addAttribute(parser.getAttributeValue("", "name"), + parser.getAttributeValue("", "value")); + } else { + config.attributes.put(parser.getAttributeValue("", "name"), + parser.getAttributeValue("", "value")); + } + } + +} diff --git a/OsmAnd-java/src/net/osmand/router/RoutingContext.java b/OsmAnd-java/src/net/osmand/router/RoutingContext.java new file mode 100644 index 0000000000..6331305c80 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/RoutingContext.java @@ -0,0 +1,901 @@ +package net.osmand.router; + + +import gnu.trove.iterator.TIntObjectIterator; +import gnu.trove.iterator.TLongIterator; +import gnu.trove.map.TLongObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.map.hash.TLongObjectHashMap; +import gnu.trove.set.hash.TLongHashSet; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.osmand.PlatformUtil; +import net.osmand.NativeLibrary; +import net.osmand.NativeLibrary.NativeRouteSearchResult; +import net.osmand.binary.BinaryMapIndexReader; +import net.osmand.binary.BinaryMapIndexReader.SearchRequest; +import net.osmand.binary.BinaryMapRouteReaderAdapter; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; +import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteSubregion; +import net.osmand.binary.RouteDataBorderLinePoint; +import net.osmand.binary.RouteDataObject; +import net.osmand.router.BinaryRoutePlanner.FinalRouteSegment; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.router.BinaryRoutePlanner.RouteSegmentVisitor; +import net.osmand.util.MapUtils; + +import org.apache.commons.logging.Log; + + +public class RoutingContext { + + public static final boolean SHOW_GC_SIZE = false; + + + private final static Log log = PlatformUtil.getLog(RoutingContext.class); + public static final int OPTION_NO_LOAD = 0; + public static final int OPTION_SMART_LOAD = 1; + public static final int OPTION_IN_MEMORY_LOAD = 2; + public static boolean USE_BORDER_LINES = false; + // Final context variables + public final RoutingConfiguration config; + private final boolean useBaseMap; + public final NativeLibrary nativeLib; + public final Map> map = new LinkedHashMap>(); + public final Map reverseMap = new LinkedHashMap(); + + // 1. Initial variables + public long firstRoadId = 0; + public int firstRoadDirection = 0; + + public int startX; + public int startY; + public int targetX; + public int targetY; + + public RouteCalculationProgress calculationProgress; + public List previouslyCalculatedRoute; + public BaseRouteResult baseRouteResult; + + // 2. Routing memory cache (big objects) + TLongObjectHashMap> indexedSubregions = new TLongObjectHashMap>(); + TLongObjectHashMap> tileRoutes = new TLongObjectHashMap>(); + + RouteDataBorderLine[] borderLines = new RouteDataBorderLine[0]; + int[] borderLineCoordinates = new int[0]; + int leftBorderBoundary; + int rightBorderBoundary; + + // Needs to be a sorted array list . Another option to use hashmap but it will be more memory expensive + List subregionTiles = new ArrayList(); + + // 3. Warm object caches + ArrayList segmentsToVisitPrescripted = new ArrayList(5); + ArrayList segmentsToVisitNotForbidden = new ArrayList(5); + + + // 5. debug information (package accessor) + public TileStatistics global = new TileStatistics(); + // updated by route planner in bytes + public int memoryOverhead = 0; + + + long timeToLoad = 0; + long timeToLoadHeaders = 0; + long timeToFindInitialSegments = 0; + long timeToCalculate = 0; + + int distinctLoadedTiles = 0; + int maxLoadedTiles = 0; + int loadedPrevUnloadedTiles = 0; + int unloadedTiles = 0; + public float routingTime = 0; + public int loadedTiles = 0; + public int visitedSegments = 0; + public int relaxedSegments = 0; + // callback of processing segments + RouteSegmentVisitor visitor = null; + + + // old planner + public FinalRouteSegment finalRouteSegment; + + + + + public RoutingContext(RoutingContext cp) { + this.config = cp.config; + this.map.putAll(cp.map); + this.useBaseMap = cp.useBaseMap; + this.reverseMap.putAll(cp.reverseMap); + this.nativeLib = cp.nativeLib; + // copy local data and clear caches + for(RoutingSubregionTile tl : subregionTiles) { + if(tl.isLoaded()) { + subregionTiles.add(tl); + for (RouteSegment rs : tl.routes.valueCollection()) { + RouteSegment s = rs; + while (s != null) { + s.parentRoute = null; + s.parentSegmentEnd = 0; + s.distanceFromStart = 0; + s.distanceToEnd = 0; + s = s.next; + } + } + } + } + } + + public RoutingContext(RoutingConfiguration config, NativeLibrary nativeLibrary, BinaryMapIndexReader[] map) { + this(config, nativeLibrary, map, false); + } + + public RoutingContext(RoutingConfiguration config, NativeLibrary nativeLibrary, BinaryMapIndexReader[] map, boolean useBasemap) { + this.useBaseMap = useBasemap; + for (BinaryMapIndexReader mr : map) { + List rr = mr.getRoutingIndexes(); + List subregions = new ArrayList(); + for (RouteRegion r : rr) { + List subregs = useBaseMap ? r.getBaseSubregions() : + r.getSubregions(); + for (RouteSubregion rs : subregs) { + subregions.add(new RouteSubregion(rs)); + } + this.reverseMap.put(r, mr); + } + this.map.put(mr, subregions); + } + this.config = config; + this.nativeLib = nativeLibrary; + } + + + public RouteSegmentVisitor getVisitor() { + return visitor; + } + + public int getCurrentlyLoadedTiles() { + int cnt = 0; + for(RoutingSubregionTile t : this.subregionTiles){ + if(t.isLoaded()) { + cnt++; + } + } + return cnt; + } + + public int getCurrentEstimatedSize(){ + return global.size; + } + + + public void setVisitor(RouteSegmentVisitor visitor) { + this.visitor = visitor; + } + + public void setRouter(VehicleRouter router) { + config.router = router; + } + + public void setHeuristicCoefficient(float heuristicCoefficient) { + config.heuristicCoefficient = heuristicCoefficient; + } + + public VehicleRouter getRouter() { + return config.router; + } + + public boolean planRouteIn2Directions() { + return config.planRoadDirection == 0; + } + + public int getPlanRoadDirection() { + return config.planRoadDirection; + } + + public void setPlanRoadDirection(int planRoadDirection) { + config.planRoadDirection = planRoadDirection; + } + + public int roadPriorityComparator(double o1DistanceFromStart, double o1DistanceToEnd, double o2DistanceFromStart, double o2DistanceToEnd) { + return BinaryRoutePlanner.roadPriorityComparator(o1DistanceFromStart, o1DistanceToEnd, o2DistanceFromStart, o2DistanceToEnd, + config.heuristicCoefficient); + } + + public void registerRouteDataObject(RouteDataObject o ) { + if(!getRouter().acceptLine(o)){ + return; + } + for(int k = 0; k routes = tileRoutes.get(tileId); + if(routes == null){ + routes = new ArrayList(); + tileRoutes.put(tileId, routes); + } + if(!routes.contains(o)){ + routes.add(o); + } + } + } + + public void unloadAllData() { + unloadAllData(null); + } + + public void unloadAllData(RoutingContext except) { + for (RoutingSubregionTile tl : subregionTiles) { + if (tl.isLoaded()) { + if(except == null || except.searchSubregionTile(tl.subregion) < 0){ + tl.unload(); + unloadedTiles ++; + global.size -= tl.tileStatistics.size; + } + } + } + subregionTiles.clear(); + tileRoutes.clear(); + indexedSubregions.clear(); + } + + private int searchSubregionTile(RouteSubregion subregion){ + RoutingSubregionTile key = new RoutingSubregionTile(subregion); + long now = System.nanoTime(); + int ind = Collections.binarySearch(subregionTiles, key, new Comparator() { + @Override + public int compare(RoutingSubregionTile o1, RoutingSubregionTile o2) { + if(o1.subregion.left == o2.subregion.left) { + return 0; + } + return o1.subregion.left < o2.subregion.left ? 1 : -1; + } + }); + if (ind >= 0) { + for (int i = ind; i <= subregionTiles.size(); i++) { + if (i == subregionTiles.size() || subregionTiles.get(i).subregion.left > subregion.left) { + ind = -i - 1; + return ind; + } + if (subregionTiles.get(i).subregion == subregion) { + return i; + } + } + } + timeToLoadHeaders += (System.nanoTime() - now); + return ind; + } + + public void loadBorderPoints() throws IOException { + Iterator> it = reverseMap.entrySet().iterator(); + int sleft = Math.min(startX, targetX); + int sright= Math.max(startX, targetX); + int stop = Math.min(startY, targetY); + int sbottom= Math.max(startY, targetY); + // one tile of 12th zoom around (?) + int zoomAround = 10; + int distAround = 1 << (31 - zoomAround); + leftBorderBoundary = sleft - distAround; + rightBorderBoundary = sright + distAround; + SearchRequest req = BinaryMapIndexReader.buildSearchRouteBorderRequest(sleft, sright, stop, sbottom); + while(it.hasNext()) { + Entry entry = it.next(); + entry.getValue().searchBorderPoints(req, entry.getKey()); + } + TIntObjectHashMap lines = new TIntObjectHashMap(); + for(RouteDataBorderLinePoint p : req.getSearchResults()) { + if(config.router.acceptLine(p) && p.x > leftBorderBoundary && p.x < rightBorderBoundary) { + if(!lines.containsKey(p.y)) { + RouteDataBorderLine line = new RouteDataBorderLine(p.y); + lines.put(p.y, line); + RouteDataBorderLinePoint lft = new RouteDataBorderLinePoint(p.region); + lft.y = p.y; + lft.id = Long.MIN_VALUE; + lft.x = leftBorderBoundary; + line.borderPoints.add(lft); + RouteDataBorderLinePoint rht = new RouteDataBorderLinePoint(p.region); + rht.y = p.y; + rht.id = Long.MIN_VALUE; + rht.x = rightBorderBoundary; + line.borderPoints.add(rht); + } + lines.get(p.y).borderPoints.add(p); + } + } + borderLines = lines.values(new RouteDataBorderLine[lines.size()]); + Arrays.sort(borderLines); + borderLineCoordinates = new int[borderLines.length]; + for(int i=0; i 0 && borderLineCoordinates[i - 1] >> 17 == borderLineCoordinates[i] >> 17) { + throw new IllegalStateException(); + } + System.out.println("Line " + (borderLineCoordinates[i] >> 17) + + " points " + borderLines[i].borderPoints.size() /* + " " +borderLines[i].borderPoints*/); + } + + updateDistanceForBorderPoints(startX, startY, true); + updateDistanceForBorderPoints(targetX, targetY, false); + + } + + protected void updateDistanceForBorderPoints(int sX, int sy, boolean distanceToStart) { + boolean plus = borderLines.length > 0 && sy < borderLines[0].borderLine; + if(borderLines.length > 0 && !plus && sy< borderLines[borderLines.length - 1].borderLine){ + throw new IllegalStateException(); + } + // calculate min distance to start + for(int i=0; i 0){ + int prevInd = plus ? i - 1 : borderLines.length - i; + double minDist = 0; + for(RouteDataBorderLinePoint prevs : borderLines[prevInd].borderPoints){ + double d = Math.sqrt(MapUtils.squareDist31TileMetric(prevs.x, prevs.y, ps.x, ps.y)) + + (distanceToStart? prevs.distanceToStartPoint : prevs.distanceToEndPoint); + if(minDist == 0 || d < minDist) { + minDist = d; + } + } + if (minDist > 0) { +// System.out.println("Border line " + i + " exp="+res + " min="+ minDist); + res = (float) minDist; + } + } + if(distanceToStart){ + ps.distanceToStartPoint = res; + } else { + ps.distanceToEndPoint = res; + } + } + + } + } + + // returns from 0 to borderLineCoordinates.length inclusive + public int searchBorderLineIndex(int y) { + int k = Arrays.binarySearch(borderLineCoordinates, y); + if( k < 0) { + k = -(k + 1); + } + return k; + } + + public RouteSegment loadRouteSegment(int x31, int y31, int memoryLimit) { + long tileId = getRoutingTile(x31, y31, memoryLimit, OPTION_SMART_LOAD); + TLongObjectHashMap excludeDuplications = new TLongObjectHashMap(); + RouteSegment original = null; + if (tileRoutes.containsKey(tileId)) { + List routes = tileRoutes.get(tileId); + if (routes != null) { + for (RouteDataObject ro : routes) { + for (int i = 0; i < ro.pointsX.length; i++) { + if (ro.getPoint31XTile(i) == x31 && ro.getPoint31YTile(i) == y31) { + excludeDuplications.put(calcRouteId(ro, i), ro); + RouteSegment segment = new RouteSegment(ro, i); + segment.next = original; + original = segment; + } + } + } + } + } + List subregions = indexedSubregions.get(tileId); + if (subregions != null) { + for (RoutingSubregionTile rs : subregions) { + original = rs.loadRouteSegment(x31, y31, this, excludeDuplications, original); + } + } + return original; + } + + private void loadSubregionTile(final RoutingSubregionTile ts, boolean loadObjectsInMemory) { + boolean wasUnloaded = ts.isUnloaded(); + int ucount = ts.getUnloadCont(); + if (nativeLib == null) { + long now = System.nanoTime(); + try { + BinaryMapIndexReader reader = reverseMap.get(ts.subregion.routeReg); + ts.setLoadedNonNative(); + List res = reader.loadRouteIndexData(ts.subregion); +// System.out.println(ts.subregion.shiftToData + " " + res); + for(RouteDataObject ro : res){ + if(ro != null && config.router.acceptLine(ro)) { + ts.add(ro); + } + } + } catch (IOException e) { + throw new RuntimeException("Loading data exception", e); + } + + timeToLoad += (System.nanoTime() - now); + } else { + long now = System.nanoTime(); + NativeRouteSearchResult ns = nativeLib.loadRouteRegion(ts.subregion, loadObjectsInMemory); +// System.out.println(ts.subregion.shiftToData + " " + Arrays.toString(ns.objects)); + ts.setLoadedNative(ns, this); + timeToLoad += (System.nanoTime() - now); + } + loadedTiles++; + if (wasUnloaded) { + if(ucount == 1) { + loadedPrevUnloadedTiles++; + } + } else { + if(global != null) { + global.allRoutes += ts.tileStatistics.allRoutes; + global.coordinates += ts.tileStatistics.coordinates; + } + distinctLoadedTiles++; + } + global.size += ts.tileStatistics.size; + } + + private List loadTileHeaders(final int x31, final int y31) { + final int zoomToLoad = 31 - config.ZOOM_TO_LOAD_TILES; + int tileX = x31 >> zoomToLoad; + int tileY = y31 >> zoomToLoad; + + SearchRequest request = BinaryMapIndexReader.buildSearchRouteRequest(tileX << zoomToLoad, + (tileX + 1) << zoomToLoad, tileY << zoomToLoad, (tileY + 1) << zoomToLoad, null); + List collection = null; + for (Entry> r : map.entrySet()) { + // NOTE: load headers same as we do in non-native (it is not native optimized) + try { + if (r.getValue().size() > 0) { + long now = System.nanoTime(); + // int rg = r.getValue().get(0).routeReg.regionsRead; + List subregs = r.getKey().searchRouteIndexTree(request, r.getValue()); + for (RouteSubregion sr : subregs) { + int ind = searchSubregionTile(sr); + RoutingSubregionTile found; + if (ind < 0) { + found = new RoutingSubregionTile(sr); + subregionTiles.add(-(ind + 1), found); + } else { + found = subregionTiles.get(ind); + } + if (collection == null) { + collection = new ArrayList(4); + } + collection.add(found); + } + timeToLoadHeaders += (System.nanoTime() - now); + } + } catch (IOException e) { + throw new RuntimeException("Loading data exception", e); + } + } + return collection; + } + + public void loadTileData(int x31, int y31, int zoomAround, final List toFillIn) { + int t = config.ZOOM_TO_LOAD_TILES - zoomAround; + int coordinatesShift = (1 << (31 - config.ZOOM_TO_LOAD_TILES)); + if(t <= 0) { + t = 1; + coordinatesShift = (1 << (31 - zoomAround)); + } else { + t = 1 << t; + } + + TLongHashSet ts = new TLongHashSet(); + long now = System.nanoTime(); + for(int i = -t; i <= t; i++) { + for(int j = -t; j <= t; j++) { + ts.add(getRoutingTile(x31 +i*coordinatesShift, y31 + j*coordinatesShift, 0, OPTION_IN_MEMORY_LOAD)); + } + } + TLongIterator it = ts.iterator(); + while(it.hasNext()){ + getAllObjects(it.next(), toFillIn); + } + timeToFindInitialSegments += (System.nanoTime() - now); + } + + @SuppressWarnings("unused") + private long getRoutingTile(int x31, int y31, int memoryLimit, int loadOptions){ +// long now = System.nanoTime(); + long xloc = x31 >> (31 - config.ZOOM_TO_LOAD_TILES); + long yloc = y31 >> (31 - config.ZOOM_TO_LOAD_TILES); + long tileId = (xloc << config.ZOOM_TO_LOAD_TILES) + yloc; + if (loadOptions != OPTION_NO_LOAD) { + if( memoryLimit == 0){ + memoryLimit = config.memoryLimitation; + } + if (getCurrentEstimatedSize() > 0.9 * memoryLimit) { + int sz1 = getCurrentEstimatedSize(); + long h1 = 0; + if (SHOW_GC_SIZE && sz1 > 0.7 * memoryLimit) { + runGCUsedMemory(); + h1 = runGCUsedMemory(); + } + int clt = getCurrentlyLoadedTiles(); + long us1 = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()); + unloadUnusedTiles(memoryLimit); + if (h1 != 0 && getCurrentlyLoadedTiles() != clt) { + int sz2 = getCurrentEstimatedSize(); + runGCUsedMemory(); + long h2 = runGCUsedMemory(); + float mb = (1 << 20); + log.warn("Unload tiles : estimated " + (sz1 - sz2) / mb + " ?= " + (h1 - h2) / mb + " actual"); + log.warn("Used after " + h2 / mb + " of " + Runtime.getRuntime().totalMemory() / mb + " max " + + maxMemory() / mb); + } else { + float mb = (1 << 20); + int sz2 = getCurrentEstimatedSize(); + log.warn("Unload tiles : occupied before " + sz1 / mb + " Mb - now " + sz2 / mb + "MB " + + memoryLimit/mb + " limit MB " + config.memoryLimitation/mb); + long us2 = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()); + log.warn("Used memory before " + us1 / mb + "after " + us1 / mb + " of max " + maxMemory() / mb); + } + } + if (!indexedSubregions.containsKey(tileId)) { + List collection = loadTileHeaders(x31, y31); + indexedSubregions.put(tileId, collection); + } + List subregions = indexedSubregions.get(tileId); + if (subregions != null) { + for (RoutingSubregionTile ts : subregions) { + if (!ts.isLoaded()) { + loadSubregionTile(ts, loadOptions == OPTION_IN_MEMORY_LOAD); + } + } + } + } + // timeToLoad += (System.nanoTime() - now); + return tileId; + } + + private long maxMemory() { + // AVIAN FIXME +// return Runtime.getRuntime().maxMemory(); + return 0; + } + + + + public boolean checkIfMemoryLimitCritical(int memoryLimit) { + return getCurrentEstimatedSize() > 0.9 * memoryLimit; + } + + public void unloadUnusedTiles(int memoryLimit) { + float desirableSize = memoryLimit * 0.7f; + List list = new ArrayList(subregionTiles.size() / 2); + int loaded = 0; + for(RoutingSubregionTile t : subregionTiles) { + if(t.isLoaded()) { + list.add(t); + loaded++; + } + } + maxLoadedTiles = Math.max(maxLoadedTiles, getCurrentlyLoadedTiles()); + Collections.sort(list, new Comparator() { + private int pow(int base, int pw) { + int r = 1; + for (int i = 0; i < pw; i++) { + r *= base; + } + return r; + } + @Override + public int compare(RoutingSubregionTile o1, RoutingSubregionTile o2) { + int v1 = (o1.access + 1) * pow(10, o1.getUnloadCont() -1); + int v2 = (o2.access + 1) * pow(10, o2.getUnloadCont() -1); + return v1 < v2 ? -1 : (v1 == v2 ? 0 : 1); + } + }); + int i = 0; + while(getCurrentEstimatedSize() >= desirableSize && (list.size() - i) > loaded / 5 && i < list.size()) { + RoutingSubregionTile unload = list.get(i); + i++; +// System.out.println("Unload " + unload); + unload.unload(); + unloadedTiles ++; + global.size -= unload.tileStatistics.size; + // tile could be cleaned from routing tiles and deleted from whole list + + } + for(RoutingSubregionTile t : subregionTiles) { + t.access /= 3; + } + } + + private void getAllObjects(long tileId, final List toFillIn) { + TLongObjectHashMap excludeDuplications = new TLongObjectHashMap(); + if (tileRoutes.containsKey(tileId)) { + List routes = tileRoutes.get(tileId); + if (routes != null) { + for (RouteDataObject ro : routes) { + if (!excludeDuplications.contains(ro.id)) { + excludeDuplications.put(ro.id, ro); + toFillIn.add(ro); + } + } + } + } + List subregions = indexedSubregions.get(tileId); + if (subregions != null) { + for (RoutingSubregionTile rs : subregions) { + rs.loadAllObjects(toFillIn, this, excludeDuplications); + } + } + } + + + + protected static long runGCUsedMemory() { + Runtime runtime = Runtime.getRuntime(); + long usedMem1 = runtime.totalMemory() - runtime.freeMemory(); + long usedMem2 = Long.MAX_VALUE; + int cnt = 4; + while (cnt-- >= 0) { + for (int i = 0; (usedMem1 < usedMem2) && (i < 1000); ++i) { + // AVIAN FIXME + runtime.runFinalization(); + runtime.gc(); + Thread.yield(); + + usedMem2 = usedMem1; + usedMem1 = runtime.totalMemory() - runtime.freeMemory(); + } + } + return usedMem1; + } + + + private static long calcRouteId(RouteDataObject o, int ind) { + return (o.getId() << 10) + ind; + } + + + public static class RoutingSubregionTile { + public final RouteSubregion subregion; + // make it without get/set for fast access + public int access; + public TileStatistics tileStatistics = new TileStatistics(); + + private NativeRouteSearchResult searchResult = null; + private int isLoaded = 0; + private TLongObjectMap routes = null; + + public RoutingSubregionTile(RouteSubregion subregion) { + this.subregion = subregion; + } + + private void loadAllObjects(final List toFillIn, RoutingContext ctx, TLongObjectHashMap excludeDuplications) { + if(routes != null) { + Iterator it = routes.valueCollection().iterator(); + while(it.hasNext()){ + RouteSegment rs = it.next(); + while(rs != null){ + RouteDataObject ro = rs.road; + if (!excludeDuplications.contains(ro.id)) { + excludeDuplications.put(ro.id, ro); + toFillIn.add(ro); + } + rs = rs.next; + } + } + } else if(searchResult != null) { + RouteDataObject[] objects = searchResult.objects; + if(objects != null) { + for(RouteDataObject ro : objects) { + if (ro != null && !excludeDuplications.contains(ro.id)) { + excludeDuplications.put(ro.id, ro); + toFillIn.add(ro); + } + } + } + } + } + + private RouteSegment loadRouteSegment(int x31, int y31, RoutingContext ctx, + TLongObjectHashMap excludeDuplications, RouteSegment original) { + if(searchResult == null && routes == null) { + return original; + } + access++; + if (searchResult == null) { + long l = (((long) x31) << 31) + (long) y31; + RouteSegment segment = routes.get(l); + while (segment != null) { + RouteDataObject ro = segment.road; + RouteDataObject toCmp = excludeDuplications.get(calcRouteId(ro, segment.getSegmentStart())); + if (toCmp == null || toCmp.getPointsLength() < ro.getPointsLength()) { + excludeDuplications.put(calcRouteId(ro, segment.getSegmentStart()), ro); + RouteSegment s = new RouteSegment(ro, segment.getSegmentStart()); + s.next = original; + original = s; + } + segment = segment.next; + } + return original; + } + // Native use case + long nanoTime = System.nanoTime(); + RouteDataObject[] res = ctx.nativeLib.getDataObjects(searchResult, x31, y31); + ctx.timeToLoad += (System.nanoTime() - nanoTime); + if (res != null) { + for (RouteDataObject ro : res) { + + boolean accept = ro != null; + if (ctx != null) { + accept = ctx.getRouter().acceptLine(ro); + } + if (accept) { + for (int i = 0; i < ro.pointsX.length; i++) { + if (ro.getPoint31XTile(i) == x31 && ro.getPoint31YTile(i) == y31) { + RouteDataObject toCmp = excludeDuplications.get(calcRouteId(ro, i)); + if (toCmp == null || toCmp.getPointsLength() < ro.getPointsLength()) { + RouteSegment segment = new RouteSegment(ro, i); + segment.next = original; + original = segment; + excludeDuplications.put(calcRouteId(ro, i), ro); + } + } + } + } + } + } + return original; + } + + public boolean isLoaded() { + return isLoaded > 0; + } + + public int getUnloadCont(){ + return Math.abs(isLoaded); + } + + public boolean isUnloaded() { + return isLoaded < 0; + } + + public void unload() { + if(isLoaded == 0) { + this.isLoaded = -1; + } else { + isLoaded = -Math.abs(isLoaded); + } + if(searchResult != null) { + searchResult.deleteNativeResult(); + } + searchResult = null; + routes = null; + } + + public void setLoadedNonNative(){ + isLoaded = Math.abs(isLoaded) + 1; + routes = new TLongObjectHashMap(); + tileStatistics = new TileStatistics(); + } + + public void add(RouteDataObject ro) { + tileStatistics.addObject(ro); + for (int i = 0; i < ro.pointsX.length; i++) { + int x31 = ro.getPoint31XTile(i); + int y31 = ro.getPoint31YTile(i); + long l = (((long) x31) << 31) + (long) y31; + RouteSegment segment = new RouteSegment(ro, i); + if (!routes.containsKey(l)) { + routes.put(l, segment); + } else { + RouteSegment orig = routes.get(l); + while (orig.next != null) { + orig = orig.next; + } + orig.next = segment; + } + } + } + + public void setLoadedNative(NativeRouteSearchResult r, RoutingContext ctx) { + isLoaded = Math.abs(isLoaded) + 1; + tileStatistics = new TileStatistics(); + if (r.objects != null) { + searchResult = null; + routes = new TLongObjectHashMap(); + for (RouteDataObject ro : r.objects) { + if (ro != null && ctx.config.router.acceptLine(ro)) { + add(ro); + } + } + } else { + searchResult = r; + tileStatistics.size += 100; + } + } + } + + static int getEstimatedSize(RouteDataObject o) { + // calculate size + int sz = 0; + sz += 8 + 4; // overhead + if (o.names != null) { + sz += 12; + TIntObjectIterator it = o.names.iterator(); + while(it.hasNext()) { + it.advance(); + String vl = it.value(); + sz += 12 + vl.length(); + } + sz += 12 + o.names.size() * 25; + } + sz += 8; // id + // coordinates + sz += (8 + 4 + 4 * o.getPointsLength()) * 4; + sz += o.types == null ? 4 : (8 + 4 + 4 * o.types.length); + sz += o.restrictions == null ? 4 : (8 + 4 + 8 * o.restrictions.length); + sz += 4; + if (o.pointTypes != null) { + sz += 8 + 4 * o.pointTypes.length; + for (int i = 0; i < o.pointTypes.length; i++) { + sz += 4; + if (o.pointTypes[i] != null) { + sz += 8 + 8 * o.pointTypes[i].length; + } + } + } + // Standard overhead? + return (int) (sz * 3.5); + } + + protected static class TileStatistics { + public int size = 0; + public int allRoutes = 0; + public int coordinates = 0; + + @Override + public String toString() { + return "All routes " + allRoutes + + " size " + (size / 1024f) + " KB coordinates " + coordinates + " ratio coord " + (((float)size) / coordinates) + + " ratio routes " + (((float)size) / allRoutes); + } + + public void addObject(RouteDataObject o) { + allRoutes++; + coordinates += o.getPointsLength() * 2; + size += getEstimatedSize(o); + } + + + } + + protected static class RouteDataBorderLine implements Comparable{ + final List borderPoints = new ArrayList(); + final int borderLine; + + public RouteDataBorderLine(int borderLine) { + this.borderLine = borderLine; + } + + + @Override + public int compareTo(RouteDataBorderLine o) { + if(o.borderLine == borderLine) { + return 0; + } + return borderLine < o.borderLine? -1 : 1; + } + } + + +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/router/TestRouting.java b/OsmAnd-java/src/net/osmand/router/TestRouting.java new file mode 100644 index 0000000000..8b5d019518 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/TestRouting.java @@ -0,0 +1,332 @@ +package net.osmand.router; + + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +import net.osmand.PlatformUtil; +import net.osmand.NativeLibrary; +import net.osmand.binary.BinaryMapIndexReader; +import net.osmand.data.LatLon; +import net.osmand.router.BinaryRoutePlanner.FinalRouteSegment; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.router.RoutingConfiguration.Builder; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import com.ibm.icu.text.DateFormat; + +public class TestRouting { + + public static int MEMORY_TEST_LIMIT = 800; + public static boolean TEST_WO_HEURISTIC = true; + public static boolean TEST_BOTH_DIRECTION = true; + public static NativeLibrary lib = null; + public static boolean oldRouting = true; + + + public static Iterator getIterator(Iterable it){ + return it.iterator(); + } + + public static class Parameters { + public File obfDir; + public List tests = new ArrayList(); + public double startLat = 0; + public double startLon = 0; + public double endLat = 0; + public double endLon = 0; + public RoutingConfiguration.Builder configBuilder; + + public static Parameters init(String[] args) throws IOException, XmlPullParserException { + Parameters p = new Parameters(); + String routingXmlFile = null; + String obfDirectory = null; + RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = false; + for (String a : args) { + if (a.startsWith("-routingXmlPath=")) { + routingXmlFile = a.substring("-routingXmlPath=".length()); + } else if (a.startsWith("-verbose")) { + RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true; + } else if (a.startsWith("-obfDir=")) { + obfDirectory = a.substring("-obfDir=".length()); + } else if (a.startsWith("-start=")) { + String start = a.substring("-start=".length()); + String[] pt = start.split(";"); + p.startLat = Double.parseDouble(pt[0]); + p.startLon = Double.parseDouble(pt[1]); + } else if (a.startsWith("-end=")) { + String start = a.substring("-end=".length()); + String[] pt = start.split(";"); + p.endLat = Double.parseDouble(pt[0]); + p.endLon = Double.parseDouble(pt[1]); + } else if (a.startsWith("-testDir=")) { + String testDirectory = a.substring("-testDir=".length()); + for(File f : new File(testDirectory).listFiles()) { + if(f.getName().endsWith(".test.xml")){ + p.tests.add(f); + } + } + } else if(!a.startsWith("-")){ + p.tests.add(new File(a)); + } + } + + if (obfDirectory == null) { + throw new IllegalStateException("Directory with obf files not specified"); + } + p.obfDir = new File(obfDirectory); + + if (routingXmlFile == null || routingXmlFile.equals("routing.xml")) { + p.configBuilder = RoutingConfiguration.getDefault(); + } else { + p.configBuilder = RoutingConfiguration.parseFromInputStream(new FileInputStream(routingXmlFile)); + } + + return p; + } + } + + public static void main(String[] args) throws Exception { + if(args == null || args.length == 0) { + info(); + return; + } + long time = System.currentTimeMillis(); + Parameters params = Parameters.init(args); + if((params.tests.isEmpty() && params.startLat == 0) || params.obfDir == null) { + info(); + return; + } + if (!params.tests.isEmpty()) { + boolean allSuccess = runAllTests(params, lib); + if (allSuccess) { + System.out.println("All is successfull " + (System.currentTimeMillis() - time) + " ms"); + } + } + if(params.startLat != 0) { +// calculateRoute(params.obfDir.getAbsolutePath(), params.startLat, params.startLon, +// params.endLat, params.endLon); + BinaryMapIndexReader[] rs = collectFiles(params.obfDir.getAbsolutePath()); + calculateRoute(params.startLat, params.startLon, + params.endLat, params.endLon, rs); + calculateRoute(params.startLat, params.startLon, + params.endLat, params.endLon, rs); + } + + } + + + public static boolean runAllTests(Parameters params, NativeLibrary lib) throws FileNotFoundException, IOException, Exception { + BinaryMapIndexReader[] rs = collectFiles(params.obfDir.getAbsolutePath()); + + boolean allSuccess = true; + for(File f : params.tests) { + System.out.println("Before test " + f.getAbsolutePath()); + System.out.flush(); + allSuccess &= test(lib, new FileInputStream(f), rs, params.configBuilder); + } + return allSuccess; + } + + + public static void info() { + println("Run router tests is console utility to test route calculation for osmand. It is also possible to calculate one route from -start to -end."); + println("\nUsage for run tests : runTestsSuite [-routingXmlPath=PATH] [-verbose] [-obfDir=PATH] [-start=lat;lon] [-end=lat;lon] [-testDir=PATH] {individualTestPath}"); + return; + } + + + private static void println(String string) { + System.out.println(string); + } + + + public static boolean test(NativeLibrary lib, InputStream resource, BinaryMapIndexReader[] rs, RoutingConfiguration.Builder config) throws Exception { + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + parser.setInput(resource, "UTF-8"); + int tok; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG) { + String name = parser.getName(); + if(name.equals("test")){ + testRoute(parser, config, lib, rs); + } + } + } + + return true; + } + + private static float parseFloat(XmlPullParser parser, String attr) { + String v = parser.getAttributeValue("", attr); + if(v == null || v.length() == 0){ + return 0; + } + return Float.parseFloat(v); + } + private static boolean isInOrLess(float expected, float value, float percent){ + if(equalPercent(expected, value, percent)){ + return true; + } + if(value < expected) { + System.err.println("Test could be adjusted value " + value + " is much less then expected " + expected); + return true; + } + return false; + } + + private static boolean equalPercent(float expected, float value, float percent){ + if(Math.abs(value/expected - 1) < percent / 100){ + return true; + } + return false; + } + + private static void testRoute(XmlPullParser parser, Builder config, NativeLibrary lib, BinaryMapIndexReader[] rs) throws IOException, InterruptedException { + String vehicle = parser.getAttributeValue("", "vehicle"); + int loadedTiles = (int) parseFloat(parser, "loadedTiles"); + int visitedSegments = (int) parseFloat(parser, "visitedSegments"); + int complete_time = (int) parseFloat(parser, "complete_time"); + int routing_time = (int) parseFloat(parser, "routing_time"); + int complete_distance = (int) parseFloat(parser, "complete_distance"); + float percent = parseFloat(parser, "best_percent"); + String testDescription = parser.getAttributeValue("", "description"); + if(percent == 0){ + System.err.println("\n\n!! Skipped test case '" + testDescription + "' because 'best_percent' attribute is not specified \n\n" ); + return; + } + RoutingConfiguration rconfig = config.build(vehicle, MEMORY_TEST_LIMIT); + RoutePlannerFrontEnd router = new RoutePlannerFrontEnd(oldRouting); + RoutingContext ctx = new RoutingContext(rconfig, + lib, rs); + String skip = parser.getAttributeValue("", "skip_comment"); + if (skip != null && skip.length() > 0) { + System.err.println("\n\n!! Skipped test case '" + testDescription + "' because '" + skip + "'\n\n" ); + return; + } + System.out.println("Run test " + testDescription); + + double startLat = Double.parseDouble(parser.getAttributeValue("", "start_lat")); + double startLon = Double.parseDouble(parser.getAttributeValue("", "start_lon")); + double endLat = Double.parseDouble(parser.getAttributeValue("", "target_lat")); + double endLon = Double.parseDouble(parser.getAttributeValue("", "target_lon")); + LatLon start = new LatLon(startLat, startLon); + LatLon end = new LatLon(endLat, endLon); + List route = router.searchRoute(ctx, start, end, null, false); + final float calcRoutingTime = ctx.routingTime; + float completeTime = 0; + float completeDistance = 0; + for (int i = 0; i < route.size(); i++) { + completeTime += route.get(i).getSegmentTime(); + completeDistance += route.get(i).getDistance(); + } + if(complete_time > 0 && !isInOrLess(complete_time, completeTime, percent)) { + throw new IllegalArgumentException(MessageFormat.format("Complete time (expected) {0} != {1} (original) : {2}", complete_time, completeTime, testDescription)); + } + if(complete_distance > 0 && !isInOrLess(complete_distance, completeDistance, percent)) { + throw new IllegalArgumentException(MessageFormat.format("Complete distance (expected) {0} != {1} (original) : {2}", complete_distance, completeDistance, testDescription)); + } + if(routing_time > 0 && !isInOrLess(routing_time, calcRoutingTime, percent)) { + throw new IllegalArgumentException(MessageFormat.format("Complete routing time (expected) {0} != {1} (original) : {2}", routing_time, calcRoutingTime, testDescription)); + } + + if (visitedSegments > 0 && !isInOrLess(visitedSegments, ctx.visitedSegments, percent)) { + throw new IllegalArgumentException(MessageFormat.format("Visited segments (expected) {0} != {1} (original) : {2}", visitedSegments, + ctx.visitedSegments, testDescription)); + } + if (loadedTiles > 0 && !isInOrLess(loadedTiles, ctx.loadedTiles, percent)) { + throw new IllegalArgumentException(MessageFormat.format("Loaded tiles (expected) {0} != {1} (original) : {2}", loadedTiles, + ctx.loadedTiles, testDescription)); + } + + if(TEST_BOTH_DIRECTION){ + rconfig.planRoadDirection = -1; + runTestSpecialTest(lib, rs, rconfig, router, start, end, calcRoutingTime, "Calculated routing time in both direction {0} != {1} time in -1 direction"); + + rconfig.planRoadDirection = 1; + runTestSpecialTest(lib, rs, rconfig, router, start, end, calcRoutingTime, "Calculated routing time in both direction {0} != {1} time in 1 direction"); + + } + + if(TEST_WO_HEURISTIC) { + rconfig.planRoadDirection = 0; + rconfig.heuristicCoefficient = 0.5f; + runTestSpecialTest(lib, rs, rconfig, router, start, end, calcRoutingTime, + "Calculated routing time with heuristic 1 {0} != {1} with heuristic 0.5"); + } + + } + + + private static void runTestSpecialTest(NativeLibrary lib, BinaryMapIndexReader[] rs, RoutingConfiguration rconfig, RoutePlannerFrontEnd router, + LatLon start, LatLon end, final float calcRoutingTime, String msg) throws IOException, InterruptedException { + RoutingContext ctx; + ctx = new RoutingContext(rconfig, lib, rs); + router.searchRoute(ctx, start, end, null, false); + FinalRouteSegment frs = ctx.finalRouteSegment; + if(frs == null || !equalPercent(calcRoutingTime, frs.distanceFromStart, 0.5f)){ + throw new IllegalArgumentException(MessageFormat.format(msg, calcRoutingTime+"",frs == null?"0":frs.distanceFromStart+"")); + } + } + + + + public static void calculateRoute(String folderWithObf, + double startLat, double startLon, double endLat, double endLon) throws IOException, InterruptedException { + BinaryMapIndexReader[] rs = collectFiles(folderWithObf); + RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = false; + calculateRoute(startLat, startLon, endLat, endLon, rs); + calculateRoute(startLat, startLon, endLat, endLon, rs); + } + + private static BinaryMapIndexReader[] collectFiles(String folderWithObf) throws FileNotFoundException, IOException { + List files = new ArrayList(); + for (File f : new File(folderWithObf).listFiles()) { + if (f.getName().endsWith(".obf")) { + files.add(f); + } + } + BinaryMapIndexReader[] rs = new BinaryMapIndexReader[files.size()]; + int it = 0; + for (File f : files) { + RandomAccessFile raf = new RandomAccessFile(f.getAbsolutePath(), "r"); //$NON-NLS-1$ //$NON-NLS-2$ + System.out.println(f.getName()); + rs[it++] = new BinaryMapIndexReader(raf); + } + return rs; + } + + + private static void calculateRoute(double startLat, double startLon, double endLat, double endLon, BinaryMapIndexReader[] rs) + throws IOException, InterruptedException { + long ts = System.currentTimeMillis(); + Builder config = RoutingConfiguration.getDefault(); + RoutingConfiguration rconfig = config.build("car", MEMORY_TEST_LIMIT); + RoutePlannerFrontEnd router = new RoutePlannerFrontEnd(oldRouting); + RoutingContext ctx = new RoutingContext(rconfig, lib, rs); + RouteSegment startSegment = router.findRouteSegment(startLat, startLon, ctx); + RouteSegment endSegment = router.findRouteSegment(endLat, endLon, ctx); + if(startSegment == null){ + throw new IllegalArgumentException("Start segment is not found "); + } + if(endSegment == null){ + throw new IllegalArgumentException("End segment is not found "); + } + List route = router.searchRoute(ctx, + new LatLon(startLat, startLon), new LatLon(endLat, endLon), null, false); + System.out.println("Route is " + route.size() + " segments " + (System.currentTimeMillis() - ts) + " ms "); + } + +} diff --git a/OsmAnd-java/src/net/osmand/router/TurnType.java b/OsmAnd-java/src/net/osmand/router/TurnType.java new file mode 100644 index 0000000000..42b8b05674 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/TurnType.java @@ -0,0 +1,136 @@ +package net.osmand.router; + +public class TurnType { + public static final String C = "C"; // continue (go straight) //$NON-NLS-1$ + public static final String TL = "TL"; // turn left //$NON-NLS-1$ + public static final String TSLL = "TSLL"; // turn slightly left //$NON-NLS-1$ + public static final String TSHL = "TSHL"; // turn sharply left //$NON-NLS-1$ + public static final String TR = "TR"; // turn right //$NON-NLS-1$ + public static final String TSLR = "TSLR"; // turn slightly right //$NON-NLS-1$ + public static final String TSHR = "TSHR"; // turn sharply right //$NON-NLS-1$ + public static final String KL = "KL"; // keep left //$NON-NLS-1$ + public static final String KR = "KR"; // keep right//$NON-NLS-1$ + public static final String TU = "TU"; // U-turn //$NON-NLS-1$ + public static final String TRU = "TRU"; // Right U-turn //$NON-NLS-1$ + public static String[] predefinedTypes = new String[] { C, KL, KR, TL, TSLL, TSHL, TR, TSLR, TSHR, TU, TRU }; + + public static TurnType valueOf(String s, boolean leftSide) { + for (String v : predefinedTypes) { + if (v.equals(s)) { + if (leftSide && TU.equals(v)) { + v = TRU; + } + return new TurnType(v); + } + } + if (s != null && s.startsWith("EXIT")) { //$NON-NLS-1$ + return getExitTurn(Integer.parseInt(s.substring(4)), 0, leftSide); + } + return null; + } + + private final String value; + private int exitOut; + private boolean isLeftSide; + // calculated clockwise head rotation if previous direction to NORTH + private float turnAngle; + private boolean skipToSpeak; + private int[] lanes; + + private static TurnType getExitTurn(int out, float angle, boolean leftSide) { + TurnType r = new TurnType("EXIT", out, leftSide); //$NON-NLS-1$ + r.setTurnAngle(angle); + return r; + } + + private TurnType(String value, int exitOut, boolean leftSide) { + this.value = value; + this.exitOut = exitOut; + this.isLeftSide = leftSide; + } + + // calculated Clockwise head rotation if previous direction to NORTH + public float getTurnAngle() { + return turnAngle; + } + + public boolean isLeftSide() { + return isLeftSide; + } + + public void setTurnAngle(float turnAngle) { + this.turnAngle = turnAngle; + } + + private TurnType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public int getExitOut() { + return exitOut; + } + + public boolean isRoundAbout() { + return value.equals("EXIT"); //$NON-NLS-1$ + } + + // lanes encoded as array of int + // last bit is 1, 0 (should we take this lane) + // first bits 0 - left, 1 - straight, 2 - right + public void setLanes(int[] lanes) { + this.lanes = lanes; + } + + public int[] getLanes() { + return lanes; + } + + public boolean keepLeft() { + return value.equals(KL); + } + + public boolean keepRight() { + return value.equals(KR); + } + + public boolean isSkipToSpeak() { + return skipToSpeak; + } + public void setSkipToSpeak(boolean skipToSpeak) { + this.skipToSpeak = skipToSpeak; + } + + @Override + public String toString() { + if(isRoundAbout()){ + return "Take " + getExitOut() + " exit"; + } else if(value.equals(C)) { + return "Go ahead"; + } else if(value.equals(TSLL)) { + return "Turn slightly left"; + } else if(value.equals(TL)) { + return "Turn left"; + } else if(value.equals(TSHL)) { + return "Turn sharply left"; + } else if(value.equals(TSLR)) { + return "Turn slightly right"; + } else if(value.equals(TR)) { + return "Turn right"; + } else if(value.equals(TSHR)) { + return "Turn sharply right"; + } else if(value.equals(TU)) { + return "Make uturn"; + } else if(value.equals(TRU)) { + return "Make uturn"; + } else if(value.equals(KL)) { + return "Keep left"; + } else if(value.equals(KR)) { + return "Keep right"; + } + return super.toString(); + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/router/VehicleRouter.java b/OsmAnd-java/src/net/osmand/router/VehicleRouter.java new file mode 100644 index 0000000000..d23cdd244f --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/VehicleRouter.java @@ -0,0 +1,68 @@ +package net.osmand.router; + +import net.osmand.binary.RouteDataObject; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; + +public abstract class VehicleRouter { + + /** + * Accepts line to use it for routing + * + * @param way + * @return + */ + public abstract boolean acceptLine(RouteDataObject way); + + public abstract boolean restrictionsAware(); + + public abstract int isOneWay(RouteDataObject road); + + public abstract boolean containsAttribute(String attribute); + + public abstract String getAttribute(String attribute); + + + /** + * return delay in seconds + */ + public float defineObstacle(RouteDataObject road, int point) { + // no obstacles + return 0; + } + + public float defineRoutingObstacle(RouteDataObject road, int point) { + // no obstacles + return 0; + } + + /** + * return speed in m/s for vehicle for specified road + */ + public abstract float defineSpeed(RouteDataObject road); + + /** + * define priority to multiply the speed for g(x) A* + */ + public abstract float defineSpeedPriority(RouteDataObject road); + + /** + * Used for A* routing to calculate g(x) + * + * @return minimal speed at road in m/s + */ + public abstract float getMinDefaultSpeed(); + + /** + * Used for A* routing to predict h(x) : it should be great any g(x) + * + * @return maximum speed to calculate shortest distance + */ + public abstract float getMaxDefaultSpeed(); + + public abstract VehicleRouter specifyParameter(String tag); + + /** + * Calculate turn time + */ + public abstract double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) ; +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/router/routing.xml b/OsmAnd-java/src/net/osmand/router/routing.xml new file mode 100644 index 0000000000..6ab97b6161 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/router/routing.xml @@ -0,0 +1,651 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd-java/src/net/osmand/util/Algorithms.java b/OsmAnd-java/src/net/osmand/util/Algorithms.java new file mode 100644 index 0000000000..bc4ed5b77b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/util/Algorithms.java @@ -0,0 +1,323 @@ +package net.osmand.util; + + +import java.io.Closeable; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.DateFormat; +import java.util.Date; +import java.util.Locale; + +import net.osmand.PlatformUtil; + +import org.apache.commons.logging.Log; + + +/** + * Basic algorithms that are not in jdk + */ +public class Algorithms { + private static final int BUFFER_SIZE = 1024; + private static final Log log = PlatformUtil.getLog(Algorithms.class); + + public static boolean isEmpty(String s){ + return s == null || s.length() == 0; + } + + /** + * Determine whether a file is a ZIP File. + */ + public static boolean isZipFile(File file) throws IOException { + if (file.isDirectory()) { + return false; + } + if (!file.canRead()) { + throw new IOException("Cannot read file " + file.getAbsolutePath()); + } + if (file.length() < 4) { + return false; + } + FileInputStream in = new FileInputStream(file); + int test = readInt(in); + in.close(); + return test == 0x504b0304; + } + + private static final int readInt(InputStream in) throws IOException { + int ch1 = in.read(); + int ch2 = in.read(); + int ch3 = in.read(); + int ch4 = in.read(); + if ((ch1 | ch2 | ch3 | ch4) < 0) + throw new EOFException(); + return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); + } + + public static String capitalizeFirstLetterAndLowercase(String s) { + if (s != null && s.length() > 1) { + // not very efficient algorithm + return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase(); + } else { + return s; + } + } + + + public static boolean objectEquals(Object a, Object b){ + if(a == null){ + return b == null; + } else { + return a.equals(b); + } + } + + public static int extractFirstIntegerNumber(String s) { + int i = 0; + for (int k = 0; k < s.length(); k++) { + if (Character.isDigit(s.charAt(k))) { + i = i * 10 + (s.charAt(k) - '0'); + } else { + break; + } + } + return i; + } + + public static String extractIntegerSuffix(String s) { + int k = 0; + for (; k < s.length(); k++) { + if (!Character.isDigit(s.charAt(k))) { + return s.substring(k); + } + } + return ""; + } + + + public static void streamCopy(InputStream in, OutputStream out) throws IOException{ + byte[] b = new byte[BUFFER_SIZE]; + int read; + while ((read = in.read(b)) != -1) { + out.write(b, 0, read); + } + } + + public static void oneByteStreamCopy(InputStream in, OutputStream out) throws IOException{ + int read; + while ((read = in.read()) != -1) { + out.write(read); + } + } + + public static void closeStream(Closeable stream){ + try { + if(stream != null){ + stream.close(); + } + } catch(IOException e){ + log.warn("Closing stream warn", e); //$NON-NLS-1$ + } + } + + public static void updateAllExistingImgTilesToOsmandFormat(File f){ + if(f.isDirectory()){ + for(File c : f.listFiles()){ + updateAllExistingImgTilesToOsmandFormat(c); + } + } else if(f.getName().endsWith(".png") || f.getName().endsWith(".jpg")){ //$NON-NLS-1$ //$NON-NLS-2$ + f.renameTo(new File(f.getAbsolutePath() + ".tile")); //$NON-NLS-1$ + } else if(f.getName().endsWith(".andnav2")) { //$NON-NLS-1$ + f.renameTo(new File(f.getAbsolutePath().substring(0, f.getAbsolutePath().length() - ".andnav2".length()) + ".tile")); //$NON-NLS-1$ //$NON-NLS-2$ + } + + } + + public static boolean removeAllFiles(File f) { + if (f == null) { + return false; + } + if (f.isDirectory()) { + File[] fs = f.listFiles(); + if(fs != null) { + for (File c : fs) { + removeAllFiles(c); + } + } + return f.delete(); + } else { + return f.delete(); + } + } + + + public static long parseLongFromBytes(byte[] bytes, int offset) { + long o= 0xff & bytes[offset + 7]; + o = o << 8 | (0xff & bytes[offset + 6]); + o = o << 8 | (0xff & bytes[offset + 5]); + o = o << 8 | (0xff & bytes[offset + 4]); + o = o << 8 | (0xff & bytes[offset + 3]); + o = o << 8 | (0xff & bytes[offset + 2]); + o = o << 8 | (0xff & bytes[offset + 1]); + o = o << 8 | (0xff & bytes[offset + 0]); + return o; + } + + + + public static void putLongToBytes(byte[] bytes, int offset, long l){ + bytes[offset] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 1] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 2] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 3] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 4] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 5] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 6] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 7] = (byte) (l & 0xff); + } + + + public static int parseIntFromBytes(byte[] bytes, int offset) { + int o = (0xff & bytes[offset + 3]) << 24; + o |= (0xff & bytes[offset + 2]) << 16; + o |= (0xff & bytes[offset + 1]) << 8; + o |= (0xff & bytes[offset + 0]); + return o; + } + + public static void putIntToBytes(byte[] bytes, int offset, int l){ + bytes[offset] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 1] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 2] = (byte) (l & 0xff); + l >>= 8; + bytes[offset + 3] = (byte) (l & 0xff); + } + + + public static void writeLongInt(OutputStream stream, long l) throws IOException { + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + l >>= 8; + stream.write((int) (l & 0xff)); + } + + public static void writeInt(OutputStream stream, int l) throws IOException { + stream.write(l & 0xff); + l >>= 8; + stream.write(l & 0xff); + l >>= 8; + stream.write(l & 0xff); + l >>= 8; + stream.write(l & 0xff); + } + + + public static void writeSmallInt(OutputStream stream, int l) throws IOException { + stream.write(l & 0xff); + l >>= 8; + stream.write(l & 0xff); + l >>= 8; + } + + public static int parseSmallIntFromBytes(byte[] bytes, int offset) { + int s = (0xff & bytes[offset + 1]) << 8; + s |= (0xff & bytes[offset + 0]); + return s; + } + + public static void putSmallIntBytes(byte[] bytes, int offset, int s){ + bytes[offset] = (byte) (s & 0xff); + s >>= 8; + bytes[offset + 1] = (byte) (s & 0xff); + s >>= 8; + } + + public static boolean containsDigit(String name) { + for (int i = 0; i < name.length(); i++) { + if (Character.isDigit(name.charAt(i))) { + return true; + } + } + return false; + } + + + public static String formatDuration(int seconds) { + String sec; + if (seconds % 60 < 10) { + sec = "0" + (seconds % 60); + } else { + sec = (seconds % 60) + ""; + } + int minutes = seconds / 60; + if (minutes < 60) { + return minutes + ":" + sec; + } else { + String min; + if (minutes % 60 < 10) { + min = "0" + (minutes % 60); + } else { + min = (minutes % 60) + ""; + } + int hours = minutes / 60; + return hours + ":" + min + ":" + sec; + } + } + + public static > T parseEnumValue(T[] cl, String val, T defaultValue){ + for(int i = 0; i< cl.length; i++) { + if(cl[i].name().equalsIgnoreCase(val)) { + return cl[i]; + } + } + return defaultValue; + } + + private static java.text.DateFormat dateFormat; + private static java.text.DateFormat dateTimeFormat; + public static String formatDate(long t) { + return getDateFormat().format(new Date(t)); + } + + public static DateFormat getDateFormat() { + if(dateFormat == null) { + dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); + } + return dateFormat; + } + + public static DateFormat getDateTimeFormat() { + if (dateTimeFormat == null) { + dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault()); + } + return dateTimeFormat; + } + + public static String formatDateTime(long t) { + return getDateTimeFormat().format(new Date(t)); + } + +} diff --git a/OsmAnd-java/src/net/osmand/util/MapAlgorithms.java b/OsmAnd-java/src/net/osmand/util/MapAlgorithms.java new file mode 100644 index 0000000000..802c0ee19a --- /dev/null +++ b/OsmAnd-java/src/net/osmand/util/MapAlgorithms.java @@ -0,0 +1,293 @@ +package net.osmand.util; + +import gnu.trove.list.TLongList; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.osmand.data.LatLon; + +public class MapAlgorithms { + + public static boolean isClockwiseWay(TLongList c) { + if (c.size() == 0) { + return true; + } + + // calculate middle Y + long mask = 0xffffffffl; + long middleY = 0; + for (int i = 0; i < c.size(); i++) { + middleY = middleY + (long)(c.get(i) & mask); + } + middleY = middleY /(long) c.size(); + + double clockwiseSum = 0; + + boolean firstDirectionUp = false; + int previousX = Integer.MIN_VALUE; + int firstX = Integer.MIN_VALUE; + + int prevX = (int) (c.get(0) >> 32); + int prevY = (int) (c.get(0) & mask); + + for (int i = 1; i < c.size(); i++) { + int x = (int) (c.get(i) >> 32); + int y = (int) (c.get(i) & mask); + int rX = ray_intersect_x(prevX, prevY, x, y, (int) middleY); + if (rX != Integer.MIN_VALUE) { + boolean skipSameSide = (y <= middleY) == (prevY <= middleY); + if (skipSameSide) { + continue; + } + boolean directionUp = prevY >= middleY; + if (firstX == Integer.MIN_VALUE) { + firstDirectionUp = directionUp; + firstX = rX; + } else { + boolean clockwise = (!directionUp) == (previousX < rX); + if (clockwise) { + clockwiseSum += Math.abs(previousX - rX); + } else { + clockwiseSum -= Math.abs(previousX - rX); + } + } + previousX = rX; + } + prevX = x; + prevY = y; + } + if (firstX != Integer.MIN_VALUE) { + boolean clockwise = (!firstDirectionUp) == (previousX < firstX); + if (clockwise) { + clockwiseSum += Math.abs(previousX - firstX); + } else { + clockwiseSum -= Math.abs(previousX - firstX); + } + } + + return clockwiseSum >= 0; + } + + + public static int ray_intersect_x(int prevX, int prevY, int x, int y, int middleY) { + // prev node above line + // x,y node below line + if (prevY > y) { + int tx = x; + int ty = y; + x = prevX; + y = prevY; + prevX = tx; + prevY = ty; + } + if (y == middleY || prevY == middleY) { + middleY -= 1; + } + if (prevY > middleY || y < middleY) { + return Integer.MIN_VALUE; + } else { + if (y == prevY) { + // the node on the boundary !!! + return x; + } + // that tested on all cases (left/right) + double rx = x + ((double) middleY - y) * ((double) x - prevX) / (((double) y - prevY)); + return (int) rx; + } + } + + + + private static long combine2Points(int x, int y) { + return (((long) x ) <<32) | ((long)y ); + } + /** + * outx,outy are the coordinates out of the box + * inx,iny are the coordinates from the box (NOT IMPORTANT in/out, just one should be in second out) + * @return -1 if there is no instersection or x<<32 | y + */ + public static long calculateIntersection(int inx, int iny, int outx, int outy, int leftX, int rightX, int bottomY, int topY) { + int by = -1; + int bx = -1; + // firstly try to search if the line goes in + if (outy < topY && iny >= topY) { + int tx = (int) (outx + ((double) (inx - outx) * (topY - outy)) / (iny - outy)); + if (leftX <= tx && tx <= rightX) { + bx = tx; + by = topY; + return combine2Points(bx, by); + } + } + if (outy > bottomY && iny <= bottomY) { + int tx = (int) (outx + ((double) (inx - outx) * (outy - bottomY)) / (outy - iny)); + if (leftX <= tx && tx <= rightX) { + bx = tx; + by = bottomY; + return combine2Points(bx, by); + } + } + if (outx < leftX && inx >= leftX) { + int ty = (int) (outy + ((double) (iny - outy) * (leftX - outx)) / (inx - outx)); + if (ty >= topY && ty <= bottomY) { + by = ty; + bx = leftX; + return combine2Points(bx, by); + } + + } + if (outx > rightX && inx <= rightX) { + int ty = (int) (outy + ((double) (iny - outy) * (outx - rightX)) / (outx - inx)); + if (ty >= topY && ty <= bottomY) { + by = ty; + bx = rightX; + return combine2Points(bx, by); + } + + } + + // try to search if point goes out + if (outy > topY && iny <= topY) { + int tx = (int) (outx + ((double) (inx - outx) * (topY - outy)) / (iny - outy)); + if (leftX <= tx && tx <= rightX) { + bx = tx; + by = topY; + return combine2Points(bx, by); + } + } + if (outy < bottomY && iny >= bottomY) { + int tx = (int) (outx + ((double) (inx - outx) * (outy - bottomY)) / (outy - iny)); + if (leftX <= tx && tx <= rightX) { + bx = tx; + by = bottomY; + return combine2Points(bx, by); + } + } + if (outx > leftX && inx <= leftX) { + int ty = (int) (outy + ((double) (iny - outy) * (leftX - outx)) / (inx - outx)); + if (ty >= topY && ty <= bottomY) { + by = ty; + bx = leftX; + return combine2Points(bx, by); + } + + } + if (outx < rightX && inx >= rightX) { + int ty = (int) (outy + ((double) (iny - outy) * (outx - rightX)) / (outx - inx)); + if (ty >= topY && ty <= bottomY) { + by = ty; + bx = rightX; + return combine2Points(bx, by); + } + + } + + if (outx == rightX || outx == leftX || outy == topY || outy == bottomY) { + bx = outx; + by = outy; + //return (((long) bx) << 32) | ((long) by); + } + return -1l; + } + + /** + * return true if the line segment [a,b] intersects [c,d] + * @param a point 1 + * @param b point 2 + * @param c point 3 + * @param d point 4 + * @return true if the line segment [a,b] intersects [c,d] + */ + + public static boolean linesIntersect(LatLon a, LatLon b, LatLon c, LatLon d){ + + return linesIntersect( + a.getLatitude(), a.getLongitude(), + b.getLatitude(), b.getLongitude(), + c.getLatitude(), c.getLongitude(), + d.getLatitude(), d.getLongitude()); + + } + + /** + * Return true if two line segments intersect inside the segment + * + * source: http://www.java-gaming.org/index.php?topic=22590.0 + * @param x1 line 1 point 1 latitude + * @param y1 line 1 point 1 longitude + * @param x2 line 1 point 2 latitude + * @param y2 line 1 point 2 longitude + * @param x3 line 2 point 1 latitude + * @param y3 line 2 point 1 longitude + * @param x4 line 2 point 2 latitude + * @param y4 line 2 point 2 longitude + * @return + */ + + public static boolean linesIntersect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){ + + // Return false if either of the lines have zero length + if (x1 == x2 && y1 == y2 || + x3 == x4 && y3 == y4){ + return false; + } + + // Fastest method, based on Franklin Antonio's "Faster Line Segment Intersection" topic "in Graphics Gems III" book (http://www.graphicsgems.org/) + + double ax = x2-x1; + double ay = y2-y1; + double bx = x3-x4; + double by = y3-y4; + double cx = x1-x3; + double cy = y1-y3; + + + double alphaNumerator = by*cx - bx*cy; + double commonDenominator = ay*bx - ax*by; + if (commonDenominator > 0){ + if (alphaNumerator < 0 || alphaNumerator > commonDenominator){ + return false; + } + }else if (commonDenominator < 0){ + if (alphaNumerator > 0 || alphaNumerator < commonDenominator){ + return false; + } + } + + double betaNumerator = ax*cy - ay*cx; + if (commonDenominator > 0){ + if (betaNumerator < 0 || betaNumerator > commonDenominator){ + return false; + } + }else if (commonDenominator < 0){ + if (betaNumerator > 0 || betaNumerator < commonDenominator){ + return false; + } + } + + if (commonDenominator == 0){ + // This code wasn't in Franklin Antonio's method. It was added by Keith Woodward. + // The lines are parallel. + // Check if they're collinear. + double y3LessY1 = y3-y1; + double collinearityTestForP3 = x1*(y2-y3) + x2*(y3LessY1) + x3*(y1-y2); // see http://mathworld.wolfram.com/Collinear.html + // If p3 is collinear with p1 and p2 then p4 will also be collinear, since p1-p2 is parallel with p3-p4 + + if (collinearityTestForP3 == 0){ + // The lines are collinear. Now check if they overlap. + if (x1 >= x3 && x1 <= x4 || x1 <= x3 && x1 >= x4 || + x2 >= x3 && x2 <= x4 || x2 <= x3 && x2 >= x4 || + x3 >= x1 && x3 <= x2 || x3 <= x1 && x3 >= x2){ + if (y1 >= y3 && y1 <= y4 || y1 <= y3 && y1 >= y4 || + y2 >= y3 && y2 <= y4 || y2 <= y3 && y2 >= y4 || + y3 >= y1 && y3 <= y2 || y3 <= y1 && y3 >= y2){ + return true; + } + } + } + return false; + } + return true; + } +} \ No newline at end of file diff --git a/OsmAnd-java/src/net/osmand/util/MapUtils.java b/OsmAnd-java/src/net/osmand/util/MapUtils.java new file mode 100644 index 0000000000..8a0224f927 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/util/MapUtils.java @@ -0,0 +1,438 @@ +package net.osmand.util; + + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import net.osmand.data.LatLon; +import net.osmand.data.MapObject; + + +/** + * This utility class includes : + * 1. distance algorithms + * 2. finding center for array of nodes + * 3. tile evaluation algorithms + * + * + */ +public class MapUtils { + + private static final String BASE_SHORT_OSM_URL = "http://osm.org/go/"; + + /** + * This array is a lookup table that translates 6-bit positive integer + * index values into their "Base64 Alphabet" equivalents as specified + * in Table 1 of RFC 2045. + */ + private static final char intToBase64[] = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_', '@' + }; + + public static double getDistance(LatLon l, double latitude, double longitude){ + return getDistance(l.getLatitude(), l.getLongitude(), latitude, longitude); + } + + private static double scalarMultiplication(double xA, double yA, double xB, double yB, double xC, double yC) { + // Scalar multiplication between (AB, AC) + double multiple = (xB - xA) * (xC - xA) + (yB- yA) * (yC -yA); + return multiple; + } + + public static double getOrthogonalDistance(double lat, double lon, double fromLat, double fromLon, double toLat, double toLon) { + return getDistance(getProjection(lat, lon, fromLat, fromLon, toLat, toLon), lat, lon); + } + + public static LatLon getProjection(double lat, double lon, double fromLat, double fromLon, double toLat, double toLon) { + // not very accurate computation on sphere but for distances < 1000m it is ok + double mDist = (fromLat - toLat) * (fromLat - toLat) + (fromLon - toLon) * (fromLon - toLon); + double projection = scalarMultiplication(fromLat, fromLon, toLat, toLon, lat, lon); + double prlat; + double prlon; + if (projection < 0) { + prlat = fromLat; + prlon = fromLon; + } else if (projection >= mDist) { + prlat = toLat; + prlon = toLon; + } else { + prlat = fromLat + (toLat - fromLat) * (projection / mDist); + prlon = fromLon + (toLon - fromLon) * (projection / mDist); + } + return new LatLon(prlat, prlon); + } + + private static double toRadians(double angdeg) { +// return Math.toRadians(angdeg); + return angdeg / 180.0 * Math.PI; + } + + /** + * Gets distance in meters + */ + public static double getDistance(double lat1, double lon1, double lat2, double lon2){ + double R = 6371; // km + double dLat = toRadians(lat2-lat1); + double dLon = toRadians(lon2-lon1); + double a = Math.sin(dLat/2) * Math.sin(dLat/2) + + Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2)) * + Math.sin(dLon/2) * Math.sin(dLon/2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + return R * c * 1000; + } + + + /** + * Gets distance in meters + */ + public static double getDistance(LatLon l1, LatLon l2){ + return getDistance(l1.getLatitude(), l1.getLongitude(), l2.getLatitude(), l2.getLongitude()); + } + + public static double checkLongitude(double longitude) { + while (longitude < -180 || longitude > 180) { + if (longitude < 0) { + longitude += 360; + } else { + longitude -= 360; + } + } + return longitude; + } + + public static double checkLatitude(double latitude) { + while (latitude < -90 || latitude > 90) { + if (latitude < 0) { + latitude += 180; + } else { + latitude -= 180; + } + } + if(latitude < -85.0511) { + return -85.0511; + } else if(latitude > 85.0511){ + return 85.0511; + } + return latitude; + } + + public static int get31TileNumberX(double longitude){ + longitude = checkLongitude(longitude); + long l = 1l << 31; + return (int)((longitude + 180d)/360d * l); + } + public static int get31TileNumberY( double latitude){ + latitude = checkLatitude(latitude); + double eval = Math.log( Math.tan(toRadians(latitude)) + 1/Math.cos(toRadians(latitude)) ); + long l = 1l << 31; + if(eval > Math.PI){ + eval = Math.PI; + } + return (int) ((1 - eval / Math.PI) / 2 * l); + } + + public static double get31LongitudeX(int tileX){ + return MapUtils.getLongitudeFromTile(21, tileX /1024f); + } + + public static double get31LatitudeY(int tileY){ + return MapUtils.getLatitudeFromTile(21, tileY /1024f); + } + + + + /** + * + * Theses methods operate with degrees (evaluating tiles & vice versa) + * degree longitude measurements (-180, 180) [27.56 Minsk] + // degree latitude measurements (90, -90) [53.9] + */ + + public static double getTileNumberX(float zoom, double longitude){ + if(longitude == 180d) { + return getPowZoom(zoom) - 1; + } + longitude = checkLongitude(longitude); + return (longitude + 180d)/360d * getPowZoom(zoom); + } + + public static double getTileNumberY(float zoom, double latitude){ + latitude = checkLatitude(latitude); + double eval = Math.log( Math.tan(toRadians(latitude)) + 1/Math.cos(toRadians(latitude)) ); + if (Double.isInfinite(eval) || Double.isNaN(eval)) { + latitude = latitude < 0 ? - 89.9 : 89.9; + eval = Math.log( Math.tan(toRadians(latitude)) + 1/Math.cos(toRadians(latitude)) ); + } + double result = (1 - eval / Math.PI) / 2 * getPowZoom(zoom); + return result; + } + + public static double getTileEllipsoidNumberY(float zoom, double latitude){ + final double E2 = (double) latitude * Math.PI / 180; + final long sradiusa = 6378137; + final long sradiusb = 6356752; + final double J2 = (double) Math.sqrt(sradiusa * sradiusa - sradiusb * sradiusb) / sradiusa; + final double M2 = (double) Math.log((1 + Math.sin(E2)) + / (1 - Math.sin(E2)))/ 2- J2 * Math.log((1 + J2 * Math.sin(E2))/ (1 - J2 * Math.sin(E2))) / 2; + final double B2 = getPowZoom(zoom); + return B2 / 2 - M2 * B2 / 2 / Math.PI; + } + + public static double getLatitudeFromEllipsoidTileY(float zoom, float tileNumberY){ + final double MerkElipsK = 0.0000001; + final long sradiusa = 6378137; + final long sradiusb = 6356752; + final double FExct = (double) Math.sqrt(sradiusa * sradiusa + - sradiusb * sradiusb) + / sradiusa; + final double TilesAtZoom = getPowZoom(zoom); + double result = (tileNumberY - TilesAtZoom / 2) + / -(TilesAtZoom / (2 * Math.PI)); + result = (2 * Math.atan(Math.exp(result)) - Math.PI / 2) * 180 + / Math.PI; + double Zu = result / (180 / Math.PI); + double yy = (tileNumberY - TilesAtZoom / 2); + + double Zum1 = Zu; + Zu = Math.asin(1 - ((1 + Math.sin(Zum1)) * Math.pow(1 - FExct * Math.sin(Zum1), FExct)) + / (Math.exp((2 * yy) / -(TilesAtZoom / (2 * Math.PI))) * Math.pow(1 + FExct * Math.sin(Zum1), FExct))); + while (Math.abs(Zum1 - Zu) >= MerkElipsK) { + Zum1 = Zu; + Zu = Math.asin(1 - ((1 + Math.sin(Zum1)) * Math.pow(1 - FExct * Math.sin(Zum1), FExct)) + / (Math.exp((2 * yy) / -(TilesAtZoom / (2 * Math.PI))) * Math.pow(1 + FExct * Math.sin(Zum1), FExct))); + } + + return Zu * 180 / Math.PI; + } + + + public static double getLongitudeFromTile(float zoom, double x) { + return x / getPowZoom(zoom) * 360.0 - 180.0; + } + + public static double getPowZoom(float zoom){ + if(zoom >= 0 && zoom - Math.floor(zoom) < 0.05f){ + return 1 << ((int)zoom); + } else { + return Math.pow(2, zoom); + } + } + + + + public static float calcDiffPixelX(float rotateSin, float rotateCos, float dTileX, float dTileY, float tileSize){ + return (rotateCos * dTileX - rotateSin * dTileY) * tileSize ; + } + + public static float calcDiffPixelY(float rotateSin, float rotateCos, float dTileX, float dTileY, float tileSize){ + return (rotateSin * dTileX + rotateCos * dTileY) * tileSize ; + } + + public static double getLatitudeFromTile(float zoom, double y){ + int sign = y < 0 ? -1 : 1; + double result = Math.atan(sign*Math.sinh(Math.PI * (1 - 2 * y / getPowZoom(zoom)))) * 180d / Math.PI; + return result; + } + + + public static int getPixelShiftX(int zoom, double long1, double long2, int tileSize){ + return (int) ((getTileNumberX(zoom, long1) - getTileNumberX(zoom, long2)) * tileSize); + } + + + public static int getPixelShiftY(int zoom, double lat1, double lat2, int tileSize){ + return (int) ((getTileNumberY(zoom, lat1) - getTileNumberY(zoom, lat2)) * tileSize); + } + + + + public static void sortListOfMapObject(List list, final double lat, final double lon){ + Collections.sort(list, new Comparator() { + @Override + public int compare(MapObject o1, MapObject o2) { + return Double.compare(MapUtils.getDistance(o1.getLocation(), lat, lon), MapUtils.getDistance(o2.getLocation(), + lat, lon)); + } + }); + } + + + // Examples +// System.out.println(buildShortOsmUrl(51.51829d, 0.07347d, 16)); // http://osm.org/go/0EEQsyfu +// System.out.println(buildShortOsmUrl(52.30103d, 4.862927d, 18)); // http://osm.org/go/0E4_JiVhs +// System.out.println(buildShortOsmUrl(40.59d, -115.213d, 9)); // http://osm.org/go/TelHTB-- + public static String buildShortOsmUrl(double latitude, double longitude, int zoom){ + StringBuilder str = new StringBuilder(10); + str.append(BASE_SHORT_OSM_URL); + str.append(createShortLocString(latitude, longitude, zoom)); + str.append("?m"); + return str.toString(); + } + + public static String createShortLocString(double latitude, double longitude, int zoom) { + long lat = (long) (((latitude + 90d)/180d)*(1l << 32)); + long lon = (long) (((longitude + 180d)/360d)*(1l << 32)); + long code = interleaveBits(lon, lat); + String str = ""; + // add eight to the zoom level, which approximates an accuracy of one pixel in a tile. + for (int i = 0; i < Math.ceil((zoom + 8) / 3d); i++) { + str += intToBase64[(int) ((code >> (58 - 6 * i)) & 0x3f)]; + } + // append characters onto the end of the string to represent + // partial zoom levels (characters themselves have a granularity of 3 zoom levels). + for (int j = 0; j < (zoom + 8) % 3; j++) { + str += '-'; + } + return str; + } + + @SuppressWarnings("unused") + public static LatLon decodeShortLocString(String s) { + long x = 0; + long y = 0; + int z = 0; + int z_offset = 0; + + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '-') { + z_offset--; + continue; + } + char c = s.charAt(i); + for (int j = 0; j < intToBase64.length; j++) { + if (c == intToBase64[j]) { + for (int k = 0; k < 3; k++) { + x <<= 1; + if ((j & 32) != 0) { + x = x | 1; + } + j <<= 1; + y <<= 1; + if ((j & 32) != 0) { + y = y | 1; + } + j <<= 1; + } + z += 3; + break; + } + } + } + x <<= (32 - z); + y <<= (32 - z); +// int zoom = z - 8 - ((3 + z_offset) % 3); + double dlat = (180d * (y) / ((double)(1l << 32))) - 90d; + double dlon = (360d * (x)/ ((double)(1l << 32))) - 180d; + return new LatLon(dlat, dlon); + } + + /** + * interleaves the bits of two 32-bit numbers. the result is known as a Morton code. + */ + private static long interleaveBits(long x, long y){ + long c = 0; + for(byte b = 31; b>=0; b--){ + c = (c << 1) | ((x >> b) & 1); + c = (c << 1) | ((y >> b) & 1); + } + return c; + } + + /** + * Calculate rotation diff D, that R (rotate) + D = T (targetRotate) + * D is between -180, 180 + * @param rotate + * @param targetRotate + * @return + */ + public static float unifyRotationDiff(float rotate, float targetRotate) { + float d = targetRotate - rotate; + while(d >= 180){ + d -= 360; + } + while(d < -180){ + d += 360; + } + return d; + } + + /** + * Calculate rotation diff D, that R (rotate) + D = T (targetRotate) + * D is between -180, 180 + * @param rotate + * @param targetRotate + * @return + */ + public static float unifyRotationTo360(float rotate) { + while(rotate < 0){ + rotate += 360; + } + while(rotate > 360){ + rotate -= 360; + } + return rotate; + } + + /** + * @param diff align difference between 2 angles ]-PI, PI] + * @return + */ + public static double alignAngleDifference(double diff) { + while(diff > Math.PI) { + diff -= 2 * Math.PI; + } + while(diff <=-Math.PI) { + diff += 2 * Math.PI; + } + return diff; + + } + + /** + * @param diff align difference between 2 angles ]-180, 180] + * @return + */ + public static double degreesDiff(double a1, double a2) { + double diff = a1 - a2; + while(diff > 180) { + diff -= 360; + } + while(diff <=-180) { + diff += 360; + } + return diff; + + } + + + public static double squareDist31TileMetric(int x1, int y1, int x2, int y2) { + // translate into meters + double dy = convert31YToMeters(y1, y2); + double dx = convert31XToMeters(x1, x2); + return dx * dx + dy * dy; + } + public static double convert31YToMeters(float y1, float y2) { + // translate into meters + return (y1 - y2) * 0.01863d; + } + + public static double convert31XToMeters(float x1, float x2) { + // translate into meters + return (x1 - x2) * 0.011d; + } + + + public static double calculateProjection31TileMetric(int xA, int yA, int xB, int yB, int xC, int yC) { + // Scalar multiplication between (AB, AC) + double multiple = convert31XToMeters(xB, xA) * convert31XToMeters(xC, xA) + convert31YToMeters(yB, yA) * convert31YToMeters(yC, yA); + return multiple; + } + +} + + diff --git a/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java b/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java new file mode 100644 index 0000000000..ca53f4727e --- /dev/null +++ b/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java @@ -0,0 +1,600 @@ +package net.osmand.util; + + + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; + + +/** + * Class used to parse opening hours + * + * the method "parseOpenedHours" will parse an OSM opening_hours string and return + * an object of the type OpeningHours. That object can be used to check if the OSM feature + * is open at a certain time. + */ +public class OpeningHoursParser { + private static final String[] daysStr = new String[] {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ + /** + * default values for sunrise and sunset. Might be computed afterwards, not final + */ + private static String sunrise = "07:00", sunset = "21:00"; + /** + * hour of when you would expect a day to be ended. + * This is to be used when no end hour is known (like pubs that open at a certain time, + * but close at a variable time, depending on the number of clients). + * OsmAnd needs to show a value, so there is some arbitrary default value chosen. + */ + private static String endOfDay = "24:00"; + + /** + * This class contains the entire OpeningHours schema and + * offers methods to check directly weather something is open + * + * @author sander + */ + public static class OpeningHours { + + /** + * list of the different rules + */ + private ArrayList rules; + + /** + * Constructor + * + * @param rules List of OpeningHoursRule to be given + */ + public OpeningHours(ArrayList rules) { + this.rules = rules; + } + + /** + * Empty constructor + */ + public OpeningHours(){ + rules = new ArrayList(); + } + + /** + * add a rule to the opening hours + * @param r rule to add + */ + public void addRule(OpeningHoursRule r){ + rules.add(r); + } + + /** + * return the list of rules + * + * @return the rules + */ + public ArrayList getRules(){ + return rules; + } + + /** + * check if the feature is opened at time "cal" + * @param cal the time to check + * @return true if feature is open + */ + public boolean isOpenedForTime(Calendar cal){ + /* + * first check for rules that contain the current day + * afterwards check for rules that contain the previous + * day with overlapping times (times after midnight) + */ + boolean isOpenDay = false; + for (OpeningHoursRule r : rules){ + if(r.containsDay(cal)){ + isOpenDay = r.isOpenedForTime(cal, false); + } + } + boolean isOpenPrevious = false; + for (OpeningHoursRule r : rules){ + if(r.containsPreviousDay(cal)){ + isOpenPrevious = r.isOpenedForTime(cal, true); + } + } + return isOpenDay || isOpenPrevious; + } + + @Override + public String toString(){ + StringBuilder s = new StringBuilder(); + + if (rules.isEmpty()) { + return ""; + } + + for (OpeningHoursRule r : rules) { + s.append(r.toString()).append("; "); + } + + return s.substring(0, s.length()-2); + } + + } + + /** + * Interface to represent a single rule + * + * A rule consist out of + * - a collection of days/dates + * - a time range + */ + public static interface OpeningHoursRule { + + /** + * Check if, for this rule, the feature is opened for time "cal" + * @param cal the time to check + * @param checkPrevious only check for overflowing times (after midnight) or don't check for it + * @return true if the feature is open + */ + public boolean isOpenedForTime(Calendar cal, boolean checkPrevious); + + /** + * Check if the previous day before "cal" is part of this rule + * @param cal; the time to check + * @return true if the previous day is part of the rule + */ + public boolean containsPreviousDay(Calendar cal); + + /** + * Check if the day of "cal" is part of this rule + * @param cal; the time to check + * @return true if the day is part of the rule + */ + public boolean containsDay(Calendar cal); + + public String toRuleString(); + } + + /** + * implementation of the basic OpeningHoursRule + * + * This implementation only supports day of weeks and numeral times, or the value "off" + * + */ + public static class BasicDayOpeningHourRule implements OpeningHoursRule { + /** + * represents the list on which days it is open. + * Day number 0 is MONDAY + */ + private boolean[] days = new boolean[7]; + /** + * lists of equal size representing the start and end times + */ + private int[] startTimes = new int[0], endTimes = new int[0]; + + /** + * return an array representing the days of the rule + * @return the days of the rule + */ + public boolean[] getDays() { + return days; + } + + /** + * set a single start time, erase all previously added start times + * @param s startTime to set + */ + public void setStartTime(int s) { + startTimes = new int[]{s}; + if(endTimes.length != 1) { + endTimes = new int[]{0}; + } + } + + /** + * set a single end time, erase all previously added end times + * @param e endTime to set + */ + public void setEndTime(int e) { + endTimes = new int[]{e}; + if(startTimes.length != 1) { + startTimes = new int[]{0}; + } + } + + /** + * get a single start time + * @return a single start time + */ + public int getStartTime() { + if(startTimes.length == 0) { + return 0; + } + return startTimes[0]; + } + + /** + * get a single end time + * @return a single end time + */ + public int getEndTime() { + if(endTimes.length == 0) { + return 0; + } + return endTimes[0]; + } + + + /** + * Check if the weekday of time "cal" is part of this rule + * @param cal the time to check + * @return true if this day is part of the rule + */ + @Override + public boolean containsDay(Calendar cal){ + int i = cal.get(Calendar.DAY_OF_WEEK); + int d = (i + 5) % 7; + if (days[d]) { + return true; + } + return false; + + } + + + /** + * Check if the previous weekday of time "cal" is part of this rule + * @param cal the time to check + * @return true if the previous day is part of the rule + */ + @Override + public boolean containsPreviousDay(Calendar cal){ + int i = cal.get(Calendar.DAY_OF_WEEK); + int p = (i + 4) % 7; + if (days[p]) { + return true; + } + return false; + + } + + /** + * Check if this rule says the feature is open at time "cal" + * @param cal the time to check + * @return true if this rule contains the day to check and the start and end times denote it's open + * @return true if this rule contains the previous day and an endTime>startTime such that the time to check falls before the endtime + * @return false in all other cases, also if only day is wrong + */ + @Override + public boolean isOpenedForTime(Calendar cal, boolean checkPrevious) { + int i = cal.get(Calendar.DAY_OF_WEEK); + int d = (i + 5) % 7; + int p = d - 1; + if (p < 0) { + p += 7; + } + int time = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE); + for (i = 0; i < startTimes.length; i++) { + int startTime = this.startTimes[i]; + int endTime = this.endTimes[i]; + // one day working 10 - 20 (not 20 - 04) + if (startTime < endTime || endTime == -1) { + if (days[d] && !checkPrevious) { + if (time >= startTime && (endTime == -1 || time <= endTime)) { + return true; + } + } + } else { + if (time >= startTime && days[p] && checkPrevious) { + // check in previous day + return true; + } else if (time <= endTime && days[d] && !checkPrevious) { + return true; + } + } + } + return false; + } + + + @Override + public String toRuleString() { + StringBuilder b = new StringBuilder(25); + boolean dash = false; + boolean first = true; + boolean open24_7 = true; + for (int i = 0; i < 7; i++) { + if (days[i]) { + if (i > 0 && days[i - 1] && i < 6 && days[i + 1]) { + if (!dash) { + dash = true; + b.append("-"); //$NON-NLS-1$ + } + continue; + } + if (first) { + first = false; + } else if (!dash) { + b.append(", "); //$NON-NLS-1$ + } + b.append(daysStr[i]); + dash = false; + } else { + open24_7 = false; + } + } + if (startTimes == null || startTimes.length == 0){ + b.append(" off "); + } else { + for (int i = 0; i i){// overflow handling, e.g. Su-We + for (int j = startDay; j <= 6; j++) { + days[j] = true; + } + for (int j = 0; j <= i; j++){ + days[j] = true; + } + } + startDay = -1; + } else { + days[i] = true; + } + previousDay = i; + } + } else { + return false; + } + } + if(previousDay == -1){ + // no days given => take all days. + for (int i = 0; i<7; i++){ + days[i] = true; + } + } + String timeSubstr = r.substring(k); + String[] times = timeSubstr.split(","); + boolean timesExist = true; + for (String time : times) { + time = time.trim(); + if(time.length() == 0){ + continue; + } + if(time.equals("off")){ + break; // add no time values + } + if(time.equals("24/7")){ + // for some reason, this is used. See tagwatch. + basic.addTimeRange(0, 24*60); + break; + } + String[] stEnd = time.split("-"); //$NON-NLS-1$ + if (stEnd.length != 2) { + continue; + } + timesExist = true; + int st; + int end; + try { + int i1 = stEnd[0].indexOf(':'); + int i2 = stEnd[1].indexOf(':'); + int startHour, startMin, endHour, endMin; + if(i1 == -1) { + // if no minutes are given, try complete value as hour + startHour = Integer.parseInt(stEnd[0].trim()); + startMin = 0; + } else { + startHour = Integer.parseInt(stEnd[0].substring(0, i1).trim()); + startMin = Integer.parseInt(stEnd[0].substring(i1 + 1).trim()); + } + if(i2 == -1) { + // if no minutes are given, try complete value as hour + endHour = Integer.parseInt(stEnd[1].trim()); + endMin = 0; + } else { + endHour = Integer.parseInt(stEnd[1].substring(0, i2).trim()); + endMin = Integer.parseInt(stEnd[1].substring(i2 + 1).trim()); + } + st = startHour * 60 + startMin; + end = endHour * 60 + endMin; + } catch (NumberFormatException e) { + return false; + } + basic.addTimeRange(st, end); + } + rs.addRule(basic); + if(!timesExist){ + return false; + } + return true; + } + + /** + * parse OSM opening_hours string to an OpeningHours object + * @param format the string to parse + * @return the OpeningHours object when parsing was successful + * @return null when parsing was unsuccessful + */ + public static OpeningHours parseOpenedHours(String format){ + // split the OSM string in multiple rules + String[] rules = format.split(";"); //$NON-NLS-1$ + OpeningHours rs = new OpeningHours(); + for(String r : rules){ + r = r.trim(); + if(r.length() == 0){ + continue; + } + // check if valid + boolean rule = parseRule(r, rs); + if(!rule){ + return null; + } + } + return rs; + } + + + private static void formatTime(int h, int t, StringBuilder b){ + if(h < 10){ + b.append("0"); //$NON-NLS-1$ + } + b.append(h).append(":"); //$NON-NLS-1$ + if(t < 10){ + b.append("0"); //$NON-NLS-1$ + } + b.append(t); + } + + + private static void testOpened(String time, OpeningHours hours, boolean expected) throws ParseException { + Calendar cal = Calendar.getInstance(); + cal.setTime(new SimpleDateFormat("dd.MM.yyyy HH:mm").parse(time)); + System.out.println("Expected " + time+": " + expected +" = " + hours.isOpenedForTime(cal)); + } + + public static void main(String[] args) throws ParseException { + + + //Test basic case + OpeningHours hours = parseOpenedHours("Mo-Fr 08:30-14:40" ); //$NON-NLS-1$ + System.out.println(hours); + testOpened("09.08.2012 11:00", hours, true); + testOpened("09.08.2012 16:00", hours, false); + // two time and date ranges + hours = parseOpenedHours("Mo-We, Fr 08:30-14:40,15:00-19:00"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("08.08.2012 14:00", hours, true); + testOpened("10.08.2012 15:00", hours, true); + testOpened("08.08.2012 14:50", hours, false); + // test exception on general schema + hours = parseOpenedHours("Mo-Sa 08:30-14:40; Tu 08:00 - 14:00"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("07.08.2012 14:20", hours, false); + // test off value + hours = parseOpenedHours("Mo-Sa 09:00-18:25; Th off"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("08.08.2012 12:00", hours, true); + testOpened("09.08.2012 12:00", hours, false); + //test 24/7 + hours = parseOpenedHours("24/7"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("08.08.2012 23:59", hours, true); + // some people seem to use the following syntax: + hours = parseOpenedHours("Sa-Su 24/7"); + System.out.println(hours); + hours = parseOpenedHours("Mo-Fr 9-19"); + System.out.println(hours); + hours = parseOpenedHours("09:00-17:00"); + System.out.println(hours); + hours = parseOpenedHours("sunrise-sunset"); + System.out.println(hours); + hours = parseOpenedHours("10:00+"); + System.out.println(hours); + hours = parseOpenedHours("Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise"); + System.out.println(hours); + testOpened("12.08.2012 04:00", hours, true); + testOpened("12.08.2012 23:00", hours, true); + testOpened("08.08.2012 12:00", hours, false); + testOpened("08.08.2012 05:00", hours, true); + } + +} diff --git a/OsmAnd-java/src/net/osmand/util/SunriseSunset.java b/OsmAnd-java/src/net/osmand/util/SunriseSunset.java new file mode 100644 index 0000000000..c2bb24e95b --- /dev/null +++ b/OsmAnd-java/src/net/osmand/util/SunriseSunset.java @@ -0,0 +1,783 @@ +package net.osmand.util; +/****************************************************************************** +* +* SunriseSunset.java +* +******************************************************************************* +* +* Java Class: SunriseSunset +* +* This Java class is part of a collection of classes developed for the +* reading and processing of oceanographic and meterological data collected +* since 1970 by environmental buoys and stations. This dataset is +* maintained by the National Oceanographic Data Center and is publicly +* available. These Java classes were written for the US Environmental +* Protection Agency's National Exposure Research Laboratory under Contract +* No. GS-10F-0073K with Neptune and Company of Los Alamos, New Mexico. +* +* Purpose: +* +* This Java class performs calculations to determine the time of +* sunrise and sunset given lat, long, and date. +* +* Inputs: +* +* Latitude, longitude, date/time, and time zone. +* +* Outputs: +* +* Local time of sunrise and sunset as calculated by the +* program. +* If no sunrise or no sunset occurs, or if the sun is up all day +* or down all day, appropriate boolean values are set. +* A boolean is provided to identify if the time provided is during the day. +* +* The above values are accessed by the following methods: +* +* Date getSunrise() returns date/time of sunrise +* Date getSunset() returns date/time of sunset +* boolean isSunrise() returns true if there was a sunrise, else false +* boolean isSunset() returns true if there was a sunset, else false +* boolean isSunUp() returns true if sun is up all day, else false +* boolean isSunDown() returns true if sun is down all day, else false +* boolean isDaytime() returns true if sun is up at the time +* specified, else false +* +* Required classes from the Java library: +* +* java.util.Date +* java.text.SimpleDateFormat +* java.text.ParseException; +* java.math.BigDecimal; +* +* Package of which this class is a member: +* +* default +* +* Known limitations: +* +* It is assumed that the data provided are within value ranges +* (i.e. latitude between -90 and +90, longitude between 0 and 360, +* a valid date, and time zone between -14 and +14. +* +* Compatibility: +* +* Java 1.1.8 +* +* References: +* +* The mathematical algorithms used in this program are patterned +* after those debveloped by Roger Sinnott in his BASIC program, +* SUNUP.BAS, published in Sky & Telescope magazine: +* Sinnott, Roger W. "Sunrise and Sunset: A Challenge" +* Sky & Telescope, August, 1994 p.84-85 +* +* The following is a cross-index of variables used in SUNUP.BAS. +* A single definition from multiple reuse of variable names in +* SUNUP.BAS was clarified with various definitions in this program. +* +* SUNUP.BAS this class +* +* A dfA +* A(2) dfAA1, dfAA2 +* A0 dfA0 +* A2 dfA2 +* A5 dfA5 +* AZ Not used +* C dfCosLat +* C0 dfC0 +* D iDay +* D(2) dfDD1, dfDD2 +* D0 dfD0 +* D1 dfD1 +* D2 dfD2 +* D5 dfD5 +* D7 Not used +* DA dfDA +* DD dfDD +* G bGregorian, dfGG +* H dfTimeZone +* H0 dfH0 +* H1 dfH1 +* H2 dfH2 +* H3 dfHourRise, dfHourSet +* H7 Not used +* J dfJ +* J3 dfJ3 +* K1 dfK1 +* L dfLL +* L0 dfL0 +* L2 dfL2 +* L5 dfLon +* M iMonth +* M3 dfMinRise, dfMinSet +* N7 Not used +* P dfP +* S iSign, dfSinLat, dfSS +* T dfT +* T0 dfT0 +* T3 not used +* TT dfTT +* U dfUU +* V dfVV +* V0 dfV0 +* V1 dfV1 +* V2 dfV2 +* W dfWW +* Y iYear +* Z dfZenith +* Z0 dfTimeZone +* +* +* Author/Company: +* +* JDT: John Tauxe, Neptune and Company +* JMG: Jo Marie Green +* +* Change log: +* +* date ver by description of change +* _________ _____ ___ ______________________________________________ +* 5 Jan 01 0.006 JDT Excised from ssapp.java v. 0.005. +* 11 Jan 01 0.007 JDT Minor modifications to comments based on +* material from Sinnott, 1994. +* 7 Feb 01 0.008 JDT Fixed backwards time zone. The standard is that +* local time zone is specified in hours EAST of +* Greenwich, so that EST would be -5, for example. +* For some reason, SUNUP.BAS does this backwards +* (probably an americocentric perspective) and +* SunriseSunset adopted that convention. Oops. +* So the sign in the math is changed. +* 7 Feb 01 0.009 JDT Well, that threw off the azimuth calculation... +* Removed the azimuth calculations. +* 14 Feb 01 0.010 JDT Added ability to accept a time (HH:mm) in +* dateInput, and decide if that time is daytime +* or nighttime. +* 27 Feb 01 0.011 JDT Added accessor methods in place of having public +* variables to get results. +* 28 Feb 01 0.012 JDT Cleaned up list of imported classes. +* 28 Mar 01 1.10 JDT Final version accompanying deliverable 1b. +* 4 Apr 01 1.11 JDT Moved logic supporting .isDaytime into method. +* Moved calculations out of constructor. +* 01 May 01 1.12 JMG Added 'GMT' designation and testing lines. +* 16 May 01 1.13 JDT Added setLenient( false ) and setTimeZone( tz ) +* to dfmtDay, dfmtMonth, and dfmtYear in +* doCalculations. +* 27 Jun 01 1.14 JDT Removed reliance on StationConstants (GMT). +* 13 Aug 01 1.20 JDT Final version accompanying deliverable 1c. +* 6 Sep 01 1.21 JDT Thorough code and comment review. +* 21 Sep 01 1.30 JDT Final version accompanying deliverable 2. +* 17 Dec 01 1.40 JDT Version accompanying final deliverable. +* +*----------------------------------------------------------------------------*/ + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + + +/****************************************************************************** +* class: SunriseSunset class +******************************************************************************* +* +* This Java class performs calculations to determine the time of +* sunrise and sunset given lat, long, and date. +* +* It is assumed that the data provided are within value ranges +* (i.e. latitude between -90 and +90, longitude between 0 and 360, +* a valid date, and time zone between -14 and +14. +* +*----------------------------------------------------------------------------*/ +public class SunriseSunset +{ + + // Declare and initialize variables + private double dfLat; // latitude from user + private double dfLon; // latitude from user + private Date dateInput; // date/time from user + private double dfTimeZone; // time zone from user + + private Date dateSunrise; // date and time of sunrise + private Date dateSunset; // date and time of sunset + private boolean bSunriseToday = false; // flag for sunrise on this date + private boolean bSunsetToday = false; // flag for sunset on this date + private boolean bSunUpAllDay = false; // flag for sun up all day + private boolean bSunDownAllDay = false; // flag for sun down all day + private boolean bDaytime = false; // flag for daytime, given + // hour and min in dateInput + private boolean bSunrise = false; // sunrise during hour checked + private boolean bSunset = false; // sunset during hour checked + private boolean bGregorian = false; // flag for Gregorian calendar + private int iJulian; // Julian day + private int iYear; // year of date of interest + private int iMonth; // month of date of interest + private int iDay; // day of date of interest + private int iCount; // a simple counter + private int iSign; // SUNUP.BAS: S + private int dfHourRise, dfHourSet; // hour of event: SUNUP.BAS H3 + private int dfMinRise, dfMinSet; // minute of event: SUNUP.BAS M3 + private double dfSinLat, dfCosLat; // sin and cos of latitude + private double dfZenith; // SUNUP.BAS Z: Zenith + // Many variables in SUNUP.BAS have undocumented meanings, + // and so are translated rather directly to avoid confusion: + private double dfAA1 = 0, dfAA2 = 0; // SUNUP.BAS A(2) + private double dfDD1 = 0, dfDD2 = 0; // SUNUP.BAS D(2) + private double dfC0; // SUNUP.BAS C0 + private double dfK1; // SUNUP.BAS K1 + private double dfP; // SUNUP.BAS P + private double dfJ; // SUNUP.BAS J + private double dfJ3; // SUNUP.BAS J3 + private double dfA; // SUNUP.BAS A + private double dfA0, dfA2, dfA5; // SUNUP.BAS A0, A2, A5 + private double dfD0, dfD1, dfD2, dfD5; // SUNUP.BAS D0, D1, D2, D5 + private double dfDA, dfDD; // SUNUP.BAS DA, DD + private double dfH0, dfH1, dfH2; // SUNUP.BAS H0, H1, H2 + private double dfL0, dfL2; // SUNUP.BAS L0, L2 + private double dfT, dfT0, dfTT; // SUNUP.BAS T, T0, TT + private double dfV0, dfV1, dfV2; // SUNUP.BAS V0, V1, V2 + + +/****************************************************************************** +* method: SunriseSunset +******************************************************************************* +* +* Constructor for SunriseSunset class. +* +*----------------------------------------------------------------------------*/ + public SunriseSunset( + double dfLatIn, // latitude + double dfLonIn, // longitude + Date dateInputIn, // date + TimeZone tzIn // time zone + ) + { + // Calculate internal representation of timezone offset as fraction of hours from GMT + // Our calculations consider offsets to the West as positive, so we must invert + // the signal of the values provided by the standard library + double dfTimeZoneIn = 1.0 * tzIn.getOffset(dateInputIn.getTime()) / 3600000; + + // Copy values supplied as agruments to local variables. + dfLat = dfLatIn; + dfLon = dfLonIn; + dateInput = dateInputIn; + dfTimeZone = dfTimeZoneIn; + + // Call the method to do the calculations. + doCalculations(); + + } // end of class constructor + + +/****************************************************************************** +* method: doCalculations +******************************************************************************* +* +* Method for performing the calculations done in SUNUP.BAS. +* +*----------------------------------------------------------------------------*/ + private void doCalculations() + { + // Break out day, month, and year from date provided using local time zone. + // (This is necessary for the math algorithms.) + Calendar cin = Calendar.getInstance(); + cin.setTime(dateInput); + + iYear = cin.get(Calendar.YEAR); + iMonth = cin.get(Calendar.MONTH) + 1; + iDay = cin.get(Calendar.DAY_OF_MONTH); + + // Convert time zone hours to decimal days (SUNUP.BAS line 50) + dfTimeZone = dfTimeZone / 24.0; + + // NOTE: (7 Feb 2001) Here is a non-standard part of SUNUP.BAS: + // It (and this algorithm) assumes that the time zone is + // positive west, instead of the standard negative west. + // Classes calling SunriseSunset will be assuming that + // times zones are specified in negative west, so here the + // sign is changed so that the SUNUP algorithm works: + dfTimeZone = -dfTimeZone; + + // Convert longitude to fraction (SUNUP.BAS line 50) + dfLon = dfLon / 360.0; + + // Convert calendar date to Julian date: + // Check to see if it's later than 1583: Gregorian calendar + // When declared, bGregorian is initialized to false. + // ** Consider making a separate class of this function. ** + if( iYear >= 1583 ) bGregorian = true; + // SUNUP.BAS 1210 + dfJ = -Math.floor( 7.0 // SUNUP used INT, not floor + * ( Math.floor( + ( iMonth + 9.0 ) + / 12.0 + ) + iYear + ) / 4.0 + ) + // add SUNUP.BAS 1240 and 1250 for G = 0 + + Math.floor( iMonth * 275.0 / 9.0 ) + + iDay + + 1721027.0 + + iYear * 367.0; + + if ( bGregorian ) + { + // SUNUP.BAS 1230 + if ( ( iMonth - 9.0 ) < 0.0 ) iSign = -1; + else iSign = 1; + dfA = Math.abs( iMonth - 9.0 ); + // SUNUP.BAS 1240 and 1250 + dfJ3 = -Math.floor( + ( + Math.floor( + Math.floor( iYear + + (double)iSign + * Math.floor( dfA / 7.0 ) + ) + / 100.0 + ) + 1.0 + ) * 0.75 + ); + // correct dfJ as in SUNUP.BAS 1240 and 1250 for G = 1 + dfJ = dfJ + dfJ3 + 2.0; + } + // SUNUP.BAS 1290 + iJulian = (int)dfJ - 1; + + // SUNUP.BAS 60 and 70 (see also line 1290) + dfT = (double)iJulian - 2451545.0 + 0.5; + dfTT = dfT / 36525.0 + 1.0; // centuries since 1900 + + // Calculate local sidereal time at 0h in zone time + // SUNUP.BAS 410 through 460 + dfT0 = ( dfT * 8640184.813 / 36525.0 + + 24110.5 + + dfTimeZone * 86636.6 + + dfLon * 86400.0 + ) + / 86400.0; + dfT0 = dfT0 - Math.floor( dfT0 ); // NOTE: SUNUP.BAS uses INT() + dfT0 = dfT0 * 2.0 * Math.PI; + // SUNUP.BAS 90 + dfT = dfT + dfTimeZone; + + // SUNUP.BAS 110: Get Sun's position + for( iCount=0; iCount<=1; iCount++ ) // Loop thru only twice + { + // Calculate Sun's right ascension and declination + // at the start and end of each day. + // SUNUP.BAS 910 - 1160: Fundamental arguments + // from van Flandern and Pulkkinen, 1979 + + // declare local temporary doubles for calculations + double dfGG; // SUNUP.BAS G + double dfLL; // SUNUP.BAS L + double dfSS; // SUNUP.BAS S + double dfUU; // SUNUP.BAS U + double dfVV; // SUNUP.BAS V + double dfWW; // SUNUP.BAS W + + dfLL = 0.779072 + 0.00273790931 * dfT; + dfLL = dfLL - Math.floor( dfLL ); + dfLL = dfLL * 2.0 * Math.PI; + + dfGG = 0.993126 + 0.0027377785 * dfT; + dfGG = dfGG - Math.floor( dfGG ); + dfGG = dfGG * 2.0 * Math.PI; + + dfVV = 0.39785 * Math.sin( dfLL ) + - 0.01000 * Math.sin( dfLL - dfGG ) + + 0.00333 * Math.sin( dfLL + dfGG ) + - 0.00021 * Math.sin( dfLL ) * dfTT; + + dfUU = 1 + - 0.03349 * Math.cos( dfGG ) + - 0.00014 * Math.cos( dfLL * 2.0 ) + + 0.00008 * Math.cos( dfLL ); + + dfWW = - 0.00010 + - 0.04129 * Math.sin( dfLL * 2.0 ) + + 0.03211 * Math.sin( dfGG ) + - 0.00104 * Math.sin( 2.0 * dfLL - dfGG ) + - 0.00035 * Math.sin( 2.0 * dfLL + dfGG ) + - 0.00008 * Math.sin( dfGG ) * dfTT; + + // Compute Sun's RA and Dec; SUNUP.BAS 1120 - 1140 + dfSS = dfWW / Math.sqrt( dfUU - dfVV * dfVV ); + dfA5 = dfLL + + Math.atan( dfSS / Math.sqrt( 1.0 - dfSS * dfSS )); + + dfSS = dfVV / Math.sqrt( dfUU ); + dfD5 = Math.atan( dfSS / Math.sqrt( 1 - dfSS * dfSS )); + + // Set values and increment t + if ( iCount == 0 ) // SUNUP.BAS 125 + { + dfAA1 = dfA5; + dfDD1 = dfD5; + } + else // SUNUP.BAS 145 + { + dfAA2 = dfA5; + dfDD2 = dfD5; + } + dfT = dfT + 1.0; // SUNUP.BAS 130 + } // end of Get Sun's Position for loop + + if ( dfAA2 < dfAA1 ) dfAA2 = dfAA2 + 2.0 * Math.PI; + // SUNUP.BAS 150 + + dfZenith = Math.PI * 90.833 / 180.0; // SUNUP.BAS 160 + dfSinLat = Math.sin( dfLat * Math.PI / 180.0 ); // SUNUP.BAS 170 + dfCosLat = Math.cos( dfLat * Math.PI / 180.0 ); // SUNUP.BAS 170 + + dfA0 = dfAA1; // SUNUP.BAS 190 + dfD0 = dfDD1; // SUNUP.BAS 190 + dfDA = dfAA2 - dfAA1; // SUNUP.BAS 200 + dfDD = dfDD2 - dfDD1; // SUNUP.BAS 200 + + dfK1 = 15.0 * 1.0027379 * Math.PI / 180.0; // SUNUP.BAS 330 + + // Initialize sunrise and sunset times, and other variables + // hr and min are set to impossible times to make errors obvious + dfHourRise = 99; + dfMinRise = 99; + dfHourSet = 99; + dfMinSet = 99; + dfV0 = 0.0; // initialization implied by absence in SUNUP.BAS + dfV2 = 0.0; // initialization implied by absence in SUNUP.BAS + + // Test each hour to see if the Sun crosses the horizon + // and which way it is heading. + for( iCount=0; iCount<24; iCount++ ) // SUNUP.BAS 210 + { + double tempA; // SUNUP.BAS A + double tempB; // SUNUP.BAS B + double tempD; // SUNUP.BAS D + double tempE; // SUNUP.BAS E + + dfC0 = (double)iCount; + dfP = ( dfC0 + 1.0 ) / 24.0; // SUNUP.BAS 220 + dfA2 = dfAA1 + dfP * dfDA; // SUNUP.BAS 230 + dfD2 = dfDD1 + dfP * dfDD; // SUNUP.BAS 230 + dfL0 = dfT0 + dfC0 * dfK1; // SUNUP.BAS 500 + dfL2 = dfL0 + dfK1; // SUNUP.BAS 500 + dfH0 = dfL0 - dfA0; // SUNUP.BAS 510 + dfH2 = dfL2 - dfA2; // SUNUP.BAS 510 + // hour angle at half hour + dfH1 = ( dfH2 + dfH0 ) / 2.0; // SUNUP.BAS 520 + // declination at half hour + dfD1 = ( dfD2 + dfD0 ) / 2.0; // SUNUP.BAS 530 + + // Set value of dfV0 only if this is the first hour, + // otherwise, it will get set to the last dfV2 (SUNUP.BAS 250) + if ( iCount == 0 ) // SUNUP.BAS 550 + { + dfV0 = dfSinLat * Math.sin( dfD0 ) + + dfCosLat * Math.cos( dfD0 ) * Math.cos( dfH0 ) + - Math.cos( dfZenith ); // SUNUP.BAS 560 + } + else + dfV0 = dfV2; // That is, dfV2 from the previous hour. + + dfV2 = dfSinLat * Math.sin( dfD2 ) + + dfCosLat * Math.cos( dfD2 ) * Math.cos( dfH2 ) + - Math.cos( dfZenith ); // SUNUP.BAS 570 + + // if dfV0 and dfV2 have the same sign, then proceed to next hr + if ( + ( dfV0 >= 0.0 && dfV2 >= 0.0 ) // both are positive + || // or + ( dfV0 < 0.0 && dfV2 < 0.0 ) // both are negative + ) + { + // Break iteration and proceed to test next hour + dfA0 = dfA2; // SUNUP.BAS 250 + dfD0 = dfD2; // SUNUP.BAS 250 + continue; // SUNUP.BAS 610 + } + + dfV1 = dfSinLat * Math.sin( dfD1 ) + + dfCosLat * Math.cos( dfD1 ) * Math.cos( dfH1 ) + - Math.cos( dfZenith ); // SUNUP.BAS 590 + + tempA = 2.0 * dfV2 - 4.0 * dfV1 + 2.0 * dfV0; + // SUNUP.BAS 600 + tempB = 4.0 * dfV1 - 3.0 * dfV0 - dfV2; // SUNUP.BAS 600 + tempD = tempB * tempB - 4.0 * tempA * dfV0; // SUNUP.BAS 610 + + if ( tempD < 0.0 ) + { + // Break iteration and proceed to test next hour + dfA0 = dfA2; // SUNUP.BAS 250 + dfD0 = dfD2; // SUNUP.BAS 250 + continue; // SUNUP.BAS 610 + } + + tempD = Math.sqrt( tempD ); // SUNUP.BAS 620 + + // Determine occurence of sunrise or sunset. + + // Flags to identify occurrence during this day are + // bSunriseToday and bSunsetToday, and are initialized false. + // These are set true only if sunrise or sunset occurs + // at any point in the hourly loop. Never set to false. + + // Flags to identify occurrence during this hour: + bSunrise = false; // reset before test + bSunset = false; // reset before test + + if ( dfV0 < 0.0 && dfV2 > 0.0 ) // sunrise occurs this hour + { + bSunrise = true; // SUNUP.BAS 640 + bSunriseToday = true; // sunrise occurred today + } + + if ( dfV0 > 0.0 && dfV2 < 0.0 ) // sunset occurs this hour + { + bSunset = true; // SUNUP.BAS 660 + bSunsetToday = true; // sunset occurred today + } + + tempE = ( tempD - tempB ) / ( 2.0 * tempA ); + if ( tempE > 1.0 || tempE < 0.0 ) // SUNUP.BAS 670, 680 + tempE = ( -tempD - tempB ) / ( 2.0 * tempA ); + + // Set values of hour and minute of sunset or sunrise + // only if sunrise/set occurred this hour. + if ( bSunrise ) + { + dfHourRise = (int)( dfC0 + tempE + 1.0/120.0 ); + dfMinRise = (int) ( + ( dfC0 + tempE + 1.0/120.0 + - dfHourRise + ) + * 60.0 + ); + } + + if ( bSunset ) + { + dfHourSet = (int) ( dfC0 + tempE + 1.0/120.0 ); + dfMinSet = (int)( + ( dfC0 + tempE + 1.0/120.0 + - dfHourSet + ) + * 60.0 + ); + } + + // Change settings of variables for next loop + dfA0 = dfA2; // SUNUP.BAS 250 + dfD0 = dfD2; // SUNUP.BAS 250 + + } // end of loop testing each hour for an event + + // After having checked all hours, set flags if no rise or set + // bSunUpAllDay and bSundownAllDay are initialized as false + if ( !bSunriseToday && !bSunsetToday ) + { + if ( dfV2 < 0.0 ) + bSunDownAllDay = true; + else + bSunUpAllDay = true; + } + + // Load dateSunrise with data + + if( bSunriseToday ) + { + Calendar c = Calendar.getInstance(); + c.set(Calendar.YEAR, iYear); + c.set(Calendar.MONTH, iMonth-1); + c.set(Calendar.DAY_OF_MONTH, iDay); + c.set(Calendar.HOUR_OF_DAY, dfHourRise); + c.set(Calendar.MINUTE, dfMinRise); + dateSunrise = c.getTime(); + } + + // Load dateSunset with data + if( bSunsetToday ) + { + Calendar c = Calendar.getInstance(); + c.set(Calendar.YEAR, iYear); + c.set(Calendar.MONTH, iMonth-1); + c.set(Calendar.DAY_OF_MONTH, iDay); + c.set(Calendar.HOUR_OF_DAY, dfHourSet); + c.set(Calendar.MINUTE, dfMinSet); + dateSunset = c.getTime(); + } + } + + +/****************************************************************************** +* method: getSunrise() +******************************************************************************* +* +* Gets the date and time of sunrise. If there is no sunrise, returns null. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public Date getSunrise() + { + if ( bSunriseToday ) + return( dateSunrise ); + else + return( null ); + } + + +/****************************************************************************** +* method: getSunset() +******************************************************************************* +* +* Gets the date and time of sunset. If there is no sunset, returns null. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public Date getSunset() + { + if ( bSunsetToday ) + return( dateSunset ); + else + return( null ); + } + + +/****************************************************************************** +* method: isSunrise() +******************************************************************************* +* +* Returns a boolean identifying if there was a sunrise. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public boolean isSunrise() + { + return( bSunriseToday ); + } + + +/****************************************************************************** +* method: isSunset() +******************************************************************************* +* +* Returns a boolean identifying if there was a sunset. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public boolean isSunset() + { + return( bSunsetToday ); + } + + +/****************************************************************************** +* method: isSunUp() +******************************************************************************* +* +* Returns a boolean identifying if the sun is up all day. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public boolean isSunUp() + { + return( bSunUpAllDay ); + } + + +/****************************************************************************** +* method: isSunDown() +******************************************************************************* +* +* Returns a boolean identifying if the sun is down all day. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public boolean isSunDown() + { + return( bSunDownAllDay ); + } + + +/****************************************************************************** +* method: isDaytime() +******************************************************************************* +* +* Returns a boolean identifying if it is daytime at the hour contained in +* the Date object passed to SunriseSunset on construction. +* +* Member of SunriseSunset class +* +* -------------------------------------------------------------------------- */ + public boolean isDaytime() + { + // Determine if it is daytime (at sunrise or later) + // or nighttime (at sunset or later) at the location of interest + // but expressed in the time zone requested. + if ( bSunriseToday && bSunsetToday ) // sunrise and sunset + { + if ( dateSunrise.before( dateSunset ) ) // sunrise < sunset + { + if ( + ( + dateInput.after( dateSunrise ) + || + dateInput.equals( dateSunrise ) + ) + && + dateInput.before( dateSunset ) + ) + bDaytime = true; + else + bDaytime = false; + } + else // sunrise comes after sunset (in opposite time zones) + { + if ( + ( + dateInput.after( dateSunrise ) + || + dateInput.equals( dateSunrise ) + ) + || // use OR rather than AND + dateInput.before( dateSunset ) + ) + bDaytime = true; + else + bDaytime = false; + } + } + else if ( bSunUpAllDay ) // sun is up all day + bDaytime = true; + else if ( bSunDownAllDay ) // sun is down all day + bDaytime = false; + else if ( bSunriseToday ) // sunrise but no sunset + { + if ( dateInput.before( dateSunrise ) ) + bDaytime = false; + else + bDaytime = true; + } + else if ( bSunsetToday ) // sunset but no sunrise + { + if ( dateInput.before( dateSunset ) ) + bDaytime = true; + else + bDaytime = false; + } + else bDaytime = false; // this should never execute + + return( bDaytime ); + } +} // end of class + +/*----------------------------------------------------------------------------- +* end of class +*----------------------------------------------------------------------------*/ + diff --git a/OsmAnd/.project b/OsmAnd/.project index 0be0750287..382056b655 100644 --- a/OsmAnd/.project +++ b/OsmAnd/.project @@ -108,7 +108,7 @@ use 2 - OSMAND_TRUNK/jni/java + OSMAND_TRUNK/android/OsmAnd-java/src diff --git a/OsmAnd/build.xml b/OsmAnd/build.xml index 0433a13c75..8d673be932 100644 --- a/OsmAnd/build.xml +++ b/OsmAnd/build.xml @@ -11,7 +11,7 @@ unless="sdk.dir" /> - +

A>kQ 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