43
43
*/
44
44
public class EncodingManager implements EncodedValueLookup {
45
45
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 ;
48
48
49
49
/**
50
50
* 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
68
68
69
69
public static void putEncodingManagerIntoProperties (EncodingManager encodingManager , StorableProperties properties ) {
70
70
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 );
73
73
properties .put ("graph.encoded_values" , encodingManager .toEncodedValuesAsString ());
74
74
}
75
75
@@ -91,9 +91,17 @@ public static EncodingManager fromProperties(StorableProperties properties) {
91
91
throw new IllegalStateException ("Duplicate encoded value name: " + encodedValue .getName () + " in: graph.encoded_values=" + encodedValueStr );
92
92
});
93
93
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 );
97
105
}
98
106
99
107
private static ArrayNode deserializeEncodedValueList (String encodedValueStr ) {
@@ -111,17 +119,19 @@ public static Builder start() {
111
119
return new Builder ();
112
120
}
113
121
114
- public EncodingManager (LinkedHashMap <String , EncodedValue > encodedValueMap , EncodedValue . InitializerConfig edgeConfig , EncodedValue . InitializerConfig turnCostConfig ) {
122
+ public EncodingManager (LinkedHashMap <String , EncodedValue > encodedValueMap , int intsForFlags , int intsForTurnCostFlags ) {
115
123
this .encodedValueMap = encodedValueMap ;
116
- this .turnCostConfig = turnCostConfig ;
117
- this .edgeConfig = edgeConfig ;
124
+ this .intsForFlags = intsForFlags ;
125
+ this .intsForTurnCostFlags = intsForTurnCostFlags ;
118
126
}
119
127
120
128
private EncodingManager () {
121
- this (new LinkedHashMap <>(), new EncodedValue . InitializerConfig (), new EncodedValue . InitializerConfig () );
129
+ this (new LinkedHashMap <>(), 0 , 0 );
122
130
}
123
131
124
132
public static class Builder {
133
+ private final EncodedValue .InitializerConfig edgeConfig = new EncodedValue .InitializerConfig ();
134
+ private final EncodedValue .InitializerConfig turnCostConfig = new EncodedValue .InitializerConfig ();
125
135
private EncodingManager em = new EncodingManager ();
126
136
127
137
public Builder add (VehicleEncodedValues v ) {
@@ -140,7 +150,7 @@ public Builder add(EncodedValue encodedValue) {
140
150
checkNotBuiltAlready ();
141
151
if (em .hasEncodedValue (encodedValue .getName ()))
142
152
throw new IllegalArgumentException ("EncodedValue already exists: " + encodedValue .getName ());
143
- encodedValue .init (em . edgeConfig );
153
+ encodedValue .init (edgeConfig );
144
154
em .encodedValueMap .put (encodedValue .getName (), encodedValue );
145
155
return this ;
146
156
}
@@ -150,7 +160,7 @@ public Builder addTurnCostEncodedValue(EncodedValue turnCostEnc) {
150
160
if (em .hasEncodedValue (turnCostEnc .getName ()))
151
161
throw new IllegalArgumentException ("Already defined: " + turnCostEnc .getName () + ". Please note that " +
152
162
"EncodedValues for edges and turn costs are in the same namespace." );
153
- turnCostEnc .init (em . turnCostConfig );
163
+ turnCostEnc .init (turnCostConfig );
154
164
em .encodedValueMap .put (turnCostEnc .getName (), turnCostEnc );
155
165
return this ;
156
166
}
@@ -165,6 +175,8 @@ public EncodingManager build() {
165
175
addDefaultEncodedValues ();
166
176
if (em .encodedValueMap .isEmpty ())
167
177
throw new IllegalStateException ("No EncodedValues were added to the EncodingManager" );
178
+ em .intsForFlags = edgeConfig .getRequiredInts ();
179
+ em .intsForTurnCostFlags = edgeConfig .getRequiredInts ();
168
180
EncodingManager result = em ;
169
181
em = null ;
170
182
return result ;
@@ -219,7 +231,7 @@ static VehicleEncodedValues parseEncoderString(VehicleEncodedValuesFactory facto
219
231
}
220
232
221
233
public int getIntsForFlags () {
222
- return edgeConfig . getRequiredInts () ;
234
+ return intsForFlags ;
223
235
}
224
236
225
237
public boolean hasEncodedValue (String key ) {
@@ -245,14 +257,6 @@ public String toEncodedValuesAsString() {
245
257
}
246
258
}
247
259
248
- public String toEdgeConfigAsString () {
249
- return EncodedValueSerializer .serializeInitializerConfig (edgeConfig );
250
- }
251
-
252
- public String toTurnCostConfigAsString () {
253
- return EncodedValueSerializer .serializeInitializerConfig (turnCostConfig );
254
- }
255
-
256
260
@ Override
257
261
public String toString () {
258
262
return String .join ("," , getVehicles ());
@@ -269,7 +273,7 @@ public IntsRef createRelationFlags() {
269
273
}
270
274
271
275
public boolean needsTurnCostsSupport () {
272
- return turnCostConfig . getRequiredBits () > 0 ;
276
+ return intsForTurnCostFlags > 0 ;
273
277
}
274
278
275
279
@ Override
0 commit comments