MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / MergeArrays1

Function MergeArrays1

linalg/sparsematrix.cpp:194–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

192
193 template <typename T, typename FUNC>
194 INLINE void MergeArrays1 (FlatArray<T*> ptrs,
195 FlatArray<int> sizes,
196 // FlatArray<int> minvals,
197 FUNC f)
198 {
199 STACK_ARRAY(int, minvals, sizes.Size());
200 int nactive = 0;
201 for (auto i : sizes.Range())
202 if (sizes[i])
203 {
204 nactive++;
205 minvals[i] = *ptrs[i];
206 }
207 else
208 minvals[i] = numeric_limits<int>::max();
209
210 while (nactive)
211 {
212 int minval = minvals[0];
213 for (int i = 1; i < sizes.Size(); i++)
214 minval = min2(minval, minvals[i]);
215
216
217 f(minval);
218
219 for (int i : sizes.Range())
220 while (minvals[i] == minval) // if -> while ... duplicate cols in row
221 {
222 ptrs[i]++;
223 sizes[i]--;
224 if (sizes[i] == 0)
225 {
226 nactive--;
227 minvals[i] = numeric_limits<int>::max();
228 }
229 else
230 minvals[i] = *ptrs[i];
231 }
232 }
233 }
234
235
236 template <typename T, typename FUNC>

Callers 1

MergeArraysFunction · 0.85

Calls 2

RangeMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected