Intern low-cardinality statement arguments 15/58415/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Jun 2017 16:46:02 +0000 (18:46 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 7 Jun 2017 15:41:56 +0000 (15:41 +0000)
config, mandatory, ordered-by, require-instance, status and
yin-element statements have a fixed number of strings they take as
an argument, hence we can lower the memory overhead by sharing
strings instances.

Change-Id: I9b3f470466db8d3463956e4fb010c77671ac3900
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java

index d7b5fe42c6e713ba974761fe1ed508a9f5df5111..bf898379bbfb43a8ec56949e5afe40e83f148322 100644 (file)
@@ -61,6 +61,11 @@ public class ConfigStatementImpl extends AbstractDeclaredStatement<Boolean> impl
             return ret;
         }
 
+        @Override
+        public String internArgument(final String rawArgument) {
+            return Utils.internBoolean(rawArgument);
+        }
+
         @Override
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;
@@ -69,6 +74,6 @@ public class ConfigStatementImpl extends AbstractDeclaredStatement<Boolean> impl
 
     @Override
     public boolean getValue() {
-        return argument();
+        return argument().booleanValue();
     }
 }
index 3f0f0b38a73bdd5e27396f4f3e76362529a78c66..5096e904f53d9ce0c54da9475e70ee436c6a88fc 100644 (file)
@@ -61,6 +61,11 @@ public class MandatoryStatementImpl extends AbstractDeclaredStatement<Boolean> i
             return ret;
         }
 
+        @Override
+        public String internArgument(final String rawArgument) {
+            return Utils.internBoolean(rawArgument);
+        }
+
         @Override
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;
index 9750d178db696048d45066f081c5a96991ef35c4..90a6d828586019d804ce406eb85c6362eef2ac74 100644 (file)
@@ -55,6 +55,17 @@ public class OrderedByStatementImpl extends AbstractDeclaredStatement<String> im
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;
         }
+
+        @Override
+        public String internArgument(final String rawArgument) {
+            if ("user".equals(rawArgument)) {
+                return "user";
+            } else if ("system".equals(rawArgument)) {
+                return "system";
+            } else {
+                return rawArgument;
+            }
+        }
     }
 
     @Nonnull
index d1316600c67d575918680f4f5f61ec9796240b29..49cd93fe8749fd073809f2d0b83fc24e6e02eb9c 100644 (file)
@@ -48,6 +48,11 @@ public class RequireInstanceStatementImpl extends
             return new RequireInstanceEffectiveStatementImpl(ctx);
         }
 
+        @Override
+        public String internArgument(final String rawArgument) {
+            return Utils.internBoolean(rawArgument);
+        }
+
         @Override
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;
@@ -56,6 +61,6 @@ public class RequireInstanceStatementImpl extends
 
     @Override
     public boolean getValue() {
-        return argument();
+        return argument().booleanValue();
     }
 }
index 5231a7125272eb663171c75e2cb6907f5bd42c5a..336abefbf14e9f2da92db274609ed0d21ab5f853 100644 (file)
@@ -54,6 +54,19 @@ public class StatusStatementImpl extends AbstractDeclaredStatement<Status>
             return new StatusEffectiveStatementImpl(ctx);
         }
 
+        @Override
+        public String internArgument(final String rawArgument) {
+            if ("current".equals(rawArgument)) {
+                return "current";
+            } else if ("deprecated".equals(rawArgument)) {
+                return "deprecated";
+            } else if ("obsolete".equals(rawArgument)) {
+                return "obsolete";
+            } else {
+                return rawArgument;
+            }
+        }
+
         @Override
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;
index e80d39d64210079722f7a4cc9501219c4eec8912..abcce90d5d7f35460547207e16fa08ca9cab2630 100644 (file)
@@ -119,7 +119,7 @@ public final class Utils {
         final List<String> keyTokens = SPACE_SPLITTER.splitToList(value);
 
         // to detect if key contains duplicates
-        if ((new HashSet<>(keyTokens)).size() < keyTokens.size()) {
+        if (new HashSet<>(keyTokens).size() < keyTokens.size()) {
             // FIXME: report all duplicate keys
             throw new SourceException(ctx.getStatementSourceReference(), "Duplicate value in list key: %s", value);
         }
@@ -404,17 +404,27 @@ public final class Utils {
             ctx.getStatementSourceReference(), "String '%s' is not valid deviate argument", deviateKeyword);
     }
 
+    static String internBoolean(final String input) {
+        if ("true".equals(input)) {
+            return "true";
+        } else if ("false".equals(input)) {
+            return "false";
+        } else {
+            return input;
+        }
+    }
+
     public static Status parseStatus(final String value) {
         switch (value) {
-        case "current":
-            return Status.CURRENT;
-        case "deprecated":
-            return Status.DEPRECATED;
-        case "obsolete":
-            return Status.OBSOLETE;
-        default:
-            LOG.warn("Invalid 'status' statement: {}", value);
-            return null;
+            case "current":
+                return Status.CURRENT;
+            case "deprecated":
+                return Status.DEPRECATED;
+            case "obsolete":
+                return Status.OBSOLETE;
+            default:
+                LOG.warn("Invalid 'status' statement: {}", value);
+                return null;
         }
     }
 
index 6c32110d1cd31c827ff70159083ac75173edb2fc..2d309291c10db17d8cf2af64c04a5066f934b3aa 100644 (file)
@@ -48,6 +48,11 @@ public class YinElementStatementImpl extends AbstractDeclaredStatement<Boolean>
             return new YinElementEffectiveStatementImpl(ctx);
         }
 
+        @Override
+        public String internArgument(final String rawArgument) {
+            return Utils.internBoolean(rawArgument);
+        }
+
         @Override
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;