1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-07-04 23:36:00 +02:00

Experimental bitfields

This commit is contained in:
Brian Fiete 2022-02-11 05:49:11 -05:00
parent f37fb2c1b7
commit 9e80281d1a
7 changed files with 416 additions and 26 deletions

View file

@ -2153,6 +2153,7 @@ copy /y "$(OutDir)$(TargetName).lib" "$(SolutionDir)\BeefLibs\Beefy2D\dist\"</Co
<ClInclude Include="util\Array.h" />
<ClInclude Include="util\BeefPerf.h" />
<ClInclude Include="util\BinaryHeap.h" />
<ClInclude Include="util\BitSet.h" />
<ClInclude Include="util\BSpline.h" />
<ClInclude Include="util\BumpAllocator.h" />
<ClInclude Include="util\CatmullRom.h" />

View file

@ -1105,6 +1105,9 @@
<ClInclude Include="util\Compress.h">
<Filter>src\util</Filter>
</ClInclude>
<ClInclude Include="util\BitSet.h">
<Filter>src\util</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="third_party\libffi\i686-pc-cygwin\src\x86\win32.asm">

61
BeefySysLib/util/BitSet.h Normal file
View file

@ -0,0 +1,61 @@
#pragma once
#include "BFPlatform.h"
NS_BF_BEGIN;
#define BF_BITSET_ELEM_SIZE (sizeof(uintptr)*8)
class BitSet
{
public:
uintptr* mBits;
int mNumInts;
public:
BitSet()
{
mNumInts = 0;
mBits = NULL;
}
BitSet(int numBits)
{
mNumInts = 0;
mBits = NULL;
this->Resize(numBits);
}
~BitSet()
{
delete this->mBits;
}
void Resize(int numBits)
{
int numInts = (numBits + BF_BITSET_ELEM_SIZE - 1) / BF_BITSET_ELEM_SIZE;
if (numInts == mNumInts)
return;
this->mNumInts = numInts;
delete this->mBits;
this->mBits = new uintptr[numInts];
memset(this->mBits, 0, numInts * sizeof(uintptr));
}
bool IsSet(int idx)
{
return (this->mBits[idx / BF_BITSET_ELEM_SIZE] & ((uintptr)1 << (idx % BF_BITSET_ELEM_SIZE))) != 0;
}
void Set(int idx)
{
this->mBits[idx / BF_BITSET_ELEM_SIZE] |= ((uintptr)1 << (idx % BF_BITSET_ELEM_SIZE));
}
void Clear(int idx)
{
this->mBits[idx / BF_BITSET_ELEM_SIZE] &= ~((uintptr)1 << (idx % BF_BITSET_ELEM_SIZE));
}
};
NS_BF_END;