java_gen.PrimitiveSinkUtils: add support for putting nullable Strings, better support for null
Based on a conversation with @rlane, prepend optional entries with a
presence bit + length instead of the null-byte delimitation.
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/util/PrimitiveSinkUtils.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/util/PrimitiveSinkUtils.java
index 0f7400e..28eb3a4 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/util/PrimitiveSinkUtils.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/util/PrimitiveSinkUtils.java
@@ -16,20 +16,33 @@
public class PrimitiveSinkUtils {
private PrimitiveSinkUtils() {}
- /** puts a nullable element into a primitive sink. The entry is terminated by a null byte
- * to disambiguate null elements.
+ /** puts a nullable String into a primitive sink. The entry is prepended by a 'presence'
+ * boolean bit and the string length;
+ *
+ *
+ * @param sink the sink to put the object
+ * @param nullableObj the potentially null string to put in the sink
+ */
+ public static void putNullableStringTo(PrimitiveSink sink,
+ @Nullable CharSequence nullableChars) {
+
+ sink.putBoolean(nullableChars != null);
+ if(nullableChars != null) {
+ sink.putInt(nullableChars.length());
+ sink.putUnencodedChars(nullableChars);
+ }
+ }
+
+ /** puts a nullable element into a primitive sink. The entry is prepended by a 'present' bit.
*
* @param sink the sink to put the object
* @param nullableObj the nullable object
*/
public static void putNullableTo(PrimitiveSink sink,
@Nullable PrimitiveSinkable nullableObj) {
+ sink.putBoolean(nullableObj != null);
if(nullableObj != null)
nullableObj.putTo(sink);
-
- // terminate this object representation by a null byte. this ensures that we get
- // unique digests even if some values are null
- sink.putByte((byte) 0);
}
/** puts the elements of a sorted set into the {@link PrimitiveSink}. Does not support null
@@ -40,6 +53,7 @@
*/
public static void putSortedSetTo(PrimitiveSink sink,
SortedSet<? extends PrimitiveSinkable> set) {
+ sink.putInt(set.size());
for(PrimitiveSinkable e: set) {
e.putTo(sink);
}
@@ -53,6 +67,7 @@
*/
public static void putListTo(PrimitiveSink sink,
List<? extends PrimitiveSinkable> set) {
+ sink.putInt(set.size());
for(PrimitiveSinkable e: set) {
e.putTo(sink);
}