This commit is contained in:
Irlan 2018-05-27 02:44:01 -03:00
parent a2fe1ab86c
commit 8abb45fd21

View File

@ -151,66 +151,4 @@ inline b3DenseVec3 operator*(const b3SparseMat33& A, const b3DenseVec3& v)
return result; return result;
} }
inline void b3Add(b3SparseMat33& out, b3SparseMat33& A, const b3SparseMat33& B)
{
B3_ASSERT(A.M == B.M);
B3_ASSERT(A.N == B.N);
B3_ASSERT(A.M == out.M);
B3_ASSERT(A.N == out.N);
// out = A
for (u32 i = 0; i < A.valueCount; ++i)
{
out.values[i] = A.values[i];
out.cols[i] = A.cols[i];
}
out.valueCount = A.valueCount;
for (u32 i = 0; i < A.M + 1; ++i)
{
out.row_ptrs[i] = A.row_ptrs[i];
}
// out += B
for (u32 i = 0; i < B.M; ++i)
{
for (u32 row_ptr_B = B.row_ptrs[i]; row_ptr_B < B.row_ptrs[i + 1]; ++row_ptr_B)
{
u32 col_B = B.cols[row_ptr_B];
// Does A has a non-zero element that exist in B?
u32 row_ptr_A = A.row_ptrs[i];
while (row_ptr_A != A.row_ptrs[i + 1])
{
u32 col_A = A.cols[row_ptr_A];
if (col_A > col_B)
{
break;
}
++row_ptr_A;
}
u32 col_A = A.cols[row_ptr_A];
if (col_A == col_B)
{
out.values[col_A] += B.values[col_B];
}
else
{
out.values[out.valueCount] = B.values[col_B];
out.cols[out.valueCount] = col_B;
++out.valueCount;
out.row_ptrs[i + 1] = out.row_ptrs[(i + 1) - 1] + col_A;
}
}
}
B3_ASSERT(out.valueCount <= A.N);
}
#endif #endif