summaryrefslogtreecommitdiffstats
path: root/include/lldb/Core/Flags.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Core/Flags.h')
-rw-r--r--include/lldb/Core/Flags.h253
1 files changed, 253 insertions, 0 deletions
diff --git a/include/lldb/Core/Flags.h b/include/lldb/Core/Flags.h
new file mode 100644
index 0000000..233f098
--- /dev/null
+++ b/include/lldb/Core/Flags.h
@@ -0,0 +1,253 @@
+//===-- Flags.h -------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Flags_h_
+#define liblldb_Flags_h_
+#if defined(__cplusplus)
+
+
+#include <stdint.h>
+#include <unistd.h>
+
+namespace lldb_private {
+
+//----------------------------------------------------------------------
+/// @class Flags Flags.h "lldb/Core/Flags.h"
+/// @brief A class to manage flags.
+///
+/// The Flags class managed flag bits and allows testing and
+/// modification of individual or multiple flag bits.
+//----------------------------------------------------------------------
+class Flags
+{
+public:
+ //----------------------------------------------------------------------
+ /// The value type for flags is a 32 bit unsigned integer type.
+ //----------------------------------------------------------------------
+ typedef uint32_t ValueType;
+
+ //----------------------------------------------------------------------
+ /// Construct with initial flag bit values.
+ ///
+ /// Constructs this object with \a mask as the initial value for all
+ /// of the flags.
+ ///
+ /// @param[in] mask
+ /// The initial value for all flags.
+ //----------------------------------------------------------------------
+ Flags (ValueType flags = 0) :
+ m_flags (flags)
+ {
+ }
+
+ //----------------------------------------------------------------------
+ /// Copy constructor.
+ ///
+ /// Construct and copy the flags from \a rhs.
+ ///
+ /// @param[in] rhs
+ /// A const Flags object reference to copy.
+ //----------------------------------------------------------------------
+ Flags (const Flags& rhs) :
+ m_flags(rhs.m_flags)
+ {
+ }
+
+ //----------------------------------------------------------------------
+ /// Destructor.
+ //----------------------------------------------------------------------
+ ~Flags ()
+ {
+ }
+
+ //----------------------------------------------------------------------
+ /// Get accessor for all flags.
+ ///
+ /// @return
+ /// Returns all of the flags as a Flags::ValueType.
+ //----------------------------------------------------------------------
+ ValueType
+ Get () const
+ {
+ return m_flags;
+ }
+
+ //----------------------------------------------------------------------
+ /// Return the number of flags that can be represented in this
+ /// object.
+ ///
+ /// @return
+ /// The maximum number bits in this flag object.
+ //----------------------------------------------------------------------
+ size_t
+ GetBitSize() const
+ {
+ return sizeof (ValueType) * 8;
+ }
+
+ //----------------------------------------------------------------------
+ /// Set accessor for all flags.
+ ///
+ /// @param[in] flags
+ /// The bits with which to replace all of the current flags.
+ //----------------------------------------------------------------------
+ void
+ Reset (ValueType flags)
+ {
+ m_flags = flags;
+ }
+
+ //----------------------------------------------------------------------
+ /// Clear one or more flags.
+ ///
+ /// @param[in] mask
+ /// A bitfield containing one or more flags.
+ ///
+ /// @return
+ /// The new flags after clearing all bits from \a mask.
+ //----------------------------------------------------------------------
+ ValueType
+ Clear (ValueType mask = ~(ValueType)0)
+ {
+ m_flags &= ~mask;
+ return m_flags;
+ }
+
+
+ //----------------------------------------------------------------------
+ /// Set one or more flags by logical OR'ing \a mask with the current
+ /// flags.
+ ///
+ /// @param[in] mask
+ /// A bitfield containing one or more flags.
+ ///
+ /// @return
+ /// The new flags after setting all bits from \a mask.
+ //----------------------------------------------------------------------
+ ValueType
+ Set (ValueType mask)
+ {
+ m_flags |= mask;
+ return m_flags;
+ }
+
+
+ //----------------------------------------------------------------------
+ /// Test if all bits in \a mask are 1 in the current flags
+ ///
+ /// @return
+ /// \b true if all flags in \a mask are 1, \b false
+ /// otherwise.
+ //----------------------------------------------------------------------
+ bool
+ AllSet (ValueType mask) const
+ {
+ return (m_flags & mask) == mask;
+ }
+
+ //----------------------------------------------------------------------
+ /// Test one or more flags.
+ ///
+ /// @return
+ /// \b true if any flags in \a mask are 1, \b false
+ /// otherwise.
+ //----------------------------------------------------------------------
+ bool
+ AnySet (ValueType mask) const
+ {
+ return (m_flags & mask) != 0;
+ }
+
+ //----------------------------------------------------------------------
+ /// Test a single flag bit.
+ ///
+ /// @return
+ /// \b true if \a bit is set, \b false otherwise.
+ //----------------------------------------------------------------------
+ bool
+ Test (ValueType bit) const
+ {
+ return (m_flags & bit) != 0;
+ }
+
+ //----------------------------------------------------------------------
+ /// Test if all bits in \a mask are clear.
+ ///
+ /// @return
+ /// \b true if \b all flags in \a mask are clear, \b false
+ /// otherwise.
+ //----------------------------------------------------------------------
+ bool
+ AllClear (ValueType mask) const
+ {
+ return (m_flags & mask) == 0;
+ }
+
+ bool
+ AnyClear (ValueType mask) const
+ {
+ return (m_flags & mask) != mask;
+ }
+
+ //----------------------------------------------------------------------
+ /// Test a single flag bit to see if it is clear (zero).
+ ///
+ /// @return
+ /// \b true if \a bit is 0, \b false otherwise.
+ //----------------------------------------------------------------------
+ bool
+ IsClear (ValueType bit) const
+ {
+ return (m_flags & bit) == 0;
+ }
+
+ //----------------------------------------------------------------------
+ /// Get the number of zero bits in \a m_flags.
+ ///
+ /// @return
+ /// The number of bits that are set to 0 in the current flags.
+ //----------------------------------------------------------------------
+ size_t
+ ClearCount () const
+ {
+ size_t count = 0;
+ for (ValueType shift = 0; shift < sizeof(ValueType)*8; ++shift)
+ {
+ if ((m_flags & (1u << shift)) == 0)
+ ++count;
+ }
+ return count;
+ }
+
+ //----------------------------------------------------------------------
+ /// Get the number of one bits in \a m_flags.
+ ///
+ /// @return
+ /// The number of bits that are set to 1 in the current flags.
+ //----------------------------------------------------------------------
+ size_t
+ SetCount () const
+ {
+ size_t count = 0;
+ for (ValueType mask = m_flags; mask; mask >>= 1)
+ {
+ if (mask & 1u)
+ ++count;
+ }
+ return count;
+ }
+
+protected:
+ ValueType m_flags; ///< The flags.
+};
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_Flags_h_
OpenPOWER on IntegriCloud