Files
tlib/oversampling/WDL/bitfield.h
2024-05-24 13:28:31 +02:00

34 lines
810 B
C++

#ifndef _WDL_BITFIELD_H_
#define _WDL_BITFIELD_H_
#include "heapbuf.h"
class WDL_BitField // ultra simple bit field
{
public:
bool SetSize(int sz) // clears state
{
void *b=m_hb.ResizeOK((sz+7)/8);
if (b) memset(b,0,m_hb.GetSize());
return !!b;
}
int GetApproxSize() const { return m_hb.GetSize()*8; } // may return slightly greater than the size set
bool IsSet(unsigned int idx) const
{
const unsigned char mask = 1<<(idx&7);
idx>>=3;
return idx < (unsigned int)m_hb.GetSize() && (((unsigned char *)m_hb.Get())[idx]&mask);
}
void Set(unsigned int idx)
{
const unsigned char mask = 1<<(idx&7);
idx>>=3;
if (idx < (unsigned int)m_hb.GetSize()) ((unsigned char *)m_hb.Get())[idx] |= mask;
}
private:
WDL_HeapBuf m_hb;
};
#endif //_WDL_BITFIELD_H_