add assert for valid value in o3tl::typed_flags_set

, fixing a couple of bugs in the process

Change-Id: I40f932deecbcc99dff9aa13dd1882c7487e7fa8e
Reviewed-on: https://gerrit.libreoffice.org/17411
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
This commit is contained in:
Noel Grandin
2015-07-30 08:20:20 +02:00
committed by Noel Grandin
parent a45827b230
commit cebfe56ae5
3 changed files with 14 additions and 11 deletions

View File

@@ -70,7 +70,10 @@ struct is_typed_flags {
public:
explicit Wrap(typename std::underlying_type<E>::type value):
value_(value)
{ assert(detail::isNonNegative(value)); }
{
assert(detail::isNonNegative(value));
assert((value & ~M) == 0);
}
operator E() { return static_cast<E>(value_); }

View File

@@ -240,20 +240,20 @@ typedef sal_uInt32 ControlPart;
* in the ControlState.
*/
enum class ControlState {
NONE = 0,
ENABLED = 0x0001,
FOCUSED = 0x0002,
PRESSED = 0x0004,
ROLLOVER = 0x0008,
HIDDEN = 0x0010,
DEFAULT = 0x0020,
SELECTED = 0x0040,
NONE = 0,
ENABLED = 0x0001,
FOCUSED = 0x0002,
PRESSED = 0x0004,
ROLLOVER = 0x0008,
HIDDEN = 0x0010,
DEFAULT = 0x0020,
SELECTED = 0x0040,
DOUBLEBUFFERING = 0x4000, ///< Set when the control is painted using double-buffering via VirtualDevice.
CACHING_ALLOWED = 0x8000, ///< Set when the control is completely visible (i.e. not clipped).
};
namespace o3tl
{
template<> struct typed_flags<ControlState> : is_typed_flags<ControlState, 0xc007f> {};
template<> struct typed_flags<ControlState> : is_typed_flags<ControlState, 0xc07f> {};
}
class ControlCacheKey

View File

@@ -82,7 +82,7 @@ enum class FrmTypeFlags {
};
namespace o3tl
{
template<> struct typed_flags<FrmTypeFlags> : is_typed_flags<FrmTypeFlags, 0x4fff> {};
template<> struct typed_flags<FrmTypeFlags> : is_typed_flags<FrmTypeFlags, 0x7fff> {};
}
//! values can be combined via logical or