Skip to content

Commit b602423

Browse files
committed
EncodingManager: initializer config is only needed when building
1 parent 3987f50 commit b602423

File tree

4 files changed

+28
-54
lines changed

4 files changed

+28
-54
lines changed

core/src/main/java/com/graphhopper/routing/ev/EncodedValueSerializer.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,4 @@ public static EncodedValue deserializeEncodedValue(String serializedEncodedValue
5252
}
5353
}
5454

55-
public static String serializeInitializerConfig(EncodedValue.InitializerConfig initializerConfig) {
56-
try {
57-
JsonNode tree = MAPPER.valueToTree(initializerConfig);
58-
return MAPPER.writeValueAsString(tree);
59-
} catch (JsonProcessingException e) {
60-
throw new IllegalStateException("Could not serialize initializer config: " + e.getMessage());
61-
}
62-
}
63-
64-
public static EncodedValue.InitializerConfig deserializeInitializerConfig(String serializedInitializerConfig) {
65-
try {
66-
JsonNode jsonNode = MAPPER.readTree(serializedInitializerConfig);
67-
return MAPPER.treeToValue(jsonNode, EncodedValue.InitializerConfig.class);
68-
} catch (JsonProcessingException e) {
69-
throw new IllegalStateException("Could not deserialize initializer config: " + serializedInitializerConfig + ", error: " + e.getMessage());
70-
}
71-
}
7255
}

core/src/main/java/com/graphhopper/routing/util/EncodingManager.java

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
*/
4444
public class EncodingManager implements EncodedValueLookup {
4545
private final LinkedHashMap<String, EncodedValue> encodedValueMap;
46-
private final EncodedValue.InitializerConfig edgeConfig;
47-
private final EncodedValue.InitializerConfig turnCostConfig;
46+
private int intsForFlags;
47+
private int intsForTurnCostFlags;
4848

4949
/**
5050
* Instantiate manager with the given list of encoders. The manager knows several default
@@ -68,8 +68,8 @@ private static EncodingManager.Builder createBuilder(List<? extends VehicleEncod
6868

6969
public static void putEncodingManagerIntoProperties(EncodingManager encodingManager, StorableProperties properties) {
7070
properties.put("graph.em.version", Constants.VERSION_EM);
71-
properties.put("graph.em.edge_config", encodingManager.toEdgeConfigAsString());
72-
properties.put("graph.em.turn_cost_config", encodingManager.toTurnCostConfigAsString());
71+
properties.put("graph.em.ints_for_flags", encodingManager.intsForFlags);
72+
properties.put("graph.em.ints_for_turn_cost_flags", encodingManager.intsForTurnCostFlags);
7373
properties.put("graph.encoded_values", encodingManager.toEncodedValuesAsString());
7474
}
7575

@@ -91,9 +91,17 @@ public static EncodingManager fromProperties(StorableProperties properties) {
9191
throw new IllegalStateException("Duplicate encoded value name: " + encodedValue.getName() + " in: graph.encoded_values=" + encodedValueStr);
9292
});
9393

94-
EncodedValue.InitializerConfig edgeConfig = EncodedValueSerializer.deserializeInitializerConfig(properties.get("graph.em.edge_config"));
95-
EncodedValue.InitializerConfig turnCostConfig = EncodedValueSerializer.deserializeInitializerConfig(properties.get("graph.em.turn_cost_config"));
96-
return new EncodingManager(encodedValues, edgeConfig, turnCostConfig);
94+
return new EncodingManager(encodedValues,
95+
getIntegerProperty(properties, "graph.em.ints_for_flags"),
96+
getIntegerProperty(properties, "graph.em.ints_for_turn_cost_flags")
97+
);
98+
}
99+
100+
private static int getIntegerProperty(StorableProperties properties, String key) {
101+
String str = properties.get(key);
102+
if (str.isEmpty())
103+
throw new IllegalStateException("Missing EncodingManager property: '" + key + "'");
104+
return Integer.parseInt(str);
97105
}
98106

99107
private static ArrayNode deserializeEncodedValueList(String encodedValueStr) {
@@ -111,17 +119,19 @@ public static Builder start() {
111119
return new Builder();
112120
}
113121

114-
public EncodingManager(LinkedHashMap<String, EncodedValue> encodedValueMap, EncodedValue.InitializerConfig edgeConfig, EncodedValue.InitializerConfig turnCostConfig) {
122+
public EncodingManager(LinkedHashMap<String, EncodedValue> encodedValueMap, int intsForFlags, int intsForTurnCostFlags) {
115123
this.encodedValueMap = encodedValueMap;
116-
this.turnCostConfig = turnCostConfig;
117-
this.edgeConfig = edgeConfig;
124+
this.intsForFlags = intsForFlags;
125+
this.intsForTurnCostFlags = intsForTurnCostFlags;
118126
}
119127

120128
private EncodingManager() {
121-
this(new LinkedHashMap<>(), new EncodedValue.InitializerConfig(), new EncodedValue.InitializerConfig());
129+
this(new LinkedHashMap<>(), 0, 0);
122130
}
123131

124132
public static class Builder {
133+
private final EncodedValue.InitializerConfig edgeConfig = new EncodedValue.InitializerConfig();
134+
private final EncodedValue.InitializerConfig turnCostConfig = new EncodedValue.InitializerConfig();
125135
private EncodingManager em = new EncodingManager();
126136

127137
public Builder add(VehicleEncodedValues v) {
@@ -140,7 +150,7 @@ public Builder add(EncodedValue encodedValue) {
140150
checkNotBuiltAlready();
141151
if (em.hasEncodedValue(encodedValue.getName()))
142152
throw new IllegalArgumentException("EncodedValue already exists: " + encodedValue.getName());
143-
encodedValue.init(em.edgeConfig);
153+
encodedValue.init(edgeConfig);
144154
em.encodedValueMap.put(encodedValue.getName(), encodedValue);
145155
return this;
146156
}
@@ -150,7 +160,7 @@ public Builder addTurnCostEncodedValue(EncodedValue turnCostEnc) {
150160
if (em.hasEncodedValue(turnCostEnc.getName()))
151161
throw new IllegalArgumentException("Already defined: " + turnCostEnc.getName() + ". Please note that " +
152162
"EncodedValues for edges and turn costs are in the same namespace.");
153-
turnCostEnc.init(em.turnCostConfig);
163+
turnCostEnc.init(turnCostConfig);
154164
em.encodedValueMap.put(turnCostEnc.getName(), turnCostEnc);
155165
return this;
156166
}
@@ -165,6 +175,8 @@ public EncodingManager build() {
165175
addDefaultEncodedValues();
166176
if (em.encodedValueMap.isEmpty())
167177
throw new IllegalStateException("No EncodedValues were added to the EncodingManager");
178+
em.intsForFlags = edgeConfig.getRequiredInts();
179+
em.intsForTurnCostFlags = edgeConfig.getRequiredInts();
168180
EncodingManager result = em;
169181
em = null;
170182
return result;
@@ -219,7 +231,7 @@ static VehicleEncodedValues parseEncoderString(VehicleEncodedValuesFactory facto
219231
}
220232

221233
public int getIntsForFlags() {
222-
return edgeConfig.getRequiredInts();
234+
return intsForFlags;
223235
}
224236

225237
public boolean hasEncodedValue(String key) {
@@ -245,14 +257,6 @@ public String toEncodedValuesAsString() {
245257
}
246258
}
247259

248-
public String toEdgeConfigAsString() {
249-
return EncodedValueSerializer.serializeInitializerConfig(edgeConfig);
250-
}
251-
252-
public String toTurnCostConfigAsString() {
253-
return EncodedValueSerializer.serializeInitializerConfig(turnCostConfig);
254-
}
255-
256260
@Override
257261
public String toString() {
258262
return String.join(",", getVehicles());
@@ -269,7 +273,7 @@ public IntsRef createRelationFlags() {
269273
}
270274

271275
public boolean needsTurnCostsSupport() {
272-
return turnCostConfig.getRequiredBits() > 0;
276+
return intsForTurnCostFlags > 0;
273277
}
274278

275279
@Override

core/src/main/java/com/graphhopper/util/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class Constants {
6969
public static final int VERSION_NODE = 9;
7070
public static final int VERSION_EDGE = 21;
7171
// this should be increased whenever the format of the serialized EncodingManager is changed
72-
public static final int VERSION_EM = 1;
72+
public static final int VERSION_EM = 2;
7373
public static final int VERSION_SHORTCUT = 9;
7474
public static final int VERSION_NODE_CH = 0;
7575
public static final int VERSION_GEOMETRY = 6;

core/src/test/java/com/graphhopper/routing/ev/EncodedValueSerializerTest.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,17 +91,4 @@ void explicitString() {
9191
assertEquals("get_off_bike", ev2.getName());
9292
}
9393

94-
@Test
95-
void initializerConfig() {
96-
EncodedValue.InitializerConfig initializerConfig = new EncodedValue.InitializerConfig();
97-
Lanes.create().init(initializerConfig);
98-
MaxWidth.create().init(initializerConfig);
99-
String s = EncodedValueSerializer.serializeInitializerConfig(initializerConfig);
100-
assertEquals("{\"data_index\":0,\"shift\":3,\"next_shift\":10,\"bit_mask\":1016}", s);
101-
EncodedValue.InitializerConfig deserialized = EncodedValueSerializer.deserializeInitializerConfig(s);
102-
assertEquals(0, deserialized.dataIndex);
103-
assertEquals(3, deserialized.shift);
104-
assertEquals(10, deserialized.nextShift);
105-
assertEquals(1016, deserialized.bitMask);
106-
}
10794
}

0 commit comments

Comments
 (0)