From 9513d9479a67332fe99163e067fb23eef1252a12 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 18 Nov 2016 01:14:08 +0100 Subject: [PATCH] Core/Bitset: Fix PerformsAND when used with itself as argument --- include/Nazara/Core/Bitset.inl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/Nazara/Core/Bitset.inl b/include/Nazara/Core/Bitset.inl index 3dc21562d..c0fdb1655 100644 --- a/include/Nazara/Core/Bitset.inl +++ b/include/Nazara/Core/Bitset.inl @@ -3,10 +3,10 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include #include -#include #include #include @@ -412,15 +412,17 @@ namespace Nz { std::pair minmax = std::minmax(a.GetBlockCount(), b.GetBlockCount()); - // We reinitialise our blocks with zero - m_blocks.clear(); - m_blocks.resize(minmax.second, 0U); + m_blocks.resize(minmax.second); m_bitCount = std::max(a.GetSize(), b.GetSize()); // In case of the "AND", we can stop with the smallest size (because x & 0 = 0) for (std::size_t i = 0; i < minmax.first; ++i) m_blocks[i] = a.GetBlock(i) & b.GetBlock(i); + // And then reset every other block to zero + for (std::size_t i = minmax.first; i < minmax.second; ++i) + m_blocks[i] = 0U; + ResetExtraBits(); }