Optimize BindingNormalizedNodeCodecRegistry representation checks
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 16 Aug 2019 13:40:24 +0000 (15:40 +0200)
committerAnil Belur <abelur@linuxfoundation.org>
Wed, 19 Jun 2024 00:41:28 +0000 (10:41 +1000)
isBindingRepresentable() is a hot method, which performs a few
type checks. This patch folds those checks into a single return,
inverting the logic (which is negated anyway at the sole caller).
This cuts the amount of byte code to half, thus aiding inlining.

Futhermore we take advantage of ValueNode covering two cases we
explicitly test for, reducing the number of checks performed.

Finally we reorder the checks to improve their efficiency by
tackling most-common constructs first.

Change-Id: I556d1098a9d7dd043b2f8d756c2388f339f6b8ec
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingNormalizedNodeCodecRegistry.java

index 4b30ebf6bd76b29779d8def54334781d2e9ee5c7..30aea995cba51d00824d18d1f68944f737c04947 100644 (file)
@@ -46,12 +46,11 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
-import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ValueNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
@@ -196,33 +195,18 @@ public class BindingNormalizedNodeCodecRegistry implements DataObjectSerializerR
         return (ContainerNode) result.getResult();
     }
 
-    private static boolean isBindingRepresentable(final NormalizedNode<?, ?> data) {
-        if (data instanceof ChoiceNode) {
-            return false;
-        }
-        if (data instanceof LeafNode<?>) {
-            return false;
-        }
-        if (data instanceof LeafSetNode) {
-            return false;
-        }
-        if (data instanceof LeafSetEntryNode<?>) {
-            return false;
-        }
-        if (data instanceof MapNode) {
-            return false;
-        }
-        if (data instanceof UnkeyedListNode) {
-            return false;
-        }
-
-        return true;
+    private static boolean notBindingRepresentable(final NormalizedNode<?, ?> data) {
+        // ValueNode covers LeafNode and LeafSetEntryNode
+        return data instanceof ValueNode
+                || data instanceof MapNode || data instanceof UnkeyedListNode
+                || data instanceof ChoiceNode
+                || data instanceof LeafSetNode;
     }
 
     @Override
     public Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode(final YangInstanceIdentifier path,
             final NormalizedNode<?, ?> data) {
-        if (!isBindingRepresentable(data)) {
+        if (notBindingRepresentable(data)) {
             return null;
         }