Optimize single-value range checks 43/73743/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 4 Jul 2018 13:54:06 +0000 (15:54 +0200)
committerRobert Varga <nite@hq.sk>
Tue, 10 Jul 2018 09:12:44 +0000 (09:12 +0000)
For 'length 0' we generate a 'length >= 0 && length <= 0' check,
where we can simply use 'length == 0'. Fix that by teaching
the generator that min and max can be equal.

Change-Id: I1334bfcd590db59b18665f6609ee71c48e4646ba
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/LengthGenerator.java

index 240e3b623c8fa37125bd403dd913e7ecb15cdf8b..0f98ae9472c75b7cd2fee18e4fad49df55b823ed 100644 (file)
@@ -40,16 +40,21 @@ final class LengthGenerator {
             final int max = l.upperEndpoint().intValue();
 
             if (min > 0 || max < Integer.MAX_VALUE) {
-                final StringBuilder sb = new StringBuilder("length >");
-                if (min <= Integer.MAX_VALUE) {
-                    sb.append('=');
+                final StringBuilder sb = new StringBuilder().append("length ");
+                if (min != max) {
+                    sb.append('>');
+                    if (min <= Integer.MAX_VALUE) {
+                        sb.append('=');
+                    }
+                    sb.append(' ').append(min);
+
+                    if (max < Integer.MAX_VALUE) {
+                        sb.append(" && length <= ").append(max);
+                    }
+                } else {
+                    // Single-value, use a direct comparison
+                    sb.append("== ").append(min);
                 }
-                sb.append(' ').append(min);
-
-                if (max < Integer.MAX_VALUE) {
-                    sb.append(" && length <= ").append(max);
-                }
-
                 ret.add(sb.toString());
             } else {
                 // This range is implicitly capped by String/byte[] length returns