From 7ecefe247511b0f4ceb8fbaee5ef353b637bad51 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 1 May 2017 23:21:10 +0200 Subject: [PATCH] add checking of any bit set to bit vector --- alib2std/src/extensions/vector.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/alib2std/src/extensions/vector.hpp b/alib2std/src/extensions/vector.hpp index ac38f9ceea..52c4af268c 100644 --- a/alib2std/src/extensions/vector.hpp +++ b/alib2std/src/extensions/vector.hpp @@ -241,6 +241,25 @@ vector < bool, Ts ... > operator >> ( vector < bool, Ts ... > A, size_t dist ) { return A; } +template < class ... Ts > +bool any ( const vector < bool, Ts ... > & v ) { + size_t sizeWithin = v.size ( ) % vectorBoolInternalTypeInBits; + + typename vector < bool, Ts ... >::const_iterator itV = v.begin ( ); + + // c++ implementation-specific + while ( itV + 1 < v.end ( ) ) + if ( * ( itV._M_p ++ ) != 0 ) + return true; + + if ( sizeWithin == 0 ) + return * itV._M_p != 0; + else { + vectorBoolInternalType maskTopWord = getMask ( sizeWithin ); + return ( * itV._M_p & maskTopWord ) != 0; + } +} + } /* namespace std */ #endif /* __VECTOR_HPP_ */ -- GitLab