-
Notifications
You must be signed in to change notification settings - Fork 6
Closed
Description
Code like this one
rc = rc ? rc : grb::eWiseApply< (descr_dense) >(
y_comp, static_cast<IOType>(0),
mask,
grb::operators::left_assign_if<IOType, bool, IOType>()
);will fail to compile due to the static assertions in inactive part of the code
static_assert( !internal::maybe_noop< OP >::value, "Warning: you may be "in this example from
ALP/include/graphblas/reference/blas1.hpp
Line 5000 in 136ac70
| RC eWiseApply( |
...
ALP/include/graphblas/reference/blas1.hpp
Lines 5054 to 5075 in 136ac70
| // check for dense variant | |
| if( (descr & descriptors::dense) || | |
| internal::getCoordinates( y ).nonzeroes() == n | |
| ) { | |
| internal::getCoordinates( z ).assignAll(); | |
| const internal::Coordinates< reference > * const no_coordinates = nullptr; | |
| return internal::dense_apply_generic< true, false, false, false, descr >( | |
| internal::getRaw( z ), &alpha, no_coordinates, | |
| internal::getRaw( y ), no_coordinates, op, n | |
| ); | |
| } | |
| // we are in the sparse variant | |
| internal::getCoordinates( z ).clear(); | |
| const bool * const null_mask = nullptr; | |
| const Coords * const null_coors = nullptr; | |
| return internal::sparse_apply_generic< false, false, true, false, descr >( | |
| internal::getRaw( z ), internal::getCoordinates( z ), null_mask, null_coors, | |
| &alpha, null_coors, | |
| internal::getRaw( y ), &( internal::getCoordinates( y ) ), | |
| op, n | |
| ); |
// check for dense variant
if( (descr & descriptors::dense) ||
internal::getCoordinates( y ).nonzeroes() == n
) {
internal::getCoordinates( z ).assignAll();
const internal::Coordinates< reference > * const no_coordinates = nullptr;
// **<<------ active code**
return internal::dense_apply_generic< true, false, false, false, descr >(
internal::getRaw( z ), &alpha, no_coordinates,
internal::getRaw( y ), no_coordinates, op, n
);
}
// **<<------ inactive code**
// we are in the sparse variant
internal::getCoordinates( z ).clear();
const bool * const null_mask = nullptr;
const Coords * const null_coors = nullptr;
//**<<------ static assert inside**
return internal::sparse_apply_generic< false, false, true, false, descr >(
internal::getRaw( z ), internal::getCoordinates( z ), null_mask, null_coors,
&alpha, null_coors,
internal::getRaw( y ), &( internal::getCoordinates( y ) ),
op, n
);In order to avoid these problems the blocks of the code should be properly guarded by static checks.
related to #370 where some statements could be better implemented with this examples
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working