/usr/include/linbox/matrix/sliced3/sliced-stepper.h is in liblinbox-dev 1.4.2-5build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #ifndef __SLICED_STEPPER_H
#define __SLICED_STEPPER_H
#include "dense-sliced.h"
#include "sliced-domain.h"
#include <linbox/field/modular.h>
namespace LinBox{
// To fill a sliced vector
struct stepper {
typedef SlicedDomain<Givaro::Modular<uint8_t> > Domain;
typedef Sliced<Domain > Matrix;
typedef Matrix::Scalar Scalar;
typedef Matrix::RawIterator RawIterator;
typedef Matrix::SlicedUnit SlicedUnit;
Matrix &_A;
RawIterator _r;
size_t _i;
const static size_t SIZE = sizeof(Domain::Word_T)*8;
Scalar _store[SIZE];
stepper(Matrix & A) : _A(A), _r(_A.rawBegin()), _i(SIZE-1) { }
virtual inline void flush(){
//_r.pinfo();
//std::cerr << std::endl;
SlicedUnit &t = (*_r);
t.zero();
for(size_t i = _i + 1; i < SIZE; ++i){
//std::cerr << (int)_store[i] << " ";
/*
t <<= 1;
if(_store[i] > 1) t |= 1;
else t.b0 |= _store[i];
*/
t <<= 1;
t.b1 |= ((_store[i] & 2) >> 1);
t.b0 |= ((_store[i] & 1) | t.b1);
//std::cerr << (int)t.b0 << " & " << (int)t.b1 << std::endl;
}
//std::cerr << "----------------" << std::endl;
_i = SIZE-1;
++_r;
}
inline void step(Scalar e) {
//std::cerr << (int)e << " ";
_store[_i--] = e;
if(_i > SIZE) flush();
}
inline void row(){
if(_i != SIZE-1) flush();
}
};
} // LinBox
#endif // __SLICED_STEPPER_H
|