bugfix in url parsing for HTTP.java
[org.ibex.core.git] / src / org / ibex / util / Simplex.java
index e8871ca..2ae314a 100644 (file)
@@ -256,9 +256,7 @@ public class Simplex {
             epsel=DEF_EPSEL;
             non_zeros=0;
 
-            for(int i = 0; i < mat_alloc; i++) { set_row_nr(mat,i, 0); set_value(mat, i, 0); }
-            for(int i = 0; i < mat_alloc; i++)   col_no[i] = 0;
-            for(int i = 0; i < columns + 1; i++) col_end[i] = 0;
+            for(int i = 0; i < col_end.length; i++) col_end[i] = 0;
             for(int i = 0; i < rows + 1; i++)    row_end[i] = 0;
             for(int i = 0; i < rows + 1; i++)   orig_rh[i] = 0;
             for(int i = 0; i < rows + 1; i++)   rh[i] = 0;
@@ -272,9 +270,6 @@ public class Simplex {
             for(int i = 0; i <= rows; i++)     { bas[i]=i; basis[i]=TRUE; }
             for(int i = rows + 1; i <= sum; i++) basis[i]=FALSE;
             for(int i = 0 ; i <= sum; i++)       lower[i]=TRUE;
-            for(int i = 0; i < eta_alloc; i++) eta_value[i] = 0;
-            for(int i = 0; i < eta_alloc; i++) eta_row_nr[i] = 0;
-            for(int i = 0; i < rows_alloc + max_num_inv; i++) eta_col_end[i] = 0;
             for(int i = 0; i <= sum; i++) solution[i] = 0;
             for(int i = 0; i <= sum; i++) best_solution[i] = 0;
             for(int i = 0; i <= rows; i++) duals[i] = 0;
@@ -1295,7 +1290,7 @@ public class Simplex {
         }
 
         public int solve() {
-            int result;
+            int result = FAILURE;
             if (active == FALSE) set_globals();
             total_iter  = 0;
             max_level   = 1;
@@ -1320,16 +1315,25 @@ public class Simplex {
                 eta_size  = Eta_size;
                 eta_alloc = Eta_alloc;
                 num_inv   = Num_inv;
-                return(result);
             }
-            return(FAILURE);
+            for(int i = 0; i < maxmat; i++) { set_row_nr(mat,i, 0); set_value(mat, i, 0); }
+            for(int i = 0; i < maxmat; i++)   col_no[i] = 0;
+
+            // FIXME: not sure about this
+            for(int i = 0; i < Eta_size; i++) eta_value[i] = 0;
+            for(int i = 0; i < Eta_size; i++) eta_row_nr[i] = 0;
+            for(int i = 0; i < Eta_size; i++) eta_col_end[i] = 0;
+
+            maxmat = 0;
+            return(result);
         }
 
+    private int maxmat = 0;
     private final static float round( float val, float eps) { return (Math.abs(val) < eps) ? 0 : val; }
-    static int get_row_nr(MatrixArray m, int i) { return m.row_nr[i]; }
-    static void set_row_nr(MatrixArray m, int i, int val) { m.row_nr[i] = val; }
-    static float get_value(MatrixArray m, int i) { return m.value[i]; }
-    static void set_value(MatrixArray m, int i, float val) { m.value[i] = val; }
+    int get_row_nr(MatrixArray m, int i) { return m.row_nr[i]; }
+    void set_row_nr(MatrixArray m, int i, int val) { m.row_nr[i] = val; maxmat = Math.max(i, maxmat); }
+    float get_value(MatrixArray m, int i) { return m.value[i]; }
+    void set_value(MatrixArray m, int i, float val) { m.value[i] = val; maxmat = Math.max(i, maxmat); }
     public static class MatrixArray {
         public int[] row_nr;
         public float[] value;