From 8cc96a32e2a0bff1402d0a9509d093cdbe206cd8 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 03 Jul 2013 15:40:04 +0000
Subject: [PATCH] ServerState.java: Replaced the pattern "iterate on keys then get the values" by just "iterate on values". In getBytes(), replaced 2 loops by just one.

---
 opends/src/server/org/opends/server/replication/common/ServerState.java |   61 +++++++++++++-----------------
 1 files changed, 26 insertions(+), 35 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/common/ServerState.java b/opends/src/server/org/opends/server/replication/common/ServerState.java
index d814e1e..a3ef21f 100644
--- a/opends/src/server/org/opends/server/replication/common/ServerState.java
+++ b/opends/src/server/org/opends/server/replication/common/ServerState.java
@@ -30,6 +30,7 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.*;
+import java.util.Map.Entry;
 import java.util.zip.DataFormatException;
 
 import org.opends.server.protocols.asn1.ASN1Writer;
@@ -241,9 +242,8 @@
 
     synchronized (serverIdToChangeNumber)
     {
-      for (int key : serverIdToChangeNumber.keySet())
+      for (ChangeNumber change : serverIdToChangeNumber.values())
       {
-        ChangeNumber change = serverIdToChangeNumber.get(key);
         Date date = new Date(change.getTime());
         set.add(change + " " + date + " " + change.getTime());
       }
@@ -264,11 +264,9 @@
 
     synchronized (serverIdToChangeNumber)
     {
-      for (int serverId : serverIdToChangeNumber.keySet())
+      for (ChangeNumber changeNumber : serverIdToChangeNumber.values())
       {
-        ByteString value =
-            ByteString.valueOf(serverIdToChangeNumber.get(serverId).toString());
-        values.add(value);
+        values.add(ByteString.valueOf(changeNumber.toString()));
       }
     }
     return values;
@@ -319,11 +317,9 @@
 
     synchronized (serverIdToChangeNumber)
     {
-      for (int key : serverIdToChangeNumber.keySet())
+      for (ChangeNumber change : serverIdToChangeNumber.values())
       {
-        ChangeNumber change = serverIdToChangeNumber.get(key);
-        buffer.append(change.toString());
-        buffer.append(" ");
+        buffer.append(change).append(" ");
       }
       if (!serverIdToChangeNumber.isEmpty())
         buffer.deleteCharAt(buffer.length() - 1);
@@ -353,9 +349,8 @@
 
     synchronized (serverIdToChangeNumber)
     {
-      for (int serverId : serverIdToChangeNumber.keySet())
+      for (ChangeNumber tmpMax : serverIdToChangeNumber.values())
       {
-        ChangeNumber tmpMax = serverIdToChangeNumber.get(serverId);
         if ((maxCN==null) || (tmpMax.newer(maxCN)))
           maxCN = tmpMax;
       }
@@ -386,27 +381,27 @@
   {
     synchronized (serverIdToChangeNumber)
     {
+      final int size = serverIdToChangeNumber.size();
+      List<String> idList = new ArrayList<String>(size);
+      List<String> cnList = new ArrayList<String>(size);
+      // calculate the total length needed to allocate byte array
       int length = 0;
-      List<String> idList =
-          new ArrayList<String>(serverIdToChangeNumber.size());
-      for (int serverId : serverIdToChangeNumber.keySet())
+      for (Entry<Integer, ChangeNumber> entry : serverIdToChangeNumber
+          .entrySet())
       {
-        String temp = String.valueOf(serverId);
-        idList.add(temp);
-        length += temp.length() + 1;
-      }
-      List<String> cnList =
-          new ArrayList<String>(serverIdToChangeNumber.size());
-      for (ChangeNumber cn : serverIdToChangeNumber.values())
-      {
-        String temp = cn.toString();
-        cnList.add(temp);
-        length += temp.length() + 1;
+        String serverIdStr = String.valueOf(entry.getKey());
+        idList.add(serverIdStr);
+        length += serverIdStr.length() + 1;
+
+        String changeNumberStr = entry.getValue().toString();
+        cnList.add(changeNumberStr);
+        length += changeNumberStr.length() + 1;
       }
       byte[] result = new byte[length];
 
+      // write the server state into the byte array
       int pos = 0;
-      for (int i = 0; i < serverIdToChangeNumber.size(); i++)
+      for (int i = 0; i < size; i++)
       {
         String str = idList.get(i);
         pos = addByteArray(str.getBytes("UTF-8"), result, pos);
@@ -481,11 +476,9 @@
     ServerState newState = new ServerState();
     synchronized (serverIdToChangeNumber)
     {
-      for (Integer key : serverIdToChangeNumber.keySet())
+      for (ChangeNumber change : serverIdToChangeNumber.values())
       {
-        ChangeNumber change = serverIdToChangeNumber.get(key);
-        Integer serverId = change.getServerId();
-        newState.serverIdToChangeNumber.put(serverId, change);
+        newState.serverIdToChangeNumber.put(change.getServerId(), change);
       }
     }
     return newState;
@@ -563,13 +556,11 @@
     ServerState newState = new ServerState();
     synchronized (serverIdToChangeNumber)
     {
-      for (Integer key : serverIdToChangeNumber.keySet())
+      for (ChangeNumber change : serverIdToChangeNumber.values())
       {
-        ChangeNumber change = serverIdToChangeNumber.get(key);
-        Integer serverId = change.getServerId();
         if (change.older(cn))
         {
-          newState.serverIdToChangeNumber.put(serverId, change);
+          newState.serverIdToChangeNumber.put(change.getServerId(), change);
         }
       }
     }

--
Gitblit v1.10.0