mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-25 05:20:34 +05:00
operator== and better archive for BitArray
This commit is contained in:
parent
020dd4373d
commit
f45fbfd811
@ -83,6 +83,18 @@ namespace ngcore
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool BitArray :: operator==(const BitArray& other) const
|
||||||
|
{
|
||||||
|
if(size != other.Size())
|
||||||
|
return false;
|
||||||
|
for(auto i : Range(size/CHAR_BIT))
|
||||||
|
if(data[i] != other.data[i])
|
||||||
|
return false;
|
||||||
|
for(auto i : Range(size%CHAR_BIT))
|
||||||
|
if(Test(i + size * (size/CHAR_BIT)) != other.Test(i + size * (size/CHAR_BIT)))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
BitArray & BitArray :: operator= (const BitArray & ba2)
|
BitArray & BitArray :: operator= (const BitArray & ba2)
|
||||||
{
|
{
|
||||||
@ -115,29 +127,39 @@ namespace ngcore
|
|||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
Archive & operator & (Archive & archive, BitArray & ba)
|
void BitArray :: DoArchive(Archive& archive)
|
||||||
{
|
{
|
||||||
if (archive.Output())
|
if(archive.GetVersion("netgen") >= "v6.2.2007-62")
|
||||||
{
|
{
|
||||||
archive << ba.Size();
|
archive.NeedsVersion("netgen", "v6.2.2007-62");
|
||||||
for (size_t i = 0; i < ba.Size(); i++)
|
auto size = Size();
|
||||||
archive << ba[i];
|
archive & size;
|
||||||
|
if(archive.Input())
|
||||||
|
SetSize(size);
|
||||||
|
archive.Do(data, size/CHAR_BIT+1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t size;
|
if (archive.Output())
|
||||||
archive & size;
|
|
||||||
ba.SetSize (size);
|
|
||||||
ba.Clear();
|
|
||||||
for (size_t i = 0; i < size; i++)
|
|
||||||
{
|
{
|
||||||
bool b;
|
throw Exception("should not get here");
|
||||||
archive & b;
|
archive << Size();
|
||||||
if (b) ba.SetBit(i);
|
for (size_t i = 0; i < Size(); i++)
|
||||||
|
archive << (*this)[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
archive & size;
|
||||||
|
SetSize (size);
|
||||||
|
Clear();
|
||||||
|
for (size_t i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
bool b;
|
||||||
|
archive & b;
|
||||||
|
if (b) SetBit(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return archive;
|
|
||||||
}
|
}
|
||||||
|
} // namespace ngcore
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -131,6 +131,7 @@ public:
|
|||||||
return Test(i);
|
return Test(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator==(const BitArray& other) const;
|
||||||
|
|
||||||
/// invert all bits
|
/// invert all bits
|
||||||
NGCORE_API BitArray & Invert ();
|
NGCORE_API BitArray & Invert ();
|
||||||
@ -145,6 +146,9 @@ public:
|
|||||||
NGCORE_API BitArray & operator= (const BitArray & ba2);
|
NGCORE_API BitArray & operator= (const BitArray & ba2);
|
||||||
|
|
||||||
NGCORE_API size_t NumSet () const;
|
NGCORE_API size_t NumSet () const;
|
||||||
|
|
||||||
|
void DoArchive(Archive& archive);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
unsigned char Mask (size_t i) const
|
unsigned char Mask (size_t i) const
|
||||||
@ -190,11 +194,8 @@ private:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NGCORE_API std::ostream & operator<<(std::ostream & s, const BitArray & ba);
|
NGCORE_API std::ostream & operator<<(std::ostream & s, const BitArray & ba);
|
||||||
|
|
||||||
NGCORE_API Archive & operator & (Archive & archive, BitArray & ba);
|
|
||||||
|
|
||||||
} // namespace ngcore
|
} // namespace ngcore
|
||||||
|
|
||||||
#endif // NETGEN_CORE_BITARRAY
|
#endif // NETGEN_CORE_BITARRAY
|
||||||
|
Loading…
Reference in New Issue
Block a user