allow eoBit to be templatized on its value type

This helps avoiding the infamous std::vector<bool> specialization,
which (wrongly) exchange space for speed.
This commit is contained in:
Johann Dreo 2020-08-26 11:58:46 +02:00
commit e2bf3ec3c0

View file

@ -59,22 +59,27 @@ Example of a complete test program that use various bitstrings operators:
Based on STL's std::vector<bool> specialization. Based on STL's std::vector<bool> specialization.
*/ */
template <class FitT> class eoBit: public eoVector<FitT, bool>
template <class FitT, class ScalarT = bool>
class eoBit: public eoVector<FitT, ScalarT>
{ {
public: public:
using ScalarType = ScalarT;
using eoVector< FitT, bool >::begin; using eoVector< FitT, ScalarType >::begin;
using eoVector< FitT, bool >::end; using eoVector< FitT, ScalarType >::end;
using eoVector< FitT, bool >::resize; using eoVector< FitT, ScalarType >::resize;
using eoVector< FitT, bool >::size; using eoVector< FitT, ScalarType >::size;
/** /**
* (Default) Constructor. * (Default) Constructor.
* @param size Size of the binary std::string. * @param size Size of the binary std::string.
* @param value Default value. * @param value Default value.
*/ */
eoBit(unsigned size = 0, bool value = false): eoBit(unsigned size = 0, ScalarType value = false):
eoVector<FitT, bool>(size, value) {} // eoBit(unsigned size, ScalarType value):
eoVector<FitT, ScalarType>(size, value) {}
/// My class name. /// My class name.
virtual std::string className() const virtual std::string className() const
@ -91,7 +96,7 @@ public:
EO<FitT>::printOn(os); EO<FitT>::printOn(os);
os << ' '; os << ' ';
os << size() << ' '; os << size() << ' ';
std::copy(begin(), end(), std::ostream_iterator<bool>(os)); std::copy(begin(), end(), std::ostream_iterator<ScalarType>(os));
} }
/** /**