123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717 |
- #ifndef CBITVECTOR_H_
- #define CBITVECTOR_H_
- #include "typedefs.h"
- #include <cassert>
- #include <cstddef>
- class crypto;
- class CBitVector {
- public:
-
-
- CBitVector();
-
- CBitVector(std::size_t bits);
-
- CBitVector(std::size_t bits, crypto* crypt);
-
-
-
- void Init();
-
- ~CBitVector();
-
- void delCBitVector();
-
-
-
- void FillRand(std::size_t bits, crypto* crypt);
-
-
-
- void CreateExact(std::size_t bits);
-
- void Create(std::size_t bits);
-
- void CreateBytes(std::size_t bytes);
-
- void CreateBytes(std::size_t bytes, crypto* crypt);
-
- void CreateZeros(std::size_t bits);
-
- void Create(std::size_t bits, crypto* crypt);
-
- void Create(std::size_t numelements, std::size_t elementlength);
-
- void Create(std::size_t numelements, std::size_t elementlength, crypto* crypt);
-
- void Create(std::size_t numelementsDimA, std::size_t numelementsDimB, std::size_t elementlength);
-
- void Create(std::size_t numelementsDimA, std::size_t numelementsDimB, std::size_t elementlength, crypto* crypt);
-
-
-
- void ResizeinBytes(std::size_t newSizeBytes);
-
- void Reset();
-
- void ResetFromTo(std::size_t frombyte, std::size_t tobyte);
-
- void SetToOne();
-
- void Invert();
-
- std::size_t GetSize() const;
-
- BOOL IsEqual(const CBitVector& vec) const;
-
- BOOL IsEqual(const CBitVector& vec, std::size_t from, std::size_t to) const;
-
- void SetElementLength(std::size_t elelen);
-
- std::size_t GetElementLength() const;
-
-
- void Copy(const CBitVector& vec);
-
- void Copy(const CBitVector& vec, std::size_t pos, std::size_t len);
-
- void Copy(const BYTE* p, std::size_t pos, std::size_t len);
-
- void ORByte(std::size_t pos, BYTE p);
-
-
- BYTE GetBit(std::size_t idx) const;
-
- void SetBit(std::size_t idx, BYTE b);
-
- BYTE GetBitNoMask(std::size_t idx) const;
-
- void SetBitNoMask(std::size_t idx, BYTE b);
-
- void XORBitNoMask(std::size_t idx, BYTE b);
-
-
- void SetByte(std::size_t idx, BYTE p);
-
- BYTE GetByte(std::size_t idx) const;
-
- void XORByte(std::size_t idx, BYTE b);
-
- void ANDByte(std::size_t idx, BYTE b);
-
-
- void GetBits(BYTE* p, std::size_t pos, std::size_t len) const;
-
- void GetBytes(BYTE* p, std::size_t pos, std::size_t len) const;
-
- template<class T> T Get(std::size_t pos, std::size_t len) const {
- assert(len <= sizeof(T) * 8);
- T val = 0;
- GetBits((BYTE*) &val, pos, len);
- return val;
- }
-
-
- void SetBits(const BYTE* p, std::size_t pos, std::size_t len);
-
- void SetBitsPosOffset(const BYTE* p, std::size_t ppos, std::size_t pos, std::size_t len);
-
- void SetBytes(const BYTE* src, std::size_t pos, std::size_t len);
-
- void SetBytesToZero(std::size_t bytepos, std::size_t bytelen);
-
- template<class T> void Set(T val, std::size_t pos, std::size_t len) {
- assert(len <= sizeof(T) * 8);
- SetBits((BYTE*) &val, pos, len);
- }
-
- void SetBitsToZero(std::size_t bitpos, std::size_t bitlen);
-
-
- void XORBytes(const BYTE* p, std::size_t pos, std::size_t len);
-
- void XORBytes(const BYTE* p, std::size_t len);
-
- void XORVector(const CBitVector &vec, std::size_t pos, std::size_t len);
-
- template<class T> void XOR(T val, std::size_t pos, std::size_t len) {
- assert(len <= sizeof(T) * 8);
- XORBits((BYTE*) &val, pos, len);
- }
-
- void XORBits(const BYTE* p, std::size_t pos, std::size_t len);
-
- void XORBitsPosOffset(const BYTE* p, std::size_t ppos, std::size_t pos, std::size_t len);
-
- void XOR(const CBitVector* b);
-
- void XORBytesReverse(const BYTE* p, std::size_t pos, std::size_t len);
-
-
- void ANDBytes(const BYTE* p, std::size_t pos, std::size_t len);
-
-
- void SetXOR(const BYTE* p, const BYTE* q, std::size_t pos, std::size_t len);
-
- void SetAND(const BYTE* p, const BYTE* q, std::size_t pos, std::size_t len);
-
- void AND(const CBitVector* b);
-
- void CLShift(std::size_t pos);
-
-
- BYTE* GetArr();
- const BYTE* GetArr() const;
-
- void AttachBuf(BYTE* p, std::size_t size = 0);
-
- void DetachBuf();
-
-
- void Print(std::size_t fromBit, std::size_t toBit);
-
- void PrintHex(bool linebreak = true);
-
- void PrintHex(std::size_t fromByte, std::size_t toByte, bool linebreak = true);
-
- void PrintBinary();
-
- void PrintContent();
-
- void PrintBinaryMasked(std::size_t from, std::size_t to);
-
-
- template<class T> T Get(std::size_t i) const {
- return Get<T>(i * m_nElementLength, m_nElementLength);
- }
-
- template<class T> void Set(T val, std::size_t i) {
- Set<T>(val, i * m_nElementLength, m_nElementLength);
- }
-
-
- template<class T> T Get2D(std::size_t i, std::size_t j) const {
- return Get<T>((i * m_nNumElementsDimB + j) * m_nElementLength, m_nElementLength);
- }
-
- template<class T> void Set2D(T val, std::size_t i, std::size_t j) {
- Set<T>(val, (i * m_nNumElementsDimB + j) * m_nElementLength, m_nElementLength);
- }
-
-
- void Transpose(std::size_t rows, std::size_t columns);
- void SimpleTranspose(std::size_t rows, std::size_t columns);
- void EklundhBitTranspose(std::size_t rows, std::size_t columns);
- public:
- BYTE* m_pBits;
- std::size_t m_nByteSize;
- std::size_t m_nBits;
- std::size_t m_nElementLength;
- std::size_t m_nNumElements;
- std::size_t m_nNumElementsDimB;
- };
- #endif
|