Used Splitter instead of String.split() - performance improvement
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / match / AbstractOxmIpv6AddressSerializer.java
index d5491c8319b3397e20871deb0cd0c9b69a8aad5f..a0ca6e39f7865d4f8f5fffdc3799fd859bebdc21 100644 (file)
@@ -9,12 +9,17 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.match;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
+import java.util.ArrayList;\r
 import java.util.Arrays;\r
+import java.util.List;\r
 \r
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
 \r
+import com.google.common.base.Splitter;\r
+import com.google.common.collect.Lists;\r
+\r
 /**\r
  * Parent for Ipv6 address based match entry serializers\r
  * @author michal.polkorab\r
@@ -25,49 +30,50 @@ public abstract class AbstractOxmIpv6AddressSerializer extends AbstractOxmMatchE
     public void serialize(MatchEntries entry, ByteBuf outBuffer) {\r
         super.serialize(entry, outBuffer);\r
         String textAddress = entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue();\r
-        String[] address;\r
+        List<String> address;\r
         if (textAddress.equals("::")) {\r
-            address = new String[EncodeConstants.GROUPS_IN_IPV6_ADDRESS];\r
-            Arrays.fill(address, "0");\r
+            String[] tmp = new String[EncodeConstants.GROUPS_IN_IPV6_ADDRESS];\r
+            Arrays.fill(tmp, "0");\r
+            address = Arrays.asList(tmp);\r
         } else {\r
-            address = parseIpv6Address(textAddress.split(":"));\r
+            address = parseIpv6Address(Lists.newArrayList(Splitter.on(":").split(textAddress)));\r
         }\r
-        for (int i = 0; i < address.length; i++) {\r
-            outBuffer.writeShort(Integer.parseInt(address[i], 16));\r
+        for (String group : address) {\r
+            outBuffer.writeShort(Integer.parseInt(group, 16));\r
         }\r
         writeMask(entry, outBuffer, getValueLength());\r
     }\r
 \r
-    private static String[] parseIpv6Address(String[] addressGroups) {\r
+    private static List<String> parseIpv6Address(ArrayList<String> addressGroups) {\r
         int countEmpty = 0;\r
-        for (int i = 0; i < addressGroups.length; i++) {\r
-            if (addressGroups[i].equals("")){\r
+        for (String group : addressGroups) {\r
+            if (group.equals("")) {\r
                 countEmpty++;\r
             }\r
         }\r
-        String[] ready = new String[EncodeConstants.GROUPS_IN_IPV6_ADDRESS];\r
+        List<String> ready = new ArrayList<>(EncodeConstants.GROUPS_IN_IPV6_ADDRESS);\r
         switch (countEmpty) {\r
         case 0:\r
             ready = addressGroups;\r
             break;\r
         case 1:\r
-            int zerosToBePushed = EncodeConstants.GROUPS_IN_IPV6_ADDRESS - addressGroups.length + 1;\r
-            int index = 0;\r
-            for (int i = 0; i < addressGroups.length; i++) {\r
-                if (addressGroups[i].equals("")) {\r
+            int zerosToBePushed = EncodeConstants.GROUPS_IN_IPV6_ADDRESS - addressGroups.size() + 1;\r
+            for (String group : addressGroups) {\r
+                if (group.equals("")) {\r
                     for (int j = 0; j < zerosToBePushed; j++) {\r
-                        ready[index] = "0";\r
-                        index++;\r
+                        ready.add("0");\r
                     }\r
                 } else {\r
-                    ready[index] = addressGroups[i];\r
-                    index++;\r
+                    ready.add(group);\r
                 }\r
             }\r
             break;\r
         case 2:\r
-            Arrays.fill(ready, "0");\r
-            ready[ready.length - 1] = addressGroups[addressGroups.length - 1];\r
+            String[] tmp = new String[EncodeConstants.GROUPS_IN_IPV6_ADDRESS];\r
+            Arrays.fill(tmp, "0");\r
+            tmp[EncodeConstants.GROUPS_IN_IPV6_ADDRESS - 1] =\r
+                    addressGroups.get(addressGroups.size() - 1);\r
+            ready = Arrays.asList(tmp);\r
             break;\r
         default:\r
             throw new IllegalStateException("Incorrect ipv6 address");\r