|
Boost : |
Subject: [boost] Boost.EnÂdian comments
From: tymofey (tymofey_at_[hidden])
Date: 2011-09-05 14:56:29
This is not a full review, but rather a few comments on the implementation of reorder(x) functions.
What you are doing is casting pointers around and assigning individual bytes, which might not really effective:
inline void reorder(int64_t source, int64_t& target)
{
const char* s (reinterpret_cast<const char*>(&source));
char * t (reinterpret_cast<char*>(&target) + sizeof(target) - 1);
*t = *s;
*--t = *++s;
*--t = *++s;
*--t = *++s;
*--t = *++s;
*--t = *++s;
*--t = *++s;
*--t = *++s;
}
it does eight increments, eight decrements, one addition, one substraction and eight assignments.
maybe something like:
inline void reorder(int64_t source, int64_t& target)
{
target = ((source << 0x38) & 0xFF00000000000000)
| ((source << 0x28) & 0x00FF000000000000)
| ((source << 0x18) & 0x0000FF0000000000)
| ((source << 0x08) & 0x000000FF00000000)
| ((source >> 0x08) & 0x00000000FF000000)
| ((source >> 0x18) & 0x0000000000FF0000)
| ((source >> 0x28) & 0x000000000000FF00)
| ((source >> 0x38) & 0x00000000000000FF);
}
would be more efficient?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk