diff options
-rw-r--r-- | common/algorithm.h | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/common/algorithm.h b/common/algorithm.h index fccc815b36..6e6c6691ed 100644 --- a/common/algorithm.h +++ b/common/algorithm.h @@ -53,8 +53,29 @@ Out copy_if(In first, In last, Out dst, Op op) { return dst; } -// TODO: this is can be slower than memset for most normal data -// maybe specialize the template for char, short, int, long, long long +// Our 'specialized' 'set_to' template for char, signed char and unsigned char arrays. +// Since C++ doesn't support partial specialized template functions (currently) we +// are going this way... +// With this we assure the usage of memset for those, which should be +// faster than a simple loop like for the generic 'set_to'. +template<class Value> +signed char *set_to(signed char *first, signed char *last, Value val) { + memset(first, (val & 0xFF), last - first); + return last; +} + +template<class Value> +unsigned char *set_to(unsigned char *first, unsigned char *last, Value val) { + memset(first, (val & 0xFF), last - first); + return last; +} + +template<class Value> +char *set_to(char *first, char *last, Value val) { + memset(first, (val & 0xFF), last - first); + return last; +} + template<class In, class Value> In set_to(In first, In last, Value val) { while (first != last) |