equal
deleted
inserted
replaced
52 // small but enough: almost 1 cache line |
52 // small but enough: almost 1 cache line |
53 this.intArrays = new ArrayDeque<int[]>(6); |
53 this.intArrays = new ArrayDeque<int[]>(6); |
54 } |
54 } |
55 |
55 |
56 int[] getArray() { |
56 int[] getArray() { |
57 if (doStats) { |
57 if (DO_STATS) { |
58 getOp++; |
58 getOp++; |
59 } |
59 } |
60 |
60 |
61 // use cache: |
61 // use cache: |
62 final int[] array = intArrays.pollLast(); |
62 final int[] array = intArrays.pollLast(); |
63 if (array != null) { |
63 if (array != null) { |
64 return array; |
64 return array; |
65 } |
65 } |
66 |
66 |
67 if (doStats) { |
67 if (DO_STATS) { |
68 createOp++; |
68 createOp++; |
69 } |
69 } |
70 |
70 |
71 return new int[arraySize]; |
71 return new int[arraySize]; |
72 } |
72 } |
73 |
73 |
74 void putDirtyArray(final int[] array, final int length) { |
74 void putDirtyArray(final int[] array, final int length) { |
75 if (length != arraySize) { |
75 if (length != arraySize) { |
76 if (doChecks) { |
76 if (DO_CHECKS) { |
77 MarlinUtils.logInfo("ArrayCache: bad length = " + length); |
77 MarlinUtils.logInfo("ArrayCache: bad length = " + length); |
78 } |
78 } |
79 return; |
79 return; |
80 } |
80 } |
81 if (doStats) { |
81 if (DO_STATS) { |
82 returnOp++; |
82 returnOp++; |
83 } |
83 } |
84 |
84 |
85 // NO clean-up of array data = DIRTY ARRAY |
85 // NO clean-up of array data = DIRTY ARRAY |
86 |
86 |
87 if (doCleanDirty) { |
87 if (DO_CLEAN_DIRTY) { |
88 // Force zero-fill dirty arrays: |
88 // Force zero-fill dirty arrays: |
89 Arrays.fill(array, 0, array.length, 0); |
89 Arrays.fill(array, 0, array.length, 0); |
90 } |
90 } |
91 |
91 |
92 // fill cache: |
92 // fill cache: |
95 |
95 |
96 void putArray(final int[] array, final int length, |
96 void putArray(final int[] array, final int length, |
97 final int fromIndex, final int toIndex) |
97 final int fromIndex, final int toIndex) |
98 { |
98 { |
99 if (length != arraySize) { |
99 if (length != arraySize) { |
100 if (doChecks) { |
100 if (DO_CHECKS) { |
101 MarlinUtils.logInfo("ArrayCache: bad length = " + length); |
101 MarlinUtils.logInfo("ArrayCache: bad length = " + length); |
102 } |
102 } |
103 return; |
103 return; |
104 } |
104 } |
105 if (doStats) { |
105 if (DO_STATS) { |
106 returnOp++; |
106 returnOp++; |
107 } |
107 } |
108 |
108 |
109 // clean-up array of dirty part[fromIndex; toIndex[ |
109 // clean-up array of dirty part[fromIndex; toIndex[ |
110 fill(array, fromIndex, toIndex, 0); |
110 fill(array, fromIndex, toIndex, 0); |
123 */ |
123 */ |
124 if (toIndex != 0) { |
124 if (toIndex != 0) { |
125 Arrays.fill(array, fromIndex, toIndex, value); |
125 Arrays.fill(array, fromIndex, toIndex, value); |
126 } |
126 } |
127 |
127 |
128 if (doChecks) { |
128 if (DO_CHECKS) { |
129 check(array, fromIndex, toIndex, value); |
129 check(array, fromIndex, toIndex, value); |
130 } |
130 } |
131 } |
131 } |
132 |
132 |
133 static void check(final int[] array, final int fromIndex, |
133 static void check(final int[] array, final int fromIndex, |
134 final int toIndex, final int value) |
134 final int toIndex, final int value) |
135 { |
135 { |
136 if (doChecks) { |
136 if (DO_CHECKS) { |
137 // check zero on full array: |
137 // check zero on full array: |
138 for (int i = 0; i < array.length; i++) { |
138 for (int i = 0; i < array.length; i++) { |
139 if (array[i] != value) { |
139 if (array[i] != value) { |
140 logException("Invalid value at: " + i + " = " + array[i] |
140 logException("Invalid value at: " + i + " = " + array[i] |
141 + " from: " + fromIndex + " to: " + toIndex + "\n" |
141 + " from: " + fromIndex + " to: " + toIndex + "\n" |