Improved array shrinking algorithm.
git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@420900 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java b/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
index 5e74629..51bf370 100755
--- a/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
+++ b/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
@@ -1549,30 +1549,25 @@
return m_emptyModules;
}
- int count = 0;
+ // Move all non-null values to one end of the array.
+ int lower = 0;
for (int i = 0; i < modules.length; i++)
{
- if (modules[i] == null)
+ if (modules[i] != null)
{
- count++;
+ modules[lower++] = modules[i];
}
}
- if (count > 0)
+ if (lower == 0)
{
- IModule[] newModules = new IModule[modules.length - count];
- count = 0;
- for (int i = 0; i < modules.length; i++)
- {
- if (modules[i] != null)
- {
- newModules[count++] = modules[i];
- }
- }
- modules = newModules;
+ return m_emptyModules;
}
- return modules;
+ // Copy non-null values into a new array and return.
+ IModule[] newModules = new IModule[lower];
+ System.arraycopy(modules, 0, newModules, 0, lower);
+ return newModules;
}
//