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