1
0
mirror of https://github.com/biergaizi/codecrypt synced 2024-06-30 02:43:06 +00:00
codecrypt/lib/bvector.cpp

50 lines
1006 B
C++
Raw Normal View History

2012-04-01 11:51:59 +00:00
#include "codecrypt.h"
using namespace ccr;
uint bvector::hamming_weight()
{
uint r = 0;
for (uint i = 0; i < size(); ++i) if ( (*this) [i]) ++r;
return r;
}
2012-04-02 09:14:54 +00:00
void bvector::add (const bvector&a)
{
if (a.size() > size() ) resize (a.size(), 0);
for (uint i = 0; i < size(); ++i)
item (i) = item (i) ^ a[i];
}
bool bvector::operator* (const bvector&a)
{
bool r = 0;
uint s = size(), i;
if (s > a.size() ) s = a.size();
for (i = 0; i < s; ++i) r ^= (item (i) &a[i]);
return r;
}
2012-04-06 12:49:40 +00:00
bool bvector::zero() const
{
for (uint i = 0; i < size(); ++i) if (item (i) ) return false;
return true;
}
void bvector::to_poly (polynomial&r, gf2m&fld)
{
r.clear();
2012-05-12 22:17:12 +00:00
if (size() % fld.m) return; //impossible
2012-04-20 08:11:21 +00:00
r.resize (size() / fld.m, 0);
2012-04-06 12:49:40 +00:00
for (uint i = 0; i < size(); ++i)
2012-05-12 22:17:12 +00:00
if (item (i) ) r[i/fld.m] |= (1 << (i % fld.m) );
}
void bvector::from_poly (const polynomial&r, gf2m&fld)
{
clear();
resize (r.size() *fld.m, 0);
for (uint i = 0; i < size(); ++i)
item (i) = (r[i/fld.m] >> (i % fld.m) ) & 1;
2012-04-06 12:49:40 +00:00
}